【综述】计算机视觉二三事

【综述】计算机视觉二三事

写在前面的话

时代在发展,深度学习随着这个时代而发展,这个领域包括很多的技术,深度学习领域也在人工智能,工业、农业,医疗以及制造业等不同的领域发挥着重要的作用。笼统的来说,深度学习可以分为三个大的方向:第一为时间序列问题(以文本为主,RNN或LSTM为基础),第二为语音信号处理方向(这个方向我也不太懂,但最近几年听说异常火爆),第三为图像/视频处理。经典的计算机视觉任务大多是从图像中发展过来的,比如ImageNet图像分类挑战赛,以及人脸识别,目标检测,语义分割,实例分割,超分辨率重建等等,包括最近火爆一时的生成对抗网络,人脸攻防,活动预测,AI换脸,内容理解等等。 在这个基础之上,任务和需求的多样性,导致人们从单帧图像转移到视频领域。视频相比于图像的特点是连续性与时空特性,同时对于视频的处理不仅对精度有很大的要求,其速度也相当重要。典型的视频任务包括:视频语义分割,视频目标检测,目标跟踪(单目标,多目标),人体姿态估计,重识别等等。那么,我们今天就从最简单的卷及神经网络谈起,然后看一下目前这些任务的特点以及处理方式。

一、经典的卷及神经网络

这里假定大家都已经了解卷积、池化等相关操作(如果不了解,后面我们会慢慢更新)。那就来看一下经典的卷及神经网络。 在任何一项计算机任务中,特征提取以及特征工程都至关重要,传统的图像处理中我们可以通过变换和计算可以提取不同的特征,比如边缘特征,尺度不变特征,灰度直方图,HOG特征等等,紧接着根据这些提取到的特征进行下一步的操作,比如利用hog特征+svm进行人脸识别。与这些传统的特征相比,卷及神经网络就是一个强大的特征提取器,它能够提取原始图像的高级语义特征!这些特征往往随着网络层数的增加而变得越来越抽象,甚至超过了人的理解范围。比如下面的这几张人脸的特征图,但管他呢,计算机能够读懂就好了。

,
【综述】计算机视觉二三事_第1张图片【综述】计算机视觉二三事_第2张图片
【综述】计算机视觉二三事_第3张图片【综述】计算机视觉二三事_第4张图片(1)经典的卷及神经网络主要应对的是图像分类任务,比如最简单的猫狗识别,而这一部分也作为后续计算机视觉领域的一个敲门砖。一个卷及神经网络主要是以卷积、池化和全连接为主,为了优化性能,有人提出了局部相应归一化(lrn),批次归一化(BN),空洞卷积操作,反卷积,转置卷积,有人为了加深网络深度提出了残差网络,有人为了提升网络的宽度提出了inception网络,也有人为了解决特定的问题,在网络结构中加入了注意力机制以及特征融合,为了提升网络的速度和并在移动端部署更是提出了轻量级的网络结构等等。这其中的技巧我们不会在今天一并讲出,后续的任务中我们再慢慢来说,下面是一些基本网络结构的发展。
【综述】计算机视觉二三事_第5张图片【综述】计算机视觉二三事_第6张图片【综述】计算机视觉二三事_第7张图片(2)在处理一个分类任务的时候,通常讲训练数据集送入到上面的这些卷积神经网络中进行特征提取,最后接上几个全连接层,最后一个全连接层的数量与分类的总类有关。比如ImageNet讲物体分为1000类,则最后的全连接层为1000个神经元,然后接到argmax函数和softmax分类器,并选择一种优化算法去最小化损失函数的误差,从而学习到最优的参数分布。但是在实际的应用中我们发现这样一个神奇的事情,一些先进的卷及神经网络性能往往都不如Vgg网络性能好,而我们也可以不拘泥于上诉网络结构的束缚,设计几款有自己特色的网络结构(主干框架)也是再好不过的了。

二、语义分割

