你的位置:首页 > 数据库

[数据库]卷积神经网络对图片分类


我们来看看在图像处理领域如何使用卷积神经网络来对图片进行分类。

 

1 让计算机做图片分类:

图片分类就是输入一张图片,输出该图片对应的类别(狗,猫,船,鸟),或者说输出该图片属于哪种分类的可能性最大。

人类看到一张图片马上就能分辨出里面的内容,但是计算机分辨一张图片就完全不一样了。同一张图片,

人类看到的是这样:


计算机看到的是这样:


一个充满像素值的数组。

 

所以给计算机一张图片让它对图片进行分类,就是向计算机输入一个充满像素值的数组如上图所示,数组里的每一个数字范围都是0-255,代表该点上的像素值。让它返回这个数组对应的可能分类概率(狗0.01,猫0.04,船0.94,鸟0.02)。

 

人类分辨一张船的图片可能是通过图片里船的边缘,线条等等特征。类似的计算机分辨一张船的图片也是通过这些底层特征来进行判断,比如图片里的图像边缘和图像轮廓,然后通过卷积神经网络建立更抽象的概念。

 

2 卷积神经网络结构


你有一张图片(28X28),把它丢给卷积神经网络里面一系列处理层,卷积层(convolutional layer),池层(pooling),全连接层(Fully connected layer也就是上图的sigmoid neurons),最后在输出层得到结果(neuron output layer)。正如之前所说,输出可能是一个分类或者可能的分类对应的概率。接着我们需要理解每个一层具体做了什么事情。

 

3 第一层卷积层(convolutional layer)

卷积神经网络里第一层总是卷积层。正如前面所说,我们输入到卷积层里的是一个充满像素值的数组 ,假如是一个28X28X3的数组(3是RGB值)。你可以把卷积层想象成一道光束,照在一张图片上面。这道光束叫做过滤器,被光束照耀的地方叫做感受区。假设这道光束照亮的范围是一个5X5的方形区域。现在让这道光束从左到右,从上到下扫过图片的每一个区域。


当所有移动完毕时,你会发现得到了一个24X24X3的数组。我们叫这个数组为特征图像。

 

这个过滤器是一个数字类型的数组(里面的数字就是一些权重值)。过滤器的深度和输入的深度一样。所以过滤器的维度就是5X5X3。我们使用5X5X3过滤器,就可以得到输出数组24X24X3。如果使用更多的过滤器,我们就可以得到更多的特征图像。这就是卷积层里发生的事情。

 

4 具体如何卷积

假设我们有一张老鼠的图片:


还有一个7X7X3的过滤器,它有一些权重值, 是一个曲线过滤器:


现在我们让过滤器在图片的左上角:


当过滤器扫或者卷积整个图片时,把过滤器里面的权重值和真实图片里面对应的像素值相乘,最后把所有结果加和,得到一个加和值。然后重复这个过程,扫描整个输入图片,(下一步把过滤器向右移动一个单元,然后在向右移动一步,如此),每一步都可以得到一个值。

下面是过滤器在图片左上角所得到的值:

Multiplication and Summation = (50 * 30)+(50 * 30)+(50 * 30)+(20 * 30) + (50 * 30) = 6600

 

可以发现卷积的过程中,如果图片里有一个形状与该过滤器表示的形状相似,就会与过滤器产生激励效果,那么所得到的乘积结果加和值将就会是一个很大的数,接着让我们把过滤器移到图片的右上角看看结果是什么。

Multiplication and Summation = 0

 

可以看到这个值很小是0,这是因为一点都不像,没有与过滤器产生任何激励效果。这里我们只使用了一个过滤器,你也可以增加其他的过滤器来检测图片的边缘和颜色等等。过滤器越多,特征图就越多,从输入数据里获取到的信息就越丰富。

 

(未完待续)

 

参考:

http://neuralnetworksanddeeplearning.com/chap6.html#convolutional_neural_networks_in_practice

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

 

                    关注大数据尖端技术发展,关注奇点大数据