YOLO v2

Yolov2论文链接:YOLO9000: Better, Faster, Stronger

yolov2的改进

从Yolov2论文的标题可以直观看到就是Better、Faster、Stronger。Yolov1发表之后,计算机视觉领域出现了很多trick,例如批归一化、多尺度训练等等,v2也尝试借鉴了R-CNN体系中的anchor box,所有的改进提升,下面逐一介绍。

1. Batch Normalization(批归一化)*

检测系列的网络结构中,BN逐渐变成了标配。在Yolo的每个卷积层中加入BN之后,mAP提升了2%,并且去除了Dropout。

2. Dimension Clusters(Anchor Box的宽高由聚类产生)

这里是yolov2的一个创新点。在v2中,Anchor Box的宽高不经过人为手动获取,而是将训练数据集中的矩形框全部拿出来,用k-means聚类的方式学习得到先验框的宽和高,目的使得大框小框的损失同等衡量。例如使用5个Anchor Box,那么k-means聚类的类别中心个数设置为5。

聚类必须要定义聚类点( 矩形框(w, h) )之间的距离函数,使用(1-IOU)数值作为两个矩形框的的距离函数,如下函数所示:
d(box,centroid)=1−IOU(box,centroid)d(box, centroid) = 1 - IOU(box, centroid) d(box,centroid)=1−IOU(box,centroid)
聚类的结果发现,聚类中心的目标框和以前手动选取的不大一样,更多的是较高、较窄的目标框。聚类结果也有了更好的性能。

3. Box Regression(框回归)

YOLOv2对框回归过程进行了改进,过去的框回归过程,由于对txt_{x}tx​和tyt_{y}ty​参数没有约束,使得回归后的目标框可以位移到任意位置,这也导致YOLO的框回归中存在不稳定性。改进的做法为引入sigmid函数,对预测的xxx 和 yyy进行约束。

YOLOv2在框回归时,为每一个目标框预测5个参数:txt_{x}tx​, tyt_{y}ty​, twt_{w}tw​, tht_{h}th​, tot_{o}to​,调整的计算公式为:

  • cxc_{x}cx​, cyc_{y}cy​为格子的左上角坐标(行列值),pwp_{w}pw​, php_{h}ph​为anchor原始的宽度。
  • 当tx=0t_{x}=0tx​=0时,σ(tx)=0.5\sigma(t_x)=0.5σ(tx​)=0.5,bxb_{x}bx​刚刚好位于格子中间。
  • twt_{w}tw​, tht_{h}th​用来控制宽高的缩放,tot_{o}to​用来表达置信度信息。

通过使用sigmod函数,将偏移量的范围限制到0到1之间,使得预测框的中心坐标总位于格子内部,减少了模型的不稳定性。

另外,YOLOv2的分类置信度不再共享,每个anchor单独预测。即每一个anchor得到C+5 的预测值。

4. Fine-Grained Features(细粒度特征)

在26 * 26的特征图,经过卷积层等,变为13 * 13的特征图后,作者认为损失了很多细粒度的特征,如图所示,导致小尺寸物体的识别效果不佳,所以在此加入了passthrough层

passthrough层在预测时使用,将网络中间层的特征图输出(具体见下图),将降采样时同一位置的像素分解成4个子图,concat合并起来。变换后通道数变为4倍,降采样2倍。如从512×26×26变为2048×13×13,在这一次操作中不损失细粒度特征。

passthrough层的使用,融合了较高分辨率下的特征信息。

5. Multi-Scale Training(多尺寸训练)

Yolov2的网络结构中只有卷积层与池化层,为了增加网络的鲁棒性,YOLOv2在训练过程中可以动态调整网络的输入大小,同时相应地调整网络的结构以满足输入。整个网络的降采样倍数为32,只要输入的特征图尺寸为32的倍数即可(如果网络中有全连接层,就不是这样了)。所以Yolo v2可以使用不同尺寸的输入图片训练。

作者使用的训练方法是,在每10个batch之后,就将图片resize成{320, 352, …, 608}中的一种。不同的输入,最后产生的格点数不同,比如输入图片是320 * 320,那么输出格点是10 * 10,如果每个格点的先验框个数设置为5,那么共输出500个预测结果;如果输入图片大小是608 * 608,输出格点就是19 * 19,共输出1805个预测结果。

