cv岗位项目面试

Table of Contents

人脸检测与识别

扩展1:SIFT特征

扩展2:HOG特征

扩展3:SVM原理

扩展4:Adaboost分类器

扩展5:Cascade分类器

面向群体性异常事件检测的视频特征表示研究

复杂交通视频的多目标跟踪

扩展1:SSD

扩展2:匈牙利算法

扩展3:IOU

扩展4:卡尔曼滤波

基于混合卷积神经网络的草图分类

实习经历

深思考:养老院老人跟踪

佳能:人脸检测与识别

美图:图像分割

论文

1.草图生成

2.基于混合卷积的草图识别

3.基于GAN网络的草图美化

4.基于草图的动作识别

5.基于双分支互学习的草图识别


人脸检测与识别

它具有旋转不变性和灰度级不变性等显著优点。

  • 对LBP特征向量进行提取的步骤:

(1)首先将检测窗口划分为16×16的小区域(cell);

(2)对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值;

https://i-blog.csdnimg.cn/blog_migrate/aa3d06c5b60f8a9f38e4d8681347c099.png

(3)然后计算每个cell的直方图,即每个数字(假定是十进制数LBP值)出现的频率;然后对该直方图进行归一化处理。

(4)最后将得到的每个cell的统计直方图进行连接成为一个特征向量,也就是整幅图的LBP纹理特征向量;

然后便可利用SVM或者其他机器学习算法进行分类了。

  • OpenCV用到的语句:
  1. cv2.VideoCapture(video_path+video_name) #读入视频文件
  2. x, y, w, h = cv2.boundingRect(cnt) #  返回四个值,分别是xywhxy是矩阵左上点的坐标,wh是矩阵的宽和高
  3. cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) #第一个参数:img是原图 第二个参数:(xy)是矩阵的左上点坐标 第三个参数:(x+wy+h)是矩阵的右下点坐标 第四个参数:(0,255,0)是画线对应的rgb颜色 第五个参数:2是所画的线的宽度

扩展1:SIFT特征

SIFT算法特点:

1. 图像的局部特征,对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、
噪声也保持一定程度的稳定性。
2. 独特性好,信息量丰富,适用于海量特征库进行快速、准确的匹配。
3. 多量性,即使是很少几个物体也可以产生大量的 SIFT 特征
4. 高速性,经优化的 SIFT 匹配算法甚至可以达到实时性
5. 扩招性,可以很方便的与其他的特征向量进行联合。
Sfit特征提取和匹配具体步骤:(https://blog.csdn.net/hxg2006/article/details/80398701

1. 生成高斯差分金字塔(DOG金字塔),尺度空间构建

2. 空间极值点检测(关键点的初步查探)

3. 稳定关键点的精确定位

4. 稳定关键点方向信息分配

5. 关键点描述

6. 特征点匹配

以下对这6个步骤逐一说明。

1. 生成高斯差分金字塔(DOG金字塔),尺度空间构建

主要思想是通过对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测不同分辨率上的关键点提取等。

各尺度下图像的模糊度逐渐变大,能够模拟人在距离目标由近到远时目标物体在视网膜上的形成过程。

尺度空间构建的基础是DOG金字塔,DOG金字塔构建的基础是高斯金字塔,关于尺度空间、高斯金字塔、DOG金字塔的相关说明,可以参看前一篇博文《Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔》。贴一下高斯金字塔的实例图像:

归一化的DOG金字塔实例图像:

2. 空间极值点检测(关键点的初步查探)

为了寻找DOG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度空间域的相邻点大或者小,如下图所示:

在二维图像空间,中心点与它3*3邻域内的8个点做比较,在同一组内的尺度空间上,中心点和上下相邻的两层图像的2*9个点作比较,如此可以保证检测到的关键点在尺度空间和二维图像空间上都是局部极值点。

3. 稳定关键点的精确定位

DOG值对噪声和边缘比较敏感,所以在第2步的尺度空间中检测到的局部极值点还要经过进一步的筛选,去除不稳定和错误检测出的极值点,另一点就是在构建高斯金字塔过程中采用了下采样的图像,在下采样图像中提取的极值点对应在原始图像中的确切位置,也是要在本步骤中解决的问题。

4. 稳定关键点方向信息分配

稳定的极值点是在不同尺度空间下提取的,这保证了关键点的尺度不变性。为关键点分配方向信息所要解决的问题是使得关键点对图像角度和旋转具有不变性。方向的分配是通过求每个极值点的梯度来实现的。

对于任一关键点,其梯度幅值表述为:

梯度方向为:

分配给关键点的方向并不直接是关键点的梯度方向,而是按照一种梯度方向直方图的方式给出的。

具体的方法是:计算以关键点为中心的邻域内所有点的梯度方向,当然梯度方向一定是在0~360°范围内,对这些梯度方向归一化到36个方向内,每个方向代表了10°的范围。然后累计落到每个方向内的关键点个数,以此生成梯度方向直方图。

将梯度方向直方图中纵坐标最大的项代表的方向分配给当前关键点作为主方向,若在梯度直方图中存在一个相当于主峰值80%能量的峰值,则将这个方向认为是关键点的辅方向。辅方向的设计可以增强匹配的鲁棒性,Lowe指出,大概有15%的关键点具有辅方向,而恰恰是这15%的关键点对稳定匹配起到关键作用。

5. 关键点描述

对关键点的描述是后续实现匹配的关键步骤,描述其实就是一种以数学方式定义关键的过程。描述子不但包含关键点,也包括关键点周围对其有贡献的邻域点。

描述的思路是:对关键点周围像素区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象表述。

如下图,对于2*2块,每块的所有像素点做高斯加权,每块最终取8个方向,即可以生成2*2*8维度的向量,以这2*2*8维向量作为中心关键点的数学描述。

David G.Lowed的实验结果表明:对每个关键点,采用4*4*8共128维向量的描述子进项关键点表征,综合效果最佳:

6. 特征点匹配

特征点的匹配是通过计算两组特征点的128维的关键点的欧式距离实现的。欧式距离越小,则相似度越高,当欧式距离小于设定的阈值时,可以判定为匹配成功。

Sift特征匹配效果:

(1)高斯金字塔

https://blog.csdn.net/dcrmg/article/details/52561656

高斯金字塔是在Sift算子中提出来的概念,首先高斯金字塔并不是一个金字塔,而是有很多组(Octave)金字塔构成,并且每组金字塔都包含若干层(Interval)。

高斯金字塔构建过程:

1. 先将原图像扩大一倍之后作为高斯金字塔的第1组第1层,将第1组第1层图像经高斯卷积(其实就是高斯平滑或称高斯滤波)之后作为第1组金字塔的第2层,高斯卷积函数为:

对于参数σ,在Sift算子中取的是固定值1.6。

2. 将σ乘以一个比例系数k,等到一个新的平滑因子σ=k*σ,用它来平滑第1组第2层图像,结果图像作为第3层。

3. 如此这般重复,最后得到L层图像,在同一组中,每一层图像的尺寸都是一样的,只是平滑系数不一样。它们对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。

4.  将第1组倒数第三层图像作比例因子为2的降采样,得到的图像作为第2组的第1层,然后对第2组的第1层图像做平滑因子为σ的高斯平滑,得到第2组的第2层,就像步骤2中一样,如此得到第2组的L层图像,同组内它们的尺寸是一样的,对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。但是在尺寸方面第2组是第1组图像的一半。

这样反复执行,就可以得到一共O组,每组L层,共计O*L个图像,这些图像一起就构成了高斯金字塔,结构如下:

在同一组内,不同层图像的尺寸是一样的,后一层图像的高斯平滑因子σ是前一层图像平滑因子的k倍;

在不同组内,后一组第一个图像是前一组倒数第三个图像的二分之一采样,图像大小是前一组的一半;

(2)DOG金字塔

差分金字塔,DOG(Difference of Gaussian)金字塔是在高斯金字塔的基础上构建起来的,其实生成高斯金字塔的目的就是为了构建DOG金字塔。

DOG金字塔的第1组第1层是由高斯金字塔的第1组第2层减第1组第1层得到的。以此类推,逐组逐层生成每一个差分图像,所有差分图像构成差分金字塔。概括为DOG金字塔的第o组第l层图像是有高斯金字塔的第o组第l+1层减第o组第l层得到的。

DOG金字塔的构建可以用下图描述:

每一组在层数上,DOG金字塔比高斯金字塔少一层。后续Sift特征点的提取都是在DOG金字塔上进行的。

DOG金字塔的显示效果如下:

这些长得黑乎乎的图像就是差分金字塔的实际显示效果,只在第1组第1层差分图像上模糊可以看到一个轮廓。但其实这里边包含了大量特征点信息,只是我们人眼已经分辨不出来了。

下边对这些DOG图像进行归一化,可有很明显的看到差分图像所蕴含的特征,并且有一些特征是在不同模糊程度、不同尺度下都存在的,这些特征正是Sift所要提取的“稳定”特征:

扩展2:HOG特征

HOG过程:

HOG 特征提取方法就是将一个 image(你要检测的目标或者扫描窗口):
1)灰度化(将图像看做一个 x,y,z(灰度)的三维图像);
2)采用 Gamma 校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对
比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步
弱化光照的干扰。
4)将图像划分成小 cells(例如 6*6 像素/cell);
5)统计每个 cell 的梯度直方图(不同梯度的个数),即可形成每个 cell 的 descriptor;
6)将每几个 cell 组成一个 block(例如 3*3 个 cell/block),一个 block 内所有 cell 的
特征 descriptor 串联起来便得到该 block 的 HOG 特征 descriptor。 每个 block 进行对比度
归一化。
7)将图像 image 内的所有 block 的 HOG 特征 descriptor 串联起来就可以得到该 image(你
要检测的目标)的 HOG 特征 descriptor 了。这个就是最终的可供分类使用的特征向量了。
 