在分类任务之后,我第一个关注的是语义分割任务。所谓语义分割值得是对一张图像所有的像素点进行分类。语义分割的目的是将每一类物体分割出来,但是针对类内相似物体不会加以区分,比如下面这张图:汽车,公交车,人,交通标志物,建筑,天空,树木。
【综述】计算机视觉二三事_第8张图片语义分割的核心内容是对每一个像素点进行分类,正是因为这样的特点,语义分割输入图片大小与输出图片大小要相同。试想这样一个问题,输入的图片送入卷及神经网络,如果做了池化的操作,特征图尺寸必然变小,那想要输出相同大小尺寸的特征图,就要进行上采样!可想而知,这样做会损失很多边缘的信息,导致分割的效果比较粗糙,所以整个语义分割领域大家都在围绕如何细化分割结果,减少信息损失而做大量的研究。

(1)下图为利用深度学习(卷积神经网络)进行语义分割的第一个网络–FCN网络,去除了经典卷及神经网络中的全连接层,全部用卷积层代替。为了解决上采样中信息损失的问题,FCN网络提出了一种特征融合的思想,即对最后的特征图不直接上采样到原始图片的大小,而是分步上采样,每一次都融合前面某些层中的信息来弥补这一部分损失。这个经典的结构又被称为编码-解码结构,左侧卷积池化构成了编码器,右侧上采样为解码器。
【综述】计算机视觉二三事_第9张图片
(2)SegNet和FCN思路十分相似,只是Encoder,Decoder(Upsampling)使用的技术不同。此外SegNet的编码器部分使用的是VGG16的前13层卷积网络,每个编码器层都对应一个解码器层,最终解码器的输出被送入soft-max分类器以独立的为每个像素产生类概率。在SegNet中丢弃了反卷积的操作,而是对池化层直接进行上采样,然后接入SAME卷积的操作。同时也抛弃了跳级连接的操作,而是引入了索引池化的操作。
【综述】计算机视觉二三事_第10张图片(3)U-Net 架构包括一个捕获上下文信息的收缩路径和一个对称扩展路径。该论文证明了这样一个网络可以使用非常少的图像进行端到端的训练,并且在ISBI神经元结构分割挑战赛中取得了比以前最好的方法(一个滑动窗口的卷积网络)更加优异的性能。U-net网络的优点是结构相对简单,需要很少的数据就能达到还不错的分割效果,所以这个网络很适合医学图像分割领域(细胞分割,肺部分割,心室分割,癌症分割等等)
【综述】计算机视觉二三事_第11张图片看习惯了上面的网络结构,有的人就会萌生出一个新的方法(比如我),不就是特征融合么,为什么Unet只能做对称单尺度的融合,但是却不能做多尺度的融合。为了证明这个观点,我设计了两种多尺度信息融合的网络并加以验证,而事实也证明这种方法性能较好。
【综述】计算机视觉二三事_第12张图片【综述】计算机视觉二三事_第13张图片但这种思想已经被别人进行了完善,所以多看论文还是有好处的,比如下面的Unet++网络:
【综述】计算机视觉二三事_第14张图片(4)Deep-lab系列,这个系列并没有延续原始的编码解码结构。

DeepLab-V1是结合了深度卷积神经网络(DCNNs)和概率图模型(DenseCRFs)的方法。DCNNs做语义分割时精准度不够的问题,根本原因是DCNNs的高级特征的平移不变性(即高层次特征映射)。他们的贡献是:提出空洞卷积(atrous convolution)(又称扩张卷积(dilated convolution))的概念;使用 CRF(条件随机场) 作为后处理,恢复边界细节,达到准确定位效果。
【综述】计算机视觉二三事_第15张图片【综述】计算机视觉二三事_第16张图片

DeepLab V2有两个基础的网络结构:一个是基于VGG-16的,另一个是基于resnet101的。通过实验发现引入多尺度技术对性能提升帮助很大,DeepLab V2通过多尺度方法对图片进行表达。该论文提出了空洞空间金字塔池化概念(Atrous Spatial Pyramid Pooling)。
【综述】计算机视觉二三事_第17张图片【综述】计算机视觉二三事_第18张图片DeepLabV3提出了更通用的框架,适用于任何网络,它复制了ResNet(残差网络)最后的block并且级联起来,在ASPP中使用BN层(局部响应归一化),最后一个特征图采用全局平均池化。提出解决多尺度的方法并剔除了CRF。同时他们试验了并联与串联两种不同的解决方式。
【综述】计算机视觉二三事_第19张图片【综述】计算机视觉二三事_第20张图片DeepLabV3+应该是最新一个版本,该网络又重新把FCN中提出的信息融合方式拿了出来,做成了编码解码的结构。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190930230626561.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzEwNjQ0MQ==,size_16,color_FFFFFF,t_70

