机器之心报道

作者:陈萍

距离 YOLO v4 的推出,已经过去 5 个多月。YOLO 框架采用 C 语言作为底层代码,这对于惯用 Python 的研究者来说,实在是有点不友好。因此网上出现了很多基于各种深度学习框架的 YOLO 复现版本。近日,就有研究者在 GitHub 上更新了基于 PyTorch 的 YOLOv4。

从今年 4 月 YOLOv4 发布后,对于这个目标检测框架,问的最多的问题或许就是:「有没有同学复现 YOLOv4 的, 可以交流一下么」。由于原版 YOLO 使用 C 语言进行编程,光凭这一点就让不少同学望而却步。网上有很多基于 TF/Keras 和 Caffe 等的复现版本,但不少项目只给了代码,并没有给出模型在 COCO、PASCAL VOC 数据集上的训练结果。

近日,有研究者在 GitHub 上开源了一个项目:基于 PyTorch 深度学习框架的 YOLOv4 复现版本,该版本基于 YOLOv4 作者给出的实现 AlexeyAB/darknet,并在 PASCAL VOC、COCO 和自定义数据集上运行。

项目地址:https://github.com/argusswift/YOLOv4-PyTorch

除此以外,该项目还向主干网络添加了一些有用的注意力方法,并实现了 mobilenetv2-YOLOV4 和 mobilenetv3-YOLOV4。

attentive YOLOv4

该项目向主干网络添加了一些注意力方法,如 SEnet、CBAM。

SEnet (CVPR 2017)

CBAM (CVPR 2018)

mobilenet YOLOv4

该研究还实现了 mobilenetv2-YOLOV4 和 mobilenetv3-YOLOV4(只需更改 config/yolov4_config.py 中的 MODEL_TYPE 即可)。

下表展示了 mobilenetv2-YOLOV4 的性能结果:

现在我们来看该项目的详细内容和要求。

环境要求

  • Nvida GeForce RTX 2080TI

  • CUDA10.0

  • CUDNN7.0

  • windows 或 linux 系统

  • python 3.6

特性

  • DO-Conv (https://arxiv.org/abs/2006.12030) (torch>=1.2)

  • Attention

  • fp_16 training

  • Mish

  • Custom data

  • Data Augment (RandomHorizontalFlip, RandomCrop, RandomAffine, Resize)

  • Multi-scale Training (320 to 640)

  • focal loss

  • CIOU

  • Label smooth

  • Mixup

  • cosine lr

安装依赖项

运行脚本安装依赖项。你需要提供 conda 安装路径(例如 ~/anaconda3)以及所创建 conda 环境的名称(此处为 YOLOv4-PyTorch)。

pip3 install -r requirements.txt --user

需要注意的是:安装脚本已在 Ubuntu 18.04 和 Window 10 系统上进行过测试。如果出现问题,请查看详细的安装说明:https://github.com/argusswift/YOLOv4-PyTorch/blob/master/INSTALL.md。

准备工作

1. git 复制 YOLOv4 库

准备工作的第一步是复制 YOLOv4。

git clone github.com/argusswift/YOLOv4-PyTorch.git

然后更新配置文件「config/yolov4_config.py」中「PROJECT_PATH」。

2. 数据集准备

该项目准备了 Pascal VOC 和 MSCOCO 2017 数据集。其中 PascalVOC 数据集包括 VOC 2012_trainval、VOC 2007_trainval 和 VOC2007_test,MSCOCO 2017 数据集包括 train2017_img、train2017_ann、val2017_img、val2017_ann、test2017_img、test2017_list。

PascalVOC 数据集下载命令:

# Download the data.cd $HOME/data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar# Extract the data.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar

MSCOCO 2017 数据集下载命令:

 #step1: download the following data and annotation  2017 Train images [118K/18GB]  2017 Val images [5K/1GB]  2017 Test images [41K/6GB]  2017 Train/Val annotations [241MB]  #step2: arrange the data to the following structure  COCO  ---train  ---test  ---val  ---annotations

在数据集下载好后,需要进行以下操作:

  • 将数据集放入目录,更新 config/yolov4_config.py 中的 DATA_PATH 参数。

  • (对于 COCO 数据集)使用 coco_to_voc.py 将 COCO 数据类型转换为 VOC 数据类型。

  • 转换数据格式:使用 utils/voc.py 或 utils/coco.py 将 pascal voc *.xml 格式(或 COCO *.json 格式)转换为 *.txt 格式(Image_path xmin0,ymin0,xmax0,ymax0,class0 xmin1,ymin1,xmax1,ymax1,class1 ...)。

3. 下载权重文件

1)darknet 预训练权重:yolov4(https://drive.google.com/file/d/1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT/view)。

2)Mobilenet 预训练权重:

