图像识别的特征
Property1: 图像的pattern模式是远小于整张图片的,因此生成一个pattern只需要注意图像的一小部分;
Property2:一张图片中不同的区域可能存在相同的pattern;
因此可以使用Convolution卷积。
Property3:对图片采样过后不会改变图像所要表达的东西,因此可以对图像做subsampling减小大小;
因此可以使用Max Pooling。
根据以上三个特性设计出的CNN架构:
(Convolution — Max Pooling) X N times — Faltten — fully connected feedforward network
卷积层(nn.Conv2d卷积层 — nn.BatchNorm2d归一化 — nn.ReLU激活层 — nn.MaxPool2d最大池化层),可叠加很多层,作用是提取出特征。
全链接层(nn.Linear — nn.ReLU — nn.Linear),作用是对提取出的特征进行分类。
AlphaGo能够使用CNN是因为它和图像有相似的特性。
具体实现
图片的表示方式
对于黑白图片,每一个pixel就只有0,1两个取值,是一个二维矩阵。
对于彩色图片,用RGB表示,每个pixel用0~255范围内的三个值表示,是三个二维矩阵。(因此我们的一张图片除了长和宽还拥有了高)
Convolution
依据Property1,为了生成一个pattern,需要使用filter。filter也是一个矩阵,维度需要自己选择。一个filter对应到图片中的某一个子矩阵做内积(对应元素相乘后整体再相加),然后向右移动stride=n个单位元素,从左至右从上至下一次移动。
filter移动的方向,要有具体意义。
比如在文本识别中使用CNN,每一个单词都有一个vector,filter移动的方向一定是多个完整单词的vector的组合的方向,把一个vector拆分多次移动是没有具体语义的。
当一个filter对一张图片完成一次移动之后,会生成一个新的矩阵。当新的矩阵中有相同的元素时,就代表有相同的pattern在这张图中,对应到Property2。
以上过程对每一个滤波器都来一边就得到了对这张图像的Feature Map。
全链接网络和卷积的关系
卷积就是内积之和,相当于两个向量做inner product。
全链接网络中给每个input一个weight然后把它们相加添一个bias得到输出,这个形式和卷积相似。可以把图像的二维矩阵转换成一维向量,按照index/row方向拼接成一个向量。
对应起来就是,filter的作用对象就是这个向量中的某些分量,filter就是全链接网络每一个neuron的weight,内积之后的结果就是该neuron的输出。
重要的是对于每一个filter,他们的weight都是相同的,通过实现shared weights可以实现神经网络较少的参数。
Max Pooling
Feature Map中是每一个filter作用于原图像后得到的Matrix。把该Matrix中的数据均分成几组,每组内进行基础的数学运算(如取平均,取最大),每组的多个数据变成一个数据。目的是为了让图像缩小。
Flatten
flatten就是把Feature Map中多层Matrix拉直成一个vector,每个matrix从左至右从上至下拉直成一个vector,多个matrix前后拼接在一起。
作为输入连接到全连接网络中去。
如何训练
for each filter
定义degree of the activation of the k-th filter为
意思是把图像通过该滤波器之后得到matrix的所有元素的和当作这个滤波器对这张图片响应的大小。
想知道第k个filter的作用是什么,就需要照一张图片作为输入,能够让第k个filter被激活的程度最大。也就是找最大值的问题,可以用gradient descent来求。和之前不知道weight,需要依据输入用梯度下降把参数weightupdate出来不同,现在是把输入的图像当作需要找的参数用gradient descent做update,因为作为weight的filter的是已经固定的。
因此对于每个filter,都可以训练出一个能让该filter的degree of the activation最大化的pattern。注意结果不是一个完整的图片,而可能是某一种纹理,重复出现的pattern。
for fully connected NN
在全连接层的每一个neuron的作用是什么呢?
当找一个图像作为input输入,每一个neuron对这张图片都有不同的输出$a_i$,我们需要找出能够让该neuron输出最大结果的input图像。注意此处的input图像已经开始处理整张图了,而不是图的一小部分。
当找一个图像作为input输入,最终的输出$y_i$要被最大化,确定能够让该output layer输出最大结果的input图像。但是输出的结果可能和人类辨识图像的方式不同;所以需要添加一些constraint(例如L1 Regularization),让输出更容易被人类理解。
- 本文标题:图像识别与卷积神经网络
- 本文作者:徐徐
- 创建时间:2020-11-04 11:16:32
- 本文链接:https://machacroissant.github.io/2020/11/04/cnn-intro/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!