三、实例分割&全景分割

实力分割和全景分割的本质也是分割,但是不同于语义分割的一点是这两项任务要求对类内相似物体进行分割,比如下图针对不同人会区分出人1,人2,人3…,所以说这种方法大多数是将语义分割任务与检测任务进行结合,如下图(c)所示,检测的任务就是区分每一个大类别中差异性的个体。
【综述】计算机视觉二三事_第21张图片

四、超分辨率重建

在大致了解完分割任务之后,我们可以看一下超分辨率重建。这项任务主要是对图片的质量进行提升,比如一张256256大小的图片,进行四倍重建之后变成了10241024,图像的分辨率变高了,质量了可想而知。超分辨率重建的任务主要是不是分类,而是学习一种从低到高的特征映射,其特点就是输出图片尺寸大于输入图片(有没有一点像语义分割中的解码器!),这也就要求要使用上采样的操作,一聊起上采样,必然解决信息损失。

(1)SRCNN是第一个利用深度学习的网络,它首先使用双三次(bicubic)插值将低分辨率图像放大成目标尺寸,接着通过三层卷积网络拟合非线性映射,最后输出高分辨率图像结果。
【综述】计算机视觉二三事_第22张图片(2)FSRCNN是对之前SRCNN的改进,主要在三个方面:

在最后使用了一个反卷积层放大尺寸,因此可以直接将原始的低分辨率图像输入到网络中,而不是像之前SRCNN那样需要先通过bicubic方法放大尺寸。
改变特征维数,使用更小的卷积核和使用更多的映射层。
可以共享其中的映射层,如果需要训练不同上采样倍率的模型,只需要fine-tuning最后的反卷积层。

【综述】计算机视觉二三事_第23张图片(3)像SRCNN那样的方法,由于需要将低分辨率图像通过上采样插值得到与高分辨率图像相同大小的尺寸,再输入到网络中,这意味着要在较高的分辨率上进行卷积操作,从而增加了计算复杂度。ESPCN提出了一种直接在低分辨率图像尺寸上提取特征,计算得到高分辨率图像的高效方法。ESPCN网络结构如下图所示,ESPCN的核心概念是亚像素卷积层(sub-pixel convolutional layer)。如上图所示,网络的输入是原始低分辨率图像,通过两个卷积层以后,得到的特征图像大小与输入图像一样。
【综述】计算机视觉二三事_第24张图片
(4)VDSR论文中作者提到,输入的低分辨率图像和输出的高分辨率图像在很大程度上是相似的,也就是指低分辨率图像携带的低频信息与高分辨率图像的低频信息相近,训练时带上这部分会多花费大量的时间,实际上我们只需要学习高分辨率图像和低分辨率图像之间的高频部分残差即可。残差网络结构的思想特别适合用来解决超分辨率问题,可以说影响了之后的深度学习超分辨率方法。VDSR是最直接明显的学习残差的结构,其网络结构如下图所示。
【综述】计算机视觉二三事_第25张图片(5)RED网络,这篇文章提出了由对称的卷积层-反卷积层构成的网络结构,作为一个编码-解码框架,可以学习由低质图像到原始图像端到端的映射。网络结构如下图所示,但是单看这张图片我们可以发现并没有明显的上采样操作,但很简单这里编码器中全部用到same卷积,导致特征图尺寸不变。
【综述】计算机视觉二三事_第26张图片(6)LapSRN论文中作者先总结了之前的方法存在有三点问题。

一是有的方法在输入图像进网络前,需要使用预先定义好的上采样操作(例如bicubic)来获得目标的空间尺寸,这样的操作增加了额外的计算开销,同时也会导致可见的重建伪影。而有的方法使用了亚像素卷积层或者反卷积层这样的操作来替换预先定义好的上采样操作,这些方法的网络结构又相对比较简单,性能较差,并不能学好低分辨率图像到高分辨率图像复杂的映射。

二是在训练网络时使用 l2 型损失函数时,不可避免地会产生模糊的预测,恢复出的高分辨率图片往往会太过于平滑。

