Darknet _ YOLOV3 單目標檢測

darknet測試使用時,會調用 example/detector.c 文件
我們的目的是單目標檢測,只畫一類的框,其他類則屏蔽掉,要注意的是,這樣並不會減少時間,因爲計算量並沒有大程度的減少。

我們要找的是test_detector函數下的draw_detections
在這裏插入圖片描述
這個函數在src/iamge.c的文件下

我們需要做的是添加判定的條件:
在這裏插入圖片描述
這樣就可以做到輸出的單目標化,若想做到框的單目標化,就需要代碼的調移具體修改如下:


void draw_detections(image im, detection *dets, int num, float thresh, char **names, image **alphabet, int classes)
{
    int i,j;
    printf("start test");
    for(i = 0; i < num; ++i){

        char labelstr[4096] = {0};
        int class = -1;
        for(j = 0; j < classes; ++j){
	   
            if (dets[i].prob[j] > thresh){
                if (class < 0) {
                    strcat(labelstr, names[j]);
                    class = j;
                } else {
                    strcat(labelstr, ", ");
                    strcat(labelstr, names[j]);
                }
		
				//single_change	
				if(strcmp(names[j], "dog") ==0 )
				{
            	    printf("%s: %.0f%%  single_ok \n ", names[j], dets[i].prob[j]*100);	
					int width = im.h * .006;

					/*
					   if(0){
					   width = pow(prob, 1./2.)*10+1;
					   alphabet = 0;
					   }
					 */

					//printf("%d %s: %.0f%%\n", i, names[class], prob*100);
					int offset = class*123457 % classes;
					float red = get_color(2,offset,classes);
					float green = get_color(1,offset,classes);
					float blue = get_color(0,offset,classes);
					float rgb[3];

					//width = prob*20+2;

					rgb[0] = red;
					rgb[1] = green;
					rgb[2] = blue;
					box b = dets[i].bbox;
					//printf("%f %f %f %f\n", b.x, b.y, b.w, b.h);

					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);
					
					if (alphabet) {
						image label = get_label(alphabet, labelstr, (im.h*.03));
						draw_label(im, top + width, left, label, rgb);
						free_image(label);
					}
					if (dets[i].mask){
						image mask = float_to_image(14, 14, 1, dets[i].mask);
						image resized_mask = resize_image(mask, b.w*im.w, b.h*im.h);
						image tmask = threshold_image(resized_mask, .5);
						embed_image(tmask, im, left, top);
						free_image(mask);
						free_image(resized_mask);
						free_image(tmask);
					}
				}
		
            }
        }
   
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章