扩展3:SVM原理

 

扩展4:Adaboost分类器

OpenCV里还不是用的这个Adaboost,而是用的Rainer等人改进的Gentle Adaboost弱分类器,Gentle Adabboost弱分类器的工作原理如下图所示:

扩展5:Cascade分类器

面向群体性异常事件检测的视频特征表示研究

论文名称:《Learning Deep Representations of  Appearance and Motion for Anomalous Event Detection》,有代码

代码链接:https://github.com/zxc916443179/SDAE_abnormal_detection

https://github.com/nabulago/anomaly-event-detection

CSDN链接:https://blog.csdn.net/shashakang/article/details/68556539

摘要:

       此文章是第一篇将深度学习特征引入异常检测中,提出了一个AMDN (Appearance and Motion DeepNet )网络,结合运动目标的外观和运动信息,去自动学习特征表示,并且提出了新颖的双融合策略,包含传统的早期融合和后期融合策略,文章大致是引入了stacked denoising autoencoders (级联的降噪自编码),对输出的特征采用多层one-class SVM (一分类svm)去进行预测每个输入是异常的得分。
介绍:

三个网络:利用Autoencoder网络(此网络介绍参考http://bbs.cvmart.net/topics/610/Deep-Unrolling中9.1节AutoEncoder自动编码器),分别学到了外观特征、运动特征以及两者联合的特征,每一个降噪自编码都是由两部分组成:编码和解码。

外观特征:这一级的特征为从原始的图像像素特征中学习能代表外观的特征,为了去捕捉外观的贡献,采用多尺度的滑动窗去提取稠密的图像块,滑动步长为d,最后将图像块统一为大小wa× ha× ca ,前两个参数为图像块的宽和长,最后一个参数为图像的通道,比如灰度图通道为1,将这些归一之后的图像用于训练,所有的块归一化到【0,1】,在编码过程使用用4个编码层,第一层的神经元个数为na× wa× ha× ca ,va> 1  为放大因子目的为构造一个完备的过滤器。

运动特征:通过光流计算目标的运动信息,采用固定大小wm× hm× cm (cm=2是指光流沿x、y轴的幅值),通过稠密的光流块去学习运动信息,同上一个部分特征也是归一化到【0,1】,每一个通道使用4层编码层第一层的神经元个数为nm× wm× hm× cm 。

外观和运动的联合表示:上述提到编码模型是分别学习外观和运动信息,为了考虑两者之间的联系,提出了一种方法去求综合两者的联合信息,通过灰度图的像素块和对应的光流块去学习pixel-level early fusion(早期融合) 特征。

训练:

对于UCSD数据库,对于外观学习,利用三个不同尺度15*15,18*18,20*20分别去在原始视频上提取图像块,这样会产生5千万个图像块,随机采样1千万个并且归一化到相同大小(比如15*15大小)去训练。对于运动学习,用图像块大小为15*15大小去采样,随机采样6百万个子块。在测试阶段,利用15*15大小的滑动窗口块步长为15去采样测试视频。表观层和运动层中第一层网络的神经元数量设为1024。

输入225*225.

编码层的神经元数目为1024-512-256-128-64

代码部分:

处理数据:使用Python数据存储的pickle模块。

网络结构:利用autoencoder定义五层网络结构---autoencoder(dimensions=[225, 1024, 512, 256, 64])

网络损失函数:交叉熵损失函数(cost = - tf.add(tf.matmul(x,tf.transpose(tf.log(y))), tf.matmul(1-x, tf.transpose( tf.log(1-y) ) )))

其中,X: Tensor 

               Input placeholder to the network

           Y:Tensor

              Output reconstruction of the input

分类器:使用One-class SVM(见底下介绍)

数据集:UCSD行人数据集

评价指标:ROC(越大越好)(见底下介绍)

OneClass 与二分类,多分类的区别:

https://www.cnblogs.com/wj-1314/p/10701708.html

如果将分类算法进行划分,根据类别个数的不同可以分为单分类,二分类,多分类。常见的分类算法主要解决二分类和多分类问题,预测一封邮件是否是垃圾邮件是一个典型的二分类问题,手写体识别是一个典型的多分类问题,这些算法并不能很好的应用在单分类上,但是单分类问题在工业界广泛存在,由于每个企业刻画用户的数据都是有限的,很多二分类问题很难找到负样本,即使用一些排除法筛选出负样本,负样本也会不纯,不能保证负样本中没有正样本。所以在只能定义正样本不能定义负样本的场景中,使用单分类算法更合适。

  单分类算法只关注与样本的相似或者匹配程度,对于未知的部分不妄下结论。

  典型的二类问题:识别邮件是否是垃圾邮件,一类“是”,一类“不是”。

  典型的多类问题:人脸识别,每个人对应的脸就是一个类,然后把待识别的脸分到对应的类去。

  而OneClassClassification,它只有一个类,属于该类就返回结果“是”,不属于就返回结果“不是”。

  其区别就是在二分类问题中,训练集中就由两个类的样本组成,训练出的模型是一个二分类模型;而OneClassClassification中的训练样本只有一类,因此训练出的分类器将不属于该类的所有其他样本判别为“不是”即可,而不是由于属于另一类才返回“不是”的结果。

  现实场景中的OneCLassClassification例子:现在有一堆某商品的历史销售数据,记录着买该产品的用户信息,此外还有一些没有购买过该产品的用户信息,想通过二分类来预测他们是否会买该产品,也就是两个类,一类是“买”,一类是“不买”。当我们要开始训练二分类器的时候问题来了,一般来说没买的用户数会远远大于已经买了的用户数,当将数据不均衡的正负样本投入训练时,训练出的分类器会有较大的bisa(偏向值)。因此,这时候就可以使用OneClassClassification 方法来解决,即训练集中只有已经买过该产品的用户数据,在识别一个新用户是否会买该产品时,识别结果就是“会”或者“不会”。

One Class SVM算法步骤

  One Class SVM也是属于支持向量机大家族的,但是它和传统的基于监督学习的分类回归支持向量机不同,它是无监督学习的方法,也就是说,它不需要我们标记训练集的输出标签。

  那么没有类别标签,我们如何寻找划分的超平面以及寻找支持向量机呢?One Class SVM这个问题的解决思路有很多。这里只讲解一种特别的思想SVDD,对于SVDD来说,我们期望所有不是异常的样本都是正类别,同时它采用一个超球体而不是一个超平面来做划分,该算法在特征空间中获得数据周围的球形边界,期望最小化这个超球体的体积,从而最小化异常点数据的影响。

  假设产生的超球体参数为中心 o 和对应的超球体半径 r >0,超球体体积V(r) 被最小化,中心 o 是支持行了的线性组合;跟传统SVM方法相似,可以要求所有训练数据点xi到中心的距离严格小于r。但是同时构造一个惩罚系数为 C 的松弛变量 ζi ,优化问题入下所示:

  采用拉格朗日对偶求解之后,可以判断新的数据点 z 是否在内,如果 z 到中心的距离小于或者等于半径 r ,则不是异常点,如果在超球体以外,则是异常点。

  在Sklearn中,我们可以采用SVM包里面的OneClassSVM来做异常点检测。OneClassSVM也支持核函数,所以普通SVM里面的调参思路在这里也使用。

ROC曲线

https://www.cnblogs.com/houkai/p/3330061.html

ROC曲线横坐标:FPR    纵坐标:TPR

真阳性率(TPR) 
TPR = TP / P = TP / (TP+FN)

假阳性率(FPR) 
FPR = FP / N = FP / (FP + TN)

行是实际的类,列是分类器得到的类别。常用的术语如下:

真阳性(TP)——正确的肯定 
真阴性(TN)——正确的否定 
假阳性(FP)——错误的肯定,假报警,第一类错误 
假阴性(FN)——错误的否定,未命中,第二类错误

复杂交通视频的多目标跟踪

目标跟踪有两种方法:https://www.cnblogs.com/xiaozhi_5638/p/9376784.html

第一,基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪。这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出现了新的物体目标,算法是跟踪不到的。

这种方式的优点是速度相对较快。缺点很明显,不能跟踪新出现的目标。

第二,基于目标检测的跟踪,在视频每帧中先检测出来所有感兴趣的目标物体,然后将其与前一帧中检测出来的目标进行关联来实现跟踪的效果。这种方式的优点是可以在整个视频中跟踪随时出现的新目标,当然这种方式要求你前提得有一个好的“目标检测”算法。

对于第二种Tracking By Detecting的跟踪过程方法,分为两步:

https://blog.csdn.net/u010801994/article/details/85098631

https://blog.csdn.net/sinat_26917383/article/details/86557399#1_yolov3___Kalman_filter__13

Step1,使用目标检测算法将每帧中感兴趣的目标检测出来,得到对应的(位置坐标, 分类, 可信度),假设检测到的目标数量为M;(使用SSD网络)

改进SSD进行目标检测:https://blog.csdn.net/zhangjunhit/article/details/77252991

改进SSD论文链接:https://arxiv.org/pdf/1705.09587.pdf

原SSD论文链接:https://arxiv.org/pdf/1512.02325.pdf

Step2,通过某种方式将Step1中的检测结果与上一帧中的检测目标(假设上一帧检测目标数量为N)一一关联起来。换句话说,就是在M*N个Pair中找出最像似的Pair。

对于Step2中的“某种方式”,其实有多种方式可以实现目标的关联,比如(1)常见的计算两帧中两个目标之间的欧几里得距离(平面两点之间的直线距离),距离最短就认为是同一个目标,然后通过匈牙利算法找出最匹配的Pair。(2)还可以加上其他的判断条件,比如用IOU,计算两个目标Box(位置大小方框)的交并比,该值越接近1就代表是同一个目标。(3)还有其他方法,比如判断两个目标的外观是否相似,这就需要用到一种外观模型去做比较了,可能耗时更长。

在关联的过程中,会出现三种情况:

1)在上一帧中的N个目标中找到了本次检测到的目标,说明正常跟踪到了;

