日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零开始带你一步一步使用 YOLOv3 测试自己的数据

發布時間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始带你一步一步使用 YOLOv3 测试自己的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇:?

從零開始帶你一步一步使用YOLOv3訓練自己的數據

我給大家詳細介紹了如何使用 YOLOv3 模型來訓練自己的數據集。訓練部分完成,本文將繼續給大家詳細介紹如何使用我們訓練好的模型來進行圖片的批量測試。

一、修改 detector.c 文件?

1. 替換 void test_detector 函數?

同樣是在 darknet 目錄下,打開 ./example 目錄下的 detector.c 文件,找到 void test_detector 函數,將下面的代碼替換原來的 void test_detector 函數:

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);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){save_image(im, outfile);}else{save_image(im, "predictions"); #ifdef OPENCVcvNamedWindow("predictions", CV_WINDOW_NORMAL); if(fullscreen){cvSetWindowProperty("predictions", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);}show_image(im, "predictions");cvWaitKey(0);cvDestroyAllWindows(); #endif}free_image(im);free_image(sized);if (filename) break;} else {printf("Enter Image Path: ");fflush(stdout);input = fgets(input, 256, stdin);if(!input) return;strtok(input, "\n");list *plist = get_paths(input);char **paths = (char **)list_to_array(plist);printf("Start Testing!\n");int m = plist->size;if(access("/home/xny/yolov3/darknet/predictions/out",0)==-1) //"/home/xny/yolov3/darknet/predictions"修改成自己的路徑{if (mkdir("/home/xny/yolov3/darknet/predictions/out",0777)) //"/home/xny/yolov3/darknet/predictions"修改成自己的路徑{printf("creat file bag failed!!!");}}for(i = 0; i < m; ++i){char *path = paths[i];image im = load_image_color(path,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("Try Very Hard:");printf("%s: Predicted in %f seconds.\n", path, 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){save_image(im, outfile);}else{char b[2048];sprintf(b,"/home/xny/yolov3/darknet/predictions/out/%s",GetFilename(path));//"/home/xny/yolov3/darknet/predictions"修改成自己的路徑save_image(im, b);printf("save %s successfully!\n",GetFilename(path)); #ifdef OPENCVcvNamedWindow("predictions", CV_WINDOW_NORMAL); if(fullscreen){cvSetWindowProperty("predictions", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);}show_image(im, "predictions");cvWaitKey(0);cvDestroyAllWindows(); #endif}free_image(im);free_image(sized);if (filename) break;}}} }

注意上面有三處需要修改的地方,分別是:

if(access("/home/xny/yolov3/darknet/predictions/out",0)==-1)????//"/home/xny/yolov3/darknet/predictions"修改成自己的路徑 ?if?(mkdir("/home/xny/yolov3/darknet/predictions/out",0777))????//"/home/xny/yolov3/darknet/predictions"修改成自己的路徑 sprintf(b,"/home/xny/yolov3/darknet/predictions/out/%s",GetFilename(path));//"/home/xny/yolov3/darknet/predictions"修改成自己的路徑

務必將其中的 /home/xny/yolov3/darknet/predictions/ 修改為自己的路徑,這個路徑可以是任意的,主要是用來存放測試結果圖片的。

2. 添加 GetFilename(char p)函數?

還是打開 detector.c 文件,將下面這段代碼全部復制添加在 detctor.c 文件的開頭。

#include "darknet.h" #include <sys/stat.h> #include<stdio.h> #include<time.h> #include<sys/types.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[20]={""};char *q = strrchr(p,'/') + 1;strncpy(name,q,6); //注意后面的6,如果你的測試集的圖片的名字字符(不包括后綴)是其他長度,請改為你需要的長度(官方的默認的長度是6)return name; }

注意有一處需要修改的地方:

?strncpy(name,q,6);????//注意后面的6,如果你的測試集的圖片的名字字符(不包括后綴)是其他長度,請改為你需要的長度(官方的默認的長度是6)

其中,6 表示測試集圖片的名字字符長度,需要根據你的實際情況進行修改。例如,圖片名為“001.jpg”,則上面的 6 就應該改為 3。因此,為了測試方便,建議測試集所有圖片的名字字符長度最好是一致的。?

3. 重新編譯?

修改完 detector.c 之后,回到 darknet 目錄下,重新使用 make 命令進行重編譯。

$?make

二、創建測試集?

其實測試集我們在訓練 yolov3 模型的時候已經創建了。打開 darknet 目錄下的 2007_test.txt 文件:

這里面這號存放的是當時我們劃分的測試集圖片的實際路徑。注意,這里可以看到每張測試集圖片名字字符長度是 17,故 strncpy(name,q,17) 這樣。

三、批量測試?

在 darknet 目錄下,進入 backup 目錄,查看你在訓練的時候的到的最終模型的名字。

例如,最終得到的模型是“yolov3-voc_final.weights”。?

在 darknet 目錄下,輸入下面的批量測試命令:

./darknet?detect?cfg/yolov3-voc.cfg?backup/yolov3-voc_final.weights

當終端顯示“Enter Image Path: ”時,輸入“2007_test.txt”的絕對路徑,例如:

$?Enter?Image?Path:?/home/xny/yolov3/darknet/2007_test.txt

之后就開始進行批量測試了,生成的圖片在 /home/xny/yolov3/darknet/predictions/out/ 目錄下。?

好了,關于 YOLOv3 詳細的測試步驟就介紹到這里。上一篇的訓練教程加上這一篇的測試教程基本能滿足大家對自己的數據集進行訓練和測試的需求了,趕快試一試吧~?


推薦閱讀

(點擊標題可跳轉閱讀)

干貨 | 公眾號歷史文章精選

我的深度學習入門路線

我的機器學習入門路線圖

重磅

AI有道年度技術文章電子版PDF來啦!

掃描下方二維碼,添加?AI有道小助手微信,可申請入群,并獲得2020完整技術文章合集PDF(一定要備注:入群?+ 地點 + 學校/公司。例如:入群+上海+復旦。?

長按掃碼,申請入群

(添加人數較多,請耐心等待)

感謝你的分享,點贊,在看三??

總結

以上是生活随笔為你收集整理的从零开始带你一步一步使用 YOLOv3 测试自己的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。