目录
摘要
训练
制作数据集
下载代码和权重文件
增加Mish函数
准备训练
测试
摘要
YOLOv4-large是专为云端GPU而设计的一种架构,主要目的在于获得更好的目标检测精度。作者基于前述分析设计了一个全尺寸的YOLOv4-P5并扩展得到了YOLOv4-P6和YOLOv4-P7。其对应的网络结构示意图见下图。
作者通过实验发现: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具有出色的性能,如下图所示:
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与其他模型对比试验
训练
制作数据集
通过对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')
改完上面的参数就可以运行。