mobilenetv2:(https://pan.baidu.com/share/init?surl=sjixK2L9L0YgQnvfDuVTJQ,提取码:args);

mobilenetv3:(https://pan.baidu.com/share/init?surl=75wKejULuM0ZD05b9iSftg,提取码:args)。

3)在根目录下创建 weight 文件夹,将下载好的权重文件放到 weight / 目录下。

4)训练时在 config/yolov4_config.py 中设置 MODEL_TYPE。

4. 转换成自定义数据集(基于自定义数据集进行训练)

1)将自定义数据集的图片放入 JPEGImages 文件夹,将注释文件放入 Annotations 文件夹。

2)使用 xml_to_txt.py 文件将训练和测试文件列表写入 ImageSets/Main/*.txt。

3)转换数据格式:使用 utils/voc.py 或 utils/coco.py 将 pascal voc *.xml 格式(或 COCO *.json 格式)转换为 *.txt 格式(Image_path xmin0,ymin0,xmax0,ymax0,class0 xmin1,ymin1,xmax1,ymax1,class1 ...)。

训练

运行以下命令开始训练,详情参见 config / yolov4_config.py。训练时应将 DATA_TYPE 设置为 VOC 或 COCO。

CUDA_VISIBLE_DEVICES=0 nohup python -u train.py  --weight_path weight/yolov4.weights --gpu_id 0 > nohup.log 2>&1 &

它还支持 resume 训练,添加 --resume,使用以下命令即可自动加载 last.pt。

CUDA_VISIBLE_DEVICES=0 nohup python -u train.py  --weight_path weight/last.pt --gpu_id 0 > nohup.log 2>&1 &

检测

修改检测图像路径:DATA_TEST=/path/to/your/test_data# your own images。

for VOC dataset:
CUDA_VISIBLE_DEVICES=0 python3 eval_voc.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval --mode det
for COCO dataset:
CUDA_VISIBLE_DEVICES=0 python3 eval_coco.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval --mode det

结果可以在 output / 中查看,如下所示:

评估(Pascal VOC 数据集)

修改评估数据集路径:DATA_PATH=/path/to/your/test_data # your own images

for VOC dataset:
CUDA_VISIBLE_DEVICES=0 python3 eval_voc.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval -

评估(COCO 数据集)

修改评估数据集路径:DATA_PATH=/path/to/your/test_data # your own images

CUDA_VISIBLE_DEVICES=0 python3 eval_coco.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval --mode valtype=bbox
Running per image evaluation...      DONE (t=0.34s).
Accumulating evaluation results...   DONE (t=0.08s).Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.438 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.607 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.469 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.253 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.486 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.567 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.342 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.571 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.632 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.458 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.691 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.790

可视化热图

在 val_voc.py 中设置 showatt=Ture,网络即可输出热图。

for VOC dataset:
CUDA_VISIBLE_DEVICES=0 python3 eval_voc.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval
for COCO dataset:
CUDA_VISIBLE_DEVICES=0 python3 eval_coco.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval

在 output / 中可以查看热图,如下所示:

© THE END

转载请联系 机器之心 公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

PyTorch版YOLOv4更新了,不仅适用于自定义数据集,还集成了注意力和MobileNet相关推荐

  1. Pytorch版YOLOv4训练步骤(二)

    想使用YOLOv4,参考argusswift博主的文章逐步实现了一下.从VOC到自己的数据集,记录一下过程. 这是第二篇,记录了使用自建数据集训练和测试的过程.上一篇记录了从代码下载.环境配置到使用V ...

  2. Pytorch版deeplabv3+环境配置训练自己的数据集

    这个很不错:https://blog.csdn.net/qq_39056987/article/details/106455828     [windows10]使用pytorch版本deeplabv ...

  3. YOLOV1详解——Pytorch版

    YOLOV1详解--Pytorch版 1 YOLOV1 1 数据处理 1.1 数据集划分 1.2 读入xml文件 1.3 数据增强 2 训练 2.1 Backbone 2.2 Loss 2.3 tra ...

  4. 我的世界租赁服务器维护怎么重新刷新,《我的世界》【PC】版大更新!租赁服购买/续租功能,自定义头像功能已开启!...

    原标题:<我的世界>[PC]版大更新!租赁服购买/续租功能,自定义头像功能已开启! 随着今日<我的世界>手游安卓版限号不删档测试的到来 <我的世界>PC版的更新也在 ...

  5. 【动手学深度学习PyTorch版】6 权重衰退

    上一篇移步[动手学深度学习PyTorch版]5 模型选择 + 过拟合和欠拟合_水w的博客-CSDN博客 目录 一.权重衰退 1.1 权重衰退 weight decay:处理过拟合的最常见方法(L2_p ...

  6. PyTorch 版 EfficientDet 比官方 TF 实现快 25 倍?这个 GitHub 项目数天狂揽千星

    来源:机器之心 本文约3646字,建议阅读8分钟. 本文介绍在 Github 项目中,开发者 zylo117 开源了 PyTorch 版本的 EfficientDet,速度比原版高 20 余倍.如今, ...

  7. PyTorch版EfficientDet比官方TF实现快25倍?这个GitHub项目数天狂揽千星

    点上方蓝字视学算法获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :机器之心 EfficientDe ...

  8. 我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!

    大家好,我是红色石头! 在上三篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 我用 PyTorch ...

  9. 【深度学习】我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!

    在上三篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 我用 PyTorch 复现了 LeNet-5 ...

最新文章

  1. 报名 | Sven Travis教授设计与人工智能思享会
  2. pip install 报错:Versioning for this project requires either an sdist tarball, ...
  3. java crontab_(定时任务)crontab和cron 的用法
  4. python类、模块、包
  5. SmartImageView框架的使用
  6. php图片传入及改名代码,WordPress添加媒体中文名图片上传改名(优化版)
  7. 浪潮as5300技术方案_混闪存储AS5300G5
  8. ORA-01940 无法删除当前已连接的用户之解决方案
  9. Gradle系列(三):项目实践
  10. Ubuntu 系统入门
  11. MariaDB安装1,2
  12. 领域应用 | 到底什么时候使用图数据库?
  13. 汶川地震一加一援助计划倡议书
  14. snapchat_机器中的幽灵:Snapchat不是移动优先的-完全是另一回事
  15. ArcGIS水文分析实战教程(12)河网分级流程
  16. ElementUI:定制日历Calendar
  17. 学习《自己动手写网络爬虫》之记录2
  18. python编程游戏-Python游戏趣味编程
  19. [转]伽利略卫星导航系统2019年7月14日起的宕机事件
  20. NDN助力网络5.0时代

热门文章

  1. 史上世界上最惨烈的几次股灾!
  2. 【组队学习】【28期】R语言数据科学
  3. python解析json
  4. 程序员千万不要选全栈开发
  5. 赠书 | 新手指南——如何通过HuggingFace Transformer整合表格数据
  6. 偷天换日,逼真的天空置换算法
  7. 助力企业抗疫,360金融推出免费AI语音机器人
  8. 被追捧为“圣杯”的深度强化学习已走进死胡同
  9. 《庆余年》值得一看吗?Python告诉你谁在关注 | CSDN原力计划
  10. 什么限制了GNN的能力?首篇探究GNN普适性与局限性的论文出炉!