2)在上一帧中的N个目标中没有找到本次检测到的目标,说明这个目标是这一帧中新出现的,所以我们需要把它记录下来,用于下下一次的跟踪关联;

3)在上一帧中存在某个目标,这一帧中并没有与之关联的目标,那么说明该目标可能从视野中消失了,我们需要将其移除。(注意这里的可能,因为有可能由于检测误差,在这一帧中该目标并没有被检测到)

存在的问题

上面提到的跟踪方法在正常情况下都能够很好的工作,但是如果视频中目标运动得很快,前后两帧中同一个目标运动的距离很远,那么这种跟踪方式就会出现问题。

如上图,实线框表示目标在第一帧的位置,虚线框表示目标在第二帧的位置。当目标运行速度比较慢的时候,通过之前的跟踪方式可以很准确的关联(A, A’)和(B, B’)。但是当目标运行速度很快(或者隔帧检测)时,在第二帧中,A就会运动到第一帧中B的位置,而B则运动到其他位置。这个时候使用上面的关联方法就会得到错误的结果。

那么怎样才能更加准确地进行跟踪呢?

基于轨迹预测的跟踪方式

既然通过第二帧的位置与第一帧的位置进行对比关联会出现误差,那么我们可以想办法在对比之前,先预测目标的下一帧会出现的位置,然后与该预测的位置来进行对比关联。这样的话,只要预测足够精确,那么几乎不会出现前面提到的由于速度太快而存在的误差。

