目录
摘要
训练
创建数据集
下载代码和权重文件
增加Mish函数
准备培训
测试
概述YOLOv4-large是专门为云GPU设计的体系结构,主要目的是提高目标检测精度。 作者在前述分析的基础上设计并扩展了全尺寸YOLOv4-P5,得到YOLOv4-P6和YOLOv4-P7。 其对应的网络结构示意图如下图所示。
作者通过实验发现,YOLOv4-P6 (宽度定标因子1 )可以达到30fps的实时处理性能,YOLOv4-P7 (宽度定标因子1.25 )可以达到15fps的处理速度。
代码: https://github.com/wongkinyiu/py torch _ yolo v4
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与其他型号的比较试验
/p> 训练 制作数据集通过对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 imagesval: ../voc/images/val/ # 5k imagestest: ../voc/images/test/ # 20k images for submission to https://competitions.codalab.org/competitions/20794# number of classesnc: 2# class namesnames: ['aircraft', 'oiltank']然后打开train.py文件,在文件的上面加入
import osos.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') 改完上面的参数就可以运行。训练完成后可以在runs看到训练的结果。
测试打开test.py,修改参数的配置
parser.add_argument('--weights', nargs='+', type=str, default='runs/exp0/weights/best.pt', help='model.pt path(s)')parser.add_argument('--data', type=str, default='data/voc.yaml', help='*.data path')parser.add_argument('--batch-size', type=int, default=2, help='size of each image batch')parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.8, help='object confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.65, help='IOU threshold for NMS') parser.add_argument('--task', default='test', help="'val', 'test', 'study'")按照上面的参数配置,就可以测试了,测试完成后,回看到测试结果
打开detect.py可以测试图片,也可以打开摄像头测试,通过修改配置参数就可以实现。
1、修改weights路径。
parser.add_argument('--weights', nargs='+', type=str, default='runs/exp9/weights/best.pt', help='model.pt path(s)') 2、修改source参数,这个参数支持单张图片,图片文件夹和摄像头三种,如果需要设置为为0就可以调用摄像头。设置为图片的路径就可测试单张的图片。parser.add_argument('--source', type=str, default='inference/images', help='source') # file/folder, 0 for webcam 3、输出结果的存放位置。parser.add_argument('--output', type=str, default='inference/output', help='output folder') # output folder下面是部分测试结果:
调试代码和数据集下载地址:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/14004297
参考:
https://zhuanlan.zhihu.com/p/298584493