下载样例 opencv- yolo3代码雪人检测处理。
git clone https://github.com/BillyLearn/opecv-yolo3-snowman.git
下载数据集, 并拆分
-
安装 awscli
pip3 iinstall awscli
-
获取csv 文件
wget https:
//storage
.googleapis.com/openimages/2018_04/class-descriptions-boxable
.csvwget https:
//storage
.googleapis.com/openimages/2018_04/train/train-annotations-bbox
.csv -
移动上面的样例代码与这两个csv文件,使它们在同一个文件夹之下。
-
下载图片数据集
python3 getDataFromOpenImages_snowman.py
图像被下载到 JPEGImages 文件夹中,并且相应的标签文件被写入 labels 文件夹中。 该下载将在539张图像上获得770个雪人实例。 下载可能需要一个小时左右,具体时间取决于互联网速度。
- 拆分数据集,训练和测试数据。
python3 splitTrainAndTest.py JPEGImages
将数据拆分为训练(90%)和测试集(10%),并生成两个文件 snowman_train.txt 和 snowman_test.txt
配置DarkNet
参考 Yolo官网
先安装依赖环境(可选)
openCV: 参考教程
cuda: 参考教程
-
下载darkNet 源码:
git clone https://github.com/pjreddie/darknet
cd darknet -
修改代码以定期保存模型文件
vim examples/detector.c
if(i%10000==0 || (i < 1000 && i%100 == 0)){
to
if(i%1000==0 || (i < 2000 && i%200 == 0)){ -
更改Makefile 文件
vim Makefile
如果用GPU运行:
GPU = 1
如果安装了cudnn:
CUDNN=1
如果安装了opencv:
OPENCV =1
如果怎么都没安装,只是用CPU运行,则不用修改Makefile文件
-
编译
make
-
如果还想再修改Makefile
make clean
vim Makefile
make
-
下载预训练 模型, 就放在当前 darknet 文件夹下
wget https://pjreddie.com/media/files/darknet53.conv.74
开始训练模型
-
在雪人样例代码中,修改 darknet.data文件
classes = 1 train = snowman_train.txt valid = snowman_test.txt names = classes.names backup = weights/
对应的文件路径配置,找到对应的位置存放。
-
可以修改超参数配置 darknet-yolov3.cfg
[net] # Testing # batch=1 # subdivisions=1 # Training batch=64 subdivisions=32
这里我把subdivisions 修改为32
-
开始训练
./darknet detector train ./darknet.data ./darknet-yolov3.cfg ./darknet53.conv.74 > ./train.log
对应的文件夹对应的位置
-
可以查看训练日志
grep “avg” train.log
下面是我的训练过程. 可以看到会越来越收敛。
-
如果想观察loss趋势图
python3 plotTrainLoss.py train.log
测试模型
-
修改样例代码 object_detection_yolo.py 的配置路径
modelConfiguration = “/data-ssd/sunita/snowman/darknet-yolov3.cfg”;
modelWeights = “/data-ssd/sunita/snowman/darknet-yolov3_final.weights”;to
modelConfiguration = “darknet-yolov3.cfg”;
modelWeights = “./weights/darknet-yolov3_600.weights”; -
修改注释darknet-yolov3.cfg, 以便测试
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=32
width=416
height=416
-
测试图片, 可从网上随意找一张雪人的照片拿来测试
python object_detection_yolo.py --image=snowmanImage.png
snowmanImage.jpg
snowmanImage_yolo_out_py.jpg
参考资料
https://pjreddie.com/darknet/yolo/
https://www.learnopencv.com/training-yolov3-deep-learning-based-custom-object-detector/
https://blog.youkuaiyun.com/new_delete_/article/details/84797041
https://zhuanlan.zhihu.com/p/35490655