网络结构

YOLOv2中使用了一种新的基础网络结构,基于Googlenet,名为Darknet-19。拥有19个卷积层和5个Max Pooling层,网络中使用了Batch Normalization来加快收敛。
v2中移除了v1最后的两层全连接层,全连接层计算量大,耗时久。v2主要是各种trick引入后的效果验证,建议不必纠结于v2的网络结构。

训练过程

主要的训练过程为:

(1)先使用ImageNet数据集对Darknet-19进行分类训练,输入图片大小为224×224,包含标准的数据扩充方式。
(2)将输入图片大小调整为448×448,进行fine-tune。
(3)去掉分类的输出层,添加上文提到的目标检测输出层,进行目标检查的训练。

YOLOv2在上述训练的基础上,又进行了一个联合训练,额外使用只包含标签信息的数据集来进行分类训练,扩大网络可以预测的物体种类数,使其变得更加强大,即YOLO9000。

使用教程

源码地址(pytorch版本):https://github.com/longcw/yolo2-pytorch
(注意,该项目不再维护,并且可能和yolo4后的项目不兼容)

注 1: 这仍然是一个实验项目。VOC07 ​​测试 mAP 约为 0.71(在 VOC07+12 trainval 上训练)。

注意 2: 建议使用torch.utils.data.Dataset编写自己的数据加载器, 因为multiprocessing.Pool.imap即使没有足够的内存空间也不会停止。

Installation and demo

  1. Clone仓库
  2. 下载训练模型的权重文件 yolo-voc.weights.h5 (link updated) 并且在demo.py中设置其路径。
  3. 运行demo.py.

Training YOLOv2

可以在任意数据集上训练yolov2,这边,将以VOC2007/2012数据集为示例。
1. 下载训练、验证、测试数据和 VOCdevkit并解压

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

2. 数据集结构目录按如下组织

$VOCdevkit/                           # development kit
$VOCdevkit/VOCcode/                   # VOC utility code
$VOCdevkit/VOC2007                    # image sets, annotations, etc.
# ... and several other directories ...

3. 下载预训练模型
下载预训练模型darknet19,然后在yolo2-pytorch/cfgs/exps/darknet19_exp1.py.中设置路径。

4. 可视化训练过程
要使用 TensorBoard,需要在 yolo2-pytorch/cfgs/config.py 中设置 use_tensorboard = True 并安装 TensorboardX。 Tensorboard 日志将保存在训练/运行中。

5. 运行训练代码:python train.py.

Evaluation

在yolo2-pytorch/cfgs/config.py中设置把训练好的模型的路径。

然后运行预测代码。

Training on your own dataset

如果需要在自己的数据集上训练,前向传递要求向网络提供乳腺癌 4 个参数:

  • im_data - 图像数据。

    • 这应该是 C x H x W 格式,其中 C 对应于图像的颜色通道,H 和 W 分别是高度和宽度。颜色通道应为 RGB 格式。
    • 使用 utils/im_transform.py 中提供的 imcv2_recolor 函数来预处理图像。 此外,请确保图像已调整为 416 x 416 像素
  • gt_boxes - numpy 数组的列表,其中每个数组的大小为 N x 4,其中 N 是图像中的特征数。 每行中的四个值应对应于 x_bottom_left、y_bottom_left、x_top_right 和 y_top_right。
  • gt_classes - numpy 数组的列表,其中每个数组包含一个整数值,对应于 gt_boxes 中提供的每个边界框的类
  • dontcare - 列表的列表

