DenseBox 论文笔记
前言
本文主要关注如何将FCN应用到目标检测中,提出基于FCN的检测器DenseBox,它不需要生成候选区域,并且可以进行端到端的训练。本文做出的主要贡献为:
- 本文证明,在经过仔细地设计和优化后,一个单一的FCN可以检测不同尺度和较为模糊的目标;
- 通过多任务学习结合landmark定位可以进一步提升检测性能。
DenseBox
检测系统如上图所示:
- 首先使用图像金字塔(后来演变成特征金字塔FPN);
- 经过卷积和池化后,再进行上采样使特征图变大,最后通过一些卷积层得到输出结果;
- 将输出的特征图转换为bbox,对所有置信度超过阈值的bbox进行NMS操作。
这个单一的卷积网络同时输出多个bbox以及每个bbox的类别置信度。在测试时,输入图像的大小为 m × n m × n m×n,输出的是 m / 4 × n / 4 × 5 m/4 × n/4 × 5 m/4×n/4×5的特征图。设gt box在输出特征图上左上角和右下角的坐标分别为 p t = ( x t , y t ) p_{t}=(x_{t},y_{t}) pt=(xt,yt), p b = ( x b , y b ) p_{b}=(x_{b},y_{b}) pb=(xb,yb),那么输出特征图上的像素 i ( x i , y i ) i (x_{i},y_{i}) i(xi,yi)预测的bbox可以用以下这个5维向量表示:
其中 s s s表示是否为一个目标的置信度分数,其余四个表示像素 i i i预测的bbox与gt box之间的距离。最终输出特征图上的每个像素都被转换为带有置信度分数的bbox,对那些置信度超过一定阈值的bbox进行NMS操作,得到最终的预测结果。
1. ground truth的生成
把整个图像放入网络中进行训练是没必要的,因此裁剪一些包含人脸和充足背景信息的patch来进行训练。本文进行单一尺度训练,多尺度测试。
在训练时,patch被裁剪为240 × 240,人脸位于中间,大小为50 × 50。在训练时经过4倍下采样,输出的gt是一个60 × 60 × 5的map。gt map的第一个通道中的正样本区域是一个半径为 r c r_{c} rc的实心圆,位于face bbox的中间,如下图所示。
左边是输入的patch,右边是gt map。半径 r c r_{c} rc与face bbox的大小是成比例的,本文设置半径 r c r_{c} rc为gt map中face bbox大小的0.3倍。也就是说在gt map中,人脸区域由一个以face bbox中心为原点,半径为0.3倍face bbox size的圆形区域确定。其余四个通道表示离face bbox最近的bbox的左上角与右下角像素点之间的距离。
如果一个patch中有多个人脸,将位于patch中心区域(0.8到1.25)的人脸作为正样本,其它的人脸都为负样本。gt map的第一个通道表示类别的置信度分数,初始化为0,将包含在正样本区域中的像素设为1。
2. 模型的设计
网络结构衍生于VGG 19模型,如下图所示。整个网络有16个卷积层,前12个卷积层由VGG 19初始化。conv4_4的输出被馈入到4个1 × 1的卷积层中,前两个输出1-channel map表示类别得分,后两个产生4-channel map用于预测bbox的相对位置。最后一个1 × 1的卷积层相当于全连接层。
浅层特征比较关注细节信息,深层特征比较关注语义信息,因此如果把不同层级的特征结合起来,能够加强检测性能。在网络中是将conv3_4的特征图和conv4_4的特征图结合起来。conv3_4的感受野为48×48,几乎与训练时的人脸的大小相同;conv4_4的感受野为118 × 118,包含更多的全局信息。注意到conv4_4的特征图的大小是conv3_4的一半,因此要对conv4_4的特征图进行上采样,使其的分辨率与conv3_4的相同,然后才能拼接到一起。
Training
1. 损失函数
在ImageNet上先对VGG 19进行预训练来初始化DenseBox。初始化时只保留VGG 19中的前12个卷积层,其它层由4个新的卷积层代替。
分类分支为特征图中的每个像素输出一个置信度得分,给定gt y ∗ ∈ y^{*}∈ y∗∈{0,1},分类损失为:
边界框回归分支输出的是预测的bbox与gt box之间的偏移值。边界框回归损失为:
2. 平衡采样
负样本的选择是一个很关键的问题。如果简单的采用所有的负样本,那么预测结果会偏向于负样本;另外,检测器在处理正负样本之间的样本区域的时候性能会下降。因此本文提出在输出特征图的每个像素上用二值mask来决定它是否参与训练。
忽略灰度区域
灰度区域是正负样本之间的区域,它既不是正样本也不是负样本,并且它的损失权重被设为0,也就是它不贡献任何loss。对于输出坐标空间中的每个非正样本标记的像素,只要它半径范围2内存在一个正样本标记的像素,则它的ignore flag f i g n = 1 f_{ign}=1 fign=1。
Hard Negative Mining
用HNM来挑选预测的很差的样本,在这些样本上进行梯度下降的学习可以使检测结果具有更强的鲁棒性。具体来说就是,将输出像素的分类损失降序排列,选择前1%作为hard-negative,也就是预测的很差的样本。在实验中保持正负样本比为1:1。在所有的负样本中,一半是hard-negative,一半是non-hard negative。方便起见,在一个mni-batch中将被选择的样本标记为 f s e l = 1 f_{sel}=1 fsel=1。
patch的选择
在训练时,如果一个patch中央的特定区域包含一个目标中心,那么它就是positive patch,这些patch中的负样本只为于正样本的周围。为了在整个数据集中找到完整的负样本,将训练图像裁剪成不同尺度的patch,然后resize到同一大小送入网络中,这种被称为random patch,positive patch与random patch之间的比例为1:1.
Loss with Mask
为每个样本 t i = t_{i}= ti={ y i , d i y_{i},d_{i} yi,di}定义mask M ( t i ) M(t_{i}) M(ti),函数如下:
那么完整的多任务损失可以被表示为:
可以看到,边界框回归损失只对正样本起作用。参数 λ l o c \lambda_loc λloc用来调整分类损失与回归损失之间的平衡。
DenseBox 论文笔记相关推荐
- 经验 | 深度学习中从基础综述、论文笔记到工程经验、训练技巧
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:本文授权转自知乎作者跑者小越,https://zhuanla ...
- 从基础综述、论文笔记到工程经验、训练技巧:值得一看的目标检测好文推荐...
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文授权转自知乎作者跑者小越,https://zhuanlan.z ...
- ORB-SLAM3 论文笔记
ORB-SLAM3 论文笔记 这篇博客 ORB-SLAM3系统 相机模型的抽象(Camera Model) 重定位的问题 图片矫正的问题 视觉惯性SLAM的工作原理 相关公式 IMU初始化 跟踪和建图 ...
- 【论文笔记】 LSTM-BASED DEEP LEARNING MODELS FOR NONFACTOID ANSWER SELECTION
一.简介 这篇论文由IBM Watson发表在2016 ICLR,目前引用量92.这篇论文的研究主题是answer selection,作者在这篇论文基础上[Applying Deep Learnin ...
- 最新图神经网络论文笔记汇总(附pdf下载)
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 [导读]近年来,图神经网络变得非常火热,每年顶会在该领域内都会出现大量的研究论文,本文为大家提 ...
- [论文笔记] Fast Quality Driven Selection of Composite Web Services (ECOWS, 2006)
Time: 4.0 hours Jae-Ho Jang, Dong-Hoon Shin, Kyong-Ho Lee, "Fast Quality Driven Selection of Co ...
- 论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning
论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning 2017-06-06 21: ...
- 光流 速度_[论文笔记] FlowNet 光流估计
[论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...
- 论文笔记 《Maxout Networks》 《Network In Network》
原文出处:http://zhangliliang.com/2014/09/22/paper-note-maxout-and-nin/ 论文笔记 <Maxout Networks> & ...
最新文章
- Android shape 绘制左右 或者上下的渐变色
- 第一回写的用arraylist模拟栈操作
- 贝叶斯、香农、奥卡姆合写博客「机器学习是什么」
- CSDN编程挑战——《进制转换》
- 【ACDU】国产数据库有奖征文活动开始啦!发原创奖京东卡,最高可领1000元!...
- Linq 简介 及添加
- Linux下搭建DHCP服务器 【2020.12.01】
- Thread.currentThread().getContextClassLoader()和Class.getClassLoader()区别
- 如何查看本机路由表并进行分析?
- DellR740制作Raid0
- html引用外部样式表的正确位置,在html文档中引用外部样式表的正确位置是什么...
- 【简单易懂的Unity5 Shader着色器入门教程】 笔记
- html 项目实战摄影开课吧,最新《开课吧Web全栈架构师正式课》(Vue.JS及实战项目)...
- 古天乐一哭,电影宣传又跪了下来
- 【CNC——第8篇】PMAC 与 PewinPro2 建立通讯
- CSS 网格(Grid)布局
- Lipschitz continuous gradient
- 【快速入门】YOLOv5目标检测算法
- mysql 织梦 索引_织梦DedeCMS网站提速优化方案
- 【zzq‘笔记】HDR成像技术学习(一)