然后有了几千条数据之后就可以初步训练一个分类器出来了,用分类器的推断结果再标注剩下的图的一部分,岂不美哉?
可比百度那个接口标注准度提升的多了~
一、修改yolov3源代码为批量推断
注意啦!代码修改全是基于darknet-yolov3的!
//examples/detector.c里面前面部分要改成这样子且增加一个函数
#include "darknet.h"
#include <opencv2/highgui/highgui_c.h>
#include <sys/stat.h> //add
#include <stdio.h> //add
#include <unistd.h> //add
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/timeb.h>
#include <sys/types.h>
#include <time.h>
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};
char *GetFilename(char *p)
{
static char name[200]={""};
char *q = strrchr(p,'/') + 1;
strncpy(name,q,60); //6是你的测试图像名称的长度
return name;
}
//改完了以后把这个函数换成这个样子~
void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename,
float thresh, float hier_thresh, char *outfile, int fullscreen)
{
list *options = read_data_cfg(datacfg);
char *name_list = option_find_str(options, "names", "data/names.list");
char **names = get_labels(name_list);
// time_t t;
// t=time(0);
// printf("%ld\n",t);
image **alphabet = load_alphabet();
network *net = load_network(cfgfile, weightfile, 0);
set_batch_network(net, 1);
srand(2222222);
double time;
char buff[256];
char *input = buff;
float nms=.45;
int i=0;
while(1){
if(filename){
strncpy(input, filename, 256);
image im = load_image_color(input,0,0);
image sized = letterbox_image(im, net->w, net->h);
//image sized = resize_image(im, net->w, net->h);
//image sized2 = resize_max(im, net->w);
//image sized = crop_image(sized2, -((net->w - sized2.w)/2), -((net->h - sized2.h)/2), net->w, net->h);
//resize_network(net, sized.w, sized.h);
layer l = net->layers[net->n-1];
float *X = sized.data;
time=what_time_is_it_now();
network_predict(net, X);
printf("%s: Predicted in %f seconds.\n", input, what_time_is_it_now()-time);
int nboxes = 0;
detection *dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, 0, 1, &nboxes);
//printf("%d\n", nboxes);
//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);
draw_detections(im, dets, nboxes, thresh, names, alphabet, l.classes);
free_detections(dets, nboxes);
if(outfile)
{