CVPR2020 面向密集多角度物体检测的动态修正网络(DRN)

论文链接:https://arxiv.org/pdf/2005.09973.pdf
code:https://github.com/Anymake/DRN_CVPR2020
文章概要:
本文是中科院自动化所、腾讯优图、快手科技联合发表的工作,收录于CVPR2020。本文针对定向和密集场景中的目标检测任务提出了动态优化网络,可以说是目标检测在特定场景下的应用与优化。本文主要创新点在于:
1、提出了一种新颖的可自适应调整目标感受野的特征选择模块FSM。
2、提出了两种动态优化的检测头(DRH-C/R),分别对分类和回归任务进行动态优化,实现对样本唯一性和特殊性的建模。
本文动机:
密集多角度物体检测面临的挑战:
1、神经元的感受野全部沿轴排列且具有相同的形状,但物体通常具有不同的形状并沿不同的方向排列;
2、检测模型通常利用通用知识进行训练,但在测试阶段可能不能很好的处理特定的物体;
3、有限的数据集限制了密集多角度目标检测任务的发展。
针对问题1和问题2,本文分别提出了特征选择模块FSM和动态优化head(DRH-C/R);针对问题3,本文收集了一个扩展的且带有完整注释的数据集SKU110K-R,该数据集基于SKU110K数据集的定向边界框进行重新标记。
网络整体结构:

