From 032acd408acd119a5bd5c132765fcdd6caedea6b Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Tue, 22 May 2018 13:38:04 +0000
Subject: [PATCH] Experimental reinforcement learning.
---
src/detector.c | 76 ++++++++++++-------------------------
1 files changed, 25 insertions(+), 51 deletions(-)
diff --git a/src/detector.c b/src/detector.c
index bbe60cf..8b53907 100644
--- a/src/detector.c
+++ b/src/detector.c
@@ -36,17 +36,6 @@
static int coco_ids[] = {1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,70,72,73,74,75,76,77,78,79,80,81,82,84,85,86,87,88,89,90};
-void replace_image_to_label(char *input_path, char *output_path) {
- find_replace(input_path, "images", "labels", output_path);
- find_replace(output_path, "JPEGImages", "labels", output_path);
- find_replace(output_path, ".jpg", ".txt", output_path);
- find_replace(output_path, ".png", ".txt", output_path);
- find_replace(output_path, ".bmp", ".txt", output_path);
- find_replace(output_path, ".JPG", ".txt", output_path);
- find_replace(output_path, ".JPEG", ".txt", output_path);
- find_replace(output_path, ".ppm", ".txt", output_path);
-}
-
void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show)
{
list *options = read_data_cfg(datacfg);
@@ -140,9 +129,15 @@
//int dim = (rand() % 12 + (init_w/32 - 5)) * 32; // +-160
//int dim = (rand() % 4 + 16) * 32;
//if (get_current_batch(net)+100 > net.max_batches) dim = 544;
- int random_val = rand() % 12;
- int dim_w = (random_val + (init_w / 32 - 5)) * 32; // +-160
- int dim_h = (random_val + (init_h / 32 - 5)) * 32; // +-160
+
+ //int random_val = rand() % 12;
+ //int dim_w = (random_val + (init_w / 32 - 5)) * 32; // +-160
+ //int dim_h = (random_val + (init_h / 32 - 5)) * 32; // +-160
+
+ float random_val = rand_scale(1.4); // *x or /x
+ int dim_w = roundl(random_val*init_w / 32) * 32;
+ int dim_h = roundl(random_val*init_h / 32) * 32;
+
if (dim_w < 32) dim_w = 32;
if (dim_h < 32) dim_h = 32;
@@ -486,14 +481,6 @@
char labelpath[4096];
replace_image_to_label(path, labelpath);
- //find_replace(path, "images", "labels", labelpath);
- //find_replace(labelpath, "JPEGImages", "labels", labelpath);
- //find_replace(labelpath, ".jpg", ".txt", labelpath);
- //find_replace(labelpath, ".png", ".txt", labelpath);
- //find_replace(labelpath, ".bmp", ".txt", labelpath);
- //find_replace(labelpath, ".JPG", ".txt", labelpath);
- //find_replace(labelpath, ".JPEG", ".txt", labelpath);
- //find_replace(labelpath, ".ppm", ".txt", labelpath);
int num_labels = 0;
box_label *truth = read_boxes(labelpath, &num_labels);
@@ -555,6 +542,7 @@
char *mapf = option_find_str(options, "map", 0);
int *map = 0;
if (mapf) map = read_map(mapf);
+ FILE* reinforcement_fd = NULL;
network net = parse_network_cfg_custom(cfgfile, 1); // set batch=1
if (weightfile) {
@@ -645,14 +633,6 @@
char labelpath[4096];
replace_image_to_label(path, labelpath);
- //find_replace(path, "images", "labels", labelpath);
- //find_replace(labelpath, "JPEGImages", "labels", labelpath);
- //find_replace(labelpath, ".jpg", ".txt", labelpath);
- //find_replace(labelpath, ".png", ".txt", labelpath);
- //find_replace(labelpath, ".bmp", ".txt", labelpath);
- //find_replace(labelpath, ".JPG", ".txt", labelpath);
- //find_replace(labelpath, ".JPEG", ".txt", labelpath);
- //find_replace(labelpath, ".ppm", ".txt", labelpath);
int num_labels = 0;
box_label *truth = read_boxes(labelpath, &num_labels);
int i, j;
@@ -668,11 +648,8 @@
char *path_dif = paths_dif[image_index];
char labelpath_dif[4096];
- find_replace(path_dif, "images", "labels", labelpath_dif);
- find_replace(labelpath_dif, "JPEGImages", "labels", labelpath_dif);
- find_replace(labelpath_dif, ".jpg", ".txt", labelpath_dif);
- find_replace(labelpath_dif, ".JPEG", ".txt", labelpath_dif);
- find_replace(labelpath_dif, ".png", ".txt", labelpath_dif);
+ replace_image_to_label(path_dif, labelpath_dif);
+
truth_dif = read_boxes(labelpath_dif, &num_labels_dif);
}
@@ -744,9 +721,18 @@
}
}
}
-
+
unique_truth_count += num_labels;
+ //static int previous_errors = 0;
+ //int total_errors = fp_for_thresh + (unique_truth_count - tp_for_thresh);
+ //int errors_in_this_image = total_errors - previous_errors;
+ //previous_errors = total_errors;
+ //if(reinforcement_fd == NULL) reinforcement_fd = fopen("reinforcement.txt", "wb");
+ //char buff[1000];
+ //sprintf(buff, "%s\n", path);
+ //if(errors_in_this_image > 0) fwrite(buff, sizeof(char), strlen(buff), reinforcement_fd);
+
free_detections(dets, nboxes);
free(id);
free_image(val[t]);
@@ -867,6 +853,7 @@
free(truth_classes_count);
fprintf(stderr, "Total Detection Time: %f Seconds\n", (double)(time(0) - start));
+ if (reinforcement_fd != NULL) fclose(reinforcement_fd);
}
#ifdef OPENCV
@@ -910,14 +897,7 @@
char *path = paths[i];
char labelpath[4096];
replace_image_to_label(path, labelpath);
- //find_replace(path, "images", "labels", labelpath);
- //find_replace(labelpath, "JPEGImages", "labels", labelpath);
- //find_replace(labelpath, ".jpg", ".txt", labelpath);
- //find_replace(labelpath, ".png", ".txt", labelpath);
- //find_replace(labelpath, ".bmp", ".txt", labelpath);
- //find_replace(labelpath, ".JPG", ".txt", labelpath);
- //find_replace(labelpath, ".JPEG", ".txt", labelpath);
- //find_replace(labelpath, ".ppm", ".txt", labelpath);
+
int num_labels = 0;
box_label *truth = read_boxes(labelpath, &num_labels);
//printf(" new path: %s \n", labelpath);
@@ -1133,12 +1113,6 @@
{
char labelpath[4096];
replace_image_to_label(input, labelpath);
- //find_replace(input, ".jpg", ".txt", labelpath);
- //find_replace(labelpath, ".png", ".txt", labelpath);
- //find_replace(labelpath, ".bmp", ".txt", labelpath);
- //find_replace(labelpath, ".JPG", ".txt", labelpath);
- //find_replace(labelpath, ".JPEG", ".txt", labelpath);
- //find_replace(labelpath, ".ppm", ".txt", labelpath);
FILE* fw = fopen(labelpath, "wb");
int i;
@@ -1261,7 +1235,7 @@
if(strlen(filename) > 0)
if (filename[strlen(filename) - 1] == 0x0d) filename[strlen(filename) - 1] = 0;
demo(cfg, weights, thresh, hier_thresh, cam_index, filename, names, classes, frame_skip, prefix, out_filename,
- http_stream_port, dont_show);
+ http_stream_port, dont_show, ext_output);
}
else printf(" There isn't such command: %s", argv[2]);
}
--
Gitblit v1.10.0