近期在項(xiàng)目中接觸到了darknet框架,通過學(xué)習(xí)其中的yoloV3蹈集,下面為本人的一些學(xué)習(xí)筆記及感悟亥鬓。
我電腦的配置為 :NVIDIA Version 430.40 ,CUDA 10.0 , CUDNN 7.4 ,GPU:GeForce GTX 1660 (5941MB) ,OPENCV 3.4
環(huán)境的安裝可以參考我上一篇文檔 http://www.reibang.com/p/ea8d69fa9cb1
- Git 下載 darknet資源包:https://github.com/AlexeyAB/darknet
- 下載完后到其目錄下 打開Makefile配置文件 進(jìn)行修改
GPU=1 卤妒,CUDNN=1 CUDNN_HALF=1 OPENCV=1 保存文件
3.直接進(jìn)行make操作
make
- 下載權(quán)重文件:
There are weights-file for different cfg-files (smaller size -> faster speed & lower accuracy:
-
yolov3-openimages.cfg
(247 MB COCO Yolo v3) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov3-openimages.weights -
yolov3-spp.cfg
(240 MB COCO Yolo v3) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov3-spp.weights -
yolov3.cfg
(236 MB COCO Yolo v3) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov3.weights -
yolov3-tiny.cfg
(34 MB COCO Yolo v3 tiny) - requires 1 GB GPU-RAM: https://pjreddie.com/media/files/yolov3-tiny.weights -
yolov2.cfg
(194 MB COCO Yolo v2) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov2.weights -
yolo-voc.cfg
(194 MB VOC Yolo v2) - requires 4 GB GPU-RAM: http://pjreddie.com/media/files/yolo-voc.weights -
yolov2-tiny.cfg
(43 MB COCO Yolo v2) - requires 1 GB GPU-RAM: https://pjreddie.com/media/files/yolov2-tiny.weights -
yolov2-tiny-voc.cfg
(60 MB VOC Yolo v2) - requires 1 GB GPU-RAM: http://pjreddie.com/media/files/yolov2-tiny-voc.weights -
yolo9000.cfg
(186 MB Yolo9000-model) - requires 4 GB GPU-RAM: http://pjreddie.com/media/files/yolo9000.weights
- 進(jìn)行 測(cè)試 圖片是視頻的運(yùn)行
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg //單張圖片進(jìn)行檢測(cè)
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights //多圖檢測(cè) 輸入圖片的路徑和名稱
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file> // 對(duì)視頻進(jìn)行檢測(cè)
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file > -out_filename result.mp4 //可以選擇輸出路徑和視頻名稱
- 項(xiàng)目所用的darknet文件在我的百度云盤上:https://pan.baidu.com/s/1mYbtaFi8T_PqvzhDUud79A
主修改的文件為yolo_console_dll.cpp配置文件
(1)系統(tǒng)環(huán)境:
gedit ~/.bashrc
export LD_LIBRARY_PATH=/home/yang/myenvirment_tool/AAB_darknet${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
LD_LIBRARY_PATH=/home/yang/myenvirment_tool/AAB_darknet/3rdparty/HK/lib/HCNetSDKCom${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
LD_LIBRARY_PATH=/home/yang/myenvirment_tool/AAB_darkne/3rdparty/HK/libt${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc
(2)修改Makefile文件
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0
HK_SDK=1
(3)修改yolo_console_dll.cpp
1.#define SERVER_IP "192.168.168.197" //設(shè)置服務(wù)器 佩捞。主機(jī)地址(自己的ip)
2.std::string filename= "web_camera"; // 直接賦值 為filename
3.const int numCap = 3; //設(shè)置開啟攝像頭的個(gè)數(shù)
4. input[0].m_CamDriver.InitCamera("192.168.***.**","admin","********");
input[0].occupied = true; 設(shè)計(jì)需要開啟的攝像頭具體的地址
5. const char *window_name[numCap] = {"0","1","2"}; //開啟攝像頭的編號(hào)
7選擇 開啟客戶端輸入 模式
(1)取消注釋 yolo_console_dll.cpp 的 #include SOCKET
(2)在client.cpp中將SERVER_IP改成本機(jī)地址
(3)在client.cpp 將 servaddr.sin_port = htons(8001) 改成和yolo_console_dll.cpp中的相同绞幌。
(4)在client.cpp所在文件夾,正常編譯g++ client.cpp -o client -std=c++11
(5)向客戶端發(fā)送命令 :
[{"Id":12,"Ip":"192.168.***.***","action":1,"status":0}]
其中Id為攝像頭編號(hào),action表示對(duì)該攝像頭要開啟(1)或者關(guān)閉(0),status表示該攝像頭之前的狀態(tài) 服務(wù)端返回的格式與客戶端相同
(6) 先運(yùn)行 系統(tǒng)的 ./uselib ,然后再重現(xiàn)新建終端 在client文件目錄下運(yùn)行 : ./client