三是在重建高分辨率图像时,如果只用一次上采样的操作,在获得大倍数(8倍以上)的上采样因子时就会比较困难。所以这篇文章提出了跳级链接特征融合的思想。
【综述】计算机视觉二三事_第27张图片
上面这些方法也就刚刚是冰山一脚而已,超分辨率重建这项任务每一年三大丁慧(ICCV,CVPR,ECCV)都会接受很多优秀的文章,比如我有了解到的有利用生成对抗网络做的,有引入时空特征,上下级环状结构链接等等。

五、目标检测

哇塞,说道目标检测这项任务我相信大家都很了解吧,这年头做检测的人真是太多了,而且因为这项内容的特点和需求,发展的那叫一个快啊。近些年随着深度学习技术的火热发展,目标检测算法也从基于手工特征的传统算法逐步转向了基于深度神经网络的检测技术。从2013 年提出的 R-CNN、OverFeat,到之后的 Fast R-CNN、Faster R-CNN、SSD、YOL系列,再到 2018 年的 Pelee。短短不到五年时间,基于深度学习的目标检测技术在网络结构上从 two stage 到 one stage,从 bottom-up only 到 Top-Down,从 single scale network 到 feature pyramid network,从面向 PC 端到面向手机端,都涌现出许多好的算法技术,这些算法在开放目标检测数据集上的检测效果和性能都很出色。在实际的应用中,这项任务往往都会结合一些其他的任务,比如检测+识别,检测+跟踪等等。

相比于其他的方向,我觉得这项任务还是比较难的,从网络的结构,一些技巧,训练包括损失函数的设计,都要求我们有深厚的数学功底,所以我对这个方向一直把握不到精髓。下面是这个方向的一个预览。
【综述】计算机视觉二三事_第28张图片一个标准的目标检测任务大概如下图所示,两阶段的以RCNN系列为主,比如RCNN网络在输入的特征图上先进行选择性搜索,搜索出大概2000个目标可能会出现的初始框,然后讲这些框分别送入卷及神经网络提取特征,最后送入分类器进行判别目标还是物体,利用非极大值抑制的算法过滤掉很多边框得到最终的结果,考虑到2000个框分别提取特征速度很慢,所以Fast RCNN提出了ROIpooling层的概念(更像是单层的空间金字塔池化),然后对原图进行一次特征提取即可,并在最后的特征图上提取目标候选框;Faster RCNN则将提取候选框的这部分交给了一个网络(RPN网络),真正做到了端到端。
【综述】计算机视觉二三事_第29张图片相比于rcnn,yolo(没错我家橘猫的名字)系列则直接对候选框进行回归操作,比如V1中采用网格的方法,在最后的特征图上每一个落在物体中心的点负责预测物体的坐标和类别,以及在此基础上发展而来的V2和V3等。
【综述】计算机视觉二三事_第30张图片【综述】计算机视觉二三事_第31张图片

六、目标跟踪(single)

终于说到了我的研究方向,目标跟踪这一个领域主要是针对视频而非图像,而目标跟踪又分为单目标跟踪与多目标跟踪,两个方向各有特点。首先我们先来看一下单目标跟踪领域,以及这个领域目前为止的发展,用过下面这张图可以看出目前主流的进行单目标跟踪的方法以相关滤波和深度学习为主流,而我主要关注基于深度学习的方法。
【综述】计算机视觉二三事_第32张图片单目标跟踪可以看成是对在单个相机的视觉成像平面内,对给定的单个物体进行连续的二维的位置估计与尺度估计。通俗来说就是用一个框在每一帧中讲给定的物体紧紧包围住。

(1)在构建目标描述模型时,模型可分为产生式模型和判别式模型。产生式模型主要是通过计算目标和样本的联合概率,找到与目标模型最相近的样本作为当前目标状态的估计。判别式模型则是计算条件概率,直接判断样本是否为目标。根据构建模型的不同,跟踪算法可以分为:产生式方法、判别式方法。

  1. 产生式方法:

产生式方法通过建立描述目标外观形状的模型来实现跟踪。即在下一帧图像中寻找最接近目标模型的物体的位置。这种“最接近”通常用最大似然或最大后验概率的形式来表示。产生式方法着眼于对目标本身的刻画,忽略背景信息,在目标自身变化剧烈或者被遮挡时容易产生漂移。产生式方法分为:点跟踪、核跟踪、轮廓跟踪、基于稀疏表示的跟踪。
【综述】计算机视觉二三事_第33张图片

  1. 判别式方法