如上图,我们在对比关联之前,先预测出A和B在下一帧中的位置,然后再使用实际的检测位置与预测的位置进行对比关联,可以完美地解决上面提到的问题。理论上,不管目标速度多么快,都能关联上。

那么问题来了,怎么预测目标在下一帧的位置?

方法有很多,可以使用卡尔曼滤波来根据目标前面几帧的轨迹来预测它下一帧的位置,还可以使用自己拟合出来的函数来预测下一帧的位置。实际过程中,我是使用拟合函数来预测目标在下一帧中的位置。

如上图,通过前面6帧的位置,我可以拟合出来一条(T->XY)的曲线(注意不是图中的直线),然后预测目标在T+1帧的位置。具体实现很简单,Python中的numpy库中有类似功能的方法。

扩展1:SSD

https://www.cnblogs.com/fariver/p/7347197.html

https://blog.csdn.net/qianqing13579/article/details/82106664

SSD效果好,原因有三:

原因一:多尺度

原因二:设置了多种宽高比的default box

原因三:数据增强

原因一:多尺度

SSD使用VGG-16-Atrous作为基础网络,其中黄色部分为在VGG-16基础网络上填加的特征提取层。

SSD与yolo不同之处是除了在最终特征图上做目标检测之外,还在之前选取的5个特特征图上进行预测。

SSD图1为SSD网络进行一次预测的示意图,可以看出,检测过程不仅在填加特征图(conv8_2, conv9_2, conv_10_2, pool_11)上进行,为了保证网络对小目标有很好检测效果,检测过程也在基础网络特征图(conv4_3, conv_7)上进行。

由SSD的网络结构可以看出,SSD使用6个不同特征图检测不同尺度的目标。低层预测小目标,高层预测大目标。

作者在论文中通过实验验证了,采用多个特征图做检测能够大大提高检测精度,从上面的表格可以看出,采用6个特征图检测的时候,mAP为74.3%,如果只采用conv7做检测,mAP只有62.4%。
原因二:设置了多种宽高比的default box

在特征图的每个像素点处,生成不同宽高比的default box(anchor box),论文中设置的宽高比为{1,2,3,1/2,1/3}。假设每个像素点有k个default box,需要对每个default box进行分类和回归,其中用于分类的卷积核个数为c*k(c表示类别数),回归的卷积核个数为4*k。

SSD300中default box的数量:(38*38*4 + 19*19*6 + 10*10*6 + 5*5*6 + 3*3*4 + 1*1*4)= 8732

讲到这里,我想对于刚学习SSD的朋友,一定有这些疑惑: 

1. 为什么要设置default box? 
2. 为什么要设置多种宽高比的default box? 
3. 为什么在6个特征图上使用3x3的卷积核进行卷积就可以做检测了呢? 

理论感受野和有效感受野
这里先简单说明一下理论感受野和有效感受野的概念,更加详细的介绍参考论文:Understanding the Effective Receptive Field in Deep Convolutional Neural Networks[1]。这两个概念的理解对于理解default box(anchor)非常重要。

