yolov4论文解读和训练自己数据集

YOLOv4在目标检测领域展现出了显著的性能提升,尤其在小目标识别方面,相较于YOLOv3和EfficientDet系列,其平均精度(AP)和帧率(FPS)分别提高了10%和12%。在车轮识别数据集上的测试显示,YOLOv4不仅缩短了处理时间,还显著提升了识别准确率。
部署运行你感兴趣的模型镜像

前天YOLOv4终于问世——

YOLO v4 论文:https://arxiv.org/abs/2004.10934

YOLO v4 开源代码:GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )

效果相比YOLOv3和去年的EfficientDet系列提升明显。这里使用tensorflow model的测试图片对官方给出的COCO数据集训练的模型测试对比:

分别是YOLOv3和YOLOv4的测试结果,可以看到提升还是很明显的,特别是小目标的识别效果,不枉论文吹B的:

Improves YOLOv3’s AP and FPS by 10% and 12%, respectively

论文细节还在研究中,后面有空更新。我也第一时间使用YOLOv4训练了自己数据集。

具体的步骤和YOLOv3一模一样,需要下载backbone的权重:GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )中for yolov4.cfgyolov4-custom.cfg (162 MB)。

因为我没有梯子,能下载的兄弟请传个百度网盘分享交流。这里在网上只能找到别人分享的yolov4.weights文件,于是提取了yolov4.weights模型的backbone参数作为backbone部分的预训练模型。

训练自己数据集只需要修改yolov4-custom.cfg中三处的:

[convolutional]
size=1
stride=1
pad=1
filters=${3×(自己数据集类别+5)}  #例如COCO是3×(80+5)=255
activation=linear


[yolo]
mask = 3,4,5
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=${自己数据集类别}  #例如COCO是80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
scale_x_y = 1.1
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

详细准备工作参考YOLO: Real-Time Object Detection中Training YOLO on VOC章节。

准备好后既可以开始训练:

训练过程:

这里使用车轮识别数据集对比YOLOv3和YOLOv4:

ModelAP for BodyAP for WheelmAPtime
YOLOv30.9993222357070.882007265830.94066475076812.47s/532images
YOLOv40.9983582893070.9480248707260.97319158001612.00s/532images
YOLOv3 with Mosaic0.998070916970.8883387722710.94320484462113.00s /532 imags

可以看到,在完全相同的训练数据和测试数据集上,YOLOv4提升效果非常明显!更短的时间,到达好的识别效果,特别是小目标识别效果。对YOLOv3使用YOLOv4中的马赛克增强处理,对识别也有0.3%的提升,特别是小目标的识别上。

对恶劣条件下的车轮测试对比:

可以看到,YOLOv4相比YOLOv3提升非常明显,特别是小目标的识别效果。

YOLOv4网络结构

TensorRT模型对比

这里对比YOLOv3和YOLOv4在darknet和tensorrt模型下的实验:

modelframeworktimeGPU Mem
YOLOv3darknet27.5751809MiB
YOLOv3 - pruned 99%darknet6.446685MiB
YOLOv4darknet27.572000 ms1333MiB
YOLOv4tensorrt-fp3225 ms1145MiB
YOLOv4tensorrt-fp1610 ms721MiB

可以看到YOLOv4和YOLOv3的推理速度相差不大,实际显存消耗降低明显,tensorrt可以有效降低显存消耗和推理时间。

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### YOLOv5 详细解读 YOLOv5 是 YOLO 系列目标检测模型的第五代实现,它在速度与精度之间取得了良好的平衡,适用于多种实际应用场景。YOLOv5 提供了多个版本,包括 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l YOLOv5x,这些模型之间的主要区别在于网络的深度(depth_multiple)宽度(width_multiple),而整体的网络结构保持一致。用户可以根据计算资源精度需求选择合适的模型版本进行调用训练。 #### 技术原理 YOLOv5 延续了 YOLO 系列将目标检测视为回归问题的思想,将图像划分为网格单元,每个单元负责预测边界框(bounding box)类别概率。YOLOv5 的预测过程快速且高效,因为它直接在图像上进行端到端推理,无需复杂的预处理或后处理步骤。此外,YOLOv5 模型具有较强的泛化能力,相比传统的目标检测方法如 DPM R-CNN,YOLOv5 在多种数据集场景下表现出更优的性能[^2]。 然而,尽管 YOLOv5 在速度上具有显著优势,其检测精度仍然略逊于一些基于区域提议(region proposal)的先进模型。不过,YOLOv5 的设计目标是在实际应用中提供一个快速且足够准确的解决方案,因此它在嵌入式系统、实时视频分析移动端部署等场景中得到了广泛应用。 #### 模型结构 YOLOv5 的网络结构主要包括以下几个部分: 1. **Backbone**:YOLOv5 使用改进的 CSPDarknet53 作为主干网络,用于提取图像特征。CSP(Cross Stage Partial)结构可以减少计算量并提升模型的泛化能力。 2. **Neck**:YOLOv5 采用了 PANet(Path Aggregation Network)作为特征金字塔网络,用于融合不同层级的特征图,从而提升模型对不同尺度目标的检测能力。 3. **Head**:YOLOv5 的检测头部分负责输出最终的边界框坐标类别概率。它使用锚框(anchor boxes)机制来预测目标的位置,并通过分类器预测目标的类别。 以下是一个简化版的 YOLOv5 网络结构定义代码片段: ```python # 示例:YOLOv5 网络配置(简化版) class YOLOv5(nn.Module): def __init__(self, num_classes=80): super(YOLOv5, self).__init__() self.backbone = CSPDarknet53() self.neck = PANet() self.head = DetectionHead(num_classes=num_classes) def forward(self, x): features = self.backbone(x) fused_features = self.neck(features) outputs = self.head(fused_features) return outputs ``` #### 训练与推理流程 在训练过程中,YOLOv5 使用多尺度训练策略,即在每次训练迭代中随机选择输入图像的尺寸,从而增强模型对不同尺度目标的适应能力。损失函数由分类损失、定位损失置信度损失三部分组成,通常使用 CIoU 损失来优化边界框的回归。 在推理阶段,YOLOv5 会输出多个边界框及其对应的类别概率。通过非极大值抑制(NMS)算法去除重叠度较高的冗余预测框,最终得到每个目标的最佳检测结果。 --- ###
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值