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物体检测总结:切记粗略地看一遍备注就开始训练模型 ...
随机推荐
- QWebEngineView简单使用
QWebEngineView是提供一个访问web页面的widget,这里是一个简单的使用代码 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #includ ...
- CI4框架应用一 - 环境搭建
CI框架 (codeigniter)算是一个古老的框架了,由于在工作中一直在使用这个框架,还是比较有感情的.我对CI的感觉就是,简单易用,学习曲线平滑,对于新手友好. 目前CI框架已经更新到CI4了, ...
- 07-NABCD项目分析
时 间:2020.3.31 参加人员:向瑜.赵常恒.刘志霄 讨论记录内容: NABCD模型 ·N(need)-向瑜 你的创意解决了用户的什么需求? 1. 随时随地记录个人收支的明细,清楚明白的知 ...
- Bytom Dapp 开发笔记(二):开发流程
简介 这章的内容详细分析一下涉及智能合约Dapp的整个开发流程,注意是涉及只能合约,如果你只要一些基本转BTM功能没有太大意义,本内容补充一下官方提供的 比原链DAPP开发流程,详细实践过好踩到的一些 ...
- Python 为什么能支持任意的真值判断?
本文出自"Python为什么"系列,请查看全部文章 Python 在涉及真值判断(Truth Value Testing)时,语法很简便. 比如,在判断某个对象是否不为 None ...
- java循环语句for与无限循环
一 for循环 for循环语句是最常用的循环语句,一般用在循环次数已知的情况下. 格式: for(初始化表达式; 循环条件; 操作表达式){ 执行语句 ……… } 循环流程: for(① ; ② ; ...
- java方法中参数传递与随机点名器、库存管理案例
一 参数传递 1.定义: 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数, 这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我 们称 ...
- 关于python中Enum的个人总结
关于python中Enum的个人总结 初识 可以通过enum模块导入 语法 初始化: 可以通过enum_ = Enum('class_name', names,start = 1)来创建,其中name ...
- clients-producer-网络处理与请求响应对接部分
- Istio Routing 实践掌握virtualservice/gateway/destinationrule/AB版本发布/金丝雀发布
原文 在学习像 Istio 这样的新技术时,看一下示例应用程序总是一个好主意. Istio repo 有一些示例应用程序,但它们似乎有各种不足. 文档中的 BookInfo 是一个很好的示例. 但是, ...