From ae43c2bc32fbb838bfebeeaf2c2b058ccab5c83c Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@burninator.cs.washington.edu>
Date: Thu, 23 Jun 2016 05:31:14 +0000
Subject: [PATCH] hi
---
src/yolo.c | 113 +++++++++++---------------------------------------------
1 files changed, 23 insertions(+), 90 deletions(-)
diff --git a/src/yolo.c b/src/yolo.c
index 80d85af..057abcf 100644
--- a/src/yolo.c
+++ b/src/yolo.c
@@ -4,50 +4,18 @@
#include "utils.h"
#include "parser.h"
#include "box.h"
+#include "demo.h"
#ifdef OPENCV
#include "opencv2/highgui/highgui_c.h"
#endif
char *voc_names[] = {"aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"};
-
-void draw_yolo(image im, int num, float thresh, box *boxes, float **probs)
-{
- int classes = 20;
- int i;
-
- for(i = 0; i < num; ++i){
- int class = max_index(probs[i], classes);
- float prob = probs[i][class];
- if(prob > thresh){
- int width = pow(prob, 1./2.)*10+1;
- width = 8;
- printf("%s: %.2f\n", voc_names[class], prob);
- class = class * 7 % 20;
- float red = get_color(0,class,classes);
- float green = get_color(1,class,classes);
- float blue = get_color(2,class,classes);
- //red = green = blue = 0;
- box b = boxes[i];
-
- int left = (b.x-b.w/2.)*im.w;
- int right = (b.x+b.w/2.)*im.w;
- int top = (b.y-b.h/2.)*im.h;
- int bot = (b.y+b.h/2.)*im.h;
-
- if(left < 0) left = 0;
- if(right > im.w-1) right = im.w-1;
- if(top < 0) top = 0;
- if(bot > im.h-1) bot = im.h-1;
-
- draw_box_width(im, left, top, right, bot, width, red, green, blue);
- }
- }
-}
+image voc_labels[20];
void train_yolo(char *cfgfile, char *weightfile)
{
- char *train_images = "data/voc.0712.trainval";
+ char *train_images = "/data/voc/train.txt";
char *backup_directory = "/home/pjreddie/backup/";
srand(time(0));
data_seed = time(0);
@@ -104,7 +72,7 @@
avg_loss = avg_loss*.9 + loss*.1;
printf("%d: %f, %f avg, %f rate, %lf seconds, %d images\n", i, loss, avg_loss, get_current_rate(net), sec(clock()-time), i*imgs);
- if(i%1000==0 || i == 600){
+ if(i%1000==0 || (i < 1000 && i%100 == 0)){
char buff[256];
sprintf(buff, "%s/%s_%d.weights", backup_directory, base, i);
save_weights(net, buff);
@@ -116,7 +84,7 @@
save_weights(net, buff);
}
-void convert_yolo_detections(float *predictions, int classes, int num, int square, int side, int w, int h, float thresh, float **probs, box *boxes, int only_objectness)
+void convert_detections(float *predictions, int classes, int num, int square, int side, int w, int h, float thresh, float **probs, box *boxes, int only_objectness)
{
int i,j,n;
//int per_cell = 5*num+classes;
@@ -176,7 +144,8 @@
srand(time(0));
char *base = "results/comp4_det_test_";
- list *plist = get_paths("data/voc.2007.test");
+ //list *plist = get_paths("data/voc.2007.test");
+ list *plist = get_paths("/home/pjreddie/data/voc/2007_test.txt");
//list *plist = get_paths("data/voc.2012.test");
char **paths = (char **)list_to_array(plist);
@@ -243,7 +212,7 @@
float *predictions = network_predict(net, X);
int w = val[t].w;
int h = val[t].h;
- convert_yolo_detections(predictions, classes, l.n, square, side, w, h, thresh, probs, boxes, 0);
+ convert_detections(predictions, classes, l.n, square, side, w, h, thresh, probs, boxes, 0);
if (nms) do_nms_sort(boxes, probs, side*side*l.n, classes, iou_thresh);
print_yolo_detections(fps, id, boxes, probs, side*side*l.n, classes, w, h);
free(id);
@@ -288,9 +257,8 @@
int i=0;
float thresh = .001;
- int nms = 0;
float iou_thresh = .5;
- float nms_thresh = .5;
+ float nms = 0;
int total = 0;
int correct = 0;
@@ -303,8 +271,8 @@
image sized = resize_image(orig, net.w, net.h);
char *id = basecfg(path);
float *predictions = network_predict(net, sized.data);
- convert_yolo_detections(predictions, classes, l.n, square, side, 1, 1, thresh, probs, boxes, 1);
- if (nms) do_nms(boxes, probs, side*side*l.n, 1, nms_thresh);
+ convert_detections(predictions, classes, l.n, square, side, 1, 1, thresh, probs, boxes, 1);
+ if (nms) do_nms(boxes, probs, side*side*l.n, 1, nms);
char *labelpath = find_replace(path, "images", "labels");
labelpath = find_replace(labelpath, "JPEGImages", "labels");
@@ -375,9 +343,11 @@
time=clock();
float *predictions = network_predict(net, X);
printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time));
- convert_yolo_detections(predictions, l.classes, l.n, l.sqrt, l.side, 1, 1, thresh, probs, boxes, 0);
+ convert_detections(predictions, l.classes, l.n, l.sqrt, l.side, 1, 1, thresh, probs, boxes, 0);
if (nms) do_nms_sort(boxes, probs, l.side*l.side*l.n, l.classes, nms);
- draw_yolo(im, l.side*l.side*l.n, thresh, boxes, probs);
+ //draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, voc_labels, 20);
+ draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, voc_labels, 20);
+ save_image(im, "predictions");
show_image(im, "predictions");
show_image(sized, "resized");
@@ -391,52 +361,15 @@
}
}
-/*
-#ifdef OPENCV
-image ipl_to_image(IplImage* src);
-#include "opencv2/highgui/highgui_c.h"
-#include "opencv2/imgproc/imgproc_c.h"
-
-void demo_swag(char *cfgfile, char *weightfile, float thresh)
-{
-network net = parse_network_cfg(cfgfile);
-if(weightfile){
-load_weights(&net, weightfile);
-}
-detection_layer layer = net.layers[net.n-1];
-CvCapture *capture = cvCaptureFromCAM(-1);
-set_batch_network(&net, 1);
-srand(2222222);
-while(1){
-IplImage* frame = cvQueryFrame(capture);
-image im = ipl_to_image(frame);
-cvReleaseImage(&frame);
-rgbgr_image(im);
-
-image sized = resize_image(im, net.w, net.h);
-float *X = sized.data;
-float *predictions = network_predict(net, X);
-draw_swag(im, predictions, layer.side, layer.n, "predictions", thresh);
-free_image(im);
-free_image(sized);
-cvWaitKey(10);
-}
-}
-#else
-void demo_swag(char *cfgfile, char *weightfile, float thresh){}
-#endif
- */
-
-void demo_yolo(char *cfgfile, char *weightfile, float thresh, int cam_index);
-#ifndef GPU
-void demo_yolo(char *cfgfile, char *weightfile, float thresh, int cam_index)
-{
- fprintf(stderr, "Darknet must be compiled with CUDA for YOLO demo.\n");
-}
-#endif
-
void run_yolo(int argc, char **argv)
{
+ int i;
+ for(i = 0; i < 20; ++i){
+ char buff[256];
+ sprintf(buff, "data/labels/%s.png", voc_names[i]);
+ voc_labels[i] = load_image_color(buff, 0, 0);
+ }
+
float thresh = find_float_arg(argc, argv, "-thresh", .2);
int cam_index = find_int_arg(argc, argv, "-c", 0);
if(argc < 4){
@@ -451,5 +384,5 @@
else if(0==strcmp(argv[2], "train")) train_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], "demo")) demo_yolo(cfg, weights, thresh, cam_index);
+ else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, voc_names, voc_labels, 20);
}
--
Gitblit v1.10.0