判别式方法把跟踪看成目标和背景的分类问题,与传统的跟踪算法不同,它不需要建立复杂的观测模型来描述目标,而是通过训练分类器来将目标从背景中提取出来。分类器常用于目标检测中,在背景中检测目标的位置。在背景中得到了目标的位置也就实现了目标跟踪。因此,这种方法也被称作基于检测的跟踪(Tracking-by-Detection)判别式方法因为显著区分背景和前景的信息,表现更为鲁棒,在目标跟踪领域占据主流地位。值得一提的是,目前大部分深度学习目标跟踪方法也归属于判别式框架。
【综述】计算机视觉二三事_第34张图片(2)不同于检测、识别等视觉领域深度学习一统天下的趋势,深度学习在目标跟踪领域的应用并非一帆风顺,其主要问题在于训练数据的缺失。深度模型的魔力之一来自于对大量标注训练数据的有效学习,而目标跟踪仅仅提供第一帧的bounding-box作为训练数据。这种情况下,在跟踪开始针对当前目标从头训练一个深度模型困难重重。目前基于深度学习的目标跟踪算法采用了几种思路来解决这个问题:

利用辅助图片数据预训练深度模型,在线跟踪时微调
利用现有大规模分类数据集预训练的CNN分类网络提取特征
利用跟踪序列预训练,在线跟踪时微调
运用递归神经网络进行目标跟踪的新思路

(3) 基于深度学习的单目标跟踪算法:

1. DLT(NIPS2013) Learning a Deep Compact Image Representation for Visual Tracking

DLT是第一个把深度模型运用在单目标跟踪任务上的跟踪算法。但是因为其用到了栈式降噪自编码器(stacked denoising autoencoder,SDAE)而非CNN,所以在综述的第一篇中我们不深入了解,但后续我们会展开描述。

2.SO-DLT(arXiv2015) Transferring Rich Feature Hierarchies for Robust Visual Tracking.

  1. 使用CNN作为获取特征和分类的网络模型。如上图所示,SO-DLT使用了的类似AlexNet的网络结构,但是有几大特点:一、针对跟踪候选区域的大小将输入缩小为100100,而不是一般分类或检测任务中的224224。 二、网络的输出为5050大小,值在0-1之间的概率图(probability map),每个输出像素对应原图22的区域,输出值为输入图像中的每个像素都属于对象的边界框的概率,输出值越高则该点在目标bounding-box中的概率也越高。这样的做法利用了图片本身的结构化信息,方便直接从概率图确定最终的bounding-box,避免向网络输入数以百计的proposal,这也是SO-DLT structured output得名的由来。三、在卷积层和全连接层中间采用SPP-NET中的空间金字塔采样(spatial pyramid pooling)来提高最终的定位准确度。

  2. 在离线训练中使用ImageNet 2014的detection数据集使CNN获得区分object和非object(背景)的能力。
    【综述】计算机视觉二三事_第35张图片

  3. SO-SLT在线跟踪的流程:

    处理第t帧时,首先以第t-1帧的的预测位置为中心,从小到大以不同尺度crop区域放入CNN当中,当CNN输出的probability map的总和高于一定阈值时,停止crop, 以当前尺度作为最佳的搜索区域大小。
    选定第t帧的最佳搜索区域后,在该区域输出的probability map上采取一系列策略确定最终的bounding-box中心位置和大小。
    在模型更新方面,为了解决使用不准确结果fine-tune导致的漂移问题,使用了long-term 和short-term两个CNN,即CNNs和CNNl。CNNs更新频繁,使其对目标的表观变化及时响应。
    CNNl更新较少,使其对错误结果更加鲁棒。二者结合,取置信度最高的结果作为输出。
    【综述】计算机视觉二三事_第36张图片

4. FCNT:Visual Tracking with Fully Convolutional Networks

本文利用 FCN(全卷积神经网络) 来做跟踪问题,但开篇就提到并非将其看做是一个黑匣子,只是用来提取特征,而是在大量的图像和 ImageNet 分类任务上关于CNN的feature做了大量的深度的研究。这些发现促使他们设计了该跟踪系统,他们发现:

