From d75854c0fddb7f1931a7afbc8c399dc3eb4e28c3 Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Thu, 12 Apr 2018 16:31:36 +0000
Subject: [PATCH] Minor fix

---
 src/detector.c |   37 +++++++++++++++++++++++++++++++------
 1 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/src/detector.c b/src/detector.c
index ac84c59..06709c1 100644
--- a/src/detector.c
+++ b/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
@@ -419,6 +419,7 @@
 		load_weights(&net, weightfile);
 	}
 	set_batch_network(&net, 1);
+	fuse_conv_batchnorm(net);
 	srand(time(0));
 
 	//list *plist = get_paths("data/coco_val_5k.list");
@@ -471,7 +472,7 @@
 			++total;
 			box t = { truth[j].x, truth[j].y, truth[j].w, truth[j].h };
 			float best_iou = 0;
-			for (k = 0; k < l.w*l.h*l.n; ++k) {
+			for (k = 0; k < nboxes; ++k) {
 				float iou = box_iou(dets[k].bbox, t);
 				if (dets[k].objectness > thresh && iou > best_iou) {
 					best_iou = iou;
@@ -526,6 +527,7 @@
 		load_weights(&net, weightfile);
 	}
 	set_batch_network(&net, 1);
+	fuse_conv_batchnorm(net);
 	srand(time(0));
 
 	list *plist = get_paths(valid_images);
@@ -603,7 +605,8 @@
 			int nboxes = 0;
 			int letterbox = (args.type == LETTERBOX_DATA);
 			float hier_thresh = 0;
-			detection *dets = get_network_boxes(&net, 1, 1, thresh, hier_thresh, 0, 1, &nboxes, letterbox);
+			detection *dets = get_network_boxes(&net, 1, 1, thresh, hier_thresh, 0, 0, &nboxes, letterbox);
+			//detection *dets = get_network_boxes(&net, val[t].w, val[t].h, thresh, hier_thresh, 0, 1, &nboxes, letterbox); // for letterbox=1
 			if (nms) do_nms_sort_v3(dets, nboxes, l.classes, nms);
 
 			char labelpath[4096];
@@ -820,6 +823,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*b.h - a.w*a.h;
+	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 +903,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 +963,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);
@@ -1002,6 +1025,7 @@
         load_weights(&net, weightfile);
     }
     set_batch_network(&net, 1);
+	fuse_conv_batchnorm(net);
     srand(2222222);
     clock_t time;
     char buff[256];
@@ -1126,4 +1150,5 @@
         demo(cfg, weights, thresh, hier_thresh, cam_index, filename, names, classes, frame_skip, prefix, out_filename,
 			http_stream_port, dont_show);
     }
+	else printf(" There isn't such command: %s", argv[2]);
 }

--
Gitblit v1.10.0