Added -mjpeg_port 8090 for Training. Loss-chart saved to chart.png even when used -dont_show.

mAP is calculated during training even without OpenCV.
pull/2282/head
AlexeyAB 6 years ago
parent 5c55137687
commit 70260cda24
  1. 5
      README.md
  2. 2
      build/darknet/x64/darknet_demo_mjpeg_stream.cmd
  3. 2
      json_mjpeg_streams.sh
  4. 16
      src/classifier.c
  5. 4
      src/coco.c
  6. 10
      src/demo.c
  7. 2
      src/demo.h
  8. 68
      src/detector.c
  9. 28
      src/image.c
  10. 4
      src/yolo.c

@ -116,7 +116,7 @@ On Linux use `./darknet` instead of `darknet.exe`, like this:`./darknet detector
* Yolo v3 COCO for **net-videocam** - Smart WebCam: `darknet.exe detector demo data/coco.data cfg/yolov3.cfg yolov3.weights http://192.168.0.80:8080/video?dummy=param.mjpg` * Yolo v3 COCO for **net-videocam** - Smart WebCam: `darknet.exe detector demo data/coco.data cfg/yolov3.cfg yolov3.weights http://192.168.0.80:8080/video?dummy=param.mjpg`
* **Yolo v3 - save result to the file res.avi**: `darknet.exe detector demo data/coco.data cfg/yolov3.cfg yolov3.weights -thresh 0.25 test.mp4 -out_filename res.avi` * **Yolo v3 - save result to the file res.avi**: `darknet.exe detector demo data/coco.data cfg/yolov3.cfg yolov3.weights -thresh 0.25 test.mp4 -out_filename res.avi`
* **Yolo v3 Tiny** COCO - video: `darknet.exe detector demo data/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights test.mp4` * **Yolo v3 Tiny** COCO - video: `darknet.exe detector demo data/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights test.mp4`
* **JSON and MJPEG server** that allows multiple connections from your soft or Web-browser `ip-address:8070` or 8090: `./darknet detector demo ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights test50.mp4 -json_port 8070 -http_port 8090 -ext_output` * **JSON and MJPEG server** that allows multiple connections from your soft or Web-browser `ip-address:8070` or 8090: `./darknet detector demo ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output`
* **Yolo v3 Tiny** on GPU #0: `darknet.exe detector demo data/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -i 0 test.mp4` * **Yolo v3 Tiny** on GPU #0: `darknet.exe detector demo data/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -i 0 test.mp4`
* Alternative method Yolo v3 COCO - image: `darknet.exe detect cfg/yolov3.cfg yolov3.weights -i 0 -thresh 0.25` * Alternative method Yolo v3 COCO - image: `darknet.exe detect cfg/yolov3.cfg yolov3.weights -i 0 -thresh 0.25`
* 186 MB Yolo9000 - image: `darknet.exe detector test cfg/combine9k.data yolo9000.cfg yolo9000.weights` * 186 MB Yolo9000 - image: `darknet.exe detector test cfg/combine9k.data yolo9000.cfg yolo9000.weights`
@ -340,7 +340,8 @@ It will create `.txt`-file for each `.jpg`-image-file - in the same directory an
* (file `yolo-obj_last.weights` will be saved to the `build\darknet\x64\backup\` for each 100 iterations) * (file `yolo-obj_last.weights` will be saved to the `build\darknet\x64\backup\` for each 100 iterations)
* (file `yolo-obj_xxxx.weights` will be saved to the `build\darknet\x64\backup\` for each 1000 iterations) * (file `yolo-obj_xxxx.weights` will be saved to the `build\darknet\x64\backup\` for each 1000 iterations)
* (To disable Loss-Window use `darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show`, if you train on computer without monitor like a cloud Amazaon EC2) * (to disable Loss-Window use `darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show`, if you train on computer without monitor like a cloud Amazon EC2)
* (to see the mAP & Loss-chart during training on remote server without GUI, use command `darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show -mjpeg_port 8090 -map` then open URL `http://ip-address:8090` in Chrome/Firefox browser)
8.1. For training with mAP (mean average precisions) calculation for each 4 Epochs (set `valid=valid.txt` or `train.txt` in `obj.data` file) and run: `darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -map` 8.1. For training with mAP (mean average precisions) calculation for each 4 Epochs (set `valid=valid.txt` or `train.txt` in `obj.data` file) and run: `darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -map`

@ -1,7 +1,7 @@
rem Run this file and then open URL in Chrome/Firefox: rem http://localhost:8090 rem Run this file and then open URL in Chrome/Firefox: rem http://localhost:8090
rem Or open: http://ip-address:8090 rem Or open: http://ip-address:8090
darknet.exe detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights test.mp4 -i 0 -http_port 8090 -dont_show -ext_output darknet.exe detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights test.mp4 -i 0 -mjpeg_port 8090 -dont_show -ext_output
pause pause

@ -2,5 +2,5 @@
# Or open: http://ip-address:8070 and http://ip-address:8090 # Or open: http://ip-address:8070 and http://ip-address:8090
# to get <ip-address> run: sudo ifconfig # to get <ip-address> run: sudo ifconfig
./darknet detector demo ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights test50.mp4 -json_port 8070 -http_port 8090 -ext_output ./darknet detector demo ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output

@ -24,8 +24,9 @@ image get_image_from_stream(CvCapture *cap);
image get_image_from_stream_cpp(CvCapture *cap); image get_image_from_stream_cpp(CvCapture *cap);
#include "http_stream.h" #include "http_stream.h"
IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_lines, int img_size); IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_lines, int img_size, int dont_show);
void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_loss, int current_batch, int max_batches, float precision, int draw_precision); void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_loss, int current_batch, int max_batches,
float precision, int draw_precision, int dont_show, int mjpeg_port);
#endif #endif
@ -41,7 +42,7 @@ float *get_regression_values(char **labels, int n)
return v; return v;
} }
void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show) void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int mjpeg_port)
{ {
int i; int i;
@ -114,8 +115,7 @@ void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
float max_img_loss = 5; float max_img_loss = 5;
int number_of_lines = 100; int number_of_lines = 100;
int img_size = 1000; int img_size = 1000;
if (!dont_show) img = draw_train_chart(max_img_loss, net.max_batches, number_of_lines, img_size, dont_show);
img = draw_train_chart(max_img_loss, net.max_batches, number_of_lines, img_size);
#endif //OPENCV #endif //OPENCV
data train; data train;
@ -152,8 +152,7 @@ void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
printf("%d, %.3f: %f, %f avg, %f rate, %lf seconds, %d images\n", get_current_batch(net), (float)(*net.seen)/N, loss, avg_loss, get_current_rate(net), sec(clock()-time), *net.seen); printf("%d, %.3f: %f, %f avg, %f rate, %lf seconds, %d images\n", get_current_batch(net), (float)(*net.seen)/N, loss, avg_loss, get_current_rate(net), sec(clock()-time), *net.seen);
#ifdef OPENCV #ifdef OPENCV
if(!dont_show) draw_train_loss(img, img_size, avg_loss, max_img_loss, i, net.max_batches, -1, 0, dont_show, mjpeg_port);
draw_train_loss(img, img_size, avg_loss, max_img_loss, i, net.max_batches, -1, 0);
#endif // OPENCV #endif // OPENCV
if (i >= (iter_save + 100)) { if (i >= (iter_save + 100)) {
@ -1186,6 +1185,7 @@ void run_classifier(int argc, char **argv)
return; return;
} }
int mjpeg_port = find_int_arg(argc, argv, "-mjpeg_port", -1);
char *gpu_list = find_char_arg(argc, argv, "-gpus", 0); char *gpu_list = find_char_arg(argc, argv, "-gpus", 0);
int *gpus = 0; int *gpus = 0;
int gpu = 0; int gpu = 0;
@ -1221,7 +1221,7 @@ void run_classifier(int argc, char **argv)
int layer = layer_s ? atoi(layer_s) : -1; int layer = layer_s ? atoi(layer_s) : -1;
if(0==strcmp(argv[2], "predict")) predict_classifier(data, cfg, weights, filename, top); if(0==strcmp(argv[2], "predict")) predict_classifier(data, cfg, weights, filename, top);
else if(0==strcmp(argv[2], "try")) try_classifier(data, cfg, weights, filename, atoi(layer_s)); else if(0==strcmp(argv[2], "try")) try_classifier(data, cfg, weights, filename, atoi(layer_s));
else if(0==strcmp(argv[2], "train")) train_classifier(data, cfg, weights, gpus, ngpus, clear, dont_show); else if(0==strcmp(argv[2], "train")) train_classifier(data, cfg, weights, gpus, ngpus, clear, dont_show, mjpeg_port);
else if(0==strcmp(argv[2], "demo")) demo_classifier(data, cfg, weights, cam_index, filename); else if(0==strcmp(argv[2], "demo")) demo_classifier(data, cfg, weights, cam_index, filename);
else if(0==strcmp(argv[2], "gun")) gun_classifier(data, cfg, weights, cam_index, filename); else if(0==strcmp(argv[2], "gun")) gun_classifier(data, cfg, weights, cam_index, filename);
else if(0==strcmp(argv[2], "threat")) threat_classifier(data, cfg, weights, cam_index, filename); else if(0==strcmp(argv[2], "threat")) threat_classifier(data, cfg, weights, cam_index, filename);

@ -365,7 +365,7 @@ void test_coco(char *cfgfile, char *weightfile, char *filename, float thresh)
void run_coco(int argc, char **argv) void run_coco(int argc, char **argv)
{ {
int dont_show = find_arg(argc, argv, "-dont_show"); int dont_show = find_arg(argc, argv, "-dont_show");
int http_stream_port = find_int_arg(argc, argv, "-http_port", -1); int mjpeg_port = find_int_arg(argc, argv, "-mjpeg_port", -1);
int json_port = find_int_arg(argc, argv, "-json_port", -1); int json_port = find_int_arg(argc, argv, "-json_port", -1);
char *out_filename = find_char_arg(argc, argv, "-out_filename", 0); char *out_filename = find_char_arg(argc, argv, "-out_filename", 0);
char *prefix = find_char_arg(argc, argv, "-prefix", 0); char *prefix = find_char_arg(argc, argv, "-prefix", 0);
@ -388,5 +388,5 @@ void run_coco(int argc, char **argv)
else if(0==strcmp(argv[2], "valid")) validate_coco(cfg, weights); else if(0==strcmp(argv[2], "valid")) validate_coco(cfg, weights);
else if(0==strcmp(argv[2], "recall")) validate_coco_recall(cfg, weights); else if(0==strcmp(argv[2], "recall")) validate_coco_recall(cfg, weights);
else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, hier_thresh, cam_index, filename, coco_classes, 80, frame_skip, else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, hier_thresh, cam_index, filename, coco_classes, 80, frame_skip,
prefix, out_filename, http_stream_port, json_port, dont_show, ext_output); prefix, out_filename, mjpeg_port, json_port, dont_show, ext_output);
} }