不同的卷积层会从不同的角度来刻画目标。顶层的layer编码了更多的语义特征并且可以作为种类检测器,而底层的特征集结了更多的具有判别性的信息,并且可以更好的区分具有相似外观的目标。在跟踪的过程中利用这两种层的不断切换而完成跟踪。作者还发现,对于一个跟踪目标,仅仅一些神经元是与其有关的,于是提出了一种feature map选择机制来移除噪声和不相关的 feature maps可以减少计算量,并且提升了跟踪的效果。
【综述】计算机视觉二三事_第37张图片

5. MD-net: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

作者提出了一种被称为多域网络(MDNet)的新型CNN体系结构,用于从多个注释视频序列中学习目标的共享表示(shared representation)以进行跟踪,其中每个视频被视为一个单独的域。 提出的这种网络在末端具有用于每个独立特定域二分类的分支,并且共享从前面层中的所有序列中捕获的用来学习通用表示特征的共同信息。 MDNet中的每个域在分别进行迭代训练,共享层在每次迭代中更新。 通过采用这种策略,我们将领域独立信息与领域特定信息分开,并学习用于视觉跟踪的通用特征表示。 MDNet结构的另一个有趣的方面是,我们设计的CNN与分类任务的网络相比,例如AlexNet 和VGG网络,层数更少。

与此同时还提出了一个有效的在线跟踪框架,该框架基于MDNet获得的特征表示。当给出一个测试序列时,所有在训练阶段使用的二元分类层的现有分支被删除,并构造一个新的单分支来计算测试序列中的目标分数。 然后在跟踪过程中对共享层内的新分类层和完全连接层进行微调,以适应新的域。 在线更新是为了模拟目标的长期和短期外观变化以分别提高鲁棒性和适应性,并将有效且高效的硬性负面挖掘技术(an effective and efficient hard negative mining technique)纳入学习过程。
【综述】计算机视觉二三事_第38张图片

6. GOTURN(解决速度太慢的问题)

该网络是基于simanse Fc孪生网络而来的。作者采用完全离线的方式进行训练,然后对目标进行跟踪,将追踪能做到100fps(是指在gtx 680上),当使用泰坦x 时能到160+fps ,数度确实很快,这样的离线训练,以及能在680上实现100fps,在目前,有着一定的商业应用价值。在以前的深度跟踪的工作中大多数都是不能满足实时性的要求: 在这之前的cnn做到7fps

穿插一下,这篇文章是2016年的,目前深度追踪发展迅速,很多已超越GOTURN网络,(目前大家对于这篇文章评价不是很高,因为kcf在数度上使用cpu训练已经可以达到170+fps的速度):这篇文章的网络类似于simese 网路:(后续续继续看simesefc这篇文章:来自牛津Luca Bertinetto大佬的SiameseFC tracker)。

从工程的角度来看,算法输入前后两帧被裁剪过的图像,送入卷积神经网络(CNN),继而回归出物体的boudingbox,输出结果。算法结构:如下图所示,首先获取到上一帧的结果(第二行图),以中心为原点扩大一圈得到Rect,利用这个Rect裁剪当前帧,分别送入两个五层的卷积网络,再经过三个全连层回归出最终的结果。
【综述】计算机视觉二三事_第39张图片

7. Siamese-FC(孪生网络的框架)

目前在深度学习领域,这种方法是最好的,在开题的时候我做了一个统计,近三年三大顶会收录的关于孪生网络架构的单目标跟踪算法有20余篇,可见只做单目标跟踪想发个好论文多么难。
【综述】计算机视觉二三事_第40张图片图中z代表的是模板图像,算法中使用的是第一帧的groundtruth;x代表的是search region,代表在后面的待跟踪帧中的候选框搜索区域;ϕ代表的是一种特征映射操作,将原始图像映射到特定的特征空间,文中采用的是CNN中的卷积层和pooling层;66128代表z经过ϕ后得到的特征,是一个128通道66大小feature,同理,2222128是x经过ϕ后的特征;后面的代表卷积操作,让2222128的feature被66128的卷积核卷积,得到一个17*17的score map,代表着search region中各个位置与模板相似度值。

从图一和文章题目我们可以很容易理解算法的框架,算法本身是比较搜索区域与目标模板的相似度,最后得到搜索去区域的score map。其实从原理上来说,这种方法和相关性滤波的方法很相似。其在搜索区域中逐点的目标模板进行匹配,将这种逐点平移匹配计算相似度的方法看成是一种卷积,然后在卷积结果中找到相似度值最大的点,作为新的目标的中心。