影响某个神经元输出的输入区域就是理论感受野,也就是我们平时说的感受野,但该输入区域的每个像素点对输出的重要性不同,越靠近中心的像素点影响越大,呈高斯分布,也就是说只有中间的一小部分区域对最后的输出有重要的影响,这个中间的一小部分区域就是有效感受野

图a中,整个黑色区域就是理论感受野(TRF),中间呈高斯分布的白色点云区域就是有效感受野(ERF) 
图b中,图中黑色虚线区域对应理论感受野,蓝色虚线部分对应有效感受野,红色实线框是anchor大小,他比理论感受野小很多,但是能够匹配有效感受野。

为什么要设置default box?
SSD在6个特征图上使用2组3x3的卷积核分别做分类和boundingbox回归,所以SSD是一个全卷积神经网络。我们知道每个特征图上每个像素点对应一个理论感受野,所以SSD相当于对原图中所有的理论感受野作分类和回归,由于有效感受野在理论感受野中有重要的影响,其他区域的影响可以忽略,所以这里我们认为SSD是对有效感受野作分类和回归,那么问题来了,既然是对所有的有效感受野做分类和回归,那每个有效感受野的分类的label和回归的label是如何确定的呢?default box就是用来干这个的。

每一层的default box设置了每一层特征图的有效感受野,然后使用这些default box与ground truth进行匹配来确定特征图上每个像素点的实际的有效感受野的label(包含分类label和回归label),分别用于分类和boundingbox回归。说的简单点,default box就是用来确定特征图上每个像素点实际的有效感受野的label的。

既然default box是确定实际有效感受野的label的,所以如果default box设置的有效感受野能够很好的匹配实际的有效感受野,SSD模型效果就会很好,如果两者相差较大,模型效果就会很差。

上图中,某一层特征图的某个像素点对应的实际有效感受野是红色区域,这个实际有效感受野的label应该是猫,但是SSD训练时这个红色区域的label是由default box确定的,如果default box设置的有效感受野对应的是蓝色区域,通过对default box与ground truth进行匹配我们发现,蓝色区域的label不是猫,而是背景,这样由default box确定的labe与实际有效感受野的真实的label就匹配不上了,如果用这个label作为红色区域的真实label就不对了,训练效果就会很差。

由于default box只要匹配实际的有效感受野就可以了,而实际的有效感受野要比理论感受野小很多,所以SSD中每一层的default box的大小可以比理论感受野小很多。作者在论文中也提到了这一点: 
Feature maps from different levels within a network are known to have different (empirical) receptive field sizes .Fortunately, within the SSD framework, the default boxes do not necessary need to correspond to the actual receptive fields of each layer. We design the tiling of default boxes so that specific feature maps learn to be responsive to particular scales of the objects. 
大意就是:SSD中default box不必响应实际的感受野,default box只对特定尺度的目标响应。也就是说,SSD的default box只要能够响应有效感受野就可以了。

所以在训练SSD的时候,default box大小的设置非常重要。目前实际的有效感受野的大小还不能精确计算出来,如何让default box设置的有效感受野更好的匹配实际的有效感受野还需要进一步研究。这一点作者在论文中也提到了: 
An alternative way of improving SSD is to design a better tiling of default boxes so that its position and scale are better aligned with the receptive field of each position on a feature map. We leave this for future work.

了解了default box的作用后,我们就很容易知道SSD的本质了

SSD对6个特征图上所有的default box进行分类和回归,其实就是对6个特征图对应的实际的有效感受野进行分类和回归,说得更加通俗一点,这些有效感受野其实就是原图中的滑动窗口,所以SSD本质上就是对所有滑动窗口进行分类和回归。这些滑动窗口图像其实就是SSD实际的训练样本。知道SSD的原理后我们发现深度学习的目标检测方法本质与传统的目标检测方法是相同的,都是对滑动窗口的分类。

注: 
1. 这里要好好理解这两个概念:“每一层实际的有效感受野”“default box设置的有效感受野” 
2. 注意全卷积神经网络与非全卷积神经网络的区别,一般的分类网络比如AlexNet只需要对整幅图像提取特征然后做分类,感受野是整幅图像,所以最后会用全连接层,而SSD中,由于要对每一个感受野做分类,所以只能用卷积层。

default box的匹配
现在我们知道了default box是用来确定label的,那么是如何确定label的呢? 
在训练阶段,SSD会先寻找与每个default box的IOU最大的那个ground truth(大于IOU阈值0.5),这个过程叫做匹配。如果一个default box找到了匹配的ground truth,则该default box就是正样本,该default box的类别就是该ground truth的类别,如果没有找到,该default box就是负样本。图1(b)中8x8特征图中的两个蓝色的default box匹配到了猫,该default box的类别为猫,图1(c)中4x4特征图中的一个红色的default box匹配到了狗,该default box的类别为狗。图2显示了实际的匹配过程,两个红色的default box分别匹配到了猫和狗,左上角的default box没有匹配,即为负样本。

图1

图2

关于匹配更多的细节,参考Caffe源码multibox_loss_layer.cpp中的FindMatches()函数,前面的博客:SSD源码解读3-MultiBoxLossLayer中也讲到了该函数。

为什么要设置多种宽高比的default box?
我们知道default box其实就是SSD的实际训练样本,如果只设置了宽高比为1的default box,最多只有1个default box匹配到,如果设置更多宽高比的default box,将会有更多的default box匹配到,也就相当于有更多的训练样本参与训练,模型训练效果越好,检测精度越高。

作者实验结果表明,增加宽高比为1/2,2,1/3,3的default box,mAP从71.6%提高到了74.3%。

如何选择default box的scale和aspect ratio?
假设我们用m个feature maps做预测,那么对于每个featuer map而言其default box的scale是按以下公式计算的。 
S_k=S_{min}+{​{S_{max}-S_{min}} \over {m-1}}(k-1)

示例: 
假设m=6,即使用6个特征图做预测, 则每一层的scale:0.2,0.34,0.48,0.62,0.76,0.9 
对于第一层,scale=0.2,对应的6个default box为:

注:表格中每个宽高比的default box的实际宽和高需要乘以输入图像的大小,如SSD300,则需要使用上面的数值乘以300得到default box实际大小。