@ -139,7 +139,7 @@ double get_wall_time()
} }
void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int cam_index, const char *filename, char **names, int classes, void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int cam_index, const char *filename, char **names, int classes,
int frame_skip, char *prefix, char *out_filename, int http_stream_port, int json_port, int dont_show, int ext_output) int frame_skip, char *prefix, char *out_filename, int mjpeg_port, int json_port, int dont_show, int ext_output)
{ {
in_img = det_img = show_img = NULL; in_img = det_img = show_img = NULL;
//skip = frame_skip; //skip = frame_skip;
@ -279,10 +279,10 @@ void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int
if(show_img) save_cv_jpg(show_img, buff); if(show_img) save_cv_jpg(show_img, buff);
} }
// if you run it with param -http_port 8090 then open URL in your web-browser: http://localhost:8090 // if you run it with param -mjpeg_port 8090 then open URL in your web-browser: http://localhost:8090
if (http_stream_port > 0 && show_img) { if (mjpeg_port > 0 && show_img) {
//int port = 8090; //int port = 8090;
int port = http_stream_port; int port = mjpeg_port;
int timeout = 200; int timeout = 200;
int jpeg_quality = 30; // 1 - 100 int jpeg_quality = 30; // 1 - 100
send_mjpeg(show_img, port, timeout, jpeg_quality); send_mjpeg(show_img, port, timeout, jpeg_quality);
@ -364,7 +364,7 @@ void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int
} }
#else #else
void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int cam_index, const char *filename, char **names, int classes, void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int cam_index, const char *filename, char **names, int classes,
int frame_skip, char *prefix, char *out_filename, int http_stream_port, int json_port, int dont_show, int ext_output) int frame_skip, char *prefix, char *out_filename, int mjpeg_port, int json_port, int dont_show, int ext_output)
{ {
fprintf(stderr, "Demo needs OpenCV for webcam images.\n"); fprintf(stderr, "Demo needs OpenCV for webcam images.\n");
} }

