mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
CARLY RAE JEPSEN IS THE BEST POP ARTIST OF ALL TIME DON'T @ ME
This commit is contained in:
parent
e3931c75cd
commit
b40bbdc7b2
@ -44,11 +44,15 @@ void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
|
||||
list *options = read_data_cfg(datacfg);
|
||||
|
||||
char *backup_directory = option_find_str(options, "backup", "/backup/");
|
||||
int tag = option_find_int_quiet(options, "tag", 0);
|
||||
char *label_list = option_find_str(options, "labels", "data/labels.list");
|
||||
char *train_list = option_find_str(options, "train", "data/train.list");
|
||||
int classes = option_find_int(options, "classes", 2);
|
||||
|
||||
char **labels = get_labels(label_list);
|
||||
char **labels;
|
||||
if(!tag){
|
||||
labels = get_labels(label_list);
|
||||
}
|
||||
list *plist = get_paths(train_list);
|
||||
char **paths = (char **)list_to_array(plist);
|
||||
printf("%d\n", plist->size);
|
||||
@ -76,7 +80,11 @@ void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
|
||||
args.n = imgs;
|
||||
args.m = N;
|
||||
args.labels = labels;
|
||||
args.type = CLASSIFICATION_DATA;
|
||||
if (tag){
|
||||
args.type = TAG_DATA;
|
||||
} else {
|
||||
args.type = CLASSIFICATION_DATA;
|
||||
}
|
||||
|
||||
data train;
|
||||
data buffer;
|
||||
@ -385,15 +393,13 @@ void validate_classifier_single(char *datacfg, char *filename, char *weightfile)
|
||||
}
|
||||
}
|
||||
image im = load_image_color(paths[i], 0, 0);
|
||||
image resized = resize_min(im, net->w);
|
||||
image crop = crop_image(resized, (resized.w - net->w)/2, (resized.h - net->h)/2, net->w, net->h);
|
||||
image crop = center_crop_image(im, net->w, net->h);
|
||||
//show_image(im, "orig");
|
||||
//show_image(crop, "cropped");
|
||||
//cvWaitKey(0);
|
||||
float *pred = network_predict(net, crop.data);
|
||||
if(net->hierarchy) hierarchy_predictions(pred, net->outputs, net->hierarchy, 1, 1);
|
||||
|
||||
if(resized.data != im.data) free_image(resized);
|
||||
free_image(im);
|
||||
free_image(crop);
|
||||
top_k(pred, classes, topk, indexes);
|
||||
@ -955,6 +961,8 @@ void gun_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_inde
|
||||
void demo_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_index, const char *filename)
|
||||
{
|
||||
#ifdef OPENCV
|
||||
char *base = basecfg(cfgfile);
|
||||
image **alphabet = load_alphabet();
|
||||
printf("Classifier Demo\n");
|
||||
network *net = load_network(cfgfile, weightfile, 0);
|
||||
set_batch_network(net, 1);
|
||||
@ -988,8 +996,8 @@ void demo_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_ind
|
||||
int *indexes = calloc(top, sizeof(int));
|
||||
|
||||
if(!cap) error("Couldn't connect to webcam.\n");
|
||||
cvNamedWindow("Classifier", CV_WINDOW_NORMAL);
|
||||
cvResizeWindow("Classifier", 512, 512);
|
||||
cvNamedWindow(base, CV_WINDOW_NORMAL);
|
||||
cvResizeWindow(base, 512, 512);
|
||||
float fps = 0;
|
||||
int i;
|
||||
|
||||
@ -998,8 +1006,8 @@ void demo_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_ind
|
||||
gettimeofday(&tval_before, NULL);
|
||||
|
||||
image in = get_image_from_stream(cap);
|
||||
image in_s = resize_image(in, net->w, net->h);
|
||||
show_image(in, "Classifier");
|
||||
//image in_s = resize_image(in, net->w, net->h);
|
||||
image in_s = letterbox_image(in, net->w, net->h);
|
||||
|
||||
float *predictions = network_predict(net, in_s.data);
|
||||
if(net->hierarchy) hierarchy_predictions(predictions, net->outputs, net->hierarchy, 1, 1);
|
||||
@ -1009,11 +1017,24 @@ void demo_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_ind
|
||||
printf("\033[1;1H");
|
||||
printf("\nFPS:%.0f\n",fps);
|
||||
|
||||
int lh = in.h*.03;
|
||||
int toph = 3*lh;
|
||||
|
||||
float rgb[3] = {1,1,1};
|
||||
for(i = 0; i < top; ++i){
|
||||
printf("%d\n", toph);
|
||||
int index = indexes[i];
|
||||
printf("%.1f%%: %s\n", predictions[index]*100, names[index]);
|
||||
|
||||
char buff[1024];
|
||||
sprintf(buff, "%3.1f%%: %s\n", predictions[index]*100, names[index]);
|
||||
image label = get_label(alphabet, buff, lh);
|
||||
draw_label(in, toph, lh, label, rgb);
|
||||
toph += 2*lh;
|
||||
free_image(label);
|
||||
}
|
||||
|
||||
show_image(in, base);
|
||||
free_image(in_s);
|
||||
free_image(in);
|
||||
|
||||
|
@ -624,6 +624,177 @@ void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filenam
|
||||
}
|
||||
}
|
||||
|
||||
void censor_detector(char *datacfg, char *cfgfile, char *weightfile, int cam_index, const char *filename, int class, float thresh, int skip)
|
||||
{
|
||||
image **alphabet = load_alphabet();
|
||||
char *base = basecfg(cfgfile);
|
||||
network *net = load_network(cfgfile, weightfile, 0);
|
||||
set_batch_network(net, 1);
|
||||
list *options = read_data_cfg(datacfg);
|
||||
|
||||
srand(2222222);
|
||||
CvCapture * cap;
|
||||
|
||||
int w = 1280;
|
||||
int h = 720;
|
||||
|
||||
if(filename){
|
||||
cap = cvCaptureFromFile(filename);
|
||||
}else{
|
||||
cap = cvCaptureFromCAM(cam_index);
|
||||
}
|
||||
|
||||
if(w){
|
||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH, w);
|
||||
}
|
||||
if(h){
|
||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT, h);
|
||||
}
|
||||
|
||||
int top = option_find_int(options, "top", 1);
|
||||
|
||||
char *label_list = option_find_str(options, "labels", 0);
|
||||
char *name_list = option_find_str(options, "names", label_list);
|
||||
char **names = get_labels(name_list);
|
||||
|
||||
int *indexes = calloc(top, sizeof(int));
|
||||
|
||||
if(!cap) error("Couldn't connect to webcam.\n");
|
||||
cvNamedWindow(base, CV_WINDOW_NORMAL);
|
||||
cvResizeWindow(base, 512, 512);
|
||||
float fps = 0;
|
||||
int i;
|
||||
int count = 0;
|
||||
float nms = .45;
|
||||
|
||||
while(1){
|
||||
image in = get_image_from_stream(cap);
|
||||
//image in_s = resize_image(in, net->w, net->h);
|
||||
image in_s = letterbox_image(in, net->w, net->h);
|
||||
layer l = net->layers[net->n-1];
|
||||
|
||||
int nboxes = num_boxes(net);
|
||||
|
||||
float *X = in_s.data;
|
||||
network_predict(net, X);
|
||||
detection *dets = get_network_boxes(net, in.w, in.h, thresh, 0, 0, 0);
|
||||
//if (nms) do_nms_obj(boxes, probs, l.w*l.h*l.n, l.classes, nms);
|
||||
if (nms) do_nms_sort(dets, nboxes, l.classes, nms);
|
||||
|
||||
for(i = 0; i < nboxes; ++i){
|
||||
if(dets[i].prob[class] > thresh){
|
||||
box b = dets[i].bbox;
|
||||
int left = b.x-b.w/2.;
|
||||
int top = b.y-b.h/2.;
|
||||
censor_image(in, left, top, b.w, b.h);
|
||||
}
|
||||
}
|
||||
show_image(in, base);
|
||||
cvWaitKey(10);
|
||||
free_detections(dets, num_boxes(net));
|
||||
|
||||
|
||||
free_image(in_s);
|
||||
free_image(in);
|
||||
|
||||
|
||||
float curr = 0;
|
||||
fps = .9*fps + .1*curr;
|
||||
for(i = 0; i < skip; ++i){
|
||||
image in = get_image_from_stream(cap);
|
||||
free_image(in);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void extract_detector(char *datacfg, char *cfgfile, char *weightfile, int cam_index, const char *filename, int class, float thresh, int skip)
|
||||
{
|
||||
image **alphabet = load_alphabet();
|
||||
char *base = basecfg(cfgfile);
|
||||
network *net = load_network(cfgfile, weightfile, 0);
|
||||
set_batch_network(net, 1);
|
||||
list *options = read_data_cfg(datacfg);
|
||||
|
||||
srand(2222222);
|
||||
CvCapture * cap;
|
||||
|
||||
int w = 1280;
|
||||
int h = 720;
|
||||
|
||||
if(filename){
|
||||
cap = cvCaptureFromFile(filename);
|
||||
}else{
|
||||
cap = cvCaptureFromCAM(cam_index);
|
||||
}
|
||||
|
||||
if(w){
|
||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH, w);
|
||||
}
|
||||
if(h){
|
||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT, h);
|
||||
}
|
||||
|
||||
int top = option_find_int(options, "top", 1);
|
||||
|
||||
char *label_list = option_find_str(options, "labels", 0);
|
||||
char *name_list = option_find_str(options, "names", label_list);
|
||||
char **names = get_labels(name_list);
|
||||
|
||||
int *indexes = calloc(top, sizeof(int));
|
||||
|
||||
if(!cap) error("Couldn't connect to webcam.\n");
|
||||
cvNamedWindow(base, CV_WINDOW_NORMAL);
|
||||
cvResizeWindow(base, 512, 512);
|
||||
float fps = 0;
|
||||
int i;
|
||||
int count = 0;
|
||||
float nms = .45;
|
||||
|
||||
while(1){
|
||||
image in = get_image_from_stream(cap);
|
||||
//image in_s = resize_image(in, net->w, net->h);
|
||||
image in_s = letterbox_image(in, net->w, net->h);
|
||||
layer l = net->layers[net->n-1];
|
||||
|
||||
int nboxes = num_boxes(net);
|
||||
show_image(in, base);
|
||||
|
||||
float *X = in_s.data;
|
||||
network_predict(net, X);
|
||||
detection *dets = get_network_boxes(net, in.w, in.h, thresh, 0, 0, 1);
|
||||
//if (nms) do_nms_obj(boxes, probs, l.w*l.h*l.n, l.classes, nms);
|
||||
if (nms) do_nms_sort(dets, nboxes, l.classes, nms);
|
||||
|
||||
for(i = 0; i < nboxes; ++i){
|
||||
if(dets[i].prob[class] > thresh){
|
||||
box b = dets[i].bbox;
|
||||
int size = b.w*in.w > b.h*in.h ? b.w*in.w : b.h*in.h;
|
||||
int dx = b.x*in.w-size/2.;
|
||||
int dy = b.y*in.h-size/2.;
|
||||
image bim = crop_image(in, dx, dy, size, size);
|
||||
char buff[2048];
|
||||
sprintf(buff, "results/extract/%07d", count);
|
||||
++count;
|
||||
save_image(bim, buff);
|
||||
free_image(bim);
|
||||
}
|
||||
}
|
||||
free_detections(dets, num_boxes(net));
|
||||
|
||||
|
||||
free_image(in_s);
|
||||
free_image(in);
|
||||
|
||||
|
||||
float curr = 0;
|
||||
fps = .9*fps + .1*curr;
|
||||
for(i = 0; i < skip; ++i){
|
||||
image in = get_image_from_stream(cap);
|
||||
free_image(in);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void network_detect(network *net, image im, float thresh, float hier_thresh, float nms, detection *dets)
|
||||
{
|
||||
network_predict_image(net, im);
|
||||
@ -674,12 +845,15 @@ void run_detector(int argc, char **argv)
|
||||
int width = find_int_arg(argc, argv, "-w", 0);
|
||||
int height = find_int_arg(argc, argv, "-h", 0);
|
||||
int fps = find_int_arg(argc, argv, "-fps", 0);
|
||||
int class = find_int_arg(argc, argv, "-class", 0);
|
||||
|
||||
char *datacfg = argv[3];
|
||||
char *cfg = argv[4];
|
||||
char *weights = (argc > 5) ? argv[5] : 0;
|
||||
char *filename = (argc > 6) ? argv[6]: 0;
|
||||
if(0==strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, outfile, fullscreen);
|
||||
else if(0==strcmp(argv[2], "extract")) extract_detector(datacfg, cfg, weights, cam_index, filename, class, thresh, frame_skip);
|
||||
else if(0==strcmp(argv[2], "censor")) censor_detector(datacfg, cfg, weights, cam_index, filename, class, thresh, frame_skip);
|
||||
else if(0==strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear);
|
||||
else if(0==strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights, outfile);
|
||||
else if(0==strcmp(argv[2], "valid2")) validate_detector_flip(datacfg, cfg, weights, outfile);
|
||||
|
@ -32,6 +32,7 @@ void train_regressor(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
|
||||
|
||||
char *backup_directory = option_find_str(options, "backup", "/backup/");
|
||||
char *train_list = option_find_str(options, "train", "data/train.list");
|
||||
int classes = option_find_int(options, "classes", 1);
|
||||
|
||||
list *plist = get_paths(train_list);
|
||||
char **paths = (char **)list_to_array(plist);
|
||||
@ -43,9 +44,10 @@ void train_regressor(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
|
||||
args.w = net->w;
|
||||
args.h = net->h;
|
||||
args.threads = 32;
|
||||
args.classes = classes;
|
||||
|
||||
args.min = net->min_crop;
|
||||
args.max = net->max_crop;
|
||||
args.min = net->min_ratio*net->w;
|
||||
args.max = net->max_ratio*net->w;
|
||||
args.angle = net->angle;
|
||||
args.aspect = net->aspect;
|
||||
args.exposure = net->exposure;
|
||||
@ -160,6 +162,10 @@ void demo_regressor(char *datacfg, char *cfgfile, char *weightfile, int cam_inde
|
||||
}else{
|
||||
cap = cvCaptureFromCAM(cam_index);
|
||||
}
|
||||
list *options = read_data_cfg(datacfg);
|
||||
int classes = option_find_int(options, "classes", 1);
|
||||
char *name_list = option_find_str(options, "names", 0);
|
||||
char **names = get_labels(name_list);
|
||||
|
||||
if(!cap) error("Couldn't connect to webcam.\n");
|
||||
cvNamedWindow("Regressor", CV_WINDOW_NORMAL);
|
||||
@ -171,19 +177,23 @@ void demo_regressor(char *datacfg, char *cfgfile, char *weightfile, int cam_inde
|
||||
gettimeofday(&tval_before, NULL);
|
||||
|
||||
image in = get_image_from_stream(cap);
|
||||
image in_s = letterbox_image(in, net->w, net->h);
|
||||
show_image(in, "Regressor");
|
||||
image crop = center_crop_image(in, net->w, net->h);
|
||||
grayscale_image_3c(crop);
|
||||
show_image(crop, "Regressor");
|
||||
|
||||
float *predictions = network_predict(net, in_s.data);
|
||||
float *predictions = network_predict(net, crop.data);
|
||||
|
||||
printf("\033[2J");
|
||||
printf("\033[1;1H");
|
||||
printf("\nFPS:%.0f\n",fps);
|
||||
|
||||
printf("People: %f\n", predictions[0]);
|
||||
int i;
|
||||
for(i = 0; i < classes; ++i){
|
||||
printf("%s: %f\n", names[i], predictions[i]);
|
||||
}
|
||||
|
||||
free_image(in_s);
|
||||
free_image(in);
|
||||
free_image(crop);
|
||||
|
||||
cvWaitKey(10);
|
||||
|
||||
|
@ -637,6 +637,8 @@ float train_networks(network **nets, int n, data d, int interval);
|
||||
void sync_nets(network **nets, int n, int interval);
|
||||
void harmless_update_network_gpu(network *net);
|
||||
#endif
|
||||
image get_label(image **characters, char *string, int size);
|
||||
void draw_label(image a, int r, int c, image label, const float *rgb);
|
||||
void save_image_png(image im, const char *name);
|
||||
void get_next_batch(data d, int n, int offset, float *X, float *y);
|
||||
void grayscale_image_3c(image im);
|
||||
@ -683,8 +685,10 @@ image load_image(char *filename, int w, int h, int c);
|
||||
image load_image_color(char *filename, int w, int h);
|
||||
image make_image(int w, int h, int c);
|
||||
image resize_image(image im, int w, int h);
|
||||
void censor_image(image im, int dx, int dy, int w, int h);
|
||||
image letterbox_image(image im, int w, int h);
|
||||
image crop_image(image im, int dx, int dy, int w, int h);
|
||||
image center_crop_image(image im, int w, int h);
|
||||
image resize_min(image im, int min);
|
||||
image resize_max(image im, int max);
|
||||
image threshold_image(image im, float thresh);
|
||||
|
@ -23,6 +23,15 @@ class BOX(Structure):
|
||||
("w", c_float),
|
||||
("h", c_float)]
|
||||
|
||||
class DETECTION(Structure):
|
||||
_fields_ = [("bbox", BOX),
|
||||
("classes", c_int),
|
||||
("prob", POINTER(c_float)),
|
||||
("mask", POINTER(c_float)),
|
||||
("objectness", c_float),
|
||||
("sort_class", c_int)]
|
||||
|
||||
|
||||
class IMAGE(Structure):
|
||||
_fields_ = [("w", c_int),
|
||||
("h", c_int),
|
||||
@ -53,9 +62,16 @@ make_image = lib.make_image
|
||||
make_image.argtypes = [c_int, c_int, c_int]
|
||||
make_image.restype = IMAGE
|
||||
|
||||
make_boxes = lib.make_boxes
|
||||
make_boxes.argtypes = [c_void_p]
|
||||
make_boxes.restype = POINTER(BOX)
|
||||
get_network_boxes = lib.get_network_boxes
|
||||
get_network_boxes.argtypes = [c_void_p, c_int, c_int, c_float, c_float, POINTER(c_int), c_int]
|
||||
get_network_boxes.restype = POINTER(DETECTION)
|
||||
|
||||
make_network_boxes = lib.make_network_boxes
|
||||
make_network_boxes.argtypes = [c_void_p]
|
||||
make_network_boxes.restype = POINTER(DETECTION)
|
||||
|
||||
free_detections = lib.free_detections
|
||||
free_detections.argtypes = [POINTER(DETECTION), c_int]
|
||||
|
||||
free_ptrs = lib.free_ptrs
|
||||
free_ptrs.argtypes = [POINTER(c_void_p), c_int]
|
||||
@ -64,12 +80,8 @@ num_boxes = lib.num_boxes
|
||||
num_boxes.argtypes = [c_void_p]
|
||||
num_boxes.restype = c_int
|
||||
|
||||
make_probs = lib.make_probs
|
||||
make_probs.argtypes = [c_void_p]
|
||||
make_probs.restype = POINTER(POINTER(c_float))
|
||||
|
||||
detect = lib.network_predict
|
||||
detect.argtypes = [c_void_p, IMAGE, c_float, c_float, c_float, POINTER(BOX), POINTER(POINTER(c_float))]
|
||||
network_predict = lib.network_predict
|
||||
network_predict.argtypes = [c_void_p, POINTER(c_float)]
|
||||
|
||||
reset_rnn = lib.reset_rnn
|
||||
reset_rnn.argtypes = [c_void_p]
|
||||
@ -78,6 +90,12 @@ load_net = lib.load_network
|
||||
load_net.argtypes = [c_char_p, c_char_p, c_int]
|
||||
load_net.restype = c_void_p
|
||||
|
||||
do_nms_obj = lib.do_nms_obj
|
||||
do_nms_obj.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
|
||||
|
||||
do_nms_sort = lib.do_nms_sort
|
||||
do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
|
||||
|
||||
free_image = lib.free_image
|
||||
free_image.argtypes = [IMAGE]
|
||||
|
||||
@ -100,9 +118,6 @@ predict_image = lib.network_predict_image
|
||||
predict_image.argtypes = [c_void_p, IMAGE]
|
||||
predict_image.restype = POINTER(c_float)
|
||||
|
||||
network_detect = lib.network_detect
|
||||
network_detect.argtypes = [c_void_p, IMAGE, c_float, c_float, c_float, POINTER(BOX), POINTER(POINTER(c_float))]
|
||||
|
||||
def classify(net, meta, im):
|
||||
out = predict_image(net, im)
|
||||
res = []
|
||||
@ -113,18 +128,20 @@ def classify(net, meta, im):
|
||||
|
||||
def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45):
|
||||
im = load_image(image, 0, 0)
|
||||
boxes = make_boxes(net)
|
||||
probs = make_probs(net)
|
||||
num = num_boxes(net)
|
||||
network_detect(net, im, thresh, hier_thresh, nms, boxes, probs)
|
||||
predict_image(net, im)
|
||||
dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0)
|
||||
if (nms): do_nms_obj(dets, num, meta.classes, nms);
|
||||
|
||||
res = []
|
||||
for j in range(num):
|
||||
for i in range(meta.classes):
|
||||
if probs[j][i] > 0:
|
||||
res.append((meta.names[i], probs[j][i], (boxes[j].x, boxes[j].y, boxes[j].w, boxes[j].h)))
|
||||
if dets[j].prob[i] > 0:
|
||||
b = dets[j].bbox
|
||||
res.append((meta.names[i], dets[j].prob[i], (b.x, b.y, b.w, b.h)))
|
||||
res = sorted(res, key=lambda x: -x[1])
|
||||
free_image(im)
|
||||
free_ptrs(cast(probs, POINTER(c_void_p)), num)
|
||||
free_detections(dets, num)
|
||||
return res
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
37
src/data.c
37
src/data.c
@ -548,19 +548,22 @@ void fill_hierarchy(float *truth, int k, tree *hierarchy)
|
||||
}
|
||||
}
|
||||
|
||||
matrix load_regression_labels_paths(char **paths, int n)
|
||||
matrix load_regression_labels_paths(char **paths, int n, int k)
|
||||
{
|
||||
matrix y = make_matrix(n, 1);
|
||||
int i;
|
||||
matrix y = make_matrix(n, k);
|
||||
int i,j;
|
||||
for(i = 0; i < n; ++i){
|
||||
char labelpath[4096];
|
||||
find_replace(paths[i], "images", "targets", labelpath);
|
||||
find_replace(labelpath, "JPEGImages", "targets", labelpath);
|
||||
find_replace(paths[i], "images", "labels", labelpath);
|
||||
find_replace(labelpath, "JPEGImages", "labels", labelpath);
|
||||
find_replace(labelpath, ".jpg", ".txt", labelpath);
|
||||
find_replace(labelpath, ".JPG", ".txt", labelpath);
|
||||
find_replace(labelpath, ".png", ".txt", labelpath);
|
||||
|
||||
FILE *file = fopen(labelpath, "r");
|
||||
fscanf(file, "%f", &(y.vals[i][0]));
|
||||
for(j = 0; j < k; ++j){
|
||||
fscanf(file, "%f", &(y.vals[i][j]));
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
return y;
|
||||
@ -583,18 +586,14 @@ matrix load_tags_paths(char **paths, int n, int k)
|
||||
{
|
||||
matrix y = make_matrix(n, k);
|
||||
int i;
|
||||
int count = 0;
|
||||
//int count = 0;
|
||||
for(i = 0; i < n; ++i){
|
||||
char label[4096];
|
||||
find_replace(paths[i], "imgs", "labels", label);
|
||||
find_replace(label, "_iconl.jpeg", ".txt", label);
|
||||
find_replace(paths[i], "images", "labels", label);
|
||||
find_replace(label, ".jpg", ".txt", label);
|
||||
FILE *file = fopen(label, "r");
|
||||
if(!file){
|
||||
find_replace(label, "labels", "labels2", label);
|
||||
file = fopen(label, "r");
|
||||
if(!file) continue;
|
||||
}
|
||||
++count;
|
||||
if (!file) continue;
|
||||
//++count;
|
||||
int tag;
|
||||
while(fscanf(file, "%d", &tag) == 1){
|
||||
if(tag < k){
|
||||
@ -603,7 +602,7 @@ matrix load_tags_paths(char **paths, int n, int k)
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
printf("%d/%d\n", count, n);
|
||||
//printf("%d/%d\n", count, n);
|
||||
return y;
|
||||
}
|
||||
|
||||
@ -1010,7 +1009,7 @@ void *load_thread(void *ptr)
|
||||
if (a.type == OLD_CLASSIFICATION_DATA){
|
||||
*a.d = load_data_old(a.paths, a.n, a.m, a.labels, a.classes, a.w, a.h);
|
||||
} else if (a.type == REGRESSION_DATA){
|
||||
*a.d = load_data_regression(a.paths, a.n, a.m, a.min, a.max, a.size, a.angle, a.aspect, a.hue, a.saturation, a.exposure);
|
||||
*a.d = load_data_regression(a.paths, a.n, a.m, a.classes, a.min, a.max, a.size, a.angle, a.aspect, a.hue, a.saturation, a.exposure);
|
||||
} else if (a.type == CLASSIFICATION_DATA){
|
||||
*a.d = load_data_augment(a.paths, a.n, a.m, a.labels, a.classes, a.hierarchy, a.min, a.max, a.size, a.angle, a.aspect, a.hue, a.saturation, a.exposure, a.center);
|
||||
} else if (a.type == SUPER_DATA){
|
||||
@ -1166,13 +1165,13 @@ data load_data_super(char **paths, int n, int m, int w, int h, int scale)
|
||||
return d;
|
||||
}
|
||||
|
||||
data load_data_regression(char **paths, int n, int m, int min, int max, int size, float angle, float aspect, float hue, float saturation, float exposure)
|
||||
data load_data_regression(char **paths, int n, int m, int k, int min, int max, int size, float angle, float aspect, float hue, float saturation, float exposure)
|
||||
{
|
||||
if(m) paths = get_random_paths(paths, n, m);
|
||||
data d = {0};
|
||||
d.shallow = 0;
|
||||
d.X = load_image_augment_paths(paths, n, min, max, size, angle, aspect, hue, saturation, exposure, 0);
|
||||
d.y = load_regression_labels_paths(paths, n);
|
||||
d.y = load_regression_labels_paths(paths, n, k);
|
||||
if(m) free(paths);
|
||||
return d;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ data load_data_tag(char **paths, int n, int m, int k, int min, int max, int size
|
||||
matrix load_image_augment_paths(char **paths, int n, int min, int max, int size, float angle, float aspect, float hue, float saturation, float exposure, int center);
|
||||
data load_data_super(char **paths, int n, int m, int w, int h, int scale);
|
||||
data load_data_augment(char **paths, int n, int m, char **labels, int k, tree *hierarchy, int min, int max, int size, float angle, float aspect, float hue, float saturation, float exposure, int center);
|
||||
data load_data_regression(char **paths, int n, int m, int min, int max, int size, float angle, float aspect, float hue, float saturation, float exposure);
|
||||
data load_data_regression(char **paths, int n, int m, int classes, int min, int max, int size, float angle, float aspect, float hue, float saturation, float exposure);
|
||||
data load_go(char *filename);
|
||||
|
||||
|
||||
|
32
src/image.c
32
src/image.c
@ -131,6 +131,7 @@ image tile_images(image a, image b, int dx)
|
||||
|
||||
image get_label(image **characters, char *string, int size)
|
||||
{
|
||||
size = size/10;
|
||||
if(size > 7) size = 7;
|
||||
image label = make_empty_image(0,0,0);
|
||||
while(*string){
|
||||
@ -291,7 +292,7 @@ void draw_detections(image im, detection *dets, int num, float thresh, char **na
|
||||
|
||||
draw_box_width(im, left, top, right, bot, width, red, green, blue);
|
||||
if (alphabet) {
|
||||
image label = get_label(alphabet, labelstr, (im.h*.03)/10);
|
||||
image label = get_label(alphabet, labelstr, (im.h*.03));
|
||||
draw_label(im, top + width, left, label, rgb);
|
||||
free_image(label);
|
||||
}
|
||||
@ -395,6 +396,35 @@ void ghost_image(image source, image dest, int dx, int dy)
|
||||
}
|
||||
}
|
||||
|
||||
void blocky_image(image im, int s)
|
||||
{
|
||||
int i,j,k;
|
||||
for(k = 0; k < im.c; ++k){
|
||||
for(j = 0; j < im.h; ++j){
|
||||
for(i = 0; i < im.w; ++i){
|
||||
im.data[i + im.w*(j + im.h*k)] = im.data[i/s*s + im.w*(j/s*s + im.h*k)];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void censor_image(image im, int dx, int dy, int w, int h)
|
||||
{
|
||||
int i,j,k;
|
||||
int s = 32;
|
||||
if(dx < 0) dx = 0;
|
||||
if(dy < 0) dy = 0;
|
||||
|
||||
for(k = 0; k < im.c; ++k){
|
||||
for(j = dy; j < dy + h && j < im.h; ++j){
|
||||
for(i = dx; i < dx + w && i < im.w; ++i){
|
||||
im.data[i + im.w*(j + im.h*k)] = im.data[i/s*s + im.w*(j/s*s + im.h*k)];
|
||||
//im.data[i + j*im.w + k*im.w*im.h] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void embed_image(image source, image dest, int dx, int dy)
|
||||
{
|
||||
int x,y,k;
|
||||
|
@ -22,12 +22,10 @@ void show_image_cv(image p, const char *name, IplImage *disp);
|
||||
float get_color(int c, int x, int max);
|
||||
void draw_box(image a, int x1, int y1, int x2, int y2, float r, float g, float b);
|
||||
void draw_bbox(image a, box bbox, int w, float r, float g, float b);
|
||||
void draw_label(image a, int r, int c, image label, const float *rgb);
|
||||
void write_label(image a, int r, int c, image *characters, char *string, float *rgb);
|
||||
image image_distance(image a, image b);
|
||||
void scale_image(image m, float s);
|
||||
image rotate_crop_image(image im, float rad, float s, int w, int h, float dx, float dy, float aspect);
|
||||
image center_crop_image(image im, int w, int h);
|
||||
image random_crop_image(image im, int w, int h);
|
||||
image random_augment_image(image im, float angle, float aspect, int low, int high, int w, int h);
|
||||
augment_args random_augment_args(image im, float angle, float aspect, int low, int high, int w, int h);
|
||||
|
@ -582,7 +582,7 @@ void backward_region_layer_gpu(const layer l, network net)
|
||||
gradient_array_gpu(l.output_gpu + index, (l.coords - 4)*l.w*l.h, LOGISTIC, l.delta_gpu + index);
|
||||
}
|
||||
index = entry_index(l, b, n*l.w*l.h, l.coords);
|
||||
if(!l.background) gradient_array_gpu(l.output_gpu + index, l.w*l.h, LOGISTIC, l.delta_gpu + index);
|
||||
//if(!l.background) gradient_array_gpu(l.output_gpu + index, l.w*l.h, LOGISTIC, l.delta_gpu + index);
|
||||
}
|
||||
}
|
||||
axpy_gpu(l.batch*l.inputs, 1, l.delta_gpu, 1, net.delta_gpu, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user