Caffe源码中default box的宽高比以及scale的设置参考prior_box_layer.cpp,前面的博客:SSD源码解读2-PriorBoxLayer也对该层进行过解读。

原因3:数据增强
SSD中使用了两种数据增强的方式 
放大操作: 随机crop,patch与任意一个目标的IOU为0.1,0.3,0.5,0.7,0.9,每个patch的大小为原图大小的[0.1,1],宽高比在1/2到2之间。能够生成更多的尺度较大的目标 


缩小操作: 首先创建16倍原图大小的画布,然后将原图放置其中,然后随机crop,能够生成更多尺度较小的目标

作者实验表明,增加了数据增强后,mAP从65.5提高到了74.3!

数据增强对应Caffe源码annotated_data_layer.cpp,前面的博客:SSD源码解读1-数据层AnnotatedDataLayer也对该层进行过解读。

损失函数

损失函数由每个默认框的定位损失与分类损失构成。

数据集:PASCAL VOC2007,PASCAL VOC2012,COCO

评价指标:mAP

mAP介绍

https://blog.csdn.net/asasasaababab/article/details/79994920

https://blog.csdn.net/m0_37192554/article/details/82427375

概念理解:

mAP概念是PASCAL VOC比赛中所明确的metric。它的意思是输出的结果是一个ranked list,里边每一个元素包含了类别、框的信息,以及confidence,这个confidence就用来排序。有了排序,就可以计算AP了,然后再针对所有分类,取一个mean,就得到了mAP。这里为何要排序呢?是因为每一个框有一个confidence,mAP作为评估指标,需要考虑confidence进来。比方说我给出一个框,说我有99%的信心这里有一个猫,结果这里没有,相比我给出一个框,说我有10%的信心这里有一个猫,结果也没有,这两个框的penalty和reward不能一样的。因为99%信心说有,结果没有,那就说明这个系统很有问题。反之,假如我给出一个框,99%的信心说有一个猫,然后真有猫,相比10%信心说有猫,结果也是有猫,这两个框也不一样。也就是越“靠谱”,reward越大。什么叫靠谱?靠谱的意思是信心足的时候,一般结果正确。所以我们根据confidence进行排序之后,就应该给排名靠前的结果,也就是confidence比较大的一些更大的权重。所以才会有ranked list。或者可以理解为,我有一个query,查询的内容是,系统中的图片里猫都在那儿?那么这个就肯定需要ranked list了。

mAP提出及原因:

提出:Object Detection中的mAP是借鉴了信息检索中类似的方法—mAP(mean Average Precision)。

原因:多标签图像分类(Multi-label Image Classification)任务中图片的标签不止一个,因此评价不能用普通单标签图像分类的标准,即mean  accuracy。

计算方法:

首先用训练好的模型得到所有测试样本的confidence  score,每一类(如car)的confidence   score保存到一个文件中(如comp1_cls_test_car.txt)。假设共有20个测试样本,每个的id,confidence  score和ground  truth  label如下:​​

接下来对confidence  score排序,得到:

然后计算precision和recall,这两个标准的定义如下:

上图比较直观,圆圈内(true   positives + false  positives)是我们选出的元素,它对应于分类任务中我们取出的结果,比如对测试样本在训练好的car模型上分类,我们想得到top-5的结果,即:

在这个例子中,true   positives就是指第4和第2张图片,false   positives就是指第13,19,6张图片。方框内圆圈外的元素(false   negatives和true  negatives)是相对于方框内的元素而言,在这个例子中,是指confidence   score排在top-5之外的元素,即:

其中,false   negatives是指第9,16,7,20张图片,true   negatives是指第1,18,5,15,10,17,12,14,8,11,3张图片。

那么,这个例子中Precision=2/5=40%,意思是对于car这一类别,我们选定了5个样本,其中正确的有2个,即准确率为40%;Recall=2/6=30%,意思是在所有测试样本中,共有6个car,但是因为我们只召回了2个,所以召回率为30%。

实际多类别分类任务中,我们通常不满足只通过top-5来衡量一个模型的好坏,而是需要知道从top-1到top-N(N是所有测试样本个数,本文中为20)对应的precision和recall。显然随着我们选定的样本越来也多,recall一定会越来越高,而precision整体上会呈下降趋势。把recall当成横坐标,precision当成纵坐标,即可得到常用的precision-recall曲线。这个例子的precision-recall曲线如下:

接下来说说AP的计算,此处参考的是PASCAL  VOC  CHALLENGE的计算方法。首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于recall大于每一个阈值(比如recall>0.3),我们都会得到一个对应的最大precision。这样,我们就计算出了11个precision。AP即为这11个precision的平均值。这种方法英文叫做11-point interpolated average precision。​

当然PASCAL VOC CHALLENGE自2010年后就换了另一种计算方法。新的计算方法假设这N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, …, M/M),对于每个recall值r,我们可以计算出对应(r’ > r)的最大precision,然后对这M个precision值取平均即得到最后的AP值。计算方法如下:​

相应的Precision-Recall曲线(这条曲线是单调递减的)如下:​

AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。

扩展2:匈牙利算法

https://blog.csdn.net/NIeson2012/article/details/94472313

匈牙利算法(Hungarian Algorithm)与KM算法(Kuhn-Munkres Algorithm)是做多目标跟踪的小伙伴很容易在论文中见到的两种算法。他们都是用来解决多目标跟踪中的数据关联问题。

如果大家用这两种算法的名字在搜索引擎上搜索,一定会首先看到这个名词:二分图(二部图)。匈牙利算法与KM算法都是为了求解二分图的最大匹配问题。

二分图(二部图)

有一种很特别的图,就做二分图,那什么是二分图呢?就是能分成两组,U,V。其中,U上的点不能相互连通,只能连去V中的点,同理,V中的点不能相互连通,只能连去U中的点。这样,就叫做二分图。

读者可以把二分图理解为视频中连续两帧中的所有检测框,第一帧所有检测框的集合称为U,第二帧所有检测框的集合称为V。同一帧的不同检测框不会为同一个目标,所以不需要互相关联,相邻两帧的检测框需要相互联通,最终将相邻两帧的检测框尽量完美地两两匹配起来。而求解这个问题的最优解就要用到匈牙利算法或者KM算法。
引用百度百科的说法,匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。美国数学家哈罗德·库恩于1955年提出该算法。此算法之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家Dénes Kőnig和Jenő Egerváry的工作之上创建起来的。
这篇博文对匈牙利算法进行了非常简单清晰的解释,这里引用它来说明一下匈牙利算法的流程。

