IGCV3: Interleaved Low-Rank Group Convolutions for Efficient Deep Neural Networks

URL: https://arxiv.org/abs/1806.00178
IGCV3,BMVC2018,在IGCV2基础上进行的改进,主要引入bottleneck的网络结构来改善IGCV2网络的信息交互,从而进一步提高网络效果。
在IGCV2中曾提到过一个互补条件:前面一级group convolution里不同partition的channel在后面一级的group convolution要在同一个partition里面,那么follow这个逻辑设计的IGCV2网络结构的每一个输出channel、输入channel之间将有且仅有一条路径可以连接,示意图如下,这就会导致网络过于稀疏不一定有利于网络的整体性能:

那么在IGCV3网络设计中借助bottleneck结构提出了super-channel的概念,每一个super-channel其实就是一组channel,first group convolution是1x1的卷积,它把网络变宽,second group convolution是3x3的spatial conv,third group convolution 同样是1x1的卷积,它又把网络结构压缩到原来的宽度,整个过程中的permutation和IGCV1、IGCV2的逻辑是一致的,这样设计之后每一个输出和输入的channel之间都会有多条路径可以交互,这样就优化了IGCV2网络设计中的问题,具体逻辑如下图:

IGCV1、IGCV2、IGCV3在CIFAR上面的对比:

和MobileNetV2的对比:

和其他现有针对移动平台设计的网络对比:

阅读全文
IGCV2: Interleaved Structured Sparse Convolutional Neural Networks

URL: https://arxiv.org/pdf/1804.06202
IGCV2, CVPR2018, 主要把IGCV1中提到的group convolution进行了推广,将卷积操作变的更加稀疏,以此来达到减少冗余的目的。
在IGCV1论文中作者把IGC操作抽象成如下的表达式,x为输入,x前面的表达式整体是一个dense convolution kernel:

本论文中提到的Interleaved Structured Sparse Convolution就是它的一般表达:

那么为了保证输入x前面的表达式同样是dense convolutional kernel,论文中做了条件约束:前面一级group convolution里不同partition的channel在后面一级的group convolution要在同一个partition里面, 那么follow IGCV1的结构设计第一级group convolution为spatial conv (3x3)其余为1x1:
下图是wangjingdong的PPT上对IGCV2结构的描述示意图,比论文里面的示意图要清晰直观很多,其实就是把IGCV1的第二个group convolution再划分成多个1x1的group convolution操作 :

实验Group Convolution的组数对结果的影响:

和其他一些网络模型的结果比较:

阅读全文
Interleaved Group Convolutions for Deep Neural Networks

URL: https://arxiv.org/abs/1707.02725
下图是IGCv1的整体示意图:

具体做法,首先整个IGC block会被分成两个部分,primary group convolutions 和 secondary group convolutions:
primary group convolutions的输入首先会被分成L个partition,每个partition共M个channel, 每个partition内部进行一般的spatial conv操作,最后的输出还会是ML个channel,那么在secondary group convolutions阶段,上一阶段的输出会先被shuffle一下然后再划分为M个partition,每个partition L个channel,对于第i个partition它其中的M个channel分别来自于前一个阶段的每个partition的第i个channel组成,然后每个partition内部进行1x1的卷积操作,最后还是会输出ML个channel,这ML个打乱的channel会再次映射回输入时候的顺序, 整个过程被抽象成如下的卷积操作,P为序列化:

除了IGC主要的逻辑以外论文中也花了比较多的篇幅在论文,IGC比常规的conv操作在同等参数量的情况下宽度更宽,论证比较简单具体可以参考论文,同时作者也通过实验证明了更宽的网络可以得到更好的结果:

最后的一组实验结果

阅读全文
High Performance Visual Tracking with Siamese Region Proposal Network

URL: http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/2951.pdf
Siamese-RPN, CVPR2018一篇关于tracking的论文,论文所提方法的整个逻辑还是基于孪生网络来做,整体也可以理解为对Siamese-FC结构的改进,下图是Siamese-RPN的整个Pipeline:

Siamese-RPN网络的整个逻辑还是分成两个分支, 上面一个分支针对关键帧,下面一个分支针对检测帧,两个分支本身的参数是共享的,Siamese网络完成对两张输入图片的特征提取,两个分支的输出还会经过上图的Region Proposal Network网络来整合两者的信息.
具体做法和RPN网络类似,前一层Siamese网络的每一个分支都会接入两层的conv然后分成两个分支,一支为cls,另一支为reg,关键帧的输出如上图的4×4×(2k×256) 和 4×4×(4k×256),这两个输出会分别作为对应的检测帧输出的kernel来进行卷积运算(上图中的*号操作)。这两者最后的输出就是检测帧最后的检测结果。
那么在得到最后预测的结果时针对tracking的应用场景,作者也提出了一些选框的策略,一是默认物体的移动速度不快,所以只选取靠近中心的anchor:

另外一个做法就是对当前得到的proposal进行重新排名,比如利用cosine window来对距离重点点比较远的候选框进行抑制或者同样基于物体移动速度不快的假设可以默认物体的size变化也不大所以对scale进行penalty,形变比较大的得分会被抑制,具体打分如下,k为超参数,r为proposal的ratio,r’为上一帧的ratio,s和s’则是对应的整体的ratio(输入图片多尺度scale),论文中应该采取的是后者:

实验结果
VOT2015:

VOT2016:


SiamRPN网络相比SiamFC直接出了框的具体坐标位置,感觉对于跟踪的任务更加合理,也避免了SiamFC相对比较繁琐的后处理,在测试集上的效果也是要比SiamFC好一些。

阅读全文
Learning to Track at 100 FPS with Deep Regression Networks

