转载自知乎:https://zhuanlan.zhihu.com/p/34142321

关于作者: @李家丞同济大学数学系本科在读,现为格灵深瞳算法部实习生。

-------------------------------------------------------------------------------------------------------

近年来,深度学习模型逐渐取代传统机器视觉方法而成为目标检测领域的主流算法,本系列文章将回顾早期的经典工作,并对较新的趋势做一个全景式的介绍,帮助读者对这一领域建立基本的认识。由于作者学历尚浅,水平有限,不实和不当之处也请指出和纠正,欢迎大家评论交流。

(一)目标检测经典模型回顾

(二)目标检测模型的评测与训练技巧

(三)目标检测新趋势之基础网络结构演进、分类定位的权衡

(四)目标检测新趋势之特征复用、实时性

(五)目标检测新趋势拾遗

-------------------------------------------------------------------------------------------------------

从此篇开始,我们对近几年检测领域的工作提供一个概览,并试图从中归纳出一些趋势。由于篇幅和视野所限,文章不会求全,相对注重思路的演进,淡化实验结果的报告。事实上,我们并没有看到这一任务上的"The Best Paper"和"The Final Paper",现阶段的工作远远没有到解决这一问题的程度,深度学习模型也仍然是非常年轻的研究领域。

实验结果方面,笔者维护了一个检测模型进展追踪项目:Obj_Det_Progress_Tracker,收集了论文汇报的在VOC和COCO上的精度进展,可供参考。

文章结构

本篇关注基础网络架构的演进和处理分类、定位这一矛盾问题上的进展。

基础网络结构的演进

基础网络(Backbone network)作为特征提取器,对检测模型的性能有着至关重要的影响。在分类任务的权威评测集ImageNet上,基于卷积网络的方法已经取得超越人类水平的进步,并也促使ImageNet完成了她的历史使命。这也是机器视觉领域的整体进步,优秀的特征、深刻的解释都为其他任务的应用提供了良好的基础。在本节中,我们选取了几个在检测任务上成功应用的基础网络做一些介绍。

卷积网络结构演进的趋势

笔者认为,卷积网络已经有如下几个经典的设计范式:

  • Repeat. 由AlexNet和VGG等开拓,被之后几乎所有的网络采用。即堆叠相同的拓扑结构,整个网络成为模块化的结构。
  • Multi-path. 由Inception系列发扬,将前一层的输入分割到不同的路径上进行变换,最后拼接结果。
  • Skip-connection. 最初出现于Highway Network,由ResNet发扬并成为标配。即建立浅层信息与深层信息的传递通道,改变原有的单一线性结构。

以这些范式为脉络整理卷积网络的演进历程,可以归纳出下面的图景:

CNN的经典设计范式

需要说明的是,上图并不能概括完全近年来卷积网络的进步,各分支之间也有很多相互借鉴和共通的特征,而致力于精简网络结构的工作如SqueezeNet等则没有出现。除了上面归纳的三个范式,卷积网络结构方面另一个重要的潮流是深度可分离卷积(Depth-wise seperable convolution)的应用。下面我们选择几个在检测任务上成功应用的基础网络结构进行介绍。

ResNet: 残差学习

Deep Residual Learning for Image Recognition

残差单元将原函数分解为残差

作者将网络的训练解释为对某一复杂函数的拟合,通过添加跳跃连接,变对这一函数的拟合为每层对某一残差的拟合(有点Boosting的意思),引入的恒等项也让BP得到的梯度更为稳定。

残差网络以skip-connection的设计较为成功地缓解了深层网络难以收敛的问题,将网络的深度提高了一个数量级,也带动了一系列对残差网络的解释研究和衍生网络的提出。

在检测领域,VGG作为特征提取器的地位也逐渐被ResNet系列网络替代,文章中以ResNet作为基础网络的Faster R-CNN也常作为后续工作的基线进行比较。

Xception:可分离卷积的大面积应用

Xception: Deep Learning with Depthwise Separable Convolutions

Xception网络可以看做对Inception系列网络的推进,也是深度可分离卷积的成功应用。

文章指出,Inception单元背后的假设是跨Channel和跨空间的相关性可以充分解耦,类似的还有长度和高度方向上的卷积结构(在Inception-v3里的3×3卷积被1×3和3×1卷积替代)。

进一步的,Xception基于更强的假设:跨channel和跨空间的相关性完全解耦。这也是深度可分离卷积所建模的理念。

