本文转自公众号 云栖社区
计算机视觉是人工智能(AI)中的热门研究课题,它已经存在多年。然而,计算机视觉仍然是人工智能面临的最大挑战之一。在本文中,我们将探讨使用深度神经网络来解决计算机视觉的一些基本挑战。特别是,我们将研究神经网络压缩,细粒度图像分类,纹理合成,图像搜索和对象跟踪等应用。
1、神经网络压缩
尽管深度神经网络具有令人难以置信的性能,但它们对计算能力和存储的需求对其在实际应用中的部署提出了重大挑战。研究表明,神经网络中使用的参数可能非常多余。因此,在提高精度的同时还需要投入大量的工作来降低了网络的复杂性。
低秩近似用于接近原始权重矩阵。例如,SVD可用于获得矩阵的最佳低秩近似,或者Toeplitz矩阵可与Krylov分析结合使用以近似的原始矩阵。
1.1:修剪
一旦训练完成,一些不相关的神经元连接(可以在损失算法中加权值平衡和稀疏约束)或者将所有这些连接过滤掉,然后执行几轮微调。在实际应用中,修剪神经元连接的级别将使结果稀疏,难以缓存,并且难以从存储器访问。有时,我们需要特别设计一个合作运营数据库。
相比之下,过滤级修剪可以直接在已经存在的操作数据库上运行,过滤级修剪的关键是确定如何平衡过滤器的重要性。例如,我们可以使用卷积结果的稀疏性、滤波器对损失算法的影响或者卷积对下一层结果的影响进行平衡。
1.2:量化
我们可以将权重值分成组,然后使用组中的中值来替换原始权重,并通过霍夫曼编码运行它。但是,如果我们只考虑权重本身,则可以减少量化过程的误差偏差。随后,分类操作的误差偏差将显着增加。因此,量化CNN的优化目标是重构以最小化误差偏差。此外,我们可以使用哈希编码并投影相同的哈希权重(hashbucket weights)来共享相同的值。
1.3:减少数据值的范围
在默认情况下,数据由单精度浮点组成,占32位。研究人员发现,使用半精度浮点(16位)对性能的影响几乎为零。谷歌的TPU使用8位整数来表示数据,这种情况是值的范围是两个或三个值(0/1或-1/0/1)。仅使用位进行操作可以使我们快速完成各种计算,但是训练两个或三个价值网络是一个至关重要的问题。
传统方法是使用两个或三个值作为前馈过程并在更新过程中传递实数。此外,研究人员认为两个值的表达能力是有限的,因此可以使用额外的浮点缩放二进制卷积结果来改善网络表示。
1.4:简化的结构设计
研究人员一直致力于创建简化的网络结构,例如:
1. 1x1卷积:这种设计理念已经在Inception和ResNet系列网络设计中得到了广泛应用;
2. 分组卷积;
3. 扩展卷积:只要值不变,使用扩展卷积就可以扩展感知域。
知识蒸馏(Knowledge distillation)训练小网络接近广泛的网络。但是,目前还不清楚如何正确地接近庞大的网络。
1.5:硬件-软件协议设计
常用硬件:
1. 常见硬件,如CPU(低延迟,复杂操作)和GPU(高吞吐量,适合并发,简单过程);
2. 专用硬件,包括ASIC(专用集成电路,例如Google的TPU)和FPGA(现场可编程门阵列,灵活但效率较低)。
2、细粒度图像分类
与(普通)图像分类相比,细粒度图像分类在确定图像类别时需要更高的精度。例如,我们可能需要确定目标鸟的确切种类、汽车的品牌和型号、飞机的型号。通常,这些类之间的差异很小。例如,波音737-300和波音737-400之间唯一明显不同的区别就是窗户的数量。因此,细粒度图像分类比标准图像分类更具挑战性。
细粒度图像分类的经典方法是首先在图像上定义不同的位置,例如,鸟的头部、脚部或翅膀。然后我们必须从这些位置提取特征,最后,组合这些特征并使用它们来完成分类。这种方法具有非常高的准确性,但它需要大量的数据集和手动标记位置信息。细粒度分类的一个主要趋势是没有额外监督信息的训练,而不是仅使用图像笔记,该方法由双线性CNN方法表示。
2.1:双线性(Bilinear)CNN
首先计算卷积描述符的外积,以找出不同维度之间的相互关系。因为不同描述符的维度对应于卷积特征的不同通道,并且不同的通道提取不同的语义特征,所以使用双线性操作允许我们捕获输入图像上的不同语义元素之间的关系。
2.2:流线型双线性汇合(Streamlined Bilinear Confluence)
双线性汇合的结果是非常高维的,这需要大量的计算和存储资源,也明显增加了下一个完全连接层上的参数数量。后续研究旨在制定简化双线性汇合的战略,其结果包括以下内容:
1. PCA维数减少:在双线性汇合出现之前,我们会在深度描述符上使用PCA投影维数减少,但这会影响影响性能的每个维度。一个折中的方案是仅将PCA降维应用于一条线。
2. 近似核估计:证明在双线性收敛之后使用线性SVM分类与在描述符上使用多项式核一样有价值。因为两个描述符的向外投影等于两个独立描述符的卷积投影,所以一些研究集中于使用随机矩阵来近似描述符投影。此外,通过近似核估计,我们可以捕获超过二阶信息(见下图)。
3. 低秩近似:使用来自全连接层的参数矩阵进行低秩近似使得不必明确地计算双线性汇合的结果。
3、图像描述
图像描述是生成图像的一个或两个句子描述的过程。这是一项涉及计算机视觉和自然语言处理的跨学科任务。
3.1:编码器-解码器网络
设计图像字幕网络背后的基本思想基于自然语言处理领域中机器翻译的概念。在具有图像CNN编码网络的机器翻译器中替换源语言编码网络并提取图像的特征之后,我们可以使用解码器网络作为目标语言来创建文本描述。
3.2:ShowAttend and Tell
注意力机制是机器翻译器用来捕获远程依赖关系的标准技术,也可以用于图像字幕。在解码器网络中,除了预测下一个单词之外,在每个时刻,我们还需要输出二维注意力图像并将其用于深度卷积特征的加权收敛。使用注意力机制的另一个好处是网络可以被可视化,这样我们就可以轻松地看到网络在生成每个单词时所看到的图像部分。
3.3:AdaptiveAttention(自适应注意力机制)
先前的注意力机制将为每个预测的单词产生二维注意图像(图像(a))。但是,对于一些停止词,我们不需要使用图像中的线索。相反,某些单词可以根据上下文生成,完全独立于图像本身。这项工作在LSTM上进行了扩展,并产生了“视觉哨兵”机制,该机制确定是否应根据上下文或图像信息(图像(b))预测当前单词。
此外,与先前在根据隐藏层的状态计算注意图像的先前方法不同,该方法根据隐藏层的当前状态执行计算。
4、视觉问答
给定图像和与该图像相关的问题,视觉问答旨在从选择的候选答案中回答该问题。从本质上讲,这是一个分类任务,有时它使用递归神经网络解码来产生文本答案。视觉问答也是一项涉及视觉和自然语言处理的跨学科任务。
4.1:基本思想过程
问题概念是使用CNN从图像中提取特征,RNN从文本问题中提取文本特征,然后组合视觉和文本特征,最后使用完全连接后进行分类。这项任务的关键是弄清楚如何连接这两种类型的功能。直接组合这些特征的方法将它们转换为矢量,或者通过添加或乘以元素来添加或生成视觉和文本矢量。
注意使用注意力机制的图像字幕系统可提高视觉问答的性能。注意力机制包括视觉注意(“我在哪里看”)和文本注意力(“我在看哪个词?”)HieCoAtten可以同时或依次创建视觉和文本注意力。DAN在同一空间内投射视觉和文本注意力的结果; 然后它同时产生视觉和文本注意力的下一步。
4.2:双线性整合
该方法使用视觉特征向量和文本特征向量的外积来捕获每个维度上这些状态的特征之间的关系。为了避免明确地计算双线性汇合的高维度结果,我们可以将在细粒度识别中发现的流线型双线性汇合背后的思想应用于视觉问题回答。例如,MFB使用低速率近似背后的概念以及视觉和文本注意机制。
5、神经网络可视化与神经网络理解
下文提供了许多可视化方法,以帮助理解卷积和神经网络。
5.1:直接可视化第一个过滤器
由于第一个卷积层上的滤镜在输入图像上滑动,我们可以直接在第一层上显示滤镜。我们可以看到第一层权重集中在特定方向的边缘和指定的颜色组合,这类似于视觉生物学机制。但是,由于高级过滤器不直接用于输入图像,因此直接可视化只能应用于第一层上的过滤器。
5.2:T-SNE
此方法在图像的fc7和pool5特征上使用低维嵌入。例如,将它们缩小到2维并允许它们在2维平面上绘制,具有类似语义信息的图像应该产生与t-SNE类似的结果。该方法与PCA之间的区别在于t-SNE是一种非线性减少方法,可以保留地点之间的距离。我们得到以下图像,该图像是将t-SNE应用于原始MNIST图像的结果。我们可以看到MNIST是一个相对简单的数据集,其中不同分类的图像之间的差异是显而易见的。
5.3:可视化中间层激活值
我们可以看到,即使ImageNet没有人脸类别,网络仍将学会区分这种语义信息并捕获未来的分类。
5.4:最大化响应图像区域
为了阻止这种情况,在中间层选择一个指定的神经元,然后将多个不同的图像输入网络,以找到导致神经元最大响应的图像区域。这允许我们观察神经元对应的语义特征,我们使用“图像区域”而不是“完整图像”的原因是中间层神经元的感受野受限并且不能覆盖整个图像。
5.5:梯度上升优化
该方法选择特定的神经元,然后计算该神经元对输入图像的反应产生的偏导数,然后使用梯度上升优化图像直到收敛。此外,我们需要一些标准化的项目来使生成的图像更接近自然模型。除了优化输入图像,我们还可以优化fc6功能并创建所需的图像。
6、对抗性的例子
选择图像和不正确的分类。然后,系统计算该分类对图像的偏导数,然后对图像应用梯度上升优化。实验表明,在使用小的,几乎察觉不到的变化之后,我们可以使网络以高可信度对模型实现不正确的类。
在实际应用中,对抗性示例在金融和安全领域非常有用。研究人员发现,这是因为图像空间的维度非常高。即使有大量的训练数据,我们也只能覆盖该空间的一小部分。如果输入图像从该不同空间稍微变化,那么网络将难以做出合理的决定。
7、纹理生成(Texture Synthesis)与风格迁移(Style Transform)
纹理生成用于生成包含相同纹理的较大图像。给定正常图像和包含特定风格的图像,然后通过风格迁移不仅保留图像的原始内容,而且将该图像转换为指定的风格。
7.1:特征反演(Feature Inversion)
特征反演是纹理生成和风格迁移背后的核心概念。给定一个中间层特征,我们希望迭代来创建与给定特征类似图像。特征反演还可以告诉我们在中间层特征中包含多少图像信息。
给定DxHxW的深度卷积特征,我们将它们转换为Dx(HW)矩阵X,因此我们可以将对应Gram矩阵定义为:G = XX ^ T
通过外积,Gram矩阵捕获不同特征之间的关系。
7.2:纹理生成的概念
它对给定纹理图案的Gram矩阵进行特征逆向工程。使生成图像的各层特征的Gram矩阵接近给定纹理图像的各层Gram。低层特征倾向于捕获细节信息,而高层特征可以捕获更大面积的特征。
7.3:风格迁移的概念
此优化有两个主要目标:第一个是使生成的图像的内容更接近原始图像的内容,而第二个是使生成的图像的风格与指定的风格匹配。风格由Gram矩阵体现,而内容直接由神经元的激活值体现。
7.4:直接生成风格迁移的图像
上面直接生成风格迁移的图像的方法的缺点是需要多次迭代才能收敛。解决该问题的方案是训练一个神经网络来直接生成风格迁移的图像。一旦训练结束,进行风格迁移只需前馈网络一次,十分高效。在训练时,将生成图像、原始图像、风格图像三者前馈一固定网络以提取不同层特征用于计算损失函数。
实验证明,通过使用实例归一化,风格变换网络可以移除与图像相关的比较信息以简化生成过程。
7.5:条件示例规范化
上述方法的一个问题是我们必须为每种不同的风格训练一个单独的模型。由于不同的风格有时包含相似性,因此可以通过在不同风格的风格变换网络之间共享参数来完成这项工作。具体来说,它更改了风格转换网络的示例规范化,使其具有N组缩放和平移参数,每个组对应于特定风格。这样我们就可以从单个前馈过程中获得N个风格的变换图像。
8、面部验证/识别
人脸验证/识别可以认为是一种更加精细的细粒度图像识别任务。人脸验证是给定两张图像、判断其是否属于同一个人,而人脸识别是回答图像中的人是谁。一个人脸验证/识别系统通常包括三大步:检测图像中的人脸,特征点定位、及对人脸进行验证/识别。人脸验证/识别的难题在于需要进行小样本学习。通常情况下,数据集中每人只有对应的一张图像,这称为一次性学习(one-shot learning)。
8.1:面部识别系统背后的概念
作为分类问题(非常多的类别数),或作为度量学习的问题。如果两个图像属于同一个人,那么我们希望它们的深层特征非常相似。否则,它们的特征应该不同。之后,根据深度特征之间的距离进行验证或识别(k最近邻居分类)。
8.2:DeepFace
第一个成功将深度神经网络应用于面部验证/识别模型的系统。DeepFace使用非共享参数局部性连接。这是因为人脸的不同部分具有不同的特征(例如眼睛和嘴唇具有不同的特征),因此传统卷积层的经典“共享参数”不适用于面部验证。因此,面部识别网络使用非共享参数局部性连接。它使用的孪生(Siamese network)网络用于面部验证。当两个图像的深度特征小于给定阈值时,它们被认为是同一个人。
8.3:FaceNet
FaceNet通过三因子输入,希望负样本之间的距离大于正样本之间的距离给定量。此外,三个输入因子并不是随机的,否则,因为负样本的差异样本太大,网络将无法学习。选择最具挑战性的三个元素组(例如最远的正样本和最接近的负样本)会使该网络陷入局部最优。FaceNet使用半困难策略,选择比正样本更远的负样本。
8.4:大区间交叉熵损失
近年来,这一直是一个热门的研究课题。由于类内波动大而类间相似度高,有研究工作旨在提升经典的交叉熵损失对深度特征的判断能力。例如,L-Softmax加强优化目标,使对应类别的参数向量和深度特征夹角增大。
ECHO 处于关闭状态。
A-Softmax进一步约束L-Softmax的参数向量长度为1,使训练更集中到优化深度特征和夹角上。实际中,L-Softmax和A-Softmax都很难收敛,训练时采用了退火方法,从标准softmax逐渐退火至L-Softmax或A-Softmax。
8.5:实时检测
该系统确定面部图像是来自真人还是来自照片,这是面部验证/识别任务的关键障碍。目前在业界流行的一些方法是读取人的面部表情,纹理信息,眨眼或要求用户完成一系列动作的变化。
9、图像搜索和检索
给定一个包含特定实例(例如特定目标,场景或建筑物)的图像,图像搜索用于在数据库中查找包含与给定实例类似的元素的图像。然而,由于两个图像中的角度,光照和障碍物通常不相同,因此创建能够处理图像类别中的这些差异的搜索算法的问题对研究人员构成了重大挑战。
9.1:经典图像搜索的过程
首先,我们必须从图像中提取适当的代表性矢量。其次,将欧氏距离或余弦距离应用于这些矢量以执行最近邻居搜索并找到最相似的图像。最后,我们使用特定的处理技术对搜索结果进行小幅调整。我们可以看到图像搜索引擎性能的限制因素是图像的表示:
9.2:无监督的图像搜索
无监督图像搜索使用预先训练的ImageNet模型,没有外部信息作为特征提取引擎来提取图像的表示。
直观的思路:因为深度全连接特征提供了图像的高级描述,并且是一个“自然”矢量,直观的思维过程是直接提取深度全连接特征作为图像的代表矢量。但是,由于图像分类中使用完全连接的特征缺乏对图像的详细描述,因此该思维过程仅产生平均准确度。
使用深度卷积特征:因为深度卷积具有更好的详细信息,并且可以用于处理任何大小的图像,目前流行的方法是提取深度卷积特征,然后使用加权全局搜索和求和池来获得图像的代表向量。权重表示不同位置的特征的必要性,并且可以采用空间矢量权重或信道矢量权重的形式。
CroW:深度卷积特征是一种分布式表示。尽管来自神经元的响应值在确定区域是否有目标方面不是非常有用,但如果多个神经元同时具有大量反应,那么该区域很可能包含目标。因此,CroW沿着通道添加了特征图以获得二维合成图,对其进行标准化,并根据数量标准化的结果将其用作空间权重。CroW的通道权重由特征图的稀疏性决定,类似于TF-IDF中的IDF特征,自然语言处理中的特征可用于提升不常见但具有高度确定性的特征。
类加权特征:该方法尝试利用图像集成网络的类别预测信息使空间权重更具确定性。具体地,它使用CAM来获得预训练网络中每个类别的最具代表性的区域的语义信息;然后它使用标准化的CAM结果作为空间权重。
PWA:PWA发现,深度卷积特征的不同通道对应于目标上不同区域的响应。因此,PWA可以选择一系列确定性特征映射,并将其标准化结果用作收敛的空间权重。然后系统级联结果以形成最终图像的表示。
9.3:有监督图像搜索
有监督图像搜索首先采用预先训练的ImageNet模型并将其调整到另一个训练数据集上。然后,它从这个调整的模型中提取图像表示。为了获得更好的结果,用于优化模型的训练数据集通常类似于搜索数据集。此外,我们可以使用候选区域网络从可能包含目标的图像中提取前景区域。
孪生网络:类似于人脸识别的思想,该系统使用两个元素或三个元素输入(++ -)来训练模型,以最小化两个样本之间的距离,并最大化两个不同样本之间的距离。
9.4:对象跟踪
对象跟踪的目标是跟踪视频中目标的移动。通常,目标位于视频的第一帧中并由框标记。我们需要预测框在下一帧中的位置。对象跟踪与目标测试类似。然而,对象跟踪的难点在于我们不知道我们跟踪哪个目标。因此,我们无法在任务之前收集足够的训练数据并训练专门的测试。
9.5:孪生网络
类似于面部验证的概念,利用孪生网络可以在一条线上的目标框内输入图像,并且在另一条线上输入候选图像区域,然后输出两个图像之间的相似度。我们不需要遍历不同帧中的所有其他候选区域;相反,我们可以使用卷积网络,只需要将每个图像前馈一次,通过卷积,我们可以获得二维的响应图,其中最重要的响应位置确定了框的位置。基于孪生网络的方法非常快并且能够处理任何大小的图像。
9.6:CFNet
相关滤波器训练线性模板以区分图像区域和它们周围的区域,然后使用傅立叶变换。CFNet与离线训练的孪生网络和相关的在线滤波模板相结合,能够提高加权网络的跟踪性能。
10、生成式模型(generative models)
这种类型的模型用于学习数据(图像)的分布或从其分布中采样新图像。生成模型可用于超分辨率重建、图像着色、图像转换、从文本生成图像、学习隐藏的图像表示、半监督学习等。此外,生成式模型可以与强化学习相结合,用于模拟和逆强化学习。
10.1:显式建模
使用条件概率的公式来对图像的分布进行最大似然估计并从中学习。该方法的缺点在于,由于每个图像中的像素取决于先前的像素,因此必须在一个角开始并以有序的方式进行,所以生成图像的过程将稍微缓慢。例如,WaveNet可以产生类似于人类创建的语音,但由于它不能同时产生,一秒钟的语音需要2分钟来计算,并且实时生成是不可能的。
10.2:变分自编码器
为了避免显式建模的缺陷,变分自编码器对数据分布进行了隐式建模。它认为生成图像受隐藏变量控制的影响,并假设隐藏变量受到对角高斯分布的影响。
变分自编码器使用解码网络根据隐藏变量生成图像。由于我们无法直接应用最大似然估计,因此在训练时,类似于EM算法,变分自编码器构造似然函数的下界函数,然后使用该下界函数进行优化。变分自编码器的好处是因为每个维度的独立性;我们可以通过控制隐藏变量来控制影响输出图像变化的因素。
10.3:生成对抗式网络(GAN)
由于学习数据分布极其困难,生成对抗式网络完全避免了这一步骤并立即生成图像。生成对抗式网络使用生成网络G从随机噪声创建图像,并使用判别网络D来确定输入图像是真实的还是伪造的。
在训练期间,判别网络D的目标是确定图像是真实的还是伪造的,并且生成式网络G的目的是使判别网络D倾向于确定其输出图像是真实的。在实践中,训练生成式对抗网络会带来模型崩溃的问题,其中生成对抗式网络无法学习完整的数据分布。这在LS-GAN和W-GAN中产生了改进,与变分自编码器一样,生成对抗式网络提供更好的详细信息。
11、视频分类
上述大多数任务都可以用于视频分类,这里我们将以视频分类为例来说明处理视频数据的一些基本方法。
11.1:多帧图像特征汇合
这类方法将视频视为一系列帧图像,网络接收属于视频的一组多帧图像(例如15帧),然后从这些图像中提取深度特征,并最终集成这些图像特征以获得视频的该部分的特征以对其进行分类。实验表明,使用“慢速融合(slow fusion)”效果最佳。此外,独立组织单个帧也可以得到非常有竞争力的结果,这意味着来自单个帧的图像包含大量相关信息。
11.2:三维卷积
将标准的二维卷积扩展为三维卷积,以在时间维度上连接局部。例如,系统可以采用VGG 3x3卷积并将其扩展为3x3x3卷积或2x2收敛扩展为2x2x2收敛。
11.3:图像+序列两个分支结构
这种类型的方法使用两个独立的网络来区分从视频捕获的图像信息和时间信息。图像信息可以从单帧中的静止图像获得,并且是图像分类的经典问题。然后通过光流获得运动信息,跟踪目标在相邻帧上的运动。
11.4:CNN + RNN捕获远程依赖关系
先前的方法仅能够捕获几帧图像之间的依赖关系。此方法使用CNN从单个帧中提取图像特征,然后使用RNN捕获帧之间的依赖关系。
此外,研究人员已尝试将CNN和RNN结合起来,以便每个卷积层能够捕获远距离依赖性。
原文标题《deep-dive-into-computer-vision-with-neural-network-2》
作者: Leona Zhang。由阿里云云栖社区翻译