URL:https://arxiv.org/abs/1604.01802
论文主要提出了GOTURN的tracking框架,整体还是比较naive的一些tracking逻辑,下图是GOTURN整个的pipeline:

GOTURN整个框架是针对连续的两帧来做的,整个框架因此也主要分成两个分支,分别针对当前帧和前一帧,给定当前帧(t)和前一帧(t-1),t-1帧的物体是已知的,比如物体框中心为center(cx, cy),长宽分别是w、h。那么对于下面一个分支首先会以center为中心,长宽分别是k1w, k1h去抠图,k1这个系数用于控制context信息的量。那么对于上面一个分支,会从同样的位置center作为中心,长宽分别是k2w,k2h去抠图作为当前帧的搜索区域。论文中也提及了一下通常k2 = 2。这两个分支的输出最后会被concat到一起送入一个3层的FC网络,每层FC有4096个神经元,每个分支本身的结构是CaffeNet的前五层。

那么在具体训练的时候,论文中主要提及了一些数据增强的细节,比如论文就直接说明GOTURN本身在训练的时候就是针对低速运动的物体进行的设计,对于高速运动的物体并不能cover。至于GOTURN对低速运行物体的跟踪也跟论文中提到的数据增强方法有关,模型在具体训练的时候会构造这样的pair对:


其中控制偏移幅度的变量delta服从Laplace分布。

具体的实验结果

Ablation Study:

阅读全文
AI Benchmark: Running Deep Neural Networks on Android Smartphones

URL: https://arxiv.org/abs/1810.01109
关于手机各种硬件平台一篇比较好的科普论文,论文主要提出了一个AI Benchmark来客观评估各个手机平台包括华为海思、高通、联发科、三星、谷歌Pixel等在标准CV任务比如识别、分割上面的具体表现。

论文主要介绍了华为海思、高通、联发科、三星、谷歌Pixel等手机平台针对AI任务所做的具体优化:

  • 高通:SNPE(Snapdragon Neu- ral Processing Engine),支持大多数主流的框架比如Caffe、Tensorflow等,需要INT8量化。
  • 华为海思:NPU(Neural Processing Unit), 当前总共有两款NPU,970和980。目前只支持Caffe和Tensorflow平台,论文中也提到了目前应该只支持16-bit float。
  • 联发科:APU(AI Processing Unit), 需要INT8量化,论文上写只有P60,现在应该还有其他的APU发布。框架的话支持Caffe、Tensorflow、ONNX。
  • 三星:VPU(Vision Processing Unit), 主要用在手机摄像头,目前没有提出对AI任务的针对性支持
  • Google:IPU( Image Processing Unit ),支持16-bit int和8-bit int,目前也没有提出对AI任务的针对性支持。

论文另外一个主要内容就是介绍了其”AI Benchmark”, 至于具体的任务和具体的模型下表给了一个相对比较仔细的介绍,总共是下表的8个任务外加一个Memory Limitation测试共9个测试任务:

实验结果

阅读全文
Bottom-up Pose Estimation of Multiple Person with Bounding Box Constraint

URL: https://arxiv.org/abs/1807.09972
一篇基于Bottom Up逻辑的pose estimation论文,但是实际上和刚读的PRN那篇论文比较类似可以理解为Top Down + Bottom Up结合的方法,论文所提的方法主要是OpenPose再结合人体框的检测来做多人的pose estimation。

论文所提方法的整个逻辑如下图,整体可以理解为OpenPose再加上人体BBox约束来提升group的效果:

  • CNN Regression: 网络这个分支可以直接理解为OpenPose的逻辑,只是作者再OpenPose的基础上做了一些简单的修改比如更换backbone等,整体结构和逻辑和OpenPose基本是一致的:

  • Pose Parsing: 主要是利用CNN Regression分支的结果来解析pose,本论文所提方法在做pose parsing 的时候是每个人体框分别来做,不同于PRN,本文所提方法对于一个框是可以出多个人的结果的,具体贪心逻辑如下:
  • Pose NMS:主要是制定了一些规则来定义Pose的Confidence、Pose的距离:
    Confidence:s1是pose所有点confidence均值,s2是pose所有connection confidence的均值,B是pose最小外接矩形面积,B是bbox面积

    distance:

    Experiments

    作者只和OpenPose、CPM做了比较。。。。


    Top Down和Bottom Up分别都有各自比较明显的缺点和优点,目前也陆续有两者结合的研究工作出现,感觉是一个可以去研究的内容。
阅读全文
MultiPoseNet: Fast Multi-Person Pose Estimation using Pose Residual Network

URL: https://arxiv.org/abs/1807.04067
ECCV2018一篇利用bottom up方法做pose estimation的论文。论文所提出的方法主要是分别利用两个分支一个分支用来检测人体框,另一个分支用来出关键点的heatmap。然后再利用一个网络来merge 两个分支出的结果,将关键点分别映射到对应的人体框上实现多人的姿态估计。

下图是本文所提方法的大体Pipeline,整个pipeline可以分成三个部分,人体关键点检测、人体框检测和关键点的聚类(PRN):

  • Backbone:Resnet + FPN
  • 关键点检测:整个分支结构如下图,比较直观,L2 loss,总共出K + 1 个heatmap,+1为seg的结果:
  • 人体框检测:就是直接上的RetinaNet
  • Pose Residual Network (PRN):这一部分内容是论文的核心,主要是利用人体框将关键点检测的结果映射到对应的instance上。具体做法是在关键点检测的结果上利用对应人体框的位置crop出一样大小的patch,这样就可以得到K x W x H大小的feature map,K为关键点个数,W、H为对应人体框的size,然后把这个feature map resize到固定大小(36 x 56)作为PRN的输入。那么对于上图的c、d这种同一个框有多个人关键点overlap的情况,主要是利用一个多层感知机(residual multilayer perceptron)来把人体框对应instance的关键点提取出来,具体逻辑如下图:

    结果:

这篇论文另一个比较重要的点是虽然整个网络的pipeline比较多但是inference的速度还是比较快的,对于典型的COCO图片(~3人)可以达到23FPS的速度,用来merge的PRN网络输入比较小层数也不深。

阅读全文
Two-Stream Transformer Networks for Video-based Face Alignment

URL: https://ieeexplore.ieee.org/document/7999169
这是一篇TPAMI2018的论文,论文主要的研究内容是视频场景下的facial landmark 定位的问题。论文的motivation也比较直观,和之前看过的RED-Net很类似,就是想借助于视频流提供的temporal信息再加上静态图片的spatial信息来优化视频场景下的facial landmark问题,比如pose、遮挡等。

下面这幅图是论文中给出的整个框架的示意图,画的比较直观论文中所谓的Two-Stream就是Spatial stream 和 Temporal stream这两个branch,两个分支的输出最后通过不同的权重整合到一起作为最后的输出:

  • Spatial Stream: 这个分支通常是和一般的静态图片处理方式是一致的,论文中所提方法分为两个部分,sampler和regression, sampler是从原图中进行采样local patch的过程,local path就是每个landmark点周围的dxd的区域,论文中取d=26。regression则是一个标准的CNN网络,接受local patch为输入回归具体的landmark坐标(实际上回归的是offset),为了达到比较高的精度论文在实际做的时候其实做了两阶段的cascade:
  • Temporal Stream:这一个分支通常是视频场景下facial landmark定位特有的处理过程, 为了对视频的时序信息进行处理,不少的论文都是采用RNN模型来进行处理,本文也不例外,temporal stream分支的输入是一段连续的帧,这些帧首先会经过encoder进行处理提取图片的一些context的信息,然后会根据时序依次输入到两层RNN中,第一层RNN layer通常来编码一些整体的特征信息,第二层RNN layer则用来编码一些变化的时序信息例如pose等,最后RNN的输出会经过decoder映射回输入的size保持原有的spatial 信息然后再经过比较小的回归网络得到最后的landmark输出:

论文主要在300-VM和TF(Talking Face)两个数据集进行了实验,相比较之前的REDN、TCDCN模型都有提升:
300-VW上的表现:

视频场景下的facial landmark定位相比静态图片的facial landmark定位增加了时序信息可以利用,目前的研究所用方法也比较类似,之前看过的REDNet和这篇TSTN都是通过CNN+RNN的逻辑来整合spatial信息和temporal信息,感觉这种信息融合的方法还需要仔细的去研究。

阅读全文
DropFilter: A Novel Regularization Method for Learning Convolutional Neural Networks

URL: https://arxiv.org/abs/1811.06783
论文主要提出了一种新的Regularization方法DropFilter,主要是对卷积核进行抑制,具体实现的时候也比较简单,只要对卷积核和bias生成对应的0 - 1mask(Bernoulli分布),然后对应和kernel相乘即可:


在DropFilter的基础上作者还提出了DropFilter-PLUS方法,主要是针对卷积操作过程中的每一个位置都进行一次独立的DropFilter操作,那么对于一个224x224的输入需要计算222x222次mask操作(3x3conv),计算量比较大,作者在论文中分析具体的conv操作(论文中提及的alx,y)最后通过对卷积的输出进行mask来等价,这就大大加速了DropFilter-PLUS的操作:

DropFilter和Dropfilter-PLUS都有一定的道理,并且简单易实现

阅读全文
Robust Face Detection via Learning Small Faces on Hard Images

URL: https://arxiv.org/pdf/1811.11662.pdf
论文主要是想解决人脸检测中的小脸问题,论文的motivation其实和SNIP很像,让网络去学习一个相对固定的scale,比如在本论文中anchor大小被设置为固定的16x16,32x32,64x64三个。论文主要的内容有两个部分,一部分是提出来的检测网络,另一部分就是hard image mining。

论文所提的检测网络backbone采用VGG16,在接入cls和reg前经过dilation conv来获得不同的感受野,其他没有特别的内容:


而hard image mining是image level的,作者针对图片的难易程度定义了一个变量WPAS, 简言之是综合proposal的IOU以及score信息来量化图片的难易程度,WPAS>0.85被定义为简单的图片:

最后在训练的时候对于当前epoch会借助前一个epoch的信息把训练数据都划分成easy和hard两类,再从easy中以0.7的概率剔除掉一些图片,剩下的图集作为当前epoch的训练数据来训练模型。

阅读全文
Deep Layer Aggregation

URL: https://arxiv.org/pdf/1707.06484.pdf
CVPR2018的一篇关于layer aggregation的论文,论文的motivation是作者觉得目前常见的aggregation方式(FPN、U-Net…)比较shallow,作者希望利用更加deeper的连接方式来更好的融合特征。论文中作者分别提出了IDA和HDA两种连接方式。IDA应用在stage之间,HDA应用在block之间。

下图是论文中对IDA和HDA给出的直观图示,下图的c是IDA(Iterative Deep Aggregation),整体和FPN的连接方式比较类似,只是方向相反,浅层的特征被不断的refine与高层特征相融合。下图的d,e,f对应着HDA(Hierarchical Deep Aggregation),d是HDA最原始的表达,整体是一个树状结构,跨越不同层级的特征分层次进行特征融合,e则是在d的基础上将前面节点的父亲节点与当前节点一同考虑进行特征融合。f则是作者出于降低模型复杂度的角度将e同一层级的节点进行merge:

下面这幅图是论文中将IDA和HDA合并到一起具体的模型应用,也就是论文标题的Deep Layer Aggregation模型,橙色的连线是IDA的逻辑,红色框内部的连接是HDA的逻辑:

