本文提出了一个有效且快速的目标检测器,该目标检测器得速度可以达到200+fps,在Pascal VOC-2007上的mAP比Tiny-Yolo-v2高出14。

本文从以下三个方面对网络进行改进。

  • 网络结构  Network architecture
  • 损失函数  Loss function
  • 训练数据  Training data

网络结构

网络结构如下图:

f17ae279f77d32d9778707288bfa806e.png

  • Dense feature map with stacking。从前面的层merge feature map会提高网络性能。
  • Deep but narrow。网络最后几层,使用1x1卷积来增加网络的深度。

损失函数

知识蒸馏方法的总体框架如下:

96b52630b6336ba54ba24fc9b63449be.png

Objectness scaled Distillation

YOLO目标检测中,每个cell位于最后一层的feature map中,每个cell会预测N个bounding boxes,N表示anchor的数量。因此最后一层的feature map的数量为N*(K+5),其中K是预测的类别数量,5表示4个bbox坐标和1个objectness value。对于每个cell中的每个anchor box,网络会预测bbox的坐标,objectness value(定义为ground truth box与预测的box的IOU)和对应类别的概率。因此,YOLO的loss由3个部分组成,分别为 regression loss, objectness loss, classification loss,公式如下:

f898c80bfc9f5a6b402550b2adc1d2a8.png

由于YOLO最后输出的预测结果中包含大量的background,对于标准的知识蒸馏方法来说,student network会学习大量的teacher network预测的背景bbox,而这些teacher network预测背景的bbox都是没有用的,因此会造成student network学习大量没有用的信息。为了避免这个问题,作者提出 objectness scaled function。具体思路为 只有当teacher network的objectness value高时,才学习bounding box坐标和class probabilities。
因此 objectness部分的损失函数如下:

6a4965cfd3abbc1de7f2f225bfef999f.png

对于classification部分的loss如下,称为 objectness scaled classification function,即在原来公式的基础上,乘上了一个系数,该系数即为objectness value。

d3e8a90ff5a17404cd0ec8cf1e7c04cd.png

对于 bounding box坐标的loss同理,公式如下:

c99636c256cf6feb3be5b38e93735878.png

因此,总体的损失函数如下:

6734600a258a8e42b89bfd88efcb2fad.png

Feature Map-NMS

实际情况中,网络大量的cell和anchor都会预测同一个物体,因此,当我们利用知识蒸馏训练时,当teacher network将信息迁移到student network时,高度重合的检测区域对应的feature map会使得反向传播时,对应于同一个 object class and dimensions,梯度会变得很大,从而导致网络过拟合。
为了解决这个问题,作者提出 Feature Map-NMS (FM-NMS)。具体思想是如果在K * K邻域的cell中,多个候选框都对应同一个类别,那么这很可能是同一个物体。因此,我们只选择objectness值最高的那个候选框。另外,我们会将对应同一类别的其他候选框在最后一层的feature map中的 class probabilities置为0。因此,只有objectness值最大的那个才会对student network产生影响。

Effectiveness of data

增加更多的标注数据或者未标注的数据,都会提高模型的性能。对于增加标注数据,训练方法与之前的一致;对应增加未标注的数据,我们利用teacher network的输出作为soft label,利用知识蒸馏方法进行训练(只计算teacher network部分的损失,不计算ground truth部分的损失)。

结果

下面是知识蒸馏的实验结果:

da4fda94c91a3274592c2a34f79a1013.png

下图是本文提出的方法与其他网络在速度和精度上的对比图:

9d83067bfb51f1a2f6fb7d5425aff48e.png

相关链接:
https://blog.csdn.net/u014380165/article/details/80467007