@ -3,6 +3,6 @@
#include "image.h" #include "image.h"
void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int cam_index, const char *filename, char **names, int classes, void demo(char *cfgfile, char *weightfile, float thresh, float hier_thresh, int cam_index, const char *filename, char **names, int classes,
int frame_skip, char *prefix, char *out_filename, int http_stream_port, int json_port, int dont_show, int ext_output); int frame_skip, char *prefix, char *out_filename, int mjpeg_port, int json_port, int dont_show, int ext_output);
#endif #endif

@ -26,8 +26,9 @@
#pragma comment(lib, "opencv_highgui" OPENCV_VERSION ".lib") #pragma comment(lib, "opencv_highgui" OPENCV_VERSION ".lib")
#endif #endif
IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_lines, int img_size); IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_lines, int img_size, int dont_show);
void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_loss, int current_batch, int max_batches, float precision, int draw_precision); void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_loss, int current_batch, int max_batches,
float precision, int draw_precision, int dont_show, int mjpeg_port);
#define CV_RGB(r, g, b) cvScalar( (b), (g), (r), 0 ) #define CV_RGB(r, g, b) cvScalar( (b), (g), (r), 0 )
#endif // OPENCV #endif // OPENCV
@ -38,7 +39,7 @@ int check_mistakes;
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 }; 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 train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int calc_map) void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int calc_map, int mjpeg_port)
{ {
list *options = read_data_cfg(datacfg); list *options = read_data_cfg(datacfg);
char *train_images = option_find_str(options, "train", "data/train.txt"); char *train_images = option_find_str(options, "train", "data/train.txt");
@ -158,8 +159,7 @@ void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, i
float max_img_loss = 5; float max_img_loss = 5;
int number_of_lines = 100; int number_of_lines = 100;
int img_size = 1000; int img_size = 1000;
if (!dont_show) img = draw_train_chart(max_img_loss, net.max_batches, number_of_lines, img_size, dont_show);
img = draw_train_chart(max_img_loss, net.max_batches, number_of_lines, img_size);
#endif //OPENCV #endif //OPENCV
pthread_t load_thread = load_data(args); pthread_t load_thread = load_data(args);
@ -238,42 +238,42 @@ void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, i
avg_loss = avg_loss*.9 + loss*.1; avg_loss = avg_loss*.9 + loss*.1;
i = get_current_batch(net); i = get_current_batch(net);
if (mean_average_precision > 0) {
printf("\n Last accuracy mAP@0.5 = %2.2f %% ", mean_average_precision*100);
}
if (net.cudnn_half) { if (net.cudnn_half) {
if (i < net.burn_in * 3) printf("\n Tensor Cores are disabled until the first %d iterations are reached.", 3 * net.burn_in); if (i < net.burn_in * 3) printf("\n Tensor Cores are disabled until the first %d iterations are reached.", 3 * net.burn_in);
else printf("\n Tensor Cores are used."); else printf("\n Tensor Cores are used.");
} }
printf("\n %d: %f, %f avg loss, %f rate, %lf seconds, %d images\n", get_current_batch(net), loss, avg_loss, get_current_rate(net), (what_time_is_it_now() - time), i*imgs); printf("\n %d: %f, %f avg loss, %f rate, %lf seconds, %d images\n", get_current_batch(net), loss, avg_loss, get_current_rate(net), (what_time_is_it_now() - time), i*imgs);
#ifdef OPENCV int draw_precision = 0;
if (!dont_show) { int calc_map_for_each = 4 * train_images_num / (net.batch * net.subdivisions); // calculate mAP for each 4 Epochs
int draw_precision = 0; if (calc_map && (i >= (iter_map + calc_map_for_each) || i == net.max_batches) && i >= net.burn_in && i >= 1000) {
int calc_map_for_each = 4 * train_images_num / (net.batch * net.subdivisions); // calculate mAP for each 4 Epochs if (l.random) {
if (calc_map && (i >= (iter_map + calc_map_for_each) || i == net.max_batches) && i >= net.burn_in && i >= 1000) { printf("Resizing to initial size: %d x %d \n", init_w, init_h);
if (l.random) { args.w = init_w;
printf("Resizing to initial size: %d x %d \n", init_w, init_h); args.h = init_h;
args.w = init_w; pthread_join(load_thread, 0);
args.h = init_h; train = buffer;
pthread_join(load_thread, 0); load_thread = load_data(args);
train = buffer; int k;
load_thread = load_data(args); for (k = 0; k < ngpus; ++k) {
int k; resize_network(nets + k, init_w, init_h);
for (k = 0; k < ngpus; ++k) {
resize_network(nets + k, init_w, init_h);
}
net = nets[0];
} }
net = nets[0];
// combine Training and Validation networks
network net_combined = combine_train_valid_networks(net, net_map);
iter_map = i;
mean_average_precision = validate_detector_map(datacfg, cfgfile, weightfile, 0.25, 0.5, &net_combined);
printf("\n mean_average_precision = %f \n", mean_average_precision);
draw_precision = 1;
} }
draw_train_loss(img, img_size, avg_loss, max_img_loss, i, net.max_batches, mean_average_precision, draw_precision); // combine Training and Validation networks
network net_combined = combine_train_valid_networks(net, net_map);
iter_map = i;
mean_average_precision = validate_detector_map(datacfg, cfgfile, weightfile, 0.25, 0.5, &net_combined);
printf("\n mean_average_precision = %f \n", mean_average_precision);
draw_precision = 1;
} }
#ifdef OPENCV
draw_train_loss(img, img_size, avg_loss, max_img_loss, i, net.max_batches, mean_average_precision, draw_precision, dont_show, mjpeg_port);
#endif // OPENCV #endif // OPENCV
//if (i % 1000 == 0 || (i < 1000 && i % 100 == 0)) { //if (i % 1000 == 0 || (i < 1000 && i % 100 == 0)) {
@ -1378,7 +1378,7 @@ void run_detector(int argc, char **argv)
int show = find_arg(argc, argv, "-show"); int show = find_arg(argc, argv, "-show");
int calc_map = find_arg(argc, argv, "-map"); int calc_map = find_arg(argc, argv, "-map");
check_mistakes = find_arg(argc, argv, "-check_mistakes"); check_mistakes = find_arg(argc, argv, "-check_mistakes");
int http_stream_port = find_int_arg(argc, argv, "-http_port", -1); int mjpeg_port = find_int_arg(argc, argv, "-mjpeg_port", -1);
int json_port = find_int_arg(argc, argv, "-json_port", -1); int json_port = find_int_arg(argc, argv, "-json_port", -1);
char *out_filename = find_char_arg(argc, argv, "-out_filename", 0); char *out_filename = find_char_arg(argc, argv, "-out_filename", 0);
char *outfile = find_char_arg(argc, argv, "-out", 0); char *outfile = find_char_arg(argc, argv, "-out", 0);
@ -1433,7 +1433,7 @@ void run_detector(int argc, char **argv)
if (weights[strlen(weights) - 1] == 0x0d) weights[strlen(weights) - 1] = 0; if (weights[strlen(weights) - 1] == 0x0d) weights[strlen(weights) - 1] = 0;
char *filename = (argc > 6) ? argv[6] : 0; char *filename = (argc > 6) ? argv[6] : 0;
if (0 == strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, dont_show, ext_output, save_labels, outfile); if (0 == strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, dont_show, ext_output, save_labels, outfile);
else if (0 == strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear, dont_show, calc_map); else if (0 == strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear, dont_show, calc_map, mjpeg_port);
else if (0 == strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights, outfile); else if (0 == strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights, outfile);
else if (0 == strcmp(argv[2], "recall")) validate_detector_recall(datacfg, cfg, weights); else if (0 == strcmp(argv[2], "recall")) validate_detector_recall(datacfg, cfg, weights);
else if (0 == strcmp(argv[2], "map")) validate_detector_map(datacfg, cfg, weights, thresh, iou_thresh, NULL); else if (0 == strcmp(argv[2], "map")) validate_detector_map(datacfg, cfg, weights, thresh, iou_thresh, NULL);
@ -1447,7 +1447,7 @@ void run_detector(int argc, char **argv)
if (strlen(filename) > 0) if (strlen(filename) > 0)
if (filename[strlen(filename) - 1] == 0x0d) filename[strlen(filename) - 1] = 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, demo(cfg, weights, thresh, hier_thresh, cam_index, filename, names, classes, frame_skip, prefix, out_filename,
http_stream_port, json_port, dont_show, ext_output); mjpeg_port, json_port, dont_show, ext_output);
free_list_contents_kvp(options); free_list_contents_kvp(options);
free_list(options); free_list(options);