而对于一些比如seg的‘image-to-image’任务,只需通过增加简单的插值操作就可以实现:

为了验证DLA的有效性作者还是做了比较多的实验的,作者分别在Classification、Fine-grained Recognition、Seg、Boundary Detection几个主流的cv task上都做了实验,都有不同程度的提升:
分类的实验:

识别的实验:

论文中作者提出的IDA和HDA感觉还是很合理的,作者同时还提及residual connection在实验时对比较深的网络是有效的,对于比较浅的网络是有负面作用的。

阅读全文
Deep Mutual Learning

URL: http://cn.arxiv.org/pdf/1706.00384v1
论文主要在讲mutual learning相互学习,deep mutual learning整体感觉和model distillation还是比较像的,只是不是用训练好的大网络来带小网络而是用一些网络相互同步学习来提高模型整体的效果:

对于其中的单个网络除了本身分类的cross entropy loss外还会涉及到KL散度来度量两个网络预测结果之间的loss(K是网络个数):



补充一些作者针对mutual learning的有效性做的一些探究:

  • 作者认为DML相对独立的模型得到了wider minima,因此更加鲁棒,作者设计了一组实验对网络的参数增加了一些噪声,下图是增加噪声前后的结果,正常比较的时候两者相似,增加噪声扰动之后DML效果相对更好:
  • K个模型的mutual learning通常可以有两种表现形式,一个就是当前这个模型和其余的K-1个模型分别进行KL distance计算,另一个就是当前模型只要和其余K-1个模型的预测结果均值来进行KL distance计算,作者实验发现后者其实效果会更差,作者认为是多模型结果的融合影响了一些网络细节的teaching signal:
阅读全文
Center Loss - A Discriminative Feature Learning Approach for Deep Face Recognition

URL:http://ydwen.github.io/papers/WenECCV16.pdf
这篇论文主要的贡献就是提出了Center Loss的损失函数,利用Softmax Loss和Center Loss联合来监督训练,在扩大类间差异的同时缩小类内差异,提升模型的鲁棒性。


为了直观的说明softmax loss的影响,作者在对LeNet做了简单修改,把最后一个隐藏层输出维度改为2,然后将特征在二维平面可视化,下面两张图分别是MNIDST的train集和test集,可以发现类间差异比较明显,但是类内的差异也比较明显。

为了减小类内差异论文提出了Center Loss:

Cyi就是类的中心点特征,Cyi的计算方法就是yi类样本特征的均值,为了让center loss在神经网络训练过程中切实可行,Cyi的计算是对于每一个mini-batch而言,因此结合Softmax Loss,整个网络的损失函数就变成了, λ用来平衡这两个Loss:

用同样的网路结构只是将Softmax Loss替换成Center Loss作者在MNIST数据集上做了同样的实验,对于不同的λ值得到了如下可视化结果可以发现Center Loss还是比较明显的减小了类内差异同时类间差异也比较突出。

在公开数据集上的表现:

阅读全文
CRAFT Objects from Images

URL:https://arxiv.org/abs/1604.03239
CVPR2016的一篇论文。首先CRAFT代表 Cascade Region proposal network And FasT-rcnn,本论文主要想解决RPN网络生成的区域不太精确的问题,比如对于一些外观复杂度较低的事物如树木,会因为RPN网络产生的背景区域的存在导致比较难检测或者产生FP,因此作者尝试利用cascade的方式来解决这样的问题。
CRAFT模型可以分成两个部分:

  1. Cascade Proposal Generation:这一部分同样可以分成两个部分,RPN和FRCN,FRCN其实就是一个Fast R-CNN网络,两个网络分别训练,RPN网络生成相对粗糙的区域,FRCN用RPN的输出作为输入对RPN的结果进行进一步的refine,提高了候选区域的质量也减少了背景框:
  2. Cascade Object Classification:Cascade Object Classification部分由两个FRCN网络级联而成,Cascade Proposal Generation部分的输出会作为FRCN1的输入,FRCN1的输出摒弃掉“背景”类作为FRCN2的输入,实现细节上两个模型复用参数。这里需要注意的是,作者认为为了学习类间的细微差别,模型复用了被Fast RCNN抛弃的 One-vs-Rest的分类方式,用N个二分类的交叉熵损失函数的和作为最终的loss。

    最终在VOC上面的表现效果:
阅读全文
Weighted Channel Dropout for Regularization of Deep Convolutional Neural Network

URL:http://home.ustc.edu.cn/~saihui/papers/aaai2019_weighted.pdf
【Summary】AAAI2019的一篇关于Regularization的论文,整体感觉可以理解为SENet思想在Regularization中的应用。论文中作者提出了Weighted Channel Dropout(WCD)的逻辑(为每一个channel计算权重、构造取舍的概率…)来对channel进行选择性的DropOut。


上面这张图是WCD的整个Pipeline,整个结构主要可以分成三个部分:

  • Rating Channels:这个模块主要是为每一个channel构造一个全权重,逻辑很简单就是Global Average Pooling:
  • Weighted Random Selection (WRS): 这一部分逻辑其实也很简单,作者定义了每个channel被选择的概率为:

    那么在具体计算的时候是这样做的,ri是一个(0,1)之间的随机数,对于这两个计算方式的等价性,论文中作者给出了引用论文可以具体参考:

  • Random Number Generation (RNG): 这个可以理解为在WRS基础上的一个补充吧,在实际应用中有时间可用的数据量比较小,那么这种情况下通常会用pretrain的模型来初始化网络,那么作者认为这种情况下channel之间的差距会更大,可能只有少部分的channel会有比较大的响应,那么根据WRS选出来的channel可能也很像,所以针对WRS选中的channel依然会有1 - q的概率被抛弃,那么最终每一个channel的状态就和WRS、RNG都有关:

    论文中取alpha为:

    一些实验结果