[论文阅读]Object detection at 200 Frames Per Second的更多相关文章

  1. (转)Awesome Object Detection

    Awesome Object Detection 2018-08-10 09:30:40 This blog is copied from: https://github.com/amusi/awes ...

  2. 论文阅读:Prominent Object Detection and Recognition: A Saliency-based Pipeline

    论文阅读:Prominent Object Detection and Recognition: A Saliency-based Pipeline  如上图所示,本文旨在解决一个问题:给定一张图像, ...

  3. 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection

    论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...

  4. 论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)

    Chenyi Chen--[ACCV2016]R-CNN for Small Object Detection 目录 作者和相关链接 方法概括 创新点和贡献 方法细节 实验结果 总结与收获点 参考文献 ...

  5. 论文阅读笔记五十五:DenseBox: Unifying Landmark Localization with End to End Object Detection(CVPR2015)

    论文原址:https://arxiv.org/abs/1509.04874 github:https://github.com/CaptainEven/DenseBox 摘要 本文先提出了一个问题:如 ...

  6. 论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)

    论文原址:https://arxiv.org/pdf/1904.02701.pdf github:https://github.com/OceanPang/Libra_R-CNN 摘要 相比模型的结构 ...

  7. 论文阅读笔记五十二:CornerNet-Lite: Efficient Keypoint Based Object Detection(CVPR2019)

    论文原址:https://arxiv.org/pdf/1904.08900.pdf github:https://github.com/princeton-vl/CornerNet-Lite 摘要 基 ...

  8. 论文阅读笔记五十一:CenterNet: Keypoint Triplets for Object Detection(CVPR2019)

    论文链接:https://arxiv.org/abs/1904.08189 github:https://github.com/Duankaiwen/CenterNet 摘要 目标检测中,基于关键点的 ...

  9. 论文阅读笔记四十八:Bounding Box Regression with Uncertainty for Accurate Object Detection(CVPR2019)

    论文原址:https://arxiv.org/pdf/1809.08545.pdf github:https://github.com/yihui-he/KL-Loss 摘要 大规模的目标检测数据集在 ...

随机推荐

  1. go接口

    // 接口例子package main import "fmt" type Human struct { Name string Age int Sex string Phone ...

  2. 装了anaconda之后如何设置anaconda、python环境变量

    装了anaconda之后如何设置anaconda.python环境变量 1.装了anaconda之后如何设置anaconda环境变量 参考 https://www.cnblogs.com/avivi/ ...

  3. 剑指offer7~10题

    斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 思路:此题用递归会超内存,故直接循环. 代码: class Solution { pub ...

  4. MySQL命令行登陆,远程登陆MySQL 的方法

    https://www.cnblogs.com/lvk618/p/3522321.html 1.MySQL自带工具的存放路径: D:\Program Files\MySQL\MySQL Server ...

  5. python3 多线程爆破ftp、mysql、ssh

    当然 也支持ip 为 127.0.0.1-255 这样的 字典放到 dict 目录里 链接: https://pan.baidu.com/s/1htchOyN5hK9nmZlWfTiFzA 密码: v ...

  6. 通过Jmeter 代理功能获取postman请求

    对于初学者在Jmeter 配置 请求其实属于比较麻烦的事情,但是如果在Postman配置就容易多了,所以考虑是否可以把postman的配置直接导入Jmeter,避免初学者上手不易的问题,后来考虑使用J ...

  7. WinForm外包公司 WInform外包项目监控案例展示

    北京动点飞扬软件开发团队 C# WInform监控项目案例展示 长年承接WInForm C#项目开发,商业案例欢迎联系我们索取 有相关项目外包定制开发 欢迎联系我们 qq372900288 Tel 1 ...

  8. Cheat Engine(简称CE)初体验

    经常玩一些单机游戏,如CS.植物大战僵尸,,这几天刚好网上看到有人用CE修改内存,直接修改内存数据. 之前没有玩过此类东西,激动不已,于是自己也动手写了几行代码, 实现了CS子弹无限制,血量无限,阳光 ...

  9. Django的安装和启动以及第一个工程的建立

    ---恢复内容开始--- 前提:已经安装了python和Anaconda (windows系统) 在Anaconda安装好之后,其文件夹下有一个叫做Anaconda Prompt的工具,类似windo ...

  10. python爬虫学习笔记(二)——基础篇之爬虫基本原理

    1.什么是爬虫? 请求网站并提取数据的自动化程序 2.爬虫基本流程 2.1发起请求 通过HTTP库向目标站点发起请求,即发起一个Request,请求可以包含额外的headers等信息,等待服务器响应: ...