安装部署在Linux环境,windows环境安装部署见参考1
git clone https://github.com/pjreddie/darknet
cd darknet
make -j $(nproc)
获取已经训练好的权值:
wget https://pjreddie.com/media/files/yolov3.weights
1) 检测一张图片:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
2) 检测多张图片:
./darknet detect cfg/yolov3.cfg yolov3.weights
接下来需要手动输入图片路径
4) 设置检测时的阈值
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0
Darknet会输出检测的目标,对应的置信度和所用的时间。
因为Darknet编译的时候没有使用OpenCV,所以没法直接可视化展示检测结果,结果会保存在 predictions.png。
在CPU上处理每张图片大约需要6-12秒(官网上写的,怀疑怎么会这么慢)
1) 使用摄像头检测,使用 -c 可以更改不同的摄像头。
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
2)检测离线视频
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
解压后,将会得到一个VOCdevkit/文件夹
darknet 需要的数据格式,是每张图片对应一个txt,内容如下:
其中x,y,width,height是相对于图像width和height 的值。 可以使用scripts/voc_label.py脚本进行生成。
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
执行完上面脚本,标签文件会生成在VOCdevkit/VOC2007/labels/和VOCdevkit/VOC2012/labels/ 下:
ls
2007_test.txt VOCdevkit
2007_train.txt voc_label.py
2007_val.txt VOCtest_06-Nov-2007.tar
2012_train.txt VOCtrainval_06-Nov-2007.tar
2012_val.txt VOCtrainval_11-May-2012.tar
把2007数据和2012数据合并到一起
cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt
1 classes= 20
2 train = /train.txt
3 valid = 2007_test.txt
4 names = data/voc.names
5 backup = backup
filters=(classes+5)x3
如classes=1 时,filters=18
classes=2 时,filters=21
classes=80 时,filters=255
修改成自己想要训练的类别,每一类占一行
在ImageNet上预训练的网络模型:
wget https://pjreddie.com/media/files/darknet53.conv.74
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
# 训练时将控制台中的输出内容存储到.log文件中
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 2>&1 | tee xxx.log
# 多GPU训练,并且续训练
./darknet detector train -gpus 0,1,2,3 cfg/voc.data cfg/yolov3-voc.cfg xxx.backup 2>&1 | tee xxx.log
验证模型并计算AP值
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/VOC/yolov3-voc_final.weights -out "" -gpu 0 -thresh .5
注意:-out “” 双引号其实可以加内容的,但建议初次使用时不要加自定义内容,网上很多教程都加了,其实一点用都没有。之后可以再慢慢探索。
运行结束后,在results文件夹下每个类别会对应生成一个.txt文件。然后见参考2。
生成预测结果
./darknet detector valid
结果生成在
计算recall
./darknet detector recall
输出在stderr里,重定向时请注意。
RPs/Img、IOU、Recall都是到当前测试图片的均值。
detector.c中对目录处理有错误,可以参照validate_detector对validate_detector_recall最开始几行的处理进行修改。