作者还贴了一个和SENet比较的结果:

阅读全文
Parallel Feature Pyramid Network for Object Detection

URL:https://arxiv.org/abs/1612.03144
ECCV2018的一篇论文,这篇论文从某种程度上来说是为了解决小物体检测的问题,作者从feature map特征表示好坏的角度来分析目前常用检测模型的一些不足。论文分别可视化SSD、FPN、PFPNET(本文所提模型)对同样输入图片的feature map,从图中可以看出来SSD对物体的轮廓细节描述比较差,FPN对于一些遮挡物体的特征表示比较差。PFPNET则相对好一些,至于为什么好,以及这个结构设计的理由论文貌似并没有解释。


论文的主要内容:

  1. Parallel Feature Pyramid Network for Object Detection (PFPNET)模型结构:整体结构和RetinaNet比较像,不同的是PFPNET的multi-scale是一个并行的结构,和RetinaNet中的feature layer之间是一个串的结构是不一样的。模型首先利用Base Model(论文中用的是VGGNET-16)得到PFPNET结构的输入(DxWxH),然后利用SPP产生不同scale的feature map(FP Pool),不同scale的feature map长宽分别以2倍大小减少,对于每一个scale分别再利用Bottleneck Layer完成特征的转化。最后就是特征的融合(MSCA),模型基本结构图:
  2. Multi-scale context aggregation(MSCA):本文用的特征融合还是常见的concatenate方式,对于第n个分支最后的融合的特征Pn, 它有第一层FP Pool中与之对应的feature map以及第二层FP Pool中其他的N-1个feature map相融合而得到。然后对于最后的n个feature map分别进行cls + reg的任务即可。
  3. Some details: 论文主要用refinedet和ssd作为baseline来比较,PFPNet-S代表和SSD相同的anchor设置,PFPNet-R代表和RefineDet相同的anchor设置,300和512则代表具体输入图片的size。

实验结果,论文主要对比的对象是SSD和RefineDett,其中从整体上来看在COCO数据集上PFPNET的表现貌似并不是最优的,作者则具体分析了在小物体等场景下的优势:

阅读全文
An Analysis of Scale Invariance in Object Detection – SNIP

URL: https://arxiv.org/abs/1711.08189
【Summary】CVPR2018的一篇Oral,主要在研究scale invariance或者说是domain shift的问题,论文所提出的SNIP方法不同于multi scale的逻辑,可以理解为把网络输入的物体norm到一个相对固定的scale,inference的时候也做同样的策略,这样可以避免训练和测试数据集的scale invariance的问题。

论文在分析scale invariance问题的时候做了几组实验:

  • 实验一:训练三个模型CNN-B(224x224作为输入的图)、CNN-S(和CNN-B类似的图片只是针对输入图片的尺寸修改了第一层conv的stride,可以理解为针对输入图的尺寸做的Resolution Specific Classifier)以及CNN-B-FT(224x224输入图预训练模型 + 用低分辨率图片upsample搭配224x224来finetune)。CNN-B在48x48~224x224范围的输入图上效果如下图a,可见效果随分辨率大小逐渐变好,224x224最好。CNN-B-FT的效果也有一定提升。从结果中也可以发现domain shift对模型的影响:

  • 实验二:验证集固定为1400x2000的分辨率

    1. 分别训练800x1400和1400x2000的检测模型,1400x2000效果最好,但是提升有限,作者认为是因为提升分辨率有助于小物体的检测但是对于大物体的检测是有坏处的
    2. 训练1400x2000的模型忽略特别大的物体,最后的结果比800x1400的效果更差,因为抛弃了比较多的数据,丢失了variation in appearance and pose
    3. Multi-Scale Training最后的结果和800x1400的效果差不多。作者认为过程中同样出现了过大和过小的物体。

针对上面实验的结果论文所提出的SNIP方法想法很直接,可以理解为是Image Pyramid的改进。SNIP通过在训练和inference的时候控制物体到一个固定的scale来保证检测的效果。实验一和实验二的结果也支持来这一点。具体实现的时候针对不同scale的输入,论文中都分别定义了一些proposal的面积范围,网络训练的时候只有落在给定范围内的proposal才会回传梯度。这也是SNIP中Scale Normalization的实际含义:

阅读全文
SGDR: Stochastic Gradient Descent with Warm Restarts

URL: https://arxiv.org/abs/1608.03983 Github: https://github.com/loshchil/SGDR
【Summary】ICLR2017一篇关于学习率的论文,论文的核心比较直接就是提出了基于cosine的学习率 warm restart逻辑,然后论文的大篇幅都是围绕这个learing rate进行了比较多的实验。论文所提的SGDR通常只需要原有模型1/2-1/4的训练epoch就可以得到差不多甚至更好的效果。

论文所提的cosine learning rate 公式如下,nmin、nmax就是学习率的区间,Tcur表示当前经过多少个epoch了,Ti可以理解为周期。因为从下面这个公式当Tcur = Ti时,nt = nmin


作者在具体实验的时候其实还涉及到另一个参数nmult代表周期的系数,下图是不同的Ti和Tmult画出来的示意图:

下图是作者在CIFAR-10和CIFAR-100数据集上用Wide Residual Neural Network(depth=28&width=10)做的实验,效果很直观,SGDR收敛速度明显比较快:


下表是具体的实验结果,从结果上看效果也是不错的:


此外作者也从ensemble、downsampled imagenet dataset的角度做了不同的实验,结果也都很好:
Ensemble:


Downsampled imagenet dataset:

论文所提的这种warm restart逻辑感觉还是很合理的,可以优化梯度下降中鞍点以及局部最小解的问题,有助于模型能快速收敛。

阅读全文
Unconstrained Face Alignment without Face Detection

URL: https://ieeexplore.ieee.org/document/8014992
【Summary】 CVPR2017 Workshop一篇关于人脸关键点检测的论文,应该主要是在参加CVPR2017的一个Menpo Challenge。 整篇论文的主要内容可以理解为把OpenPose中的一些做法应用到人脸关键点定位任务中。
下图是论文中给出的对所提方法整个pipeline的示意,论文所提方法主要可以分成两个部分Basic Landmark Prediction Stage(BLPS)和 Whole Landmark Regression Stage(WLRS)。第一部分负责得到人脸关键点的粗定位(其实只是所有关键点中几个主要的点比如眼球、鼻尖等),第二部分负责在第一阶段的基础上进行进一步的refine:

  • Basic Landmark Prediction Stage:这一部分可以直接理解为OpenPose 中PAF在人脸关键点中的应用。具体细节可以直接参考OpenPose那篇文章。只是在本论文中当前阶段只处理人脸关键点中主要的几个点(左右眼球、鼻尖和左右嘴角共5个点)。
  • Whole Landmark Regression Stage:这一部分是直接接在BLPS之后进行的。首先会利用BLPS的结果根据关键点的可见性判断人脸的Pose,总共分成三类:left profile、right profile、semi-frontal。那么论文本身是对这三种pose计算过模版脸的,所以可以直接align 到模版脸上,最后直接送到回归网络回归最后的精确结果。感觉这也是目前人脸关键点任务中比较常用的方法:\

论文用的训练数据来自300W + Menpo + CelebA,作者在300W数据集上做的实验结果:

这篇论文可以理解为OpenPose方法在人脸关键点定位任务上的直接应用,从方法整体的pipeline上看其实和目前我们在做的landmark定位逻辑是一致的,都是先给部分点的位置然后align在精细refine所有的点。

阅读全文
Squeeze-and-Excitation Networks

URL:https://arxiv.org/abs/1709.01507
Github:https://github.com/hujie-frank/SENet

CVPR2017的一篇论文,CNN网络卷积操作本身是整合空间信息和channel信息的,论文作者的motivation是显式地对channel做attention来提高模型的表达能力,论文主要的内容就是一个SE Block:

SE Block主要分成两个部分:

  1. Squeeze:上图中的Fsq, 本质就是一个Global Average Pooling,将H x W x C映射成1x1xC:
  2. Excitation:上图中的Fex, 本质就是两个全连接层来学习channel的权重信息,W1是第一层FC参数,输出为C/r,W2为第二层FC参数,输出恢复到C,r为压缩比例,用来减少参数量:

    最后将excitation得到的输出施加到对应的channel上就可以得到最终的输出(图中的Fscale)SE Block本身的设计是一个嵌入模块,所以它可以方便的结合现有的网络结构,论文中给了两个示例SE-Inception和SE-ResNet:


    论文中还重点论述了SE Block不会对原模型带来比较大的复杂度,对于输入图片大小为224x224时,ResNet50约3.86GFLOPS,SE-ResNet-50约3.87GFLOPS,实际运行时间两者差别也不是很大,贴一张具体的数据:
阅读全文
Face R-CNN

URL:https://arxiv.org/abs/1706.01061
腾讯AI Lab发表在CVPR2017上面的论文,在2017年可以做到FDDB 和 Wider Face数据集上面的最好结果,Face R-CNN是基于Faster R-CNN框架的模型,基本结构论文给出了比较详细的示意图:

模型主要有以下几个关键点:

  1. Center Loss:论文直接把人脸识别中的center loss沿用到人脸检测中来,出发点还是一样利用Softmax Loss来扩大类间差异,利用Center Loss来减小类间差异,以此来增强模型的鲁棒性,只是在人脸检测中类别总数只有2,人脸和非人脸。

    因此模型最终的Loss就变成了cls loss + reg loss + center loss:
  2. OHEM:利用标准的OHEM做法,以loss作为key排序取Top N作为hard example,作者特别说明使用Center Loss可以有效的控制hard example中的postive和negative的样本数。在最后实现的时候是分别在postive和negative样本上应用OHEM并且控制每个batch两者的比例为1:1.
  3. Multi-Scale Training:这一步其实就是把图片resize成不同的大小进行训练来覆盖不同分辨率……
    最后实验的结果:

论文整体感觉更偏工程化,通过不断尝试融合现有的方法提高模型在数据集上的表现,没有很特别的地方。

阅读全文
Associative Embedding: End-to-End Learning for Joint Detection and Grouping

URL:https://papers.nips.cc/paper/6822-associative-embedding-end-to-end-learning-for-joint-detection-and-grouping.pdf
【Summary】 Pose estimation 任务中另一个典型的bottom up模型,论文的motivation感觉比OpenPose的PAF更加直观易懂,就是为每一个joint学习一个tag用来标记一组joint。然后再用贪心的逻辑来做group。

下图是论文中给出的整个方法的Pipeline,整个网络总共有两个分支,一个输出关键点位置的heatmap,文中称之为detection,另一个分支就是本文的核心associative embedding,论文中称之为grouping:

至于论文中用到的backbone网络是比较常见的hourglass:

Associative Embedding
论文中提及的embedding可以理解为对人物个体的标记,和NLP中的word embedding一样,embedding的维度其实可以是任意的,本论文中作者通过实践觉得1维的embedding 就足够了,所以对于detection的每一个channel在grouping中都一个同样大小的channel与之对应。
在网络训练的时候Detection Loss就是普通的MSE而Grouping Loss是如下设计的:

其中:

