当前位置: 首页 > news >正文

目标检测 YOLO 系列模型

前言

YOLO (You Only Look Once) 系列模型追求实时目标检测,因此会在一定程度上牺牲精度,以实现更高的检测速度。

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。


目标检测评价指标

IoU

模型预测框的 IoU 值与 IoU 阈值进行比较,若大于阈值,即为正确的检测,否则为错误的检测。
在这里插入图片描述

mAP

目标检测中,每个预测框都对应一个置信度,不同的置信度阈值,意味着最终留下的预测框的不同。

AP 是针对目标检测中某个单独的类别的检测效果,即在同一 IoU 阈值下,通过调整置信度阈值,得到 P-R 曲线,其下方面积即为 AP 值。相应地,mAP 即是所有类别的 AP 值取平均后的结果。
mAP = 1 C ∑ i = 1 C AP i \text{mAP}=\frac{1}{C}\sum_{i=1}^C \text{AP}_i mAP=C1i=1CAPi
在这里插入图片描述


YOLOv1

论文链接:[CVPR16 - Joseph Redmon] You Only Look Once: Unified, Real-Time Object Detection

网络架构

整体网络架构如下:
在这里插入图片描述
可以看到开始的输入被固定为 448x448x3,输出被固定为 7x7x30,其中输出的含义为将原始输入图片划分为 7x7 的网格,其中每个网格包含 30 维信息(x, y, w, h 均为归一化后结果):

  • 1~5:当前网格对应预测框 1 的信息,框中心 x、y 坐标,宽度 w,高度 h,置信度 c
  • 6~10:当前网格对应预测框 2 的信息,框中心 x、y 坐标,宽度 w,高度 h,置信度 c
  • 11~30:对 20 个类别的预测概率

损失函数

在这里插入图片描述
其中对 w、h 开根再求差,是为了放大小物体检测框的权重,因为 y = x y=\sqrt{x} y=x 在数值较小时变化更剧烈。

模型特点

  • 优点:
    • 快速、简单
  • 不足:
    • 每个网格只预测一个类别,如果物体重叠,则难以识别
    • 只有两个预选框,小物体检测效果一般

YOLOv2

论文链接:[CVPR17 - Joseph Redmon] YOLO9000:Better, Faster, Stronger

改进方案

  • Batch Normalization
    • v2 舍弃 Dropout,卷积后全部加入 Batch Normalization,即网络的每一层的输入都做了归一化,使收敛更容易
    • 经过 BN 处理后的网络会提升 2% 的 mAP
  • 更大的分辨率
    • v1 训练时用 224x224,测试时使用 448x448;因此 v2 训练时再额外进行 10 次 448x448 的微调
    • 该项改进提升 4% 的 mAP
  • 网络结构改变
    • 采用 Darknet-19,去除所有全连接层,进行 19 次卷积,且再进行 5 次降采样,以及多次 1x1 卷积,节省大量参数
    • 每一层卷积核尺寸都较小,原因在于多个小卷积核比一个大卷积核更省参数,以及多个小卷积核,每次卷积后再进行 BN,网络输出更稳定
    • 最终输出从 7x7 提升至 13x13,预测的框更多了
      在这里插入图片描述
  • 聚类提取先验框
    • faster-rcnn 中选取的先验框比例都是常规的,而 v2 中先验框大小通过对训练集中标注的边框进行 k-means 聚类,其中聚类采用的距离形式如下(欧式距离对大框和小框不公平):
      d (  box, centroids  ) = 1 − IOU ⁡ (  box, centroids  ) d(\text { box, centroids })=1-\operatorname{IOU}(\text { box, centroids }) d( box, centroids )=1IOU( box, centroids )
    • 根据 k 和 Avg IOU 曲线,选择 k = 5
  • 预测框偏移量计算
    • 原先的 x = x p + w p ∗ t x x=x_p+w_p*tx x=xp+wptx 为直接偏移量,存在收敛问题,导致模型不稳定;因此修改为相对网格的偏移,使得中心点不会偏移出网格:
      在这里插入图片描述
    • 计算举例(根据预测值,以及一开始聚类得到的先验框大小,得到最终的预测框):
      在这里插入图片描述
  • 特征融合
    • 最后一层感受野(特征图上的点能看到原始图像的区域)太大了,小目标可能丢失,因此与之前的特征进行融合
      在这里插入图片描述
  • 适配多尺度输入
    • 由于网络中不再有全连接层,因此可以适配多尺度的输入