本文以CenterNet(https://arxiv.org/abs/1904.07850)作为baseline,CenterNet算法将目标检测问题变成了一个关键点的估计问题,通过预测物体的中心点位置及对应物体的长与宽,实现了当前检测精度与速度最好的权衡。为了预测有向的边界框(oriented bounding boxes),添加了一个分支回归边界框的方向。有向边界框定义如下:
$$\begin{split}
&P_{lt}=M_r[-w/2,-h/2]^T+[c_x+\delta_x,c_y+\delta_y]^T,\\
&P_{lt}=M_r[+w/2,-h/2]^T+[c_x+\delta_x,c_y+\delta_y]^T,\\
&P_{lt}=M_r[-w/2,+h/2]^T+[c_x+\delta_x,c_y+\delta_y]^T,\\
&P_{lt}=M_r[+w/2,+h/2]^T+[c_x+\delta_x,c_y+\delta_y]^T,
\end{split}\tag{1}
$$
参数说明:$(c_x,c_y)$和$(\delta_x,\delta_y)$表示中心点和预测的偏移量。$(w,h)$是预测的尺寸,$M_r$表示旋转矩阵,$P_{lt},P_{lb},P_{rt},P_{rb}$表示四个角点。遵循CenterNet的回归任务,文章使用$L_1$损失进行旋转角度的回归:
$$L_{ang}=\frac{1}{N}\sum_{k=1}^N|\theta-\hat{\theta}|,\tag{2}$$
其中$\theta$和$\hat{\theta}$分别表示旋转角度的目标值和预测值。$N$表示正样本的数量,总体的训练目标函数为:
$$L_{det}=L_k+\lambda_{size}L_{size}+\lambda_{off}L_{off}+\lambda_{ang}L_{ang},\tag{3}$$
其中$L_k,L_{size},L_{off},L_{ang}$分别表示中心点类别损失、尺度回归损失、偏置损失、角度回归损失,$\lambda_{size},\lambda_{off},\lambda_{ang}$为权重系数,用于平衡各部分损失。
特征选择模块(Feature Selection Module)
为了缓解各种物体与轴对齐的感受野之间的不匹配问题,作者提出了一种特征选择模块(FSM),用以自适应的聚合不同的核大小、形状(长宽比)、方向所提取的信息。 
FSM工作流程:
1、给定初始特征图$X\in\R^{H\times W\times C}$,经过$1\times 1$Conv、BN、Relu输出$X_c\in\R^{H\times W\times C'}$;
2、利用多个不同尺寸的的RCLs从$X_c$提取多个特征。其中每个RCl负责不同的感受野区域;
3、利用注意力机制融合不同的特征。
作者提到RCL的灵感来源于DCN,fig 4.展示了可变形卷积的概括了各种尺度变换、比例变换和旋转变换。同时作者在此基础上,引入了角度信息$\theta$对卷积核的方向进行编码,把之前标准的卷积核变成带有参数$\theta$的旋转卷积核,这种方式缓解了各种物体与轴对齐的感受野之间的不匹配问题,使得卷积核能更加适应旋转目标信息的提取。基于上述内容,我觉得RCL更像是DCN和ROI Trans(https://arxiv.org/pdf/1812.00155.pdf)思想的结合,但是ROI Trans是对ROI进行旋转。
Figure 4.正常卷积和可变形卷积的采样方式
FSM的数学描述:
1、遵循DCN的表达形式,本文依然使用$\mathcal{R}$表示规则网格的感受野。对于$3\times 3$的核,有:
$$\mathcal{R}=\lbrace(-1,-1),(-1,0),...,(0,1),(1,1)\rbrace,\tag{4}$$
2、给定第i个位置预定义的偏移$p_i\in\mathcal{R}$和学习到的角度参数$\theta$,学习到的偏移量为:
$$\delta_{p_i}=M_r(\theta)\cdot p_i-p_i\tag{5}$$
3、对于输出特征图$X_i$中的每个位置$p_0$,有:
$$X_i(p_0)=\sum_{p_n\in\mathcal{R}}\cdot X_c(p_0+p_n+\delta p_n),\tag{6}$$
4、为了增强神经元感受野的自适应能力,本文采用注意力机制并与point-wise的方式融合特征。$X_i$首先经过一个注意力模块(由$1\times 1$卷积核、BN和RELU组成)得到注意力热图$A_i\in\bm{R}^{H\times W\times 1}(i\in1,2,3)$,之后归一化选择权重,
$$A'_i=SoftMax([A_1,A_2,A_3]).\tag{7}$$
5、特征融合并输出特征图$Y$:
$$Y=\sum_{i}A'_i\cdot X_i,\tag{8}$$
其中$Y\in\mathbb{R}^{H\times W\times C}$,需要注意的是FSM可以扩展到更多的分支,文中3分支的结构只是其中一个例子。
动态优化检测head(Dynamic Refinement Head)
文章提到,在标准的机器学习框架中,人们通过大量标注的数据训练模型。在推理阶段,将测试样例输入参数固定的模型以获得预测的结果。这种训练好的模型只能从训练集学到的普遍性知识做出响应而忽略每个样例(sample)的唯一性,会产生预测灵活性差的问题。figure 1.对本文提到的问题进行了说明。离边界较近的点很容易发生误识别。为了增强模型预测的灵活性,提出了DRH(DRH-C/R,分别用于分类和回归任务)。DRH对每个输入对象的特殊性进行建模。
Dynamic refinement for classification
- 给定输入$F_in\in\mathcal{R}^{H\times W\times C}$,首先获得目标感知(object-aware)的滤波器$K_c$:
$$K_c=G_c(F_{in};\phi),\tag{9}$$
其中$G_c$表示动态滤波生成器,$\phi$表示$G_c$的参数集。$K_c$表示从样本中学习到的核权重。 - $F_{mid}$和$K_c$进行卷积操作得到细化的特征$F_{\Delta}$:
$$F_{\Delta}=F_{mid}\ast K_c,\tag{10}$$
$F_{mid}$为$F_in$经过Conv-BN-ReLu处理得到。 - 最后利用公式$(11)$得到分类预测$H_c$:
$$H_c=C((1+\xi\cdot F_{\Delta}/||F_{\Delta}||)\cdot F_mid;\Phi),\tag{11}$$
$C(\cdot;\Phi)$表示参数为$\Phi$的分类器。$\xi$是控制细化范围的常数因子。
Dynamic refinement for regression

- 给定输入$F_{in}\in\mathcal{R}^{H\times W\times C}$,首先通过$G_r(\cdot;\psi)$获得$K_r$,之后通过类似公式$(10)$的操作获得$H_{\Delta}$,最后计算得到目标感知的回归结果$H_r$:
$$\begin{split}
&H_b=\mathcal{R}(F_{mid};\Psi),\\
&H_r=(1+\epsilon\cdot tanh(H_{\Delta}))\cdot H_b,
\end{split}\tag{12}
$$
$\mathcal{R}(\cdot;\Psi)$表示参数为$\Psi$的回归器。细化因子通过$tanh$限制在$[-1,1]$范围内变化。$\epsilon$表示防止模型被过大细化而混淆的控制因子,设置为0.1。
实验
- 对比实验



消融实验



- 定性分析

总结
本文总结了现有的有向密集目标检测任务存在的问题,提出了相应的解决方法。文章逻辑结构清晰,实验充分。我觉得文章中提到的物体与轴对齐的感受野不匹配问题就是特征不对齐问题,细化模块本质上就是学习一个映射函数,该映射函数能根据输入特征得到动态的滤波器。
CVPR2020 面向密集多角度物体检测的动态修正网络(DRN)的更多相关文章
- 物体检测之FPN及Mask R-CNN
对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...
- 利用opencv进行移动物体检测
进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...
- 物体检测丨Faster R-CNN详解
这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...
- OpenCV学习 物体检测 人脸识别 填充颜色
介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...
- opencv,关于物体检测
关于物体检测 环境:opencv 2.4.11+vs2013 参考: http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.htm ...
- 『计算机视觉』物体检测之RefineDet系列
Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...
- 后RCNN时代的物体检测及实例分割进展
https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650736740&idx=3&sn=cdce446703e69b ...
- 物体检测算法 SSD 的训练和测试
物体检测算法 SSD 的训练和测试 GitHub:https://github.com/stoneyang/caffe_ssd Paper: https://arxiv.org/abs/1512.02 ...
- ssd物体检测模型训练和测试总结
参考网址:github:https://github.com/naisy/realtime_object_detection 2018.10.16ssd物体检测总结:切记粗略地看一遍备注就开始训练模型 ...
随机推荐
- IdentityServer4 (1) 客户端授权模式(Client Credentials)
写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...
- 社区版Intelij IDEA快速创建一个spring boot项目(找不到sping Initializer选项)
首先作为一个初学spring boot的小白,在学习过程中肯定会遇到各种问题... So,问题出现:在我想快速创建spring boot项目时,却在新建列表中找不到sping Initializer这 ...
- Linux Docker部署
Docker 安装 卸载旧版docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ dock ...
- 坚持第一天:HashMap和Hashtable的区别
其实,到底是用HashMap和Hashtable主要看需求, 1.它们俩都共同实现了:Map接口,但是Hashtable实现是基于Dictionary抽象类的,在java5的时候提供了Concurre ...
- EXCEL 中数据 批量 填充进 word 中
工具:Python3.7 需求描述:将EXCEL中 第二行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件. 再将EXCEL中 第三行 数据 填在 wo ...
- 前端vue2-org-tree实现精美组织架构图
最近遇到开发组织架构的需求,与以往开发的组织架构不同,不光要展示人名,还要显示职务(或者子公司名称).对应的头像等,并且要考虑,如果用户未上传头像,需使用默认头像(男.女.中性),(⊙o⊙)…要尊重尊 ...
- 你真的会做 2 Sum 吗?| 含双重好礼
小预告:文末有两份福利,记得看到最后哦- 2 Sum 这题是 Leetcode 的第一题,相信大部分小伙伴都听过的吧. 作为一道标着 Easy 难度的题,它真的这么简单吗? 我在之前的刷题视频里说过, ...
- Spring中眼花缭乱的BeanDefinition
本篇博客主要参考:Spring官网阅读(四)BeanDefinition(上) 引入主题 为什么要读Spring源码,有的人为了学习Spring中的先进思想,也有的人是为了更好的理解设计模式,当然也有 ...
- Jmeter 常用函数(21)- 详解 __char
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 根据给定的字符值转换成 Unicode ...
- magento 2 cronjob setup
crontab -u magento_user -e */5 * * * * php /var/www/html/bin/magento cron:run >> /var/www/html ...