hk是grouping中一个输出的channel,x为具体的位置,这主要涉及到论文中的reference embedding,reference embedding就是一个人物个体所有joint 在grouping中输出的均值作为对这个人物个体的表示。而在具体的Loss函数中前半段就是把输入同一个人物个体的joint尽量拉近,而公式的后半段就是把不同的人物个体相互拉开。
具体Inference的时候通过某一个joint的heatmap的峰值来确定检测到的人的pool,然后再依次去利用其他joint的tag来和这个pool里面的人进行match。如果当前这个joint无法和pool里面的任意一个人match,那么就会作为单独的一个人加入到这个pool,然后一直进行这样的贪心流程。

作者在COCO和MPII数据集上分别做了测试,从结果上来看点还是比较高的:

阅读全文
SNIPER: Efficient Multi-Scale Training

URL: https://arxiv.org/abs/1805.09300 Github: https://github.com/MahyarNajibi/SNIPER
【Summary】算是在SNIP版本上的改进吧,主要想优化multi scale训练的效率问题。论文提出了chip的概念,其实就是原图中的某一块区域,在本论文中chip的大小就是512 x 512的矩形方块。网络的输入不再是原图,而是这些生成的chip。SNIPER的主要内容就是这些chip的生成逻辑。

作为网络的输入,chip也分为postive chip和negative chip, 下图是postive chip的生成示例。对于给定的一张图,会有512 x 512这样大小的chip框在原图上滑动,间隔为32个pixel。包含valid gt(valid或者invalid的定义和SNIP那篇论文逻辑一样)的chip被称为postive chip。由于对于给定的一张图片不会把每一个chip都送给网络去训练,所以通常都是贪心的选择包含valid gt最多的chip作为这张图的postive chip:


下面这张图则是negative chip的生成示例,论文中作者生成的negative chip是想包含那些比较难解的FP,所以作者用了一个简单的RPN网络来生成negative chip,下图的红点代表一个proposal(已经移除掉被postive chip包含的那些了)。negative chip被定义为至少含M个proposal的那些chip(论文中M貌似没给出具体的值):


贴一张实验结果:

感觉这篇论文的重点用论文中的一句话可以很好的概括”it implies that very large context during training is not important for training high-performance detectors but sampling regions containing hard negatives is”

阅读全文
RMPE: Regional Multi-Person Pose Estimation

URL: https://arxiv.org/abs/1612.00137
【Summary】ICCV2017关于Pose Estimation的论文,主要是基于目前Top Down方法的改进。论文主要想解决一个问题,就是Top Down方法中human detector出的框不准或者比较冗余的问题。STN来映射更准的框, Pose NMS 来更好的解决冗余框的问题。

下图是论文中给出的对于RMPE方法的简单示例,整个Pipeline针对human detector出框不准或者比较冗余的问题分别进行了针对性的设计,下图中的前半段STN + SPPE + SDTN主要用于fix human detector出框不准的问题,后半段的Pose NMS主要用来解决冗余的问题:

  • SPPE的改进: SPPE(Single Person Pose Estimation)主要改进的地方就是引入STN和SDTN来实现更加精确的pose estimation。细节上STN接受human detector输出的proposal(具体实现的时候会在原有的proposal基础上,长宽各扩展30%以保证覆盖全部的人体区域),STN生成的仿射变换矩阵将当前的proposal映射的更加精确,然后再输入SPPE网络中(实际实验时是4-stack hourglass结构)得到具体的joint的位置,然后通过STN的逆变换SDTN得到原始的坐标位置。下图中的Parallel SPPE作用是对STN进行进一步的监督,监督的Label是已经center-located的pose,所以当然也就不需要SDTN这一步了。从下图中也可以比较直观的看出来,上下两个branch label还是不一样的,为了映射回原坐标,上半分支的SDTN是必要的:
  • Pose NMS: 对于Pose NMS作者主要在研究一件事就是如何来定义Pose 的冗余以及消除冗余的标准,就像物体检测的NMS用IoU和confidence的逻辑一样。论文中作者用如下的方式来定义:

    其中,HSim用来建模距离上的相似度,KSim用来建模confidence之间的关系,B(Kin)代表1以Kin为中心的矩形,矩形大小为这个Pose对应框的1/10:

  • 此外作者也针对所提的RMPE结构设计了Data Augmentation方法,主要是根据原子pose进行聚类,然后对于输入的图像首先对其进行分类,然后利用对应的offset分布构造一组新的数据,具体的分布信息:

    在MPII数据集上的表现:

    在COCO Chanllenge上的表现:
阅读全文
Pelee: A Real-Time Object Detection System on Mobile Devices

这篇论文主要做的内容是在手机终端上进行实时的物体检测并提出了PeleeNet模型,不同于目前的MobileNet、ShuffleNet等基于 depthwise separable convolution的模型,PeleeNet是基于传统的卷积来实现的,因为作者认为depthwise separable convolution操作在诸多的框架下都没有有效的支持……
论文主要借鉴了DenseNet、DSOD、Inception-V4等现有的网络,模型结构在论文中给出了比较详细的列表,几个需要注意的细节:

  1. 作者参考GoogleNet在DenseBlock中引入2-way dense layer来获得不同大小的感受野。

  1. DenseNet中表现较好的DenseNet-BC结构是在原有的基本DenseNet结构基础上加入了Bottleneck和Compression,但是作者认为compression逻辑的加入影响模型的特征表达,所以下表中的Transition Layer没有compression的逻辑,输入输出channel数保持一致。

  1. Composite Function中用Post-activation替换掉DenseNet中的Pre-activation,以此来在inference阶段加速计算。
  2. 用Bottleneck Layer控制输出的channel数不大于输入的channel数,此操作除了可以节省28.5%的计算量,对准确率的影响也比较小。