【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现相关推荐

  1. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv3详解及复现

    在v1.v2的原理和技巧介绍之后,v3除了网络结构,其余的改变并不多.本文着重描述yolov3的原理细节. 相关阅读: 论文:YOLOv3: An Incremental Improvement 源码 ...

  2. 目标检测——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

    文章目录 目标检测概述 目标检测概述 基础知识和术语 YOLOv1 YOLOv2 YOLOv3 YOLOv4 YOLOv5 YOLOx YOLOv6 YOLOv7 YOLOv8 对比 目标检测概述 目 ...

  3. 【目标检测·yolo系列】YOLOV1目标检测论文(参考 同济子豪兄的解读)笔记

    YOLO V1 目标检测 object detection YOLOV1 预测阶段 前向推断 用图展示过程 预测阶段 后处理 NMS Non-Maximum Suppression 非极大值抑制 训练 ...

  4. 目标检测YOLO系列------YOLO简介

    目标检测YOLO系列------YOLO简介 1.为什么会出现YOLO算法 2.YOLO算法会逐渐成为目标检测的主流吗     YOLO以及各种变体已经广泛应用于目标检测算法所涉及到的方方面面,为了梳 ...

  5. 目标检测——YOLO系列(一网打尽)

    YOLO系列算法 1. 基本概念 2. 目标检测算法分类及流程 2.1 算法分类 2.2 基本流程 2.3 Two-stage与One-stage基本流程比较 3. YOLO系列目标检测模型 3.1 ...

  6. 目标检测——YOLO系列算法(YOLOv4、YOLOv5)的学习笔记

    目录 1 前言 2 致谢 3 YOLO模型列表 4 模型结构 2.1 Backbone Focus--网格下采样 CSPDarknet53 2.3 Neck -- SPP & PAN SPP: ...

  7. 目标检测 | YOLO系列超全讲解v1,v2,v3

    前言 一.YOLOv1 1. 网络结构 2. 实现方法 3. 损失函数 4. 缺点 二.YOLOv2 1. 网络结构 2. 改进方法 3. YOLO9000 4. 网络训练细节 三.YOLOv3 1. ...

  8. 目标检测yolo系列

    出自科技猛兽知乎专栏,地址:科技猛兽目标检测专栏 前言 本文目的是用尽量浅显易懂的语言让零基础小白能够理解什么是YOLO系列模型,以及他们的设计思想和改进思路分别是什么.我不会把YOLO的论文给你用软 ...

  9. 目标检测 YOLO 系列模型

    前言 YOLO (You Only Look Once) 系列模型追求实时目标检测,因此会在一定程度上牺牲精度,以实现更高的检测速度. 如果你对这篇文章感兴趣,可以点击「[访客必读 - 指引页]一文囊 ...

最新文章

  1. WebUploader 上传图片回显
  2. 四位达林顿_ULN2069B - 80 V - 1.5 A四路达林顿开关 - STMicroelectronics
  3. Scala学习之路 (六)Scala的类、对象、继承、特质
  4. 前端性能优化(PC版)
  5. SQLPLUS命令的使用大全
  6. 基于C#开发的浏览器隐身工具-上班别乱开
  7. LIS 的 n*log 算法 ———二分维护
  8. 露雨资源库三(第一个.net2.0软件)-为控件增加自动完成功能
  9. FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析
  10. window.print()在页面全部加载完成后才能执行。切记。
  11. B站韩顺平java学习笔记(二十)-- 网络编程 章节
  12. start request repeated too quickly for docker.service
  13. 在群晖(Synology) 中运行115网盘Linux版(docker)
  14. 机器人焊钳选型_点焊机器人焊钳的分类及区别
  15. 一文理清Apache Spark内存管理脉络
  16. 厉害了,苹果应用内购买抽成半年狂赚49亿美元
  17. 解决Cipher Suites导致的“未能创建 SSL/TLS 安全通道”异常问题
  18. java实现大文件分片上传功能(前后端都有,代码down下来配置完后可以直接运行)
  19. CVTE实习生一二面+HR面
  20. ​李德毅:自动驾驶炒作这么久为什么老百姓仍没有坐上

热门文章

  1. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成
  2. 大数据与数据挖掘考试题_北京2020届中考物理出题策略大揭秘!
  3. libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed
  4. TF-IDF 原理及sklearn中的tf-idf实例分析
  5. PyTorch代码调试利器: 自动print每行代码的Tensor信息
  6. Hexo集成Valine实现评论留言
  7. CPU 内部结构解析
  8. TVM优化GPU机器翻译
  9. CVPR2020:三维实例分割与目标检测
  10. centos7 下搭建git服务器