Image recognition (图像识别)
什么是图像识别?
-
图像识别 (Image recognition):这里指的是对整个图像进行类别级别的识别。
-
类别级别 (Category-level):意指按组别(group level)来识别。这种组别可以有不同的细致程度。例如,"鸟"是一个比较宽泛的类别,而"鸭子"则更为具体,再进一步,"澳大利亚木鸭"则是更为具体的分类。
-
整个图像 (Whole image):这里的意思是每张图像只会被赋予一个标签。与此不同的是,有的识别系统可能会为图像中的每一个物体都赋予一个标签。
-
-
这种类别级别的识别与 实例级别的识别 (Instance-level recognition) 不同。实例级别的识别是指识别某个特定的个体,例如识别特定的人脸,而不仅仅是标记为"人"。
-
与图像识别不同的还有:
-
检测 (Detection):其目标是在图像中定位物体的位置,而不仅仅是识别它。例如,除了识别出图像中有一只猫之外,还会标出猫在图像中的具体位置。
-
分割 (Segmentation):这是一个更为细致的过程,目标是为图像中的每一个像素都打上标签。例如,对于一张包含草地和天空的图像,分割的任务不仅是识别出图像中有草地和天空,还要标记出哪些像素是草地,哪些是天空。
-
为什么图像识别很难?
- 类别间相似性(Inter-category similarity)
- 类内变异性 (Intra-category variability)
- Instances: 实例。这指的是同一类别下的不同个体。比如说,"猫" 这一类别下,有橘猫、黑猫、白猫等不同的实例。
- Illumination: 光照。图像中的物体因为不同的光照条件可能会显得不同。例如,强烈的阳光或暗淡的室内光都会影响物体的视觉表现。
- Scale: 尺度/比例。同一个物体在图像中可能会因为拍摄距离或焦距的不同而呈现出不同的大小。
- Viewpoint/pose: 视点/姿势。物体从不同的角度或姿势拍摄时,它们的外观可能会有很大的差异。例如,一个人正面的照片与侧面的照片看起来会很不同。
- Background/occlusion: 背景/遮挡。物体背后的背景或是其他物体对其的遮挡都可能影响到我们对该物体的识别。例如,一个物体被其他物体部分遮挡时,可能就更难被识别。
这些因素都可能增加图像识别的难度,因为它们使得同一类别下的实例在视觉上表现得更为多样化。
图像识别的目标(Goal of image recognition)
构建一个图像的表示方式,使其:
- 能够区分不同的类别(distinguishes different categories),
- 但对于同一类别内的变异保持不变性(或有一定的容忍性)(but is invariant (or tolerant) to variation within a category)。
视觉编码(visual encoding)
神经网络(Neural Networks)
MLP(Multilayer Perceptron)
- 多层神经元并行处理同一输入
- 在L层的每个神经元都从L-1层(全连接层)的所有神经元接收输入并产生一个输出。
- 神经元的输出是输入的加权和,后接一个非线性激活函数:
<math xmlns="http://www.w3.org/1998/Math/MathML"> y = f ( [ ∑ j w j x j ] + b ) = f ( w ⋅ x + b ) y = f([\sum_j w_jx_j]+b) = f(w \cdot x + b) </math>y=f([∑jwjxj]+b)=f(w⋅x+b)
Weights ( <math xmlns="http://www.w3.org/1998/Math/MathML"> w w </math>w) and bias ( <math xmlns="http://www.w3.org/1998/Math/MathML"> b b </math>b) learned from data.
非线性激活函数(Non-linear activation function)
训练神经网络(Train Neural Networks)
通过反向传播(backpropagation)(一种梯度下降方法)进行训练:
- 首先,从输出层开始,计算损失函数相对于网络参数的梯度,并向之前的层反向传播,然后调整权重以减少损失;
- 学习率是一个可以自由设定的参数;
- 损失函数通常基于真实值与预测值之间的差异来确定(有监督学习)。
反向传播是一个优化算法,它通过计算输出错误并将这些错误反向传播到网络中,以便调整每层中的权重。这种方法使神经网络能够通过迭代地减少其预测误差来学习。
MLP的优缺点
优点:
- 通用近似器( Universal approximator):能够在 <math xmlns="http://www.w3.org/1998/Math/MathML"> R n R^n </math>Rn上近似任何连续函数。
- 特征嵌入(Feature embedding):可以学习复杂的特征。
- 可并行化(Parallelisable):在每一层内,神经元都是独立的。
缺点:
- 参数数量巨大(Very large number of parameters):需要大量的内存/时间/数据资源,并且容易出现过拟合现象。
卷积神经网络(Convolutional neural networks)
为什么使用卷积(convolution)?
- 传统的神经网络可以用于图像识别。
- 但对于大型图像,卷积神经网络更为常见。
- 更高效地学习局部、重复的模式(More efficient learning of local, repeated patterns)。
- 然而,这限制了网络能够学习的内容(limits what the network can learn)。
定义卷积(convolutions)
卷积是由以下因素定义的:
- 一个卷积核(kernel),这是一个覆盖在图像上的矩阵,并与图像像素进行逐元素的乘积计算。
- 一个步长(stride),它定义了在每次迭代中卷积核在图像上移动的位置数(步长 = 1 意味着卷积核将在图像的每一个像素上操作)
激活图(Activation maps)
激活图是卷积操作后得到的输出,可以视为原始输入图像经过某种特定特征过滤后的结果。
通过6个不同的卷积核处理图像后,得到了6个不同的激活图。然后,这些激活图被堆叠或组合成一个具有6个通道的新图像,这个新图像将被传递给网络的下一层进行进一步处理。
卷积层输入/输出
全连接层(Fully-connected) vs. 卷积层(Convolutional)
全连接层
- 每个神经元都连接到输入中的每一个神经元。
- 这个神经元学习输入的某种组合。
- 输出到下一层是神经元的响应。
卷积层
- 每个神经元仅连接到输入的一个小区域或片段。
- 这个神经元学习输入上的一个卷积核。
- 输出到下一层是输入与神经元的核进行卷积的结果。
这两种层的主要差异在于连接方式 和它们如何处理和学习来自输入的信息 。全连接层 中的神经元看到并处理整个输入,而卷积层中的神经元只处理输入的一个小部分,并重复使用相同的卷积核来检测输入中的特定特征或模式。
优缺点
优势:
-
高效(Efficient):相较于全连接层,卷积层用更少的参数学习在图像的任何位置识别相同的特征。
-
保留空间关系(Preserves spatial relations):输出是一个图像,其值指示特征出现的位置。
缺点:
- 有限的卷积核大小意味着模型仅限于学习局部特征。
小结
-
卷积神经网络 - 是标准(全连接)神经网络的一个变种。
-
每个卷积层学习一组卷积核,并输出激活图(Activation maps)(= 输入与学到的卷积核进行卷积的结果)。