@ -708,7 +708,7 @@ void draw_detections_cv(IplImage* show_img, int num, float thresh, box *boxes, f
} }
} }
IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_lines, int img_size) IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_lines, int img_size, int dont_show)
{ {
int img_offset = 50; int img_offset = 50;
int draw_size = img_size - img_offset; int draw_size = img_size - img_offset;
@ -750,16 +750,19 @@ IplImage* draw_train_chart(float max_img_loss, int max_batches, int number_of_li
sprintf(max_batches_buff, "in cfg max_batches=%d", max_batches); sprintf(max_batches_buff, "in cfg max_batches=%d", max_batches);
cvPutText(img, max_batches_buff, cvPoint(draw_size - 195, img_size - 10), &font, CV_RGB(0, 0, 0)); cvPutText(img, max_batches_buff, cvPoint(draw_size - 195, img_size - 10), &font, CV_RGB(0, 0, 0));
cvPutText(img, "Press 's' to save: chart.png", cvPoint(5, img_size - 10), &font, CV_RGB(0, 0, 0)); cvPutText(img, "Press 's' to save: chart.png", cvPoint(5, img_size - 10), &font, CV_RGB(0, 0, 0));
printf(" If error occurs - run training with flag: -dont_show \n"); if (!dont_show) {
cvNamedWindow("average loss", CV_WINDOW_NORMAL); printf(" If error occurs - run training with flag: -dont_show \n");
cvMoveWindow("average loss", 0, 0); cvNamedWindow("average loss", CV_WINDOW_NORMAL);
cvResizeWindow("average loss", img_size, img_size); cvMoveWindow("average loss", 0, 0);
cvShowImage("average loss", img); cvResizeWindow("average loss", img_size, img_size);
cvWaitKey(20); cvShowImage("average loss", img);
cvWaitKey(20);
}
return img; return img;
} }
void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_loss, int current_batch, int max_batches, float precision, int draw_precision) void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_loss, int current_batch, int max_batches,
float precision, int draw_precision, int dont_show, int mjpeg_port)
{ {
int img_offset = 50; int img_offset = 50;
int draw_size = img_size - img_offset; int draw_size = img_size - img_offset;
@ -806,8 +809,11 @@ void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_
pt1.y += 15; pt1.y += 15;
cvPutText(img, char_buff, pt1, &font, CV_RGB(0, 0, 0)); cvPutText(img, char_buff, pt1, &font, CV_RGB(0, 0, 0));
cvShowImage("average loss", img); int k = 0;
int k = cvWaitKey(20); if (!dont_show) {
cvShowImage("average loss", img);
k = cvWaitKey(20);
}
if (k == 's' || current_batch == (max_batches - 1) || current_batch % 100 == 0) { if (k == 's' || current_batch == (max_batches - 1) || current_batch % 100 == 0) {
//cvSaveImage("chart.jpg", img, 0); //cvSaveImage("chart.jpg", img, 0);
save_cv_png(img, "chart.png"); save_cv_png(img, "chart.png");
@ -815,6 +821,8 @@ void draw_train_loss(IplImage* img, int img_size, float avg_loss, float max_img_
} }
else else
cvPutText(img, "- Saved", cvPoint(250, img_size - 10), &font, CV_RGB(255, 255, 255)); cvPutText(img, "- Saved", cvPoint(250, img_size - 10), &font, CV_RGB(255, 255, 255));
if (mjpeg_port) send_mjpeg(img, mjpeg_port, 2000, 80);
} }
#endif // OPENCV #endif // OPENCV

@ -338,7 +338,7 @@ void test_yolo(char *cfgfile, char *weightfile, char *filename, float thresh)
void run_yolo(int argc, char **argv) void run_yolo(int argc, char **argv)
{ {
int dont_show = find_arg(argc, argv, "-dont_show"); int dont_show = find_arg(argc, argv, "-dont_show");
int http_stream_port = find_int_arg(argc, argv, "-http_port", -1); int mjpeg_port = find_int_arg(argc, argv, "-mjpeg_port", -1);
int json_port = find_int_arg(argc, argv, "-json_port", -1); int json_port = find_int_arg(argc, argv, "-json_port", -1);
char *out_filename = find_char_arg(argc, argv, "-out_filename", 0); char *out_filename = find_char_arg(argc, argv, "-out_filename", 0);
char *prefix = find_char_arg(argc, argv, "-prefix", 0); char *prefix = find_char_arg(argc, argv, "-prefix", 0);
@ -360,5 +360,5 @@ void run_yolo(int argc, char **argv)
else if(0==strcmp(argv[2], "valid")) validate_yolo(cfg, weights); else if(0==strcmp(argv[2], "valid")) validate_yolo(cfg, weights);
else if(0==strcmp(argv[2], "recall")) validate_yolo_recall(cfg, weights); else if(0==strcmp(argv[2], "recall")) validate_yolo_recall(cfg, weights);
else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, hier_thresh, cam_index, filename, voc_names, 20, frame_skip, else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, hier_thresh, cam_index, filename, voc_names, 20, frame_skip,
prefix, out_filename, http_stream_port, json_port, dont_show, ext_output); prefix, out_filename, mjpeg_port, json_port, dont_show, ext_output);
} }

Loading…
Cancel
Save