上图所画的ϕ其实是CNN中的一部分,并且两个ϕ的网络结构是一样的,这是一种典型的孪生神经网络,并且在整个模型中只有conv层和pooling层,因此这也是一种典型的全卷积(fully-convolutional)神经网络。

8. DaSiam:引入目标外观变换转换层和背景抑制变换层

该算法在siamese-fc框架的基础上面添加了目标外观变换转换层和背景抑制变换层来提升网络的判别能力,即增强了模型在线更新的能力。
【综述】计算机视觉二三事_第41张图片

9. SA-Siam

观察到在图像分类任务中学习的语义特征和在相似性匹配任务中学习的外观特征互补,作者构建了两个孪生网络框架,称为SA-Siam,用于实时的目标跟踪。SA-Siam由语义分支和外观分支组成,每一个分支都是一个相似性学习孪生网络。作者分别训练了这两个分支来保持两种类型特征的异质性,也就是让两种特征不一样。此外,作者在语义分支上加入了通道注意力机制,这个东东是干啥的,它可以根据目标位置周围的信息激活来计算通道权重,不同的跟踪目标有不同的通道权重。同时SiamFC的固有结构可以让跟踪器保持实时性,两个孪生网络和注意力机制的设计可以大大的提高跟踪性能。通过在OTB2013/50/100基准上测试,作者提出的的SA-Siam算法性能优于其它的实时跟踪器。
【综述】计算机视觉二三事_第42张图片

10. siamese-RPN (High Performance Visual Tracking with Siamese Region Proposal Network)

Siam-RPN提出了一种基于RPN的孪生网络结构。由孪生子网络和RPN网络组成,它抛弃了传统的多尺度测试和在线跟踪,从而使得跟踪速度非常快。在VOT实时跟踪挑战上达到了最好的效果,速度最高160fps。作者提出的网络分为模板支和检测支。训练过程中,在相关特征图上执行proposal extraction、没有预定义好的类别信息;在跟踪过程中使用one-shot检测框架和meta-learning。其中,两个原因使得跟踪算法效果很好:大量数据训练;RPN结构使得跟踪尺度和比例都非常好。
【综述】计算机视觉二三事_第43张图片

11. SiamMask

对于目标跟踪而言,一般论文开篇通常都会说在第一帧给定目标位置,在后续帧中预测目标的位置。然而如何对后续帧中表述的定义直接影响了整个跟踪领域的发展。早期的跟踪算法都是坐标轴对齐的的矩形框。但随着跟踪精度的不断提升,数据集的难度在不断提升,在 VOT2015 时即提出使用旋转矩形框来作为标记。在 VOT2016 的时候提出自动的通过 mask 来生成旋转框的方法。所要预测的实际上就是目标物体的 mask。利用 mask 才能得到精度本身的上界。
【综述】计算机视觉二三事_第44张图片在物体发生旋转的时候,简单的 box 的表述通常会产生极大的损失,这实际上就是表述本身存在的缺陷。而为了进一步探索在精度上存在的问题。我们更进一步,直接预测物体的 mask。这种表述使得我们可以得到最为准确的 box。

相较于预测 score 和 box,mask 的预测会更为困难。我们这里使用的表述方法,是利用一个 vector 来编码一个 RoW 的 mask。这使得每个 prediction 位置具有非常高的输出维度(63*63), 我们通过 depthwise 的卷积后级联 1x1 卷积来升维来实现高效运行。这样即构成了我们的主要模型框架。【综述】计算机视觉二三事_第45张图片

七、目标跟踪(multi)

多目标跟踪算法需要根据每一帧图像中目标的检测结果,匹配已有的目标轨迹;对于新出现的目标,需要生成新的轨迹;对于已经离开摄像机视野的目标,需要终止轨迹的跟踪。多目标跟踪更像是一个数据关联的问题,利用CNN特征,REID特征,时空信息,运动信息等来把两个目标给匹配关联起来。

由于是多目标,自然就会产生新目标进入与旧目标消失的问题,这就是与单目标跟踪算法区别最大的一点。而由于这一点区别,也就导致跟踪策略的不同。

