基本參考自這篇文章(http://blog.csdn.net/ma3252788/article/details/74659230),主要用來記錄下自己遇到的問題
根據@赤戰約風 的帖子做如下修改可以使其只顯示人這個類別
一.修改源代碼
cfg/coco.data
classes= 1 #修改成1 train = /home/pjreddie/data/coco/trainvalno5k.txt valid = coco_testdev #valid = data/coco_val_5k.list names = data/coco.names backup = /home/pjreddie/backup/ eval=coco
src/detector.c
void run_detector(int argc, char **argv)//該函數中,倒數第三行.line=542 int classes = option_find_int(options, "classes", 1);//最后一個參數修改成1 void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh)函數中 draw_detections(im, l.w*l.h*l.n, thresh, boxes, probs, names, alphabet, 1); //最后一個參數修改成1。line=481
二.重新編譯和測試
1.重新編譯
make clean make
2.測試
./darknet detector test cfg/coco.data cfg/yolo.cfg yolo.weights data/dog.jpg
這樣的修改其實還是有點麻煩的,參考
yangshun8889大神的回答,其實還可以這樣:
我假設你使用的是VOC.name, 在VOC中,car對應着6, person對應着14,然后修改代碼。在draw_detections()函數中第一個for循環int class = max_index(probs[i], classes);代碼后面添加if(class!=6 && class!=14){continue;} 這樣就可以檢測人和車了。
參考鏈接:
http://blog.csdn.net/u012235003/article/details/54576974
https://groups.google.com/d/msg/darknet/9Geu1zebfxo/rt2zLVpVAwAJ
我進行修改的時候,應該是yolo作者修改了代碼以及代碼結構,detector.c並不存在src目錄下,而是在example目錄下。到example目錄下修改效果相同, 但很遺憾的是修修改前與修改后雖然識別種類發生了變化,但是運行時間並沒有變