yolov3权重_YOLO从零开始:基于YOLOv3的行人检测入门指南

    0f18ae0be5cf4f561a2cb98fb76194ce.png

    本文全部内容和代码可从Github下载:

    pascal1129/yolo_person_detect​github.com
    • 本文采用markdown书写,知乎存在一定的排版bug,但Github的显示是正常的;
    • 本文会持续更新,由于代码放在Github中,所以请多关注Github的动态;
    • 本文主要针对初学者,如果有什么建议和想法,可以在Github issue和知乎文章评论里提出,我会尽快完善的;

    按照下述步骤可以实现一个效果较好的基于YOLOv3的行人检测系统

    本代码主要是针对YOLOv3的两个主流版本(AlexeyAB/darknet & pjreddie/darknet)的脚本辅助集合,主要用途如下:

    1. 将YOLOv3常用的网址和资料归纳整理了一下;
    2. 从VOC2007/VOC2012/COCO等数据集中提取出person类图片,并转换标注(使用VOC时默认保留了全部difficult=1的图片);
    3. 计算mAP正确率;
    4. 从实验的训练日志中提取出loss变化图

    效果对比

    YOLO_mine(只检测行人)

    b5cd604d3c79bf08bb4857cd05775985.png

    YOLO_pj(官版,全检测)

    633851904005b3fd2fc47b4a71ee422e.png

    文件结构

    1. yolo_person_detect
    2. |
    3. │ README.md
    4. ├─make_yolo_dataset
    5. │ │ helmet_to_yolo.py # 某次比赛用到的转换代码
    6. │ │ show_voc_xml.py # 可视化VOC数据集
    7. │ │ show_yolo_label.py # 可视化YOLO数据集
    8. │ │ xml2json.py #
    9. │ │ coco_to_yolo.py # COCO --> YOLO
    10. │ │
    11. │ ├─YOLO_VOC2007 # VOC2007
    12. │ │ extract_person.py # 从VOC2007数据集中提取person图片
    13. │ │ voc_label.py # 将提取到的person图片转为YOLO格式
    14. │ │
    15. │ └─YOLO_VOC2007_2012 # VOC2007 + VOC2012
    16. │ extract_person_2007.py
    17. │ extract_person_2012.py
    18. │ voc_label.py
    19. ├─yolo_compute_mAP_on_VOC2007 # 在VOC2007上测试性能
    20. │ reval_voc_py3.py
    21. │ voc_eval_py3.py
    22. └─yolo_loss_analyse
    23. │ analyse.py # 训练过程可视化代码
    24. │ result.png # 可视化训练过程
    25. └─loss
    26. train7-loss.txt # 示例训练日志

    官方Demo运行

    • 下载源代码、预训练权重
    1. git clone https://github.com/AlexeyAB/darknet.git
    2. cd darknet/
    3. wget https://pjreddie.com/media/files/yolov3.weights
    • 修改Makefile并编译,可以加上 -j8 等参数设定多CPU编译
    1. vim Makefile
    2. make

    注意:OpenCV版本号亲测3.40可用,但是3.41不可用,可参见YOLOv3的Darknet在OpenCV下编译出错填坑

    • 试运行图片检测demo
    ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
    • 试运行视频检测demo
    ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>

    数据集准备

    处理时,默认所有的train = train+val,不区分二者,2007单独还有个test

    0、下载VOC2007+2012数据集

    下载数据集

    1. wget <http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar>
    2. wget <http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar>
    3. wget <http://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar>

    解压缩

    1. tar xvf VOCtrainval_06-Nov-2007.tar
    2. tar xvf VOCtest_06-Nov-2007.tar
    3. tar xvf VOCtrainval_11-May-2012.tar

    1、通过extract_person.py提取含人数据

    分别运行2007和2012的提取代码

    2、通过voc_label.py转化voc数据格式为yolo支持的格式

    会在脚本所在文件夹产生相应的txt文本,存储数据集地址信息:

    1. 2007_train.txt
    2. 2007_test.txt
    3. 2012_train.txt

    可根据情况进行配置,比如说不想要测试集,那就整合下训练集、测试集:

    cat 2007_train.txt 2012_train.txt > train.txt

    配置文件

    0、下载源代码,下载预训练权重

    1. git clone https://github.com/AlexeyAB/darknet.git
    2. wget https://pjreddie.com/media/files/darknet53.conv.74

    1、配置Makefile

    2、配置cfg/voc.data

    1. classes= 1
    2. train = /home/pascal/person_data2/train.txt
    3. valid = /home/pascal/person_data2/2007_test.txt
    4. names = data/voc.names
    5. backup = backup

    3、配置data/voc.names

    person

    4、新建backup文件夹

    mkdir backup

    5、配置cfg/yolov3-voc.cfg

    1. batch, sub按需修改
    2. 一共三个YOLO层,均需要修改:
    3. classes=1
    4. filters=18 3*(1+1+4)=18
    5. # filters=(classes + coords + 1)*<number of mask>

    6、make编译

    7、开始训练,并留下日志

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg ../darknet53.conv.74 -gpus 0,1 | tee -a helmet1.txt

    8、恢复训练

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup -gpus 0,1 | tee -a train7.log

    9、单张图片测试(需要将batch、subvision均修改为1)

    ./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights test_data/p0.jpg

    10、性能检测

    计算mAp

    ./darknet detector map cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_80172.weights

    计算recall(2097张的结果)

    ./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights

    VOC2007test

    1. mkdir results
    2. #(PJ版本需要这一步)
    3. # (会在/results生成默认的comp4_det_test_person.txt,这是在VOC2007 test上的结果)
    4. ./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights -gpu 0,1
    5. #在 https://github.com/AlexeyAB/darknet/tree/master/scripts 下载voc_eval_py3.py reval_voc_py3.py ,在./执行
    6. python reval_voc_py3.py output_dir='./'

    训练常用指令

    训练:加上了tee指令把训练日志保存到txt文本

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1 |tee -a train7.txt

    恢复训练

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup -gpus 0,1 tee -a train7.txt

    测试

    ./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_50000.weights ../test_data/p2.jpg

    VOC数据集格式

    以上述VOC2007+VOC2012数据集为例,以下均为处理过的数据集:

    1. VOCdevkit/
    2. ├── VOC2007
    3. │ ├── Annotations 原始的VOC标注信息
    4. │ ├── ImageSets
    5. │ │ └── Main VOC的类标签,和人为提取的样本索引
    6. │ ├── JPEGImages 图片文件夹
    7. │ └── labels VOC-->YOLO格式的标注信息
    8. └── VOC2012
    9. ├── Annotations
    10. ├── ImageSets
    11. │ └── Main
    12. ├── JPEGImages
    13. └── labels

    VOC的xml格式

    核心部分如下:

    1. <annotation>
    2. <object>
    3. <name>person</name>
    4. <difficult>0</difficult>
    5. <bndbox>
    6. <xmin>xxx</xmin>
    7. <ymin>xxx</ymin>
    8. <xmax>xxx</xmax>
    9. <ymax>xxx</ymax>
    10. </bndbox>
    11. </object>
    12. </annotation>

    VOC的图片格式

    行列分布同pillow.Image,先行后列

    COCO数据集格式

    数据集格式

    1. COCO
    2. ├── annotations
    3. ├── filelist 训练图片位置
    4. └── train2017
    5. ├── JPEGImages 图片
    6. └── labels 生成的YOLO格式标签

    COCO数据集下载

    COCO-->YOLO格式转换,代码包含了操作介绍

    数据集统计

    0fbb211e0bfe481e0fa48b067ede6beb.png

    * 括号里面为person类图片数量

    训练过程

    数据集:VOC2007+VOC2012+COCO2017

    硬件环境:GTX1080ti*2, Ubuntu16.04, CUDA9

    训练迭代数:8w iters

    训练技巧:参见how-to-train-to-detect-your-custom-objects

    1630c89d5372d3be7ed44f56f754a4c6.png

    配置:batch=64/16,总计8w次迭代,在原来的5w次之后,追加2w次0.001和1w次0.0001,0.00001 耗时:5h/万次迭代 结果:0.98

    eb40720a666e3f79f16ef14acabf488c.png

    参考资料

    yolov3训练的集大成者

    配置文件的设定参考

    YOLO官网

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值

    举报

    选择你想要举报的内容(必选)
    • 内容涉黄
    • 政治相关
    • 内容抄袭
    • 涉嫌广告
    • 内容侵权
    • 侮辱谩骂
    • 样式问题
    • 其他
    点击体验
    DeepSeekR1满血版
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回顶部