近期在项目中接触到了darknet框架,通过学习其中的yoloV3,下面为本人的一些学习笔记及感悟。
我电脑的配置为 :NVIDIA Version 430.40 ,CUDA 10.0 , CUDNN 7.4 ,GPU:GeForce GTX 1660 (5941MB) ,OPENCV 3.4
环境的安装可以参考我上一篇文档 https://www.jianshu.com/p/ea8d69fa9cb1
- Git 下载 darknet资源包:https://github.com/AlexeyAB/darknet
- 下载完后到其目录下 打开Makefile配置文件 进行修改
GPU=1 ,CUDNN=1 CUDNN_HALF=1 OPENCV=1 保存文件
3.直接进行make操作
make
- 下载权重文件:
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
- 进行 测试 图片是视频的运行
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg //单张图片进行检测
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights //多图检测 输入图片的路径和名称
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file> // 对视频进行检测
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file > -out_filename result.mp4 //可以选择输出路径和视频名称
- 项目所用的darknet文件在我的百度云盘上:https://pan.baidu.com/s/1mYbtaFi8T_PqvzhDUud79A
主修改的文件为yolo_console_dll.cpp配置文件
(1)系统环境:
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" //设置服务器 。主机地址(自己的ip)
2.std::string filename= "web_camera"; // 直接赋值 为filename
3.const int numCap = 3; //设置开启摄像头的个数
4. input[0].m_CamDriver.InitCamera("192.168.***.**","admin","********");
input[0].occupied = true; 设计需要开启的摄像头具体的地址
5. const char *window_name[numCap] = {"0","1","2"}; //开启摄像头的编号
7选择 开启客户端输入 模式
(1)取消注释 yolo_console_dll.cpp 的 #include SOCKET
(2)在client.cpp中将SERVER_IP改成本机地址
(3)在client.cpp 将 servaddr.sin_port = htons(8001) 改成和yolo_console_dll.cpp中的相同。
(4)在client.cpp所在文件夹,正常编译g++ client.cpp -o client -std=c++11
(5)向客户端发送命令 :
[{"Id":12,"Ip":"192.168.***.***","action":1,"status":0}]
其中Id为摄像头编号,action表示对该摄像头要开启(1)或者关闭(0),status表示该摄像头之前的状态 服务端返回的格式与客户端相同
(6) 先运行 系统的 ./uselib ,然后再重现新建终端 在client文件目录下运行 : ./client