ScaledYOLOv4实践:手把手教物体检测——ScaleYOLOv4-large

简介: ScaledYOLOv4实践:手把手教物体检测——ScaleYOLOv4-large

目录


摘要


训练


制作数据集


下载代码和权重文件


增加Mish函数


准备训练


测试


摘要

YOLOv4-large是专为云端GPU而设计的一种架构,主要目的在于获得更好的目标检测精度。作者基于前述分析设计了一个全尺寸的YOLOv4-P5并扩展得到了YOLOv4-P6和YOLOv4-P7。其对应的网络结构示意图见下图。

tt.png

作者通过实验发现:YOLOv4-P6(宽度缩放因子1)可以达到30fps的实时处理性能;YOLOv4-P7(宽度缩放因子1.25)可以达到15fps的处理速度。


代码:https://github.com/WongKinYiu/PyTorch_YOLOv4

Paper:https://arxiv.org/abs/2011.08036

论文思路:


通过对目前最先进的物体检测器的分析,我们发现YOLOv4[1]的主干CSPDarknet53几乎匹配所有通过网络架构搜索技术得到的最优架构特征。


CSPDarknet53的深度、瓶颈比、龄期间宽度生长比分别为65、1和2。因此,我们开发了基于YOLOv4的模型缩放技术,提出了scale -YOLOv4。提出的缩放yolov4具有出色的性能,如下图所示:


tt.png

scale - yolov4的设计过程如下


首先对yolov4进行了重新设计,提出了YOLOv4-CSP,然后基于onYOLOv4-CSP开发了scale - yolov4。


在提出的scale - yolov4中,本文讨论了线性缩放模型的上界和下界,并分别分析了小模型和大模型缩放时需要注意的问题。因此,我们能够系统地开发YOLOv4-large和yolov4 -tiny模型。Scaled-YOLOv4能够在速度和精度之间实现最好的平衡,能够在15 fps、30 fps和60fps的影片以及嵌入式系统上进行实时对象检测。


我们总结了本文的工作:


1、设计了一种针对小模型的强大的模型缩放方法,系统地平衡了浅层CNN的计算代价和存储带宽;


2、设计一种简单有效的大型目标检测器缩放策略;


3、分析各模型缩放因子之间的关系,基于最优组划分进行模型缩放;


4、实验证实了FPN结构本质上是一种一次性结构;


5、利用上述方法开发yolov4 - tiny 和 yolo4v4 -large。


YOLOv4-large与其他模型对比试验

tt.png

训练

制作数据集

通过对ScaledYoloV4代码的分析,发现ScaledYoloV4的数据集合YoloV5的数据集是相同的。如果使用过YoloV5,就可以直接按照YoloV5的方法即可。


具体的代码可以参考我以前写的博文:


COCO转YoloV5数据集,适用于YoloV5、ScaledYoloV4


https://wanghao.blog.csdn.net/article/details/111472706

Win10 Labelme标注数据转为YOLOV5 训练的数据集

https://wanghao.blog.csdn.net/article/details/108865894

Win10环境下,将VOC数据集转为YOLOV5使用的数据集。

https://wanghao.blog.csdn.net/article/details/108782268

本例选用的Labelme标注的数据集。数据集地址:

https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/14003627

将制作好的数据集放在和ScaledYOLOv4-yolov4-large同级目录。

下载代码和权重文件

https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-large

https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-csp

https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-tiny

这个Scaled总共有三个模型,本文使用Yolov4-large,权重文件在Readme里面有链接,如果你是训练自己的数据集,就没有必要下载。

增加Mish函数

增加Mish函数有两种方法,如果需要使用预训练模型就只能用Readme中提供的方法,这个方法我在Win10环境中用的时候出现了问题,而且我使用自己的数据集,可以不使用预训练模型,所以我采用另一种方式,在程序中增加Mish函数。

打开models/common.py加入如下代码:

class Mish(torch.nn.Module):

   def __init__(self):

       super().__init__()

   def forward(self, x):

       x = x * (torch.tanh(torch.nn.functional.softplus(x)))

       return x

准备训练

在data文件夹下面增加voc.yaml,写入配置数据集的配置。