以上图为例,假设左边的四张图是我们在第N帧检测到的目标(U),右边四张图是我们在第N+1帧检测到的目标(V)。红线连起来的图,是我们的算法认为是同一行人可能性较大的目标。由于算法并不是绝对理想的,因此并不一定会保证每张图都有一对一的匹配,一对二甚至一对多,再甚至多对多的情况都时有发生。这时我们怎么获得最终的一对一跟踪结果呢?我们来看匈牙利算法是怎么做的。

第一步.

首先给左1进行匹配,发现第一个与其相连的右1还未匹配,将其配对,连上一条蓝线。

第二步.

接着匹配左2,发现与其相连的第一个目标右2还未匹配,将其配对。

第三步.

接下来是左3,发现最优先的目标右1已经匹配完成了,怎么办呢?

我们给之前右1的匹配对象左1分配另一个对象。

(黄色表示这条边被临时拆掉)

可以与左1匹配的第二个目标是右2,但右2也已经有了匹配对象,怎么办呢?

我们再给之前右2的匹配对象左2分配另一个对象(注意这个步骤和上面是一样的,这是一个递归的过程)。

此时发现左2还能匹配右3,那么之前的问题迎刃而解了,回溯回去。

左2对右3,左1对右2,左3对右1。

所以第三步最后的结果就是:

第四步.

最后是左4,很遗憾,按照第三步的节奏我们没法给左4腾出来一个匹配对象,只能放弃对左4的匹配,匈牙利算法流程至此结束。蓝线就是我们最后的匹配结果。至此我们找到了这个二分图的一个最大匹配。

再次感谢Dark_Scope的分享,我这里只是把其中的例子替换成了多目标跟踪的实际场景便于大家理解。

最终的结果是我们匹配出了三对目标,由于候选的匹配目标中包含了许多错误的匹配红线(边),所以匹配准确率并不高。可见匈牙利算法对红线连接的准确率要求很高,也就是要求我们运动模型、外观模型等部件必须进行较为精准的预测,或者预设较高的阈值,只将置信度较高的边才送入匈牙利算法进行匹配,这样才能得到较好的结果。

扩展3:IOU

扩展4:卡尔曼滤波

基于混合卷积神经网络的草图分类

实习经历

深思考:养老院老人跟踪

主要负责行人特征提取部分。

https://blog.csdn.net/ssmixi/article/details/52993081

https://www.csdn.net/gather_25/MtTaggysNDc4MS1ibG9n.html

https://blog.csdn.net/u010773275/article/details/70169724

一、摘要:行人检测主要分为四部分:特征提取、形变处理、遮挡处理和分类。现存方法都是四个部分独立进行,本文联合深度学习将四个部分结合在一起,最大化其能力。

二、引言:

    (1)首先,特征提取的应该是行人最有判别力的特征,比较有名的特征描述子有:Haar-like、SIFT、HOG等等;

    (2)其次,可变形模型应该可以处理人体的各个部分,如:躯干、头、退等等。最有名的DPM(可变形部件模型)使得各部 件具有连接性约束。

    (3)遮挡处理,如:检测Blocks或Parts的得分以及采用线索:图像分割、深度图等;

    (4)分类器:决定候选窗选中的为一个行人,如:SVM、boosted classifiers、随机森林等等。在这些方法中,分类器是由训练数据来调整的,但是特征是手工设计的。如果有用的信息在特征提取阶段遗漏了,那么在分类阶段不可能在恢复。实际上,应该是分类器应该引导特征的学习。
三、贡献

1.我们通过在cnn加入形变层层(deformation layer)来丰富了深度模型,使得许多形变处理可以依赖于我们的深度模型。

2.特征是通过形变处理和遮挡处理两个部分协同下的像素得到,由此可以得到更多不同的特征。

建立了三个等级的部分map,具体如图 3,每个等级由身体的部分大小分类,高等级部分又低等级部分组成。用这20个大小不同的part卷积核与detection map进行处理,然后得到20个part的带检测map。 (引入不同大小的卷积核,带有part信息)

形变层(deformation layer)

为了得到不同部分的约束,我们为cnn添加了形变处理层。

整个网络结构:

佳能:人脸检测与识别

https://blog.csdn.net/qq_36782182/article/details/83624357

论文链接:https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf

模型主要采用了两个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测。和很多处理图像问题的卷积神经网络模型,该模型也用到了图像金字塔、边框回归、非最大值抑制等技术。

构建图像金字塔

首先将图像进行不同尺度的变换,构建图像金字塔,以适应不同大小的人脸的进行检测。

P-Net:

全称为Proposal Network,其基本的构造是一个全连接网络。对上一步构建完成的图像金字塔,通过一个FCN进行初步特征提取与标定边框,并进行Bounding-Box Regression调整窗口与NMS进行大部分窗口的过滤。

P-Net是一个人脸区域的区域建议网络,该网络将特征输入经过三个卷积层和全连接层之后,通过一个人脸分类器判断该区域是否是人脸,同时使用边框回归和一个面部关键点的定位器来进行人脸区域的初步提议,该部分最终将输出很多张可能存在人脸的人脸区域.最后对选定的候选框进行Bounding-Box RegressionNMS进一步优化预测结果。

O-Net:

O-Net会对人的面部特征点进行回归,最终输出五个人脸面部特征点。

该网络的输入特征更多,在网络结构的最后同样是一个更大的256的全连接层,保留了更多的图像特征,同时再进行人脸判别、人脸区域边框回归和人脸特征定位,最终输出人脸区域的左上角坐标和右下角坐标与人脸区域的五个特征点。O-Net拥有特征更多的输入和更复杂的网络结构,也具有更好的性能,这一层的输出作为最终的网络模型输出。

整个系统的工作流图

技术细节