而多目标跟踪算法,大部分都是不考虑初始框的,原因就是上面的目标消失与产生问题。取而代之,在多目标跟踪领域常用的跟踪策略是TBD(Tracking-by-Detecton),又或者也可叫DBT(Detection-Based-Tracking)。即在每一帧进行目标检测,再利用目标检测的结果来进行目标跟踪,这一步我们一般称之为数据关联(Data Assoiation)。比如影响我很深的SORT算法以及Deep sort。

八、人体姿态估计

因为之后有一些项目要做人体姿态估计,所以这几天大概了解了一下这项任务。首先就是骨架图:人体骨架是以图形形式对一个人的方位所进行的描述。本质上,骨架是一组坐标点,可以连接起来以描述该人的位姿。骨架中的每一个坐标点称为一个“部分(part)”(或关节、关键点)。两个部分之间的有效连接称为一个“对(pair)“(或肢体)。注意,不是所有的部分之间的两两连接都能组成有效肢体。下图是一个典型的人体骨架举例。
【综述】计算机视觉二三事_第46张图片多年来,人们发展出了多种人体姿态估计算法。最早(也是最慢)的方法通常针对图像中仅有一个人的情景,只估计单个人的姿态。这些方法通常首先识别出各个部分,然后在它们之间形成连接以创建姿态。自然,这种单人姿态估计不太适用于很多现实生活中的情形,因为在真实情况下往往图像中包含很多个人。

多人姿态估计比单人姿态估计要难一些,因为图像中的人数以及每个人的位置是未知的。一般来说,我们可以用以下两种方法之一来解决这些问题:

  1. 比较简单的方法是先使用一个人体检测器,然后再估计检测器检出的每个人的关节,进而恢复每个人的姿态。这种方法被称为自顶向下的方法。
  2. 另外一种方法是先检测出一幅图像中的所有关节(即每个人的关节),然后将检出的关节连接 / 分组,从而找出属于各个人的关节。这种方法叫做自底向上方法。
    【综述】计算机视觉二三事_第47张图片

一般情况下,自顶向下的方法比自底向上的方法更容易实现,因为添加检测算法比增加连接 / 分组算法要简单得多。很难去评判这两种方法哪种的整体性能更好,因为这种性能比较的本质是在比较人体检测器和连接 / 分组算法哪个更好(实际上是没有可比性的)。这里就简单介绍一下我复现的第一个网络吧。

OpenPose(https://arxiv.org/pdf/1812.08008.pdf)是当前最流行的几种多人人体姿态估计算法之一。OpenPose 大获成功的一部分原因是它在 GitHub 上开源了其实现代码(https://github.com/CMU-Perceptual-Computing-Lab/openpose),并配有详细的说明文档。和很多自底向上的方法一样,OpenPose 首先检测出图像中所有人的关节(关键点),然后将检出的关键点分配给每个对应的人。下图展示了 OpenPose 模型的架构。
【综述】计算机视觉二三事_第48张图片OpenPose 网络首先使用前面的几个网络层(在上面的流程图中使用的是 VGG-19),从图像中提取特征。接下来,这些特征被传给两个平行的卷积层分支。第一个分支用来预测 18 个置信图,每个图代表人体骨架中的一个关节。第二个分支预测一个集合,该集合中包含 38 个关节仿射场(Part Affinity Fields,PAFs),描述各关节之间的连接程度。
【综述】计算机视觉二三事_第49张图片
接着,OpenPose 用一连串的步骤来优化每个分支的预测值。使用关节置信图,可以在每个关节对之间形成二分图(如上图所示)。使用 PAF 值,二分图里较弱的连接被删除。通过上述步骤,可以检出图中所有人的人体姿态骨架,并将其分配给正确的人。

九、总结

到这里第一篇博客写完了(真的是很累),里面很宽泛的介绍了一些我了解到的计算机视觉中基础的任务,但我知道这些也只是整个计算机视觉领域内很少的一部分,还有很多高级的任务我们并没有涉及到,但后面的博客会从主干网络结构说起,逐渐深入去了解每一项任务的实质和编程实现,我希望这是一个可以和大家一起交流学习的地方,如果有什么写的不对的地方,或者侵权之处,请及时和我联系。

邮箱:[email protected]

github主页:https://github.com/mansenaa

我的知乎专栏:https://zhuanlan.zhihu.com/mansen

你可能感兴趣的:(卷积神经网络)