基于CNN的图像目标检测方法
Two State Method
RCNN(Rich feature hierarchies for accurate object detection and semantic segmentation)
RCNN是第一个成功把深度学习应用到目标检测的算法。RCNN主要解决两个问题:一个是使用深度学习网络来定位目标,二是使用少量标记数据来训练大容量模型。
RCNN出现之前,目标检测有两种方法——一种是把定位问题转化为回归问题,但该方法表现的不好;另一个方法是使用滑动窗口进行识别,但CNN为了保持高空间分辨率只使用了两个卷积层和池化层,但RCNN模型有5个卷积层,从而接收域和步长都非常大,导致定位困难。为了解决CNN的定位问题,使用recognition using regions范式来进行优化。
RCNN出现之前,含标记的数据比较稀缺,其数量不足以支持大型CNN的训练。为了解决标记数据数量少的问题,传统方法是先使用无监督学习,再使用监督学习进行微调(fine-tuning),而RCNN在大型辅助数据集上先进行预训练,然后在小型标注数据集上进行domain-specific的微调,这种方法即可以有效解决标记数据稀缺的问题,且使得模型的预训练变得高效。
RCNN在进行目标检测时出现的主要错误是定位错误,使用bound box regression可以有效消除这种错误。
RCNN的实现步骤:
- 使用selective search在输入图像上生成2000个region proposal;
- 使用CNN从每个region proposal中提取一个固定长度的特征向量;
- 使用类别特定的线性SVM对每个region proposal进行分类;
- 使用bound-box regression对预测的边框进行处理。
训练SVM:由于训练数据过大导致其无法完全放在内存中,提出了hard negative mining方法——把错误分类的样本先归于negative样本,再进行训练,反复如此,直至达到停止条件(如分类器性能不再提升等)。
SPP Net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)
SPP Net主要解决了两个问题——一是RCNN因为需要对所有的region proposal分别进行提取特征,所以速度较慢,SPP Net针对这一点,采取对整张输入图像进行卷积计算来提取特征,加快了处理速度;二是因为全连接层的问题,使得RCNN对输入图像的尺寸有严格的要求,SPP Net方法通过使用SPP layer来替代最后一个卷积层之后的池化层,使得模型可以在输入任何尺寸的图像后生成同样大小的特征图以满足全连接层的需要,使得模型忽略了对输入图像尺寸的限制,同时减少了过拟合的出现。
SPP Net的实现步骤:
- 使用Edge Boxes在输入图像上生成2000个region proposal(Edge Boxes与Selective Search方法的功能相似,但Edge Boxes处理速度更快(每张图像需要0.2s,SS方法每张图像需要1-2s));
- 对输入图像进行resize,其中min(w, h) = s,s是事先定义好的,s∈S{480,576,688,864,1200};
- 对整个图像提取特征;
- 使用SPP layer替代Conv5后的池化层,生成指定长度的特征传入候选的全连接层;
- 针对每个类别训练二元线性SVM对特征进行分类;
- 使用bound-box regression对预测的边框进行处理。
SPP layer的处理过程:
假设Conv5的输出是256维的特征图,使用(1×1,2×2,4×4)的SPP layer进行处理,则生成三个分别为256维、2×2×256维、4×4×256维的特征向量,则后续第一个全连接层FC6输入的大小为21×256维(256+4×256+16×256)。
多尺寸训练multi-size training:使用multi-size training方法,每次在网络上完整的迭代一次,然后更改输入的尺寸进行下一次完整的迭代,通过实验比较发现使用180-224之间的尺寸随机确定输入的尺寸对最终准确率的提高有帮助。使用single-size training方法比RCNN的速度提升了102倍,而mAP只减少了1.2%;使用5-size training方法比RCNN快了38倍,检测效果基本一致。
Fast RCNN
Fast RCNN针对RCNN和SPP Net的处理速度和准确率进行了改进。
SPP Net存在的缺陷主要是因为其处理过程是多层次的,包括特征提取、使用损失函数微调网络、训练SVM、选择合适的bound box regression进行处理,特征需要存入磁盘,导致其速度较慢。因为其不能更新SPP layer之前卷积层的参数,只能使用固定的卷积层,所以导致准确率也不够高。
ROI pooling layer:
ROI是卷积特征图中的一个矩形框,其被一个元组定义(r, c, h, w),r和c是指其左上角的坐标,h和w指其高和宽。
使用最大池化把ROI(region of interest)中的特征转化为一个有着固定尺寸H×W的小特征图(H和W的值独立于任何ROI)。
ROI max pooling是把一个h×w大小的输入分割成H×W个子窗口,子窗口的大小为h/H × w/W(因为池化层输出的大小为H×W,所以子窗口个数为H×W)。ROI层可以看作是一个简化的SPP 层,但ROI只有一层。
multi-task 损失:Fast RCNN有两个滑动输出层,第一个输出层对每个ROI输出一个K+1类(K个类别+背景)的离散概率分布,通常概率分布是通过对全连接层;第二个输出层输出K类bound box的位置坐标信息(r, c, h, w)。每一个ROI被使用ground-truth类别 u 和ground-truth的bound box回归类别 v 进行标记,multi-task损失为:
Lcls(p, u) = log pu是正确类别u的log损失,[u>=1]表示u>=1时为1,否则为0。
其中
Fast RCNN的实现步骤:
- 输入整个图像和一个候选对象集合(即SS方法或EB方法等方法生成的2000个候选对象组成的集合);
- 使用卷积层和最大池化层生成一个卷积特征图;
- 对特征图中的每一个候选对象,使用ROI池化层生成一个固定长度的特征向量;
- 每个特征向量通过两个滑动输出层,输出一个K+1类的概率分布和K个四元元组,该四元元组定义了每一个类别的bound box的位置。
Fast RCNN的优势:
- 比RCNN和SPP Net更高的检测质量(更高的mAP);
- 训练使用single-state 且使用multi-task 损失;
- 训练过程中可以更新所有卷积层的参数;
- 因为Fast RCNN中大部分是end-to-end的训练,所以特征只需存储再显存,不需要存入磁盘。
Faster RCNN(Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks)
因为对生成region proposal的时间优化已经到了瓶颈,所以为了加快检测的整体效率,提出了一个新的网络Region Proposal Network,RPN通过和Fast RCNN共享整幅图像的特征,甚至可以实现“cost-free”生成region proposal。
Faster RCNN的重点是RPN和anchor。
RPN的输入为任何尺寸的图像,输出一系列候选目标边框及其对它们的客观打分结果。因为RPN和Fast RCNN共享卷积特征,所以两个网络共用一组卷积层。为了生成region proposal,使用一个小型卷积网络在最后一个共享卷积层输出的特征图上滑动(该小型卷积网络可以看作一个滑动窗口),滑动窗口把特征图中n×n大小的区域作为输入,每个滑动窗口映射到一个低维特征,该特征作为两个滑动全连接层的输入——一个是边框回归层reg,一个是边框分类层cls。
在每个滑动窗口的位置,同时预测多个region proposal,假定每个位置最大的proposal的数量为k,k个proposal被相关的边框进行参数化,称为anchor。对每个位置使用3种长宽比和3种形状比例,所以一个W×H大小的特征图共有W×H×k个anchor。基于anchor的方法是建立一个anchor金字塔,比Selective Search、Edge box、Multi Box等方法更具有效率——使用多长宽比和形状比例进行分类和回归,仅仅需要单一比例的特征图、图像和单一尺寸的滑动窗口。
为了训练RPN,对每个anchor分配一个二元类别的标签,如果IoU>=0.7为正样本,IoU<=0.3为负样本(IoU是anchor和ground-truth之间重叠的比例)。RPN使用end-to-end的反向传播和SGD进行训练,因为每一个小批量样本中有很多的正样本和负样本,而负样本的数量占主导地位,可能会导致结果偏向负样本,所以在整幅图像中随机采样256个anchor来计算损失,其中正负样本的数量均为128个,如果正样本的数量不足,则使用负样本进行填充。
三种训练和共享特征的方法:
- alternating training( 交替训练):先训练RPN,使用Image Net的预训练模型和端到端的微调进行初始化以生成候选区域;再使用RPN训练出的region proposal作为输入,用Fast RCNN训练出一个分离的检测网络,这个网络同样使用预训练的Image Net模型进行初始化,这一步中,两个网络之间并未共享卷积层;然后使用检测网络初始化RPN,但是固定共享的卷积层,只对独属于RPN的layer进行微调,这一步中,两个网络共享卷积层;最后保持共享卷积层不变,只对独属于Fast RCNN中的layer进行微调。这样的话就实现了再两个网络之间共享卷积层并形成了一个统一的网络。本文用的就是这个算法。
- approximate joint training (近似联合训练):在训练时,RPN和Fast RCNN被结合在一个网络中,每个SGD的迭代过程中,前向传播(forward)在训练Fast RCNN检测器时,生成固定尺寸的、预计算好的候选区域,反向传播(back forward)把RPN的loss和Fast RCNN 的loss 的反向传播信号结合在一起。这种算法易于实现,结果是近似的,但是比altering training减少了25%-50%的训练时间,但是忽略了候选边界左边衍生的w,r,t 同样是网络的结果,所以结果是近似的。
- Non-approximate joint training (非近似联合训练):RPN预测的边界框是输入的一部分,而Fast RCNN中的ROI 池化层把卷积特征和边界框作为输入,所以理论上反向传播解答器应该包含梯度w, r, t 和边框坐标。但是近似联合训练忽略了这些梯度。在这个方法中,需要使用ROI 池化层区分w,r,t和边界坐标。
Faster RCNN的实现步骤:
- 使用卷积网络生成特征图;
- 使用RPN生成region proposal,使用softmax判断anchor属于正样本或负样本,再使用bound-box 回归修正anchor以获得更精确的anchor;
- 在最后一个共享卷积层输出的特征图上生成固定尺寸的小型特征图;
- 使用softmax损失和smooth L1损失对分类概率和bound box 回归进行联合处理。
FPN(Feature Pyramid Networks for Object Detection)
根据原本图像金字塔转化为特征金字塔的方法,通过使用1×1的卷积层减少通道维数,通过侧向连接结合自下而上和自顶向下的特征图,形成一个语义信息丰富、分辨率高且定位准确的特征图。即弥补了特征金字塔需要大量内存和时间处理的短板,又解决了低分辨率图像中语义信息较少但定位准确、高分辨率图像语义信息丰富但定位困难的问题。
FPN的实现步骤:
- 自底向上的路径:是卷积网络的前向运算的结果,通过对特征图的集合进行补充和丰富,形成自底向上的特征金字塔,得到的特征图虽然语义信息较少,但因为多次进行下采样,所以定位准确。
- 自顶向下的路径和侧向连接:首先对分辨率粗糙但语义信息丰富的特征图进行上采样得到高分辨率的特征,这些特征使用自底向上的特征金字塔对应层次的特征图,通过侧向连接进行增强。使用分辨率粗糙的特征图,对空间分辨率进行2倍的上采样,得到的特征图与自底向上特征金字塔对应的特征图(已经过1×1的卷积层减少channels维数)进行合并。重复该过程直至生成最高分辨率图像(为了开始迭代,在conv5附加一个1×1的卷积层来生成分辨率最粗糙的特征图)。
One State Method
YOLO(You Only Look Once: Unified, Real-Time Object Detection)
在YOLO出现之前,为了检测目标,都是为每个目标专门训练一个分类器,并在测试图像中从不同的位置和不同的大小对其进行评估。
YOLO把之前检测网络中分离的各个功能部件放在一个网络中实现,利用整幅图像的特征,通过网络在预测多尺寸(multi-scale)边框的同时生成对应的类别概率。因为是对整个网络进行端到端的训练,所以可以在训练过程中更新网络的参数,从而得到较高的准确率。
YOLO的实现步骤:
- 把整幅图像分割成S×S个网格。如果某个网格中有目标对象,则该网格在检测该目标的过程中将起到重要作用。
-
在每一个网格中生成B个边界框,对这些边界框对应生成置信度(confidence score置信度:反映了模型对该边框包含目标的信心和该边框预测的准确率,置信度的计算公式为 P (object)× IOU,P(object)是该边框包含目标对象的概率,IOU是预测的边界框与ground-troth的IOU值;如果该边框内不含有目标,则置信度为0)。一般是把置信度等于IOU。
每个边界框包含五个预测值(x, y, w, h, confidence),(x, y)是边框中心点的坐标,(w, h)是宽和高,confidence是ground-truth与预测的边界框的IOU值。
- 每个网格同时得到C个条件概率P(classi | object),这些条件概率表示该网格包含目标对象的概率(因为数据集中共C类,所以需要预测C个条件概率)。因为每个网格仅预测一组(C个)类别概率,而不是考虑B个边界框,从而速度更快。
YOLO方法的优势:
- 速度快。因为把检测任务视为回归问题,从而不需要复杂的流程,可以对流媒体进行低于25ms延迟的实时处理。除此之外,YOLO具有比其他实时处理的系统高两倍的平均精度。
- 因为YOLO针对整个图片进行处理,所以比其他的方法拥有更多的关于类别的上下文信息。正是因为Fast RCNN不能获取到大面积的上下文,所以会在图像上产生大量错误背景正样本(把背景区域识别为目标对象的正样本),YOLO方法比Fast RCNN减少近一半数量的背景正样本错误。
- YOLO学习的都是样本的通用表现形式。正是因为高度的generalizable使得YOLO在遇到新类型的对象或unexcepted 输入时不会轻易break down。
- 除此之外,YOLO准确率也比其他方法高很多。
YOLO存在的问题:
- 对精确定位某些对象,尤其是针对一些小尺寸的对象很吃力
- YOLO会产生较多的定位错误。
SSD(Single Shot MultiBox Detector)
SSD是一个正向传播的卷积网络,首先产生一个固定大小的边框集合以及对每个边框内存在的类别分别进行打分的结果。然后使用非极大值抑制来产生最终的检测结果。
卷积网络的前半部分是标准的分类网络(在分类层之前截断,只保留网络前半部分,被称为base network),然后在base network的基础上添加不同的附加结构来实现不同的功能产生检测结果:
- 多尺寸特征图:在base network的最后面添加卷积层,这些卷积层的尺寸逐渐减小,使得网络可以对多尺寸的输入进行预测。这个检测网络对不同的特征层是不同的。
- 卷积预测器:每一个附加的特征layer通过一组卷积滤波器的处理生成一组固定的检测预测结果。对一个m×n大小、通道数为p的特征layer,使用3×3×p的卷积核进行处理,生成针对每个类别的分数或关于边框坐标值的偏移量。
- 默认边框和长宽比:因为对每个边框,在给定的位置输出k个值,需要计算c个类别分别对应的分数和4个坐标值的偏移量,故特征图的每个位置要使用 ( c + 4 ) ∗ k (c+4)*k (c+4)∗k个滤波器进行处理。也许默认边框看起来像是anchor,但是SSD是把默认边框上应用在多个分辨率不同的特征图上,正是因为默认边框含有不同的尺寸,所以才可以对边框形状进行有效的离散化。
因为是对每个尺寸大小的特征图的每个位置使用 ( c + 4 ) ∗ k (c+4)*k (c+4)∗k个滤波器进行计算,故对每个类别,有 38 ∗ 38 ∗ 4 + 19 ∗ 19 ∗ 6 + 10 ∗ 10 ∗ 6 + 5 ∗ 5 ∗ 6 + 3 ∗ 3 ∗ 4 + 1 ∗ 1 ∗ 4 = 5776 + 2166 + 600 + 150 + 36 + 4 = 8732 38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=5776+2166+600+150+36+4=8732 38∗38∗4+19∗19∗6+10∗10∗6+5∗5∗6+3∗3∗4+1∗1∗4=5776+2166+600+150+36+4=8732个检测结果,然后使用非极大值抑制处理得到最终的检测结果。
SSD的特点:
- 去除了proposal的生成过程和后续的像素或特征重采样步骤,把包含的所有计算步骤都放在一个网络中,这使得SSD易于训练、在保持高准确率的前提下处理速度加快,直接可以进行集成到检测系统中;
- 使用小的卷积滤波器预测目标类别和边框位置的偏移,对不同比例的检测目标使用不同的检测器,为了进行多尺度的检测,把这些来自网络最后一层的检测器应用在多个特征图上;
- 使用多个layer来预测不同大小的目标,可以在保持高准确率的情况下拥有较高的速度;
- SSD比同是单步方法的YOLO更准确,且与使用proposal和池化操作的方法如Faster R-CNN一样准确,即便实在低分辨率的输入图像上同样可以有效权衡准确率和速度;
- SSD的核心是在特征图上使用消息卷积滤波器来获取预测类别分数和边框偏移量;
- 对小型目标具有更高的准确率。
Other Method
R-FCN(Object Detection via Region-based Fully Convolutional Networks)
R-FCN方法是基于区域的检测器,是一个全卷积网络且大部分的计算在整个图像上共享。使用位置敏感分数图(positive-sensitive score map)来解决图像分类中的平移不变性(transform-invariance)和目标检测中的平移变换(transform-variance)这两个问题。
R-FCN是通过位置敏感分数图来把平移变换加入FCN中,每个分数图都对 相对空间位置的位置信息进行编码。在FCN的最后面,添加一个位置敏感的ROI池化层处理来自分数图的信息。整个结构进行端到端的训练,所有的可学习层都是卷积层,且共享整幅图像的参数。
R-FCN的实现步骤(R-FCN的结构可以看作ResNet-101卷积部分+一个1024维的卷积层+一个位置敏感的ROI池化层,不过需要一个额外的RPN进行辅助):
- 先使用ResNet-101中的卷积层部分对整个图像进行卷积,得到特征图(对于原本的ResNet-101网络结构,删除其中的池化层和全连接层,只保留其卷积部分);
- 再使用R-FCN中附加在ResNet-101卷积部分后的一个卷积层对特征图进行卷积,对每个类和背景都产生 k 2 k^2 k2个位置敏感分数图(position-sensitive score map),所以结果是 k 2 k^2 k2个(c+1)维(c是类别数)的图。这 k 2 k^2 k2个位置敏感分数图对应一个直接描述相对位置的k×k网格(当k=3时,这9个位置敏感分数图分别对应网格中的top-left,top-center,top-right,…,bottom-left,bottom-center,bottom-right处的网格,详情见下方图像);
- 使用RPN对特征图进行处理,生成候选区域,并将候选区域ROIs与R-FCN共享**(**R-FCN的作用就是对灭个ROI进行分类)
- 使用一个位置敏感ROI池化层对每一个ROI**,**聚合各个位置敏感分数图对应位置的特征(k×k个子结果聚合成一个),并输出对应ROI的分数,紧接着进行vote和softmax操作,得到最终检测结果。
R-FCN实现的一些细节
- ROI池化操作的实现: r c ( i , j ) r_c(i,j) rc(i,j)是位置 ( i , j ) (i,j) (i,j)对应的分数图对第c个类别池化的结果, z i , j , c z_{i,j,c} zi,j,c是不属于 k 2 k^2 k2(c+1)分数图的一个分数图, ( x 0 , y 0 ) (x_0,y_0) (x0,y0)是一个ROI的左上角, Θ \Theta Θ代表网络中的所有学习参数。
- vote操作:平均所有的分数,对每个ROI产生一个 ( C + 1 ) (C+1) (C+1)维的向量 r c ( Θ ) = ∑ i , j C r c ( i , j ∣ Θ ) r_c(\Theta)= \sum^C_{i,j}r_c(i,j| \Theta) rc(Θ)=∑i,jCrc(i,j∣Θ),然后使用softmax( s c ( Θ ) = e r c ( Θ ) / ∑ c ′ = 0 C e r c ′ ( Θ ) s_c(\Theta)=e^{r_c(\Theta)}/ \sum^C_{c^{\prime}=0}e^{r_c^{\prime}(\Theta)} sc(Θ)=erc(Θ)/∑c′=0Cerc′(Θ))进行处理得到最终的检测结果。
- 关于模型的训练:损失函数为 其中 c ∗ c^* c∗是ground_truth的类别, L c l s ( s c ∗ ) = − l o g ( s c ∗ ) L_{cls}(s_{c^*}) = -log(s_{c^*}) Lcls(sc∗)=−log(sc∗), L r e g ( t , t ∗ ) = R ( t , t ∗ ) L_{reg}(t,t^*) = R(t,t^*) Lreg(t,t∗)=R(t,t∗)(其中R(·)是L1正则函数)是边框回归损失, t ∗ t^* t∗是ground_truth的边框。平衡权重 λ = 1 \lambda=1 λ=1。
R-FCN的特点:
利用位置敏感分数图把平移变换引入了目标检测过程,使得检测速度和准确率都有一定程度的提升,但中间仍涉及大量的卷积计算,所以速度上还有提升的空间。
视频目标检测方法
CBNet(A Novel Composite Backbone Network Architecture for Object Detection)
因为在基于CNN的检测方法中,骨干网络(backbone network)对特征的提取非常重要,且检测器的性能主要依赖于骨干网络,而突出新的、具有更高性能优势的骨干网络需要大量的设备且耗费大量的时间,所以提出一个链接现有骨干网络来增强性能的方法——CBNet。
CBNet把前面步骤中骨干网络(Assistant Backbone)生成的特征进行迭代,作为后续骨干网络输入的一部分,最后一个骨干网络(Leap Backbone)输出的特征图用于进行检测。
CBNet的几种骨干网络组合方式及其结果对比:
- Adjacent Higher-Level Composition(AHLC):使用Assistant Backbone来增强Lead Backbone的特征(迭代K-1个Assistant Backbone的输出结果来作为Lead Backbone输入的一部分)。Lead Backbone第L步的输入融入了Lead Backbone前L-1的输出结果(XL-1K)和相邻的Assistant Backbone(BK-1)的输出结果(XLK-1): 其中g(·)表示复合连接——由1×1的卷积层和批量正则化层组成,用于减少通道数和上采样操作;
- Same Level Composition(SLC):一个简单直接的组合方式就是把不同骨干网络同一步骤的输出特征图进行组合;
- Adjacent Lower-level Composition(ALLS):与AHLC方法相反,把相邻的低层次步骤的输出作为后续骨干网络的输入(如下Bk的输入为Bk第l-1步的输出加上相邻骨干网络Bk-1的复合输出):
- Dense Higher-Level Composition(DHLC):DenseNet网络中每一层与后续的网络都会建立链接,以便在某一部建立密集的链接。根据该方法,本文在CBNet结构中使用了密集组合连接:
(a)为AHLC (b)为SLC (c)为ALLC(d)为DHLC
几种方法的结果对比:
其中,第一行的baseline是FPN ResNet101的结果,DB是Dual-Backbone,ADLC是Adjacent Dense Level Composition。
CBNet是一个复合链接多个骨干网络的方法,与单骨干网络的方法相比可以获取更多有代表性的特征,从而弥补了为静态图像目标检测而设计的方法移植到视频检测所产生的问题,对现有的FPN、Mask RCNN、Cascade RCNN等方法均可以增强其mAP值。
TCNN(Object Detection from Video Tubelets with Convolutional Neural Networks)
在TCNN提出之前,视频目标检测使用的方法都是之前为静态图像目标检测而设计的,因而对视频中出现的运动模糊、视频虚焦、目标遮挡等检测准确率不够高,且可能导致跟踪框偏移到非目标对象上。
因此把目标检测和目标跟踪功能进行合并,提出了TCNN。TCNN包含两个模块,一个是tubelet(tubelet是指目标移动的大致路径)目标物体建议模块,合并了目标检测和跟踪方法;另一个是tubelet分类和re-scoring模块,使用空间最大池化进行处理,并对边框进行打分,利用时间卷积网络来结合视频帧的时间一致性。
TCNN的实现步骤:
- image object proposal:使用类似Selective Search等方法生成2000个左右候选边框,因为2000个边框中大部分都是负样本边框,所以使用在ImageNet预训练的AlexNet网络对ImageNet中包含的200个类别分别设置一个特定的阈值,来消除易于分辨的负样本。
- object proposal scoring:因为VID数据集包含的30个大类别内涵盖了DET数据集包含的200个小类别,所以可以直接使用为DET数据集设计的检测方法——使用一个在ImageNet上预训练并为DET数据集微调的GoogleNet网络,与RCNN类似,对每个类别需要一个使用conv5生成的特征图应用困难负样本挖掘方法(hard negative mining method)训练出的SVM,所以对VID来说需要30个SVM来区分是目标是背景还是30个类别之一,对一个边框来说,其SVM得分越高,则其置信度分数越高。
- high-confidence tracking:使用文章《Visual tracking with fully convolutional networks》中的跟踪器,把置信度最高的边框作为跟踪的起点,反向跟踪到视频第一帧,正向跟踪到最后一帧,然后把两个轨迹合并为一个(因为跟踪是把最高置信度的边框作为起点,所以可能会导致结果偏移到背景或其他对象上,所以设置一个阈值,当当前跟踪的边框的置信度低于阈值则停止跟踪)。在得到一个跟踪轨迹后,在剩余的边框中找到置信度最高的边框对新的对象进行跟踪(但是因为高置信度边框一般聚集在一起,聚集在同一物体上,所以使用类似NMS的方法——当某边框和之前已处理的边框的重复率高于某一阈值,则该边框不会被再次选择),跟踪方法反复进行迭代,直至剩余边框的置信度均低于某一阈值(测试得该阈值0)。
- tubelet box perturbation and maxpooling:该步骤的主要目的是使用高置信度的边框替代tubelet边框。首先在现有的tubelet边框周围,使用随机扰动(random perturbation)方法生成新的边框(具体方法是针对坐标进行随机采样,得到新边框的左上角和右下角坐标);然后使用与tubelet边框重复率高于某一阈值的原始检测结果替代tubelet边框(重复率越高置信度越高),同时进行传统的NMS处理,消除有着低分数的正边框;最后使用步骤2中的检测器对剩余的边框(增强后的边框和原始的tubelet边框)进行打分,通过最大池化方法只保留最大检测分数的边框,
- temporal convolution and re-scoring:因为检测分数的波动,所以会导致性能的损失。TCNN使用时间卷积网络TCN(4层的一维全卷积网络,对每个tubelet边框生成时间密集预测)——把一维连续特征(检测分数、跟踪分数、anchor offset)作为输入,输出0或1(判断标准是与ground-truth的重复率高于0.5则为1),测试时使用连续的分类分数替代二元预测值。
TCNN通过对静态图像的目标检测和目标跟踪方法进行合并,使用时间卷积网络TCN将时间信息纳入卷积计算,实现了对视频目标的检测功能,在一定程度上消除了视频中出现的稀奇古怪姿势、视频虚焦、部分被遮挡、运动模糊等产生的影响,但效果不够好。
DFF(Deep Feature Flow for Video Recognition)
DFF是把正向反馈卷积网络分解为两个连续子网络——第一个是特征网络(feature network),是一个全卷积网络,输出大量中间特征图(intermediate feature map);第二个是任务网络(task network),主要负责在特征图上进行目标识别和语义分割。
DFF的实现步骤:
- 使用随机梯度下降(SGD)进行训练,在每个小批量中,一组邻近帧(关键帧Ik,非关键帧Ii)被随机采样(0<= i - k <=9);
- 在前向传播中,在关键帧Ik使用特征网络进行处理得到特征fk;
- 使用flow网络处理关键帧Ik、非关键帧Ii,通过估计得到flow field和scale field。当i>k时,fk被传到fi(关键帧的特征传播到非关键帧的特征中);
-
任务网络处理fi得到结果yi及其导致的损失,该损失的误差梯度被反向传播以更新全部组件。
值得注意的是,当i=k时,只使用per-frame network进行训练。
DFF因为只需要对稀疏帧进行标记,所以训练速度很快。per-frame 网络只能使用被标记的数据,而DFF可以在帧Ii被标记的情况下使用所有的数据。
关键帧的选取——在固定间隔l个连续帧内必有一个关键帧。
一些细节部分:
- 关于Flow Network:把标准的FlowNet的结构作为默认,并提出两个变形以减少复杂度——①FlowNet Half,把FlowNet每层的卷积核减半使得复杂度降为原本的1/4;②FlowNet Inception使用Inception结构使得复杂度降为原本的1/8。三种flow network都在Flying Chairs进行预训练,输出stride为4,输入的图像是half-size,flow field的分辨率为原始分率的1/8,因为特征网络的特征stride为16,所以通过双线性插值将flow field和scale field尺寸缩小一半以适应特征图的分辨率;
- 关于Feature Network:把在ImageNet上预训练的ResNet-50和ResNet-100作为默认。特征的stride由32减为16来生成更加密集的特征图,conv5的第一个模块的stride改为1,在conv5的所有3×3卷积核上应用holing 算法(dilation=2)以保持视野。在conv5附加一个随机初始化的3×3卷积来把特征的channel减少为1024,并使用holing算法(dilation=6)。得到的1024维的特征图是后续步骤的中间特征图;
- 关于Semantic Segmentation:使用随机初始化的1×1的卷积层处理中间特征图生成C+1分数图(C个类别+背景),然后使用softmax生成每个像素的概率,所以task网络只有一个可学习权重layer;
- 关于Object Detection:使用R-FCN作为默认。两个部分全卷积网络为了生成候选区域的子任务和检测任务,分别在前512维和后512维的中间特征图上应用。①在生成后续区域的分支,使用RPN。使用9个anchor,两个1×1的滑动卷积生成18维的客观分数和36维的边框回归值,使用NMS在每个proposal生成300个候选区域,IoU的阈值设置为0.7 。②在检测任务分支,两个1×1的滑动卷积生成位置敏感分数图和边框回归图,它们的维度分别为(C+1)×K²和4K²(K是分类器/回归器的数量)。在得到的特征图上使用ROI池化分别得到每个区域的分类分数和边框回归值,最后,在IoU阈值为0.3的情况下,用NMS生成检测结果。
DFF的优势:
- 因为只在稀疏的关键帧进行特征提取,把关键帧的特征warp操作后传播到邻近的非关键帧,所以与之前的视频目标检测方法相比速度有了明显的提升;
- 因为DFF的训练是对整个模型进行端到端的训练,可以在训练过程中更新网络参数,所以识别准确率也有大幅提升。
DFF存在的不足之处:
- 关键帧是通过每l帧选取一个关键帧的方法得到的,l是一个固定值。然而当视频内目标对象的appearance发生剧烈变化时,l的长度也应该随之变化。
- 因为非关键帧的特征不是经过CNN计算得到的,而是通过关键帧的特征warp后赋予的,所以非关键帧特征的representation不如CNN计算得到的特征,其检测效果也不如CNN得到的特征。
FGFA(Fast Object Detection in Compressed Video)
现有的视频目标检测方法都是使用box-level的时间信息进行检测,没有进行端到端的训练(box-level方法:在单帧中应用检测器得到候选边框,在后续步骤中利用时间信息把检测得到的边界框进行合并。一般是依赖现成的光流、手动描述的边框关联信息实现,整体的检测质量的无法进行提升)。
FGFA是利用时间信息聚合邻近帧的特征从而增强当前帧特征的代表性,属于feature-level方法。
FGFA的实现步骤:
- 对单独的帧提取特征,生成每帧的特征图;
- 使用光流网络估计当前帧及其邻近帧之间的动作;
- 邻近帧的特征根据动作流warp到当前帧;
- 把邻近帧的特征图和当前帧的特征图使用自适应权重网络进行聚合;
- 聚合的特征图输入到检测网络生成检测结果。
FGFA利用视频中短暂时间内对同一物体有多个快照这一特点,对快速移动的物体有较好的检测效果,但在目标对象的外观发生剧烈变化,如被遮挡时检测效果就不那么理想,不准确的流估计会导致错误的结果。
因为FGFA方法提出的主要目的是增强特征和提升识别的准确率,所以把box-level方法作为后处理方法可以大幅提升输出结果的准确率。
FMAN(Fully Motion-Aware Network)
当前的主流方法都是通过聚合邻近帧的特征来增强当前帧的特征,但因为相机和物体的运动,导致物体的特征通常不能被空间校准(spatial calibration)。
FMAN的实现步骤:
- 把当前帧t及其邻近帧t-r和t+r作为输入,输入到特征提取器,生成三个特征ft-r、ft、ft+r;
- 先在ft-r和ft+r上进行像素级的校准,生成flow field 估计——ft-r→t和ft+r→t,把他们聚合为fpixel ,然后把fpixel 被输入到RPN生成proposal;
- 在基于区域的检测器(region-based detector)生成的位置敏感分数图(position-sensitive score map)上进行实例级的校准——在ft-r、ft、ft+r上使用特制的卷积层,生成一组k²(k是邻近帧数量的取值)个位置敏感分数图st-r、st和st+r。对st中的第i个proposal,使用实例级的方法来递减st-r中的第i个proposal和st+r中的第i个proposal的对应位置。邻近帧中的特征和被预测出的proposal被ROI池化,最后聚合为siinsta。
- 因为fpixel也会被基于区域的检测器处理为第i个proposal的位置敏感分数图sipixel,根据动态运动路径把sipixel和siinsta结合在一起。
(实例级的方法为:
- 首先使用ROI池化操作生成第i个proposal在(xit,yit,hit,wit)位置的特征mit-r: 其中ROI池化是使用最大池化把特征转化到一个拥有固定空间范围的小型特征图内。
- 然后使用回归网络R(·),通过mit-r估计帧t-r和帧t的第i个proposal的movement:
左侧的为相关的movement,且R(·)在全连接层实现。
值得注意的是,只有正proposal才能在连续帧内学习到回归movement。
- 一旦获得了相关的movement,则可进行特征的校准来增强当前帧的特征。帧It-r的proposal为: FMAN网络同时在像素级pixel-level和实例级instance-level对目标对象进行校准(像素级的校准对细微的运动、柔性运动进行建模操作非常灵活,实例级的校准通过获得更多的全局运动路径从而对被遮挡物体检测具有较高的鲁棒性),从而提升了检测的准确率。
STM(Object Detection with an aligned spatial temporal memory)
STMN是一个RNN结构的网络,同时学习如何对目标的长期外观(long-term appearance)运动动力学进行建模和对齐。核心是STMM——一个卷积循环计算单元,包含在静态图像中学习到的权重。因为是使用静态图像数据库的权重,所以对视频数据集缺少标记信息的情况不敏感。
为了说明二维空间的视觉数据的本质,STMM在内存中存储每帧的空间信息;为了实现像素级准确的空间对齐,使用MatchTrans模块来显式地模拟跨帧运动引起的位移(详细过程见下方——时空存储对齐)。
因为每帧的卷积特征在空间存储中被对齐和聚合,且存储中包含多帧的信息,所以任何目标对象的特征都易于定位。除此之外,每个区域的特征都可以通过存储中的ROI池化操作而轻易的获取到。
STMN的实现步骤:
- 将长度为T的视频序列中的每一帧传入卷积网络,得到对应的特征图F1,F2…FT;
- 每一帧的特征都分别传入STMM,位于t的STMM的输入为特征图Ft和一个时空存储(spatial-temporally memory)M→t-1(其中内包含前t-1帧的信息),输入M→t;
- 为了使当前帧可以使用前后帧的信息,使用两个STMM分别获取M→和M←,把他们链接形成每帧的时间调制存储(temporally modulated memory)M;
- 因为M中也存储着空间信息,所以可以使用后续的卷积层和全连接层进行分类和边框回归操作;
STMM的实现细节:
- 每一个时间点,STMM都是把Ft和Mt-1作为输入并进行计算: 其中 ⨀ \bigodot ⨀表示对应元素相乘, ∗ * ∗表示卷积计算, U , W , U r , W r , U z , W z U,W,U_r,W_r,U_z,W_z U,W,Ur,Wr,Uz,Wz都是二维卷积核,门(gate) r t r_t rt掩膜 M t − 1 M_{t-1} Mt−1的元素(即允许其忘记之前的状态)来生成后续存储器 M ~ t \tilde{M}_t M~t,门 z t z_t zt指出如何对 M t − 1 M_{t-1} Mt−1和 M ~ t \tilde{M}_t M~t进行加权和合并;
- 为了生成 r t r_t rt和 z t z_t zt,STMM对Ft和Mt-1进行仿射变换,然后使用ReLU进行处理得到最终结果。因为 r t r_t rt和 z t z_t zt是gate,其值只能为0或1,所以需要进行BatchNorm,这里使用零均值和单位标准偏差来替代传统的BatchNorm方法;
- 和标准ConvGRU的两点区别:①.为了更好的利用权重,需要确保循环单元的输出和预训练的权重相互兼容,因为标准ConvGRU的输出值位于[-1,1],与输入范围不匹配。为了解决这个问题,把标准ConvGRU内的Sigmoid和Tanh替换为ReLU;②使用卷积层的权重对 W z W_z Wz, W r W_r Wr和 W W W进行初始化,而不是随机初始化。从概念上讲,这可以看作是一种使用预先训练的静态卷积特征映射初始化内存的方法。
时空存储对齐(spatial-temporal memory align)的实现细节:
不使用空间对齐的话,存储会在目标移动后缺无法忘记它之前的位置,导致原来的位置会与后续的memory map叠加在一起,参数错误的结果产生多个识别框,产生假阳性检测结果(false positive detection)和不准确的定位,如下图:
为了缓和这种情况,提出了MatchTrans模块来对齐帧间的时空存储。
因为 F t F_t Ft中的(x,y)对应 F t − 1 F_{t-1} Ft−1中(x,y)附近的一块区域,所以利用这个对应关系可以实现存储的对齐,来消除没对齐时产生的错误检测边框。
为了将时空存储 M t − 1 M_{t-1} Mt−1进行转换来与帧t对齐,使用MatchTrans计算特征 F t F_t Ft内位置(x,y)的特征块 F t ( x , y ) F_t(x,y) Ft(x,y)和其邻近帧 F t − 1 F_{t-1} Ft−1相同位置特征块 F t − 1 ( x , y ) F_{t-1}(x,y) Ft−1(x,y)的亲和性(affinity),转换系数 Γ \Gamma Γ:
然后使用 Γ \Gamma Γ将未对齐的空间存储 M t − 1 M_{t-1} Mt−1转换为对齐的 M t − 1 ′ M^{\prime}_{t-1} Mt−1′:
MatchTrans与之前的对齐方法相比,因为不需要计算和存储光流所以更加高效,而转换系数的获取过程与之前的方法相比,没有使用转换系数去跟踪和链接检测结果,而是用来随时间对齐存储以在每个候选区域产生个呢个好的特征。
最后使用Seq_NMS来确保邻近帧检测结果的空间平滑性。
STMN的特点:
- STMN直接在训练时学习如何整合运动信息和时间依赖性,因为模型是端到端的训练,所以速度快。
- STMN只需要计算一个帧级空间存储,且它的计算独立于任何proposal。
- STMN聚合邻近超过两帧的信息,当计算邻近帧之间的相互关系时,会为了对齐而warp整个特征图,不仅仅是使用它来预测边框的偏移。
- 因为STMN使用在图像数据集训练得到的权重,所以针对当前视频数据集标准信息少的问题不太敏感。
MMNet(Fast Object Detection in Compressed Video)
基于CNN的视频目标检测方法都是使用图像识别网络提取特征,然后通过特征聚合或边框分数来利用时间一致性。尽管这些方法最终提升了检测效果,但是都伴随着大量的计算,这在视频长度越来越长的现在变得不再适用。
为了减少计算量,后续的方法如DFF,只在稀疏的关键帧进行特征提取,把关键帧的特征warp操作后传播到邻近的非关键帧。这类方法的关键是使用FlowNet进行像素间的位移,但是这类方法花费了额外的时间在FlowNet,因为FlowNet由卷积层组成(卷积计算需要消耗大量时间)。
以上的方法都是把视频看作是由连续图像组成,却忽略了视频通常是由压缩格式存储和传输的。把视频看作一系列连续的静态图像并使用不同的方法来恢复运动轨迹是非常耗时且冗余的。
MMNet(motion aided memory network )——对视频中的一组连续图像(GOP),在参考帧上应用使用特征提取器生成金字塔型特征(pyramidal feature);MMNet把上述的特征作为输入,利用运动向量和残差错误生成后续帧的特征。与之前方法只能传播高级特征不同,因为memory network由金字塔特征组成,所以可以处理不同尺寸大小(multi-scale)的对象。虽然伴随微量的准确度下降,但MMNet比R-FCN快3倍,比MANet快10倍。
MMNet的实现步骤:
- 在参考帧It应用特征提取器,得到金字塔型特征flt(l是网络的index);
- flt作为输入(一般只选取f3t、f4t、f5t作为输入),通过memory network中的pyramid feature attention模块生成ftatten;
- memory network中的motion-aided LSTM模块利用ftatten和运动向量mt+1、残差错误rt+1生成帧It+1的特征图ct+1和隐层特征ht+1;
- 对后续的帧It+j(j∈[2,n]),利用上一帧的特征图ct+j-1、隐藏层特征ht+j-1和当前帧的运动向量mt+j、残差错误rt+j,通过motion-aided LSTM模块得到相应的特征图和隐藏层特征,重复该操作,直至得到GOP内所有帧的特征图;
- 把GOP内所有的特征图聚合并传入检测网络R-FCN中,同时得到检测边框。
MMNet直接可以在压缩视频上使用,在视频流中使用运动信息存储和传播而不是建立其他的模型来恢复运动路径,所以速度比之前的方法速度要快。
MMNet的优势:利用了编码解码器处理过程中存在的运动信号和残差错误,无需额外计算;因为特征金字塔的原因,所以memory network可以处理不同大小的对象;明显的提升了处理速度,但伴随少量准确率下降。
Conclusion
总体来说,视频目标检测方法的发展为——首先移植静态图像目标检测方法到视频目标检测领域进行检测,但是对视频中独有的运动模糊、视频虚焦、稀奇古怪的姿势等非常敏感,导致其检测效果并不理想;然后专为视频目标检测设计了新的算法,如TCNN、DFF、MMNet等,虽然它们的检测效果比原本的静态图像目标检测方法好很多,但也都存在自己的缺陷,如准确率还不够高或计算量大、速度慢等。当前的视频目标检测算法的准确率已经很高了,但是准确率和速度之间的权衡做的还不够(速度快的准确率不够高,准确率高的速度不够快,或者是模型的训练十分耗时),在我看来,视频目标检测领域接下来的研究方向应该是在保持准确率的前提下,再对模型的处理速度进行提升,或对模型的训练速度进行提升——找到新的办法来减少卷积计算、提取更具代表性的特征等。