前言:
在计算机视觉中存在很多的专业术语,如先验知识,语义信息,embedding,head,neck等。这些术语的解释无法直接在网上搜到,也没有在哪一篇论文中定义它们的概念和意义,因此,对于第一次听到这些术语的读者来说会非常的困惑。
此外,对于还没有建立计算机视觉知识体系的读者来说,也很难理解特征空间,fine-tuning、预训练、池化等方面的内容。 本文介绍了很多读者在其它地方不可能了解的内容,通过这些内容相信读者能更深层次地理解计算机视觉,建立起基本的计算机视觉知识体系。
backbone、head、neck和fine-tune
以一个图像分类的卷积神经网络为例,网络分成两部分,前部分是由卷积层、归一化层、激活层、池化层堆叠的,输入图像在经过若干层卷积、归一化层、激活层和池化层的堆叠后进入全连接层,经过几次全连接后输出每个类别的概率值。 在这里,前面卷积层、归一化层、激活层和池化层的堆叠部分属于backbone。意思是神经网络的躯干部分,这部分也称为特征提取网络。 后面的全连接层的堆叠属于head。意思是神经网络的头部,实现模型任务的预测,称为predictor head,这部分网络也称为分类网络。
再以目标检测中的YOLO_V4中的图为例。 如上图所示,在backbone后,常构建特征金字塔,在特征金字塔部分做一些处理,如多尺度融合,再将特征金字塔的输出进行预测。因此,特征金字塔这部分放在backbone和head之间,称为neck(脖子),这里的Dense Prediction即为head。 关于backbone即常见的经典网络,如VGG,ResNet,MobileNet,ShuffleNet,DenseNet等,当某个模型提到backbone使用的是VGG,即表示使用的是VGG的backbone部分,而不包括VGG的head。 这里解释一下为何是这样。神经网络有多种解释,其中一种解释如下,神经网络被认为是在提取特征,计算机视觉的传统方法就是人为地设定某些特征,再进行分类。如HOG特征,LBP特征,在提取完特征后,使用分类器对这些特征进行分类,如SVM分类器。 这里的backbone部分则认为是一个特征提取网络,而head部分则被认为是分类网络,因此特征提取的部分可以共享,它们的本质都是在提取图片的特征,而分类网络则对应到具体的任务,如分类猫狗,分类网络需要从提取的特征中分成猫狗两类。 这段话同时也解释了fine-tune的原理,使用一个预训练好的backbone,针对你自己的任务,自己搭建相应的分类网络,在训练时冻结backbone的参数,只训练分类网络的参数。这是因为预训练好的backbone已经具备很好的特征提取能力,因此对于你自己的图像,网络只需要学习如何将提取后的特征按你定义的类别进行分类。
Preprocess和Postprocess
Preprocess为预处理,图像在送入神经网络之前,需要进行一定的处理。 通常的处理是使用opencv中的resize将所有图像缩放到同一尺寸,并根据数据集的标注设置网络的label。此外,如果有必要的话,还会进行数据增强,如调整图像饱和度,镜像,加噪声,随机掩码等方式。 预处理的必要性:大部分神经网络在backbone后将数据进行flatten(即将四维的张量变成二维)的操作,再进行全连接,此时全连接层输入的神经元个数即为flatten后的长度,若输入的图像的尺寸不一样,则全连接层输入的神经元个数无法一致,会报错。此外,对于没有全连接层,其它类似的处理部分(除少数外),也会要求backbone后的输出大小一致。 Postprocess指的是对网络预测的结果进行后处理,对于普通的分类网络不需要后处理,但对于目标检测、语义分割这样的任务,需要对网络的输出进行处理,将预测的结果通过图像进行可视化。 例如目标检测中的YOLO,其输出一个7x7x30的张量,输出98个预测框,但实际一张图片没这么的目标,则需要进行NMS这样的处理来去除一些不合理的预测框,且我们无法直接看待这些预测框是否准确,就需要将其在原图像上显示出来,以直观感受预测的效果如何。
先验知识
在《论文创新的常见思路总结》中我提到,关于特定的类的检测,我们可以针对这个类别添加很多先验知识,在《数据增强方法总结》中我提到,数据增强的本质是人为地引入人视觉上的先验知识。在《CNN可视化技术总结(一)特征图可视化》中我提到,所谓改进网络都是人的主观改进,这里人的主观即先验知识。 这里的先验知识指的是人对于如何识别一张图像或如何识别一个类而关注的内容,引入先验知识是指设计一些东西让网络也关注这些内容。 例如特征金字塔中的多尺度融合,人认为大目标应该在低分辨率检测、小目标在高分辨率检测,由此网络在特征金字塔的不同层预测不同大小的目标。人又认为如果大目标在低分辨率检测,小目标在高分辨率检测,则在低分辨率时,小目标还存在,在这里被当成了背景,同理在高分辨率时大目标被当成了背景,这样不合理,又提出了ASFF处理方式,提升了5-10个百分点。
例如人在关注一个事物时,会自动忽略眼睛看到的其它东西,由此提出了注意力机制。 例如即便只有上半身,人还是能认出自己熟悉的人,由此提出随机遮挡等数据增强方式,让网络在有遮挡的情况下也能正确识别。 例如人是如何识别打篮球这一行为的,人根据篮球、投篮手势、身体跳跃、篮球运动等一系列的组合识别,因此如何让网络更好地关注这些特征提出了Non-Local。
embedding
在transformer中出现了embedding,在自编码器中也出现了embedding,还有很多地方也有提到,如何理解embedding? 这里涉及到神经网络的另一种解释。神经网络被认为是将图像从高维的像素空间映射到低维的嵌入空间,即embedding,也可称为特征空间。这里的特征空间用embedding(向量的形式)来表示。 在编码器中,网络将图像映射成embedding,即高维图像通过非线性函数的多次映射,可以用低维embedding来表示,在解码器中,网络将低维embedding映射回图像。 因此,embedding可以认为是某些特征的浓缩表示形式。 以行人重识别为例,论文认为即便是在不同拍摄角度下,只要是同一个人,神经网络输出的embedding在某种距离度量方式下就是相近的,而不同的人在某种距离方式下就是很远的,因此可以通过某种距离度量方式判断两个embedding的距离是否在阈值范围内来判断是否为同一个人。
feature map
字面意思:特征图。 根据前面的解释,神经网络是在将图像从高维像素空间映射到低维的特征空间,这个映射是通过一层一层卷积和激活来进行的,卷积具备提取特征的能力。 例如在数字图像处理中,我们是通过sobel算子来检测轮廓,而sobel算子可以认为是3x3的卷积的其中一种情况,在这种情况下,它就可以提取图像的轮廓,那在其它情况下就可以提取其它的特征,因此卷积的过程就是在提取特征的过程,经过卷积提取特征和激活函数的映射后的输出称为feature maps。
池化
接着上面的解释来介绍一下池化。 在一张图像中存在很多噪声和冗余信息,噪声是由相机拍摄过程中由于传感器电路、材料等硬件因素或传输过程中产生的,冗余信息是指跟具体任务无关的内容。 当我们以整张图像输入时,需要将这些噪声、冗余信息去除。我们认为这些冗余信息和噪声不是特征,在神经网络中的卷积和映射过程中,会产生比较低的响应值,因此我们可以通过最大池化选择最大的响应值进入下一层,因为我们认为只有特征才会在卷积过程中产生大的特征值,也称为响应值。 同样以sobel为例,当对一个像素值基本相同的背景进行卷积时,卷积的输出几乎为0,而对一个轮廓边缘进行sobel卷积,则会输出较大的值。 因此神经网络通过多次最大池化,去除了噪声和冗余信息。这也就是为什么神经网络的backbone部分基本全是最大池化,而不是平均池化,因为平均池化会将这些冗余信息和噪声继续传到下一层。 关于池化更详细的技术总结,请阅读《池化技术总结》文章。
语义信息
数字图像是由像素值组成的,它们本是一堆数字的组合,但就是这样的组合形成了一幅幅图像,如猫、狗、篮球、米老鼠、眼睛、鼻子等。因此,语义信息指的是图像的内容,即鼻子,眼睛这样的图像。
总结
本文介绍了很多读者在其它地方不可能了解的内容,通过这些内容相信读者能更深层次地理解计算机视觉,建立起基本的计算机视觉知识体系。
责任编辑:lq6
全部0条评论
快来发表一下你的评论吧 !