阅读全文
Cascade R-CNN: Delving into High Quality Object Detection

解决问题:
目前的检测模型通常需要通过设置IoU阈值来定义Positive和Negative bbox,作者发现最终检测模型的表现和IoU阈值的设置相关,通过下图的c,d可以发现低IoU阈值通常会对低IoU样本表现更好,因为不同IoU阈值下的样本分布不一样,一个IoU阈值很难对所有的样本都有效。因此为了解决这个问题,论文提出了Cascade R-CNN 模型。

论文实验的Cascade R-CNN模型基于典型的Two-Stage结构,Cascade R-CNN模型有多个Classification和Bounding Box header(下图中的Cx,Bx),前一个header refine过的Bounding Box 会作为下一个header的输入,并且IoU的阈值逐层增加,B0代表RPN的结果。通过这种方式实现对于每一级header输入数据的resample,保证了每一级header都有足够的正样本。

实验对比,可以发现cascade rcnn的效果还是有比较大的提升,但同时也大幅大增加了模型的复杂度

思考:
Cascade R-CNN结构是现有检测模型优化的思考方向,但是从上图第二章表中也可以看出加入cascade 结构在提高检测效果的同时也大幅度增加了模型复杂度.

阅读全文
Single-Shot Refinement Neural Network for Object Detection

论文致力于研究整合two-stage检测器和one-stage检测器的优点提出了RefineDet网络结构。

网络结构整体借鉴了SSD模型并结合了cascade逻辑,整个网络主要分成三个部分:

  1. Anchor Refinement Module(ARM):这一模块的模型结构和SSD比较类似,不同的是它只做二分类,ARM对anchor进行初步的refine并得到相对粗糙的位置信息和分类信息,这一部分信息将作为ODM模块的输入。
    特别的,为了缓解类别失衡问题,论文提出了Negative Anchor过滤逻辑,将negative confidence大于某一个阈值(如0.95)的anchor全部舍弃掉不送入ODM模块。
  2. Object Detection Module (ODM): 这一模块的结构和ARM类似,并且两者对应layer的size是一致的,论文中给出的结构图例比较直观。ODM模块主要是借助ARM模块refine过后的anchor进行进一步细致的处理并最终输出物体的类别信息和bounding box的位置信息。在具体实现的时候,ARM和ODM之间采用了类似FPN特征融合的方法将ARM高层的feature map与低层的feature map相融合并与ODM对应layer的feature map一同作为下一层layer的输入,以此来提高检测的效果。
  3. Transfer Connection Block (TCB):TCB主要用来融合低层和高层feature map,论文给的图示比较清楚主要就是对高层feature map进行deconv并与低层feature map相加;

实验结果:

阅读全文
CoupleNet: Coupling Global Structure with Local Parts for Object Detection

R-FCN将RoI划分成区域通过整合各个区域的信息来表征最后的结果,而CoupleNet的motivation是利用R-FCN中对局部信息的学习能力再整合全局和context信息来提升模型的检测效果。

CoupleNet网络主要分成两个分支:

  1. Local FCN:引入R-FCN中的Position-sensitive score maps 和 Position-sensitive RoI pooling 得到局部信息给出的结果,对于分类会输出C+1维的特征向量,具体细节直接参考R-FCN即可。
  2. Global FCN:这个分支主要用来整合RoI的全局信息和context信息,上图中的两个RoI Pooling就是分别来映射这部分特征的,第一部分是全局的特征信息,第二部分是在第一部分RoI的基础上范围向外扩大2倍再进心RoI Pooling这样可以引入部分的context信息来增强特征提高检测的效果,最后两者feature map直接concat到一起经过kxk和1x1两个卷积层之后同样得到C+1维的特征向量
  3. Coupling structure:两个分支输出的整合作者也做了很多的实验,(L2 normalization layer , 1x1 conv layer) x (element-wise max, element-wise product, element-wise sum) 共6种组合中1x1 conv + element-wise sum 表现最好。

实验结果,速度方面因为CoupleNet相当于在R-FCN的基础上引入了Global FCN的分支,所以很显然速度要慢于R-FCN的,但还是明显快于faster rcnn的,检测效果方面效果也很好。

阅读全文
DSOD: Learning Deeply Supervised Object Detectors from Scratch

论文主要想解决的问题是如何直接去训练一个detection模型,因为现在detection模型都是利用ImageNet数据预训练的,灵活性相对较差,分类和检测的场景也不一致,因此论文提出了DSOD模型。
论文中提出的DSOD模型结构通过下表可以直观的看到,Stem、Dense Block、Transition Layer都是参考现有的研究成果,论文主要的贡献是
Transition w/o Pooling Layer 和 Dense Prediction Structure:

  1. Transition w/o Pooling Layer:这个结构主要用来实现增加Densen Block模块个数的同时保持输出的size不变,从表中可以直观的看到其实就是1x1的卷积,因为传统densenet中的transition layer会利用pooling层来对feature map下采样,这里用Transition w/o Pooling Layer来保持输出的size与transition layer区分开。

  1. Dense Prediction Structure:论文中用下图来解释Dense Prediction Structure,和常用的结构(左侧)相比较主要的差别在于 Learning Half and Reusing Half,每一层网络的输入都是上一层的输出feature map 和 前面层的下采样结果的concatenate,因此对于每一层的输出一半是通过学习得到的另一半则是直接从前面层下采样得到的,这样可以直接复用前面的信息。

具体的实验结果,或许看完这篇文章最好奇的是从头训练的检测模型和预训练过的检测模型具体效果的好坏,论文的最后作者利用
DS/64-12-16-1做了比较,发现从头训练的模型效果要好于预训练过的模型(70.7% vs 70.3%)

阅读全文