一个简化的Inception单元:

简化的Inception单元,去掉了Pooling分支

等价于:

等价的简化Inception单元,将1x1卷积合并

将channel的group推向极端,即每个channel都由独立的3×3卷积处理:

把分组的粒度降为1

这样就得到了深度可分离卷积。

Xception最终的网络结构如下,简单讲是线性堆叠的Depthwise Separable卷积,并附加了Skip-connection。

Xceptiong的网络结构

在MS COCO Chanllege 2017中,MSRA团队以对齐版本的Xception为基础网络取得前列的成绩,一定程度上说明了这一网络提取特征的能力;另一方面,Xception的一个改编版本也被Light-head R-CNN的工作(将在下一篇的实时性部分介绍)应用,以两阶段的方式取得了精度和速度都超越SSD等单阶段检测器的表现。

ResNeXt:新的维度

Aggregated Residual Transformations for Deep Neural Networks

本文提出了深度网络的新维度,除了深度、宽度(Channel数)外,作者将在某一层并行transform的路径数提取为第三维度,称为"cardinality"。跟Inception单元不同的是,这些并行路径均共享同一拓扑结构,而非精心设计的卷积核并联。除了并行相同的路径外,也添加了层与层间的shortcut connection。

相比Inception-ResNet,ResNeXt相当于将其Inception Module的每条路径规范化了,并将规范后的路径数目作为新的超参数。

ResNeXt的基本单元

上图中,路径被扩展为多条,而每条路径的宽度(channel数)也变窄了(64->4)。

在近期Facebook开源的Detectron框架中,ResNeXt作为Mask R-CNN的基础网络也取得了非常高的精度。

SENet:卷积网络的Attention组件

Squeeze and Excitation Network

SENet是最后一届ImageNet Challenge的夺冠架构,中心思想是添加旁路为channel之间的相关性进行建模,可以认为是channel维度的attention。

Squeeze和Excitation分支

SENet通过'特征重标定'(Feature Recalibration)来完成channel层面的注意力机制。具体地,先通过Squeeze操作将特征的空间性压缩掉,仅保留channel维度,再通过Excitation操作为每个特征通道生成一个权重,用于显式地建模channel之间的相关性,最后通过Reweight操作将权重加权到原来的channel上,即构成不同channel间重标定。

SENet可以作为网络中模块间的额外连接附属到原有的经典结构上,其Squeeze操作在压缩信息的同时也降低了这一附属连接的开销。

SE作为额外部件添加在经典结构上

经SENet改进的ResNet被UCenter团队应用在MS COCO Chanllenge 2017上,也取得了不错的效果。

NASNet:网络结构搜索

Learning Transferable Architectures for Scalable Image Recognition

NAS(Neural Architecture Searh,神经网络结构搜索)的框架最早出现于作者的另一项工作Neural Architecture Search with Reinforcement Learning,其核心思想是用一个RNN学习定义网络结构的超参,通过强化学习的框架来更新这一RNN来得到更好表现的网络结构。

NAS的结构

在本文中,作者参考本节最初提到的"Repeat"范式,认为在小数据集上搜索到的结构单元具有移植性和扩展性,将这个结构单元通过堆叠得到的大网络能够在较大数据集上取得较好的表现。这就构成了文章的基本思路:将网络搜索局限在微观的局部结构上,以相对原工作较小的开销(实际开销仍然巨大)得到可供扩展的网络单元,再由这些单元作为基本部件填入人工设计的"元结构"。

微观层面,作者仍选择用RNN作为Controller,挑选跳跃连接、最大池化、空洞卷积、深度可分离卷积等等操作构成基本搜索空间,以逐元素相加(element-wise addition)和拼接(concatenation)作为合并操作,并重复一定的构建次数来搜索此基本单元。

RNN作为Controller的微观结构搜索,右为示例结构

宏观层面,将基本单元分为Normal Cell(不改变feature map大小)和Reduction Cell(使feature map的spatial维度减半,即stride=2),交替堆叠一定数量的Normal Cell和Reduction Cell形成下面的元结构。

NASNet在不同数据集上的元结构,ImageNet的图片具有更多的像素数,需要更多的Reduction单元

NASNet采取了自动搜索的方式去设计网络的结构,人工的部分迁移到对搜索空间的构建和评测指标的设立上,是一种"元学习"的策略。应用在检测领域,NASNet作为基础框架的Faster R-CNN取得了SOTA的表现,也支撑了这一搜索得到结构的泛化性能。在最近的工作中,作者团队又设计了ENAS降低搜索的空间和时间开销,继续推动着这一方向的研究。

