mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
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.
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
10
src/demo.c
10
src/demo.c
@ -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);
|
||||||
|
28
src/image.c
28
src/image.c
@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user