改进结果

在这里插入图片描述


YOLOv3

论文链接:[arXiv18 - Joseph Redmon] YOLOv3: An Incremental Improvement

改进方案

  • 多 scale
    • 为了检测不同大小的物体,设计了 3 个 scale
      在这里插入图片描述
  • 网络架构修改
    • 将 multi scale 进行融合
      在这里插入图片描述
      在这里插入图片描述

改进效果

神图:效率与性能远程其它模型
在这里插入图片描述


YOLOv4

论文链接:[CVPR20 - Alexey Bochkovskiy] YOLOv4: Optimal Speed and Accuracy of Object Detection

网络架构

在这里插入图片描述
注意其中的 multi-scale 融合,从 YOLOv3 中只有第二部分(自下而上),增加了第三部分(自上而下),并且融合的方式从原先的直接相加,变为了深度拼接。

优化策略

  • 数据增广:Mosaic 图片拼接,增加样本多样性
    在这里插入图片描述

YOLOv5

代码实现:YOLOv5 in PyTorch
图片来源:YOLOv5网络详解、YOLOv5 解读,训练,复现

网络架构

请添加图片描述
其中骨干网络有如下多个选择:
在这里插入图片描述

优化策略

  • 数据增广:Augment HSV (Hue, Saturation, Value)
    在这里插入图片描述

  • 数据增广:Mix up(根据透明度融合)
    在这里插入图片描述

  • 数据增广:Copy paste
    在这里插入图片描述


参考资料

  • 视频资料 1 - YOLOv1v2v3
  • 视频资料 2 - YOLOv4
  • 视频资料 3 - YOLOv5
  • 文章资料 1 - YOLOv1v2v3v4v5
  • 文章资料 2 - YOLOv4
  • 文章资料 3 - YOLOv5
  • 文章资料 4 - YOLOv5
  • 代码资料

相关文章:

  • Java开发五年跳槽涨薪从12K到35K,靠“狂刷”九遍面试题
  • DM数据库安装,docker镜像
  • 项目中的traceID
  • Webview+Viewpager左右滑动冲突
  • 【 C++ 】多态
  • jupyter 基本用法
  • Unity入门01——unity界面基础
  • 【05】Yarn
  • Flutter 从源码看Getx的依赖原理
  • JavaScript 知识梳理基础篇(二)
  • 【web-代码审计】(14.4)ASP.NET
  • 一、Maven-单一架构案例(创建工程,引入依赖,搭建环境:持久化层,)
  • vue-cli 初始----安装运行Vue项目
  • 华尔街日报请求分析
  • Ubuntu18.04安装深度学习环境(Anaconda、显卡驱动、CUDA、Tensorflow-GPU等)
  • Codepen 每日精选(2018-3-25)
  • EventListener原理
  • Linux中的硬链接与软链接
  • mysql中InnoDB引擎中页的概念
  • Ruby 2.x 源代码分析:扩展 概述
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • ubuntu 下nginx安装 并支持https协议
  • Unix命令
  • 爱情 北京女病人
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 深入 Nginx 之配置篇
  • 通过几道题目学习二叉搜索树
  • 移动端唤起键盘时取消position:fixed定位
  • 【云吞铺子】性能抖动剖析(二)
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 积累各种好的链接
  • 选择阿里云数据库HBase版十大理由
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (4)logging(日志模块)
  • (Java数据结构)ArrayList
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .bashrc在哪里,alias妙用
  • .FileZilla的使用和主动模式被动模式介绍
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [C++]高精度 bign (重载运算符版本)
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [javaSE] GUI(事件监听机制)
  • [LeetCode 127] - 单词梯(Word Ladder)