分类与定位问题的权衡

从R-CNN开始,检测模型常采用分类任务上表现最好的卷积网络作为基础网络提取特征,在其基础上添加额外的头部结构来实现检测功能。然而,分类和检测所面向的场景不尽相同:分类常常关注具有整体语义的图像(第二篇中介绍COCO数据集中提到的iconic image),而检测则需要区分前景和背景(non-iconic image)。

分类网络中的Pooling层操作常常会引入平移不变性等使得整体语义的理解更加鲁棒,而在检测任务中我们则需要位置敏感的模型来保证预测位置的精确性,这就产生了分类和定位两个任务间的矛盾。

R-FCN

R-FCN: Object Detection via Region-based Fully Convolutinal Networks

文章指出了检测任务之前的框架存在不自然的设计,即全卷积的特征提取部分+全连接的分类器,而表现最好的图像分类器都是全卷积的结构(ResNet等)。这篇文章提出采用"位置敏感分数图(Position Sensitive Score Map)"的方法来使检测网络保持全卷积结构的同时又拥有位置感知能力。

R-FCN中位置敏感分数图

位置敏感分数图的生成有两个重要操作,一是生成更"厚"的feature map,二是在RoI Pooling时选择性地输入feature map。

Faster R-CNN中,经过RPN得到RoI,转化成分类任务,还加入了一定量的卷积操作(ResNet中的conv5部分),而这一部分卷积操作是不能共享的。R-FCN则着眼于全卷积结构,利用卷积操作在Channel这一维度上的自由性,赋予其位置敏感的意义。下面是具体的操作:

  • 在全卷积网络的最后一层,生成 个Channel的Feature map,其中 为类别数, 代表 网格,用于分别检测目标物体的 个部分。即是用不同channel的feature map代表物体的不同局部(如左上部分,右下部分)。
  • 将RPN网络得到的Proposal映射到上一步得到的feature map(厚度为 )后,相应的,将RoI等分为 个bin,对第 个bin,仅考虑对应 位置的 个feature map,进行如下计算:其中 是这个RoI的锚点,得到的即是 号bin对 类别的相应分数。
  • 经过上一步,每个RoI得到的结果是 大小的分数张量, 编码着物体的局部分数信息,进行vote(平均)后得到 维的分数向量,再接入softmax得到每一类的概率。

上面第二步操作中"仅选取第 号feature map"是位置信息产生意义的关键。

这样设计的网络结构,所有可学习的参数都分布在可共享的卷积层,因而在训练和测试性能上均有提升。

小结

R-FCN是对Faster R-CNN结构上的改进,部分地解决了位置不变性和位置敏感性的矛盾。通过最大化地共享卷积参数,使得在精度相当的情况下训练和测试效率都有了很大的提升。

Deformable Convolution Networks

Deformable Convolution Networks

本篇文章则提出在卷积和RoI Pooling两个层添加旁路显式学习偏置,来建模物体形状的可变性。这样的设计使得在保持目标全局上位置敏感的同时,对目标局部的建模添加灵活性。

可变形卷积的旁支
RoI Pooling的旁支

如上两图所示,通过在卷积部分添加旁路,显式地用一部分张量表示卷积核在图片不同部分的偏移情况,再添加到原有的卷积操作上,使卷积具有灵活性的特征,提取不同物体的特征时,其形状可变。而在RoI Pooling部分,旁路的添加则赋予采样块可活动的特性,更加灵活地匹配不同物体的形状。

可变形卷积和RoIPooling的示例

在MS COCO Chanllege 2017上,MSRA团队的结果向我们展示了可变形卷积在提升检测模型性能上的有效性:

可变形卷积带来的增益

总结

本篇中,我们概述了检测领域基础网络的演进和处理分类定位这一矛盾问题上的进展,基础网络提供更具有语义级区分性的特征,为图像提供更有意义的编码,而分析分类和定位这一对矛盾,则提供给我们对这一任务另一种理解和分治的角度。在下一篇中,我们将关注基础网络提取的特征如何更有效地在检测模型的头部网络中得到利用,以及面向实时性检测的一些进展。

-----------------------------------------------------------------------------------------------------------*-*----

更多详细内容请关注公众号:目标检测和深度学习

