AlexeyAB
2018-03-31 bf738fb0e3ae4f7a21d36037d7f0666a583873a7
src/detector.c
@@ -88,7 +88,7 @@
    args.classes = classes;
    args.jitter = jitter;
    args.num_boxes = l.max_boxes;
   args.small_object = l.small_object;
   args.small_object = net.small_object;
    args.d = &buffer;
    args.type = DETECTION_DATA;
   args.threads = 64;   // 8
@@ -820,6 +820,20 @@
}
#ifdef OPENCV
typedef struct {
   float w, h;
} anchors_t;
int anchors_comparator(const void *pa, const void *pb)
{
   anchors_t a = *(anchors_t *)pa;
   anchors_t b = *(anchors_t *)pb;
   float diff = b.w - a.w;
   if (diff < 0) return 1;
   else if (diff > 0) return -1;
   return 0;
}
void calc_anchors(char *datacfg, int num_of_clusters, int width, int height, int show)
{
   printf("\n num_of_clusters = %d, width = %d, height = %d \n", num_of_clusters, width, height);
@@ -886,7 +900,10 @@
      cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10000, 0), attemps, 
      0, KMEANS_PP_CENTERS,
      centers, &compactness);
   // sort anchors
   qsort(centers->data.fl, num_of_clusters, 2*sizeof(float), anchors_comparator);
   //orig 2.0 anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
   //float orig_anch[] = { 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52 };
   // worse than ours (even for 19x19 final size - for input size 608x608)
@@ -943,9 +960,12 @@
   printf("anchors = ");
   for (i = 0; i < num_of_clusters; ++i) {
      sprintf(buff, "%2.4f,%2.4f", centers->data.fl[i * 2], centers->data.fl[i * 2 + 1]);
      printf("%s, ", buff);
      printf("%s", buff);
      fwrite(buff, sizeof(char), strlen(buff), fw);
      if (i + 1 < num_of_clusters) fwrite(", ", sizeof(char), 2, fw);;
      if (i + 1 < num_of_clusters) {
         fwrite(", ", sizeof(char), 2, fw);
         printf(", ");
      }
   }
   printf("\n");
   fclose(fw);