一文了解YOLO-v4目标检测
一、YOLO-v4主要做了什么?
通俗的讲,就是说这个YOLO-v4算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化,虽没有理论上的创新,但是会受到许许多多的工程师的欢迎,各种优化算法的尝试。文章如同于目标检测的trick综述,效果达到了实现FPS与Precision平衡的目标检测 new baseline。
①论文主要有以下三点贡献:[1]
- 开发了一个高效而强大的模型,使得任何人都可以使用一张1080Ti或者2080Ti GPU去训练一个超级快速和精确的目标检测器。
- 验证了一系列state-of-the-art的目标检测器训练方法的影响。
- 修改了state-of-the-art方法,使得他们在使用单个GPU进行训练时更加有效和适配,包括CBN,PAN,SAM等。
②作者把训练的方法分成了两类:
- Bag of freebies:只改变训练策略或者只增加训练成本,比如数据增强。
- Bag of specials:插件模块和后处理方法,它们仅仅增加一点推理成本,但是可以极大地提升目标检测的精度。
附:论文地址及主流框架的实现源码[2]
- YOLOv4论文地址
- AlexeyAB大神的项目地址
- YOLOv4的TensorFlow2.0实现
- YOLOv4的TensorFlow实现:地址一、地址二
- YOLOv4的PyTorch实现:地址一、地址二
- YOLOv4(TensorFlow后端)的Keras实现
- YOLOv4-QtGUI
- 将YOLOv4模型转换到tflite中使用
二、网络结构
- 上图总结了近些年的目标检测检测器的优化改进手段的方向结构组成,同时在下面对几个重要改进的部分列出了改进的方法,如下:[3]
目前主流two-stage检测器的主要架构
- Input部分:Image,Patches,Images Pyramid(图像金字塔)
- Backbone部分:VGG16,ResNet-50,SpineNet,EfficientNet-B0 / B7,CSPResNeXt50,CSPDarknet53
- neck部分:
- Additional blocks:SPP,ASPP,RFB,SAM
- Path-aggregation blocks:FPN,PAN,NAS-FPN,Fully-connected FPN,BiFPN,ASFF,SFAM
- Heads部分:
- Dense Predictions(one-stage):
- RPN,SSD,YOLO,RetinaNet (基于anchor)
- CornerNet,CenterNet,MatrixNet,FCOS(无anchor)
- Sparse Predictions(two-stages):
- Faster R-CNN,R-FCN,Mask R-CNN(基于anchor)
- RepPoints(无anchor)
- Dense Predictions(one-stage):
2. 下图为 yolov4 网络结构的采用的算法,其中保留了yolov3的head部分,修改了主干网络为CSPDarknet53,同时采用了SPP(空间金字塔池化)的思想来扩大感受野,PANet作为neck部分。
Yolo-v4网络架构图
3. 下图为yolov4在技术处理的思维导图:
YOLO-v4的backbone与detector的主要技术实现
三、算法知识点相关释义[4]
- BoF(bag of freebies)
在文中是指那些能够提高精度而不增加推断时间的技术。
- 比如数据增广的方法:图像几何变换、Cutout、grid mask等,
- 网络正则化的方法:Dropout、Dropblock等,
- 类别不平衡的处理方法,
- 难例挖掘方法,
- 损失函数的设计等,
2. BoS(bag of specials)
是指那些增加稍许推断代价,但可以提高模型精度的方法。
- 比如增大模型感受野的SPP、ASPP、RFB等,
- 引入注意力机制Squeeze-and-Excitation (SE) 、Spatial Attention Module (SAM)等 ,
- 特征集成方法SFAM , ASFF , BiFPN等,
- 改进的激活函数Swish、Mish等,
- 或者是后处理方法如soft NMS、DIoU NMS等,
3.在目标检测训练中,通常对CNN的优化改进方法:
- 激活函数:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
- bbox回归loss函数:MSE,IoU,GIoU,CIoU,DIoU
- 数据增强:CutOut,MixUp,CutMix
- 正则化方法:DropOut,DropPath,Spatial DropOut或DropBlock
- 通过均值和方差对网络激活进行归一化:Batch Normalization (BN), Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN), orCross-Iteration Batch Normalization (CBN)
- 跨连接:Residual connections, Weightedresidual connections, Multi-input weighted residualconnections, or Cross stage partial connections (CSP)
4.CSPDarknet53
由论文可知,CSPDarknet53包含29个卷积层,725*725的感受野,27.6M参数。
backbone对比
5.关于CmBN
BN是对当前mini-batch进行归一化。CBN是对当前以及当前往前数3个mini-batch的结果进行归一化,本文提出的CmBN则是仅仅在这个Batch中进行累积。在消融实验中,CmBN要比BN高出不到一个百分点。
CmBN
6.关于SAM
Attention机制中的CBAM, CBAM含有空间注意力机制和通道注意力机制,
SAM就是其中的空间注意力机制.
SAM
7. PANet
PANet融合的时候使用的方法是Addition, 详解见:CVPR 2018 PANet
YOLOv4算法将融合的方法由加法改为乘法。
PANet
四、算法的实验效果
- 使用MS COCO数据集,在每一行不同的GPU上,使用不同的网络跟YOLOv4进行的对比结果:(横轴为FPS,纵轴为AP值)
2.因为不同的算法公布时可能在不同的GPU上进行测试,作者根据不同的GPU(Maxwell/Pascal/Volta)分别列出了YOLOv4与其他算法的更详细的比较,即Table 8、9、10,帧率大于等于30的用蓝底标出。
图一
图二
图三
YOLOv4 算法在实时目标检测算法中精度最高,实现了精度和速度的最佳平衡。
参考
- ^YOLOv4论文学习记录 https://blog.csdn.net/heiheiya/article/details/105812825
- ^YOLOv4 的各种实现汇总 https://mp.weixin.qq.com/s?__biz=MzIwMTE1NjQxMQ==&mid=2247506196&idx=2&sn=d5de504af0edf82697c6f0ecfcb50d12&chksm=96f0ab40a18722569c8cd15c03529e1d29d11b66be526b26b53d443611babda339a8fc37ab23&mpshare=1&scene=1&srcid=0427URofQY95wbfbpZELWNGk&sharer_sharetime=1587994657016&sharer_shareid=c69c9a4255c32bdac8d66c388b9626a6#rd
- ^YOLOv4全文解读与翻译总结 https://mp.weixin.qq.com/s?__biz=MzU2NTc5MjIwOA==&mid=2247489140&idx=1&sn=7ec16d43b182dd56b2d975bb3cd05adf&chksm=fcb70acbcbc083ddbab8be612388135e4cc5ebee00b301755404c66f3da51f7ebd6a17f89eba&mpshare=1&&srcid=&sharer_sharetime=1587900548327&sharer_shareid=8a987be85d15ba23c8b37882f59430b7&from=timeline&scene=2&subscene=1&clicktime=1587901287&enterid=1587901287#rd
- ^YOLOv4来了 https://mp.weixin.qq.com/s?__biz=MzUzODkxNzQzMw==&mid=2247484251&idx=1&sn=ae336111261f1a92a015a41a08f9eb80&chksm=fad12c0dcda6a51b8ec884c9603078f1d5d7d64a5b221fad629d3f324274a75fa690a097e6c8&mpshare=1&scene=1&srcid=0424xB4HCCRQGCiHFv5UzWaG&sharer_sharetime=1587701862634&sharer_shareid=c69c9a4255c32bdac8d66c388b9626a6#rd
一文了解YOLO-v4目标检测相关推荐
- Window环境下运行YOLO v4目标检测算法
YOLO v4是一种最新提出的目标检测算法,由Alexey Bochkovskiy提出,性能较原有算法基础上有较大幅度提高. 论文地址:https://arxiv.org/abs/2004.10934 ...
- 一文详解 YOLO 2 与 YOLO 9000 目标检测系统
一文详解 YOLO 2 与 YOLO 9000 目标检测系统 from 雷锋网 雷锋网 AI 科技评论按:YOLO 是 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出 ...
- [RCNN]-[YOLO]-[SSD]目标检测算法
原文链接:http ://chuansong.me/n/353443351445 转载自深度学习大讲堂公众号 开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么 ...
- ubuntu下快速实现yolo v3目标检测
本文用到的脚本文件等资源已经上传,也可以直接下载使用: cpu脚本:cpu_darknet_env.sh_linux系统下yolo的目标检测-深度学习文档类资源-CSDN下载 gpu脚本:gpu_da ...
- 基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5、yolop、yolox)
基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5.yolop.yolox) 代码下载地址:下载地址 安装 操作系统:Win10.Win7.Ubuntu16.04(其他操作系统没有测 ...
- 从零开始PyTorch项目:YOLO v3目标检测实现
从零开始PyTorch项目:YOLO v3目标检测实现 目标检测是深度学习近期发展过程中受益最多的领域.随着技术的进步,人们已经开发出了很多用于目标检测的算法,包括 YOLO.SSD.Mask RCN ...
- 【百度飞浆】YOLO系列目标检测算法详解
YOLO系列目标检测算法详解 1 YOLO发展史 2 YOLO v3目标检测原理 3 PaddleDetection中YOLO v3模型介绍 4 YOLO v3配置演练 1 YOLO发展史 2 YOL ...
- YOLO系列目标检测算法-YOLOv7
YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...
- YOLO系列目标检测算法-YOLOv6
YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...
- YOLO系列目标检测算法——YOLOR
YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...
最新文章
- 车联网,挖掘数据价值
- OSChina 周日乱弹 —— 比996更先进的是365工作制
- mysql 异常处理实例
- 转:c/c++ 运行库
- C#为什么支持协变的参数只能用于方法的返回值?支持逆变的参数只能用于方法参数?...
- 计算机网络 ip协议是,计算机网络知识:TCP/IP协议
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation by 解决方案
- IPv6应用普及,任重而道远
- Servlet添加商品
- [ruby]devdocs windows setup
- php编写半径为4圆的周长,在C++中编写程序输入半径计算圆的周长和面积,来学习吧...
- AIX errpt 命令输出说明
- CentOS下搭建docker+.net core
- js实现添加删除表格
- 个人电脑bt文件服务器,简单实用 教你轻松架设个人BT服务器
- python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式...
- 十一届蓝狐杯的总结,顺带一点解题报告
- 小巧精美原厂轴 Cherry发布全新MX Board 1.0
- memtester4.3.0
- 今年北京平原地区将形成“一环百园”生态格局
热门文章
- java窗口如何写不能移动_[求助]请教高手,下面程序为何组件不能自由移动,百思不得其解!...
- Eclipse中的常用快捷键
- js考试题 html5新特性,Web前端初级面试题总结
- 关系到了冰点_疫情下半场,如何修复跌至冰点的亲子关系,让自己和家人活出幸福感?...
- 计算机应用基础20级月考,中职计算机应用基础月考试题
- mysql jdbc 协议_JDBC-MySql
- 机器学习——梯度下降算法
- 组态王怎么做超级曲线_鱼怎么做才好吃?试试这个方法,吃着过瘾,还超级下饭!(收藏)...
- scala外部传入时间参数-亲测有效
- 你的画像是怎么来的?推荐系统是如何找到相似用户的?