---------------------------------------------------------------------------------------------------------------…^-^……---------

(三)基础网络演进、分类与定位的权衡相关推荐

  1. BSN-DDC 基础网络关键知识点(三)接入DDC网络

    id:BSN_2021 公众号:BSN研习社 2022年1月25日,区块链服务网络发展联盟(简称"BSN联盟")上线推出了"BSN-DDC基础网络"并进入试商用 ...

  2. 计算机视觉四大基本任务(分类、定位、检测、分割)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载于:作者 | 张皓 来源 | 知乎(https://zhuan ...

  3. 收藏 | 计算机视觉四大基本任务(分类、定位、检测、分割)

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者 | 张皓 来源 | 知乎(https://zhuanl ...

  4. (二)计算机视觉四大基本任务(分类、定位、检测、分割)

    引言 深度学习目前已成为发展最快.最令人兴奋的机器学习领域之一,许多卓有建树的论文已经发表,而且已有很多高质量的开源深度学习框架可供使用.然而,论文通常非常简明扼要并假设读者已对深度学习有相当的理解, ...

  5. 深度学习(二十)基于Overfeat的图片分类、定位、检测

    基于Overfeat的图片分类.定位.检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187881 作者:hjimce 一.相关理论 本篇博 ...

  6. 网易传媒基础架构演进之路

    网易传媒基础架构演进之路 本文作者: 柴克斌  (网易传媒技术团队) 网易传媒做为国内最早的内容资讯平台,随着业务体量的增加,业务迭代的速度加快,基础架构也面临着很多挑战,为了能提供快速.稳定.安全的 ...

  7. 目标检测中的分类和定位冲突问题

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:steven Li | 来源:知乎 https://zhuanlan.zhihu.com/p/1 ...

  8. 基础网络爬虫(Web crawler)相关技术浅析

    文章目录 前言 基本概念 Robots协议 基本原理 现状概况 爬虫软件 跨语言 Selenium Python urllib requests Scrapy Pyspider Java WebMag ...

  9. Kaggle数据集之电信客户流失数据分析(三)之决策树分类

    一.导入数据 import pandas as pd df=pd.read_csv(r"D:\PycharmProjects\ku_pandas\WA_Fn-UseC_-Telco-Cust ...

  10. CNN基础网络(一)

    CNN基础网络介绍 LeNet AlexNet VGG NiN GoogLeNet CNN(卷积神经网络)借助卷积层保留了输入形状,使图像在宽和高两个方向上的相关性均可能被有效识别,另一方面卷积层通过 ...

最新文章

  1. Linux: debian,ubuntu命令行安装chrome/chromium
  2. 用 CSS 做轮播图
  3. C语言二分法查找数组
  4. 腾讯地图api如何根据地址获取经纬度
  5. JavaScript强化教程—— RegExp 对象
  6. Asp.net Core全局异常监控和记录日志
  7. Android Log
  8. express 项目生成器_用于项目的Express模板生成器(2)| 应用程序结构研究
  9. stm32与micropython_在NUCLEO_H743上玩MicroPython
  10. 【PM模块】基础概念简介
  11. 白色背景,白色文字怎么显示清晰?
  12. python生成所有6位数的数字手机验证码(000000-999999)
  13. Kde桌面程序启动器程序图标无法显示
  14. 二层交换机和三层交换机的工作原理
  15. python爬取微博博主历史博文存入Excel
  16. 下载各省疫情历史数据
  17. 软件设计师知识点(七):程序设计语言与语言处理程序、法律法规知识
  18. PRO-seq数据分析
  19. 目标检测计算指标APmAP
  20. 以MacOS 13为例,VMware 16安装MacOS

热门文章

  1. Spring Bean前置后置处理器的使用
  2. 1:72 美M26龙式重型坦克拖车
  3. linux系统输入法进程怎么关闭,快速解决linux下中文输入法问题
  4. LivePlayer H5播放器(实时视频和历史视频)
  5. linux boot efi 大小,/boot/efi。
  6. psp模拟器完美字库_安卓PSP模拟器评测:假面骑士超巅峰英雄
  7. c语言fixed的用法,Fixed函数
  8. 我找遍全网,整理了1份纯新手向电脑购机&装机攻略!
  9. 利用全加器实现7段数码管_[走近FPGA]之数码管动态显示
  10. 一起重新开始学大数据-java篇-DAY13-ArrayList集合和装拆箱