FCN(全卷机网络)
全卷积网络就是去除了传统卷积网络的全连接层,然后对最后一个卷积层(或者其他合适的卷积层)的feature map进行上采样,使其恢复到原有图像的尺寸(或者其他),并对反卷积图像的每个像素点都可以进行一个类别的预测,同时保留了原有图像的空间信息。
同时,在反卷积对图像进行操作的过程中,也可以通过提取其他卷积层的反卷积结果对最终图像进行预测,合适的选择会使得结果更好、更精细。

IoU
对于某个图像的子目标图像和对这个子目标图像进行标定的预测框,把最终标定的预测框与真实子图像的自然框(通常需要人工标定)的某种相关性叫做IOU(Intersection over Union),经常使用的标准为两个框的交叉面积与合并面积之和。

Bounding-Box regression:
解决的问题:
当IOU小于某个值时,一种做法是直接将其对应的预测结果丢弃,而Bounding-Box regression的目的是对此预测窗口进行微调,使其接近真实值。
具体逻辑
在图像检测里面,子窗口一般使用四维向量(x,y,w,h)表示,代表着子窗口中心所对应的母图像坐标与自身宽高,目标是在前一步预测窗口对于真实窗口偏差过大的情况下,使得预测窗口经过某种变换得到更接近与真实值的窗口。
在实际使用之中,变换的输入输出按照具体算法给出的已经经过变换的结果和最终适合的结果的变换,可以理解为一个损失函数的线性回归。

NMS(非极大值抑制)
顾名思义,非极大值抑制就是抑制不是极大值的元素。在目标检测领域里面,可以使用该方法快速去掉重合度很高且标定相对不准确的预测框,但是这种方法对于重合的目标检测不友好。

Soft-NMS
对于优化重合目标检测的一种改进方法。核心在于在进行NMS的时候不直接删除被抑制的对象,而是降低其置信度。处理之后在最后统一一个置信度进行统一删除。

PRelu
在MTCNN中,卷积网络采用的激活函数是PRelu,带有参数的带有参数的Relu,相对于Relu滤除负值的做法,PRule对负值进行了添加参数而不是直接滤除,这种做法会给算法带来更多的计算量和更多的过拟合的可能性,但是由于保留了更多的信息,也可能是训练结果拟合性能更好。

美图:图像分割

https://blog.csdn.net/zhangjunhit/article/details/77561615

论文:http://personal.ie.cuhk.edu.hk/~pluo/pdf/luoWLWiccv17.pdf

要解决的问题:

标记像素级数据集困难

网络结构:

Resnet:feature extraction

‘1’,‘2’和‘3’分别代表labelmap prediction (blue), image reconstruction (green), and tag classification (pink)。

Baseline. 这里我们使用 ResNet101 网络结构来提取特征,输出一个 2048×45×45 的 feature map 和 2048×1 的 feature vector ,用 u1 v1 表示.

Forward Propagation:
对于 Subnet-1( labelmap prediction) ,它包括一个 elementwise-sum layer 和 一个 convolutional layer. elementwise-sum layer 的输入时u1、v1。它俩的尺寸不一样,通过对v1进行 upsampling 得到2048 × 45 × 45, 然后再元素相加 : u 2 = u 1 ⊕ up(v1 ),the pixel-level features u 1 can borrow information from the image-level features v 1 to improve segmentation。 a convolutional layer applies a 2048×3×3×21 kernel on u 2 to produce u 3 ,对应 VOC12 中 21类别的响应图。

对于 Subnet-2, 表示有u3 重建出输入图像,用z3表示,使用了三个卷积层, the sizes of the kernels from u 3 to z 3 are 21 × 5 × 5 × 21, 21 × 3 × 3 × 16, and 16 × 3 × 3 × 3。

对于 Subnet-3( tag classification),它包括一个 elementwise-sum layer 和 一个 convolutional layer,和Subnet-1类似,通过 average pooling 将u1 归一化到 v1 尺寸,再进行元素相加: v 2 = avgpool(u 1 )⊕v 1,通过卷积层 , v 2 is projected into a response vector v 3 of 21 × 1。

损失函数:

在保持网络参数固定的情况下,通过 u1,v1 来最小化重建误差 不断提升分割结果。

论文

1.草图生成

基于VGG16网络。因为此网络多尺度和多层次的学习图像特征。

针对每一个side-output,使用Sigmoid预测图像中像素为sketch的概率。为了解决sketch中像素个数不平衡问题,引入类别平衡交叉熵损失函数。最后对于每一个side-output的输出,与GT计算损失。同时将不同的side-output输出进行融合,融合结果与GT计算损失。反向传播更新网络参数是,每个side-output对每个分支网络进行更新,同时融合后计算的损失,对整个网络进行参数更新。

2.基于混合卷积的草图识别

基于传统神经网络提取外观信息,同时利用点信息表示草图形状,提取草图的结构信息。最后将两个分支特征进行融合,实现草图识别。

点信息表示草图应该解决两个问题:(1)草图平移和旋转不变性。(2)采样点顺序表示特征不变性。

点网络由MLP实现形状特征的提取与表示。针对上述两个问题,提出平移旋转不变性网络和池化层。

平移旋转不变性网络用于学习2×2的矩阵,与输入图像进行哈达玛积。

3.基于GAN网络的草图美化

草图美化主要解决两个问题:笔画衰减(degrade)和间隙修复(gap completion)。

对于笔画衰减问题,提出线条增强网络。增强网络使用局部特征和全局特征融合,并使用去噪模块(由双边滤波器和1×1卷积构成)增强笔画。

对于间隙修复,使用级联策略(cascade strategy),同时使用生成器和判别器计算网络损失,更新模型参数。

4.基于草图的动作识别

人身体姿势( body-posture)在不同时间段会发生变化。这些变化可以通过身体形状(shape)的变化反应。本文提出的草图模态,能够很好的表示形状变化。

草图模态提取中存在连个问题:动作周围可能存在不相关的信息,其次草图没有颜色纹理信息,具有稀疏性。

针对1,提出attention机制,去除冗余信息。

针对2,提出基于TSN的双分支网络:纹理提取网络(image-based)(BN-Inception)和结构提取网络(point-based)。

5.基于双分支互学习的草图识别

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值