# train and val datasets (image directory or *.txt file with image paths)
train: ../VOC/images/train/  # 118k images
val: ../voc/images/val/  # 5k images
test: ../voc/images/test/  # 20k images for submission to https://competitions.codalab.org/competitions/20794
# number of classes
nc: 2
# class names
names: ['aircraft', 'oiltank']

然后打开train.py文件,在文件的上面加入


import os

os.environ['KMP_DUPLICATE_LIB_OK']='True'

记住一定要放在最上面。


然后修改参数


将weights设置为“”

parser.add_argument('--weights', type=str, default='', help='initial weights path')

将cfg设置为yolo4-p5的配置文件 parser.add_argument('--cfg', type=str, default='models/yolov4-p5.yaml', help='model.yaml path')

将数据集配置为我们刚才增加的voc.yaml parser.add_argument('--data', type=str, default='data/voc.yaml', help='data.yaml path')

4、根据电脑的情况调节batch-size

parser.add_argument('--batch-size', type=int, default=2, help='total batch size for all GPUs')

改完上面的参数就可以运行。


tt.png



目录
相关文章
|
编解码 缓存 并行计算
YOLOv5入门实践(4)——手把手教你训练自己的数据集
YOLOv5入门实践(4)——手把手教你训练自己的数据集
2215 0
YOLOv5入门实践(4)——手把手教你训练自己的数据集
|
4月前
|
数据可视化 Java Swift
Large Enough!Mistral Large 2开源!魔搭推理、微调最佳实战教程来啦!
Mistral宣布推出新一代旗舰机型 Mistral Large 2。与前代产品相比,Mistral Large 2 在代码生成、数学和推理方面的能力显著增强。它还提供了更强大的多语言支持和高级函数调用功能。
|
机器学习/深度学习 算法 数据库
R-CNN论文详解(入门目标检测必读)
R-CNN论文详解(入门目标检测必读)
R-CNN论文详解(入门目标检测必读)
|
机器学习/深度学习 人工智能 计算机视觉
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
18024 0
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
|
机器学习/深度学习 数据采集 算法
【OpenVI—论文解读系列】ICLR 2023 | 开源轻量人脸检测DamoFD
本文介绍我们被机器学习顶级国际会议ICLR 2023接收的论文 “DamoFD: Digging into Backbone Design on Face Detection" 论文链接:https://openreview.net/pdf?id=NkJOhtNKX91 开源代码:https://github.com/ly19965/EasyFace/tree/master/face_project/face_detection/DamoFD
950 2
|
编解码 人工智能 PyTorch
手把手教物体检测——EfficientDet
手把手教物体检测——EfficientDet
901 0
手把手教物体检测——EfficientDet
|
Java 开发工具 对象存储
PAI-AutoLearning 图像分类使用教程
PAI AutoLearning(简称PAI AL)自动学习支持在线标注、自动模型训练、超参优化以及模型评估。在平台上只需准备少量标注数据,设置训练时长即可得到深度优化的模型。同时自动学习PAI AL平台与EAS模型在线服务打通,一键完成模型部署。下面通过一个番茄(tomato)和黄瓜(cucumber)的图片分类示例来演示整个流程的实现具体操作实现步骤。
7823 0
PAI-AutoLearning 图像分类使用教程
|
机器学习/深度学习 人工智能 自然语言处理
机器学习《Machine Learning1》----机器学习经典总结:入门必读
机器学习《Machine Learning1》----机器学习经典总结:入门必读
126 0
|
自然语言处理 计算机视觉
一文读懂transformer(CV专享)
transformer在这两年大火,CV界广泛应用transformer模型,充分吸收其idea到自己的领域。考虑到transformer本是应用于NLP的论文,其中很多内容都形成了共识,因此在论文中并未提及,就好像CV中论文提到图像预处理使用center crop , color jitter,但不会详细介绍这两个,这就是CV领域的共识,其他领域的人看到这两个将会很困惑,作为CV中人读transformer会被很多共识内容所折磨,包括很多介绍transformer的博客知乎,都是站在NLP领域的角度写的,因此共识部分都是一笔带过,本文的出发点是要让CV人读得懂。
一文读懂transformer(CV专享)
|
XML 并行计算 Linux
手把手教物体检测——RFBNet
手把手教物体检测——RFBNet
117 0
手把手教物体检测——RFBNet
下一篇
无影云桌面