卷积神经网络(从零开始)
学习卷积神经网络的动机:
ConvNets被证明在图像识别和分类方面非常有效。Facebook需要它的标签算法,Instagram和谷歌的搜索基础设施,并且这个列表不断更新。
什么是图像分类 :
输入:图像
输出:最佳描述输入图像的类或一组类
我们如何(人类)做到这一点 :
人类在图像分类上非常棒。我们毫不费力地识别出环境中存在的所有物体,但是您是否曾试图深入地挖掘我们如何学会识别图像,并在以后能够轻松地标记物体。
观察你周围的任何新出生的婴儿,他如何开始区分鸟类和狗的图像。
1-首先,他将无法分辨目前的图像是否是鸟/狗
2-然后他的父母向他展示了几张鸟/狗的照片,并相应地给他们贴上了鸟和狗的标签
3-孩子慢慢学会从狗图片和翅膀中提取爪子和尾巴等高级特征,并从鸟类图片中啄出喙
4-尽可能多的他看到的照片,他得到自信
5 - 现在,当他看到Test_image时,他会检查图像中的生物是否有爪子,尾巴或翅膀和喙,并据此做出决定
同样CNN也这样做。让我们看看如何!
计算机如何做 :
计算机将每个图像视为像素值的3-D矩阵。对于尺寸为480 x 480的彩色图像,计算机将看到尺寸为480 x 480 x 3(3代表RGB值)的阵列。这些数字中的每一个都有一个从0到255的值,它描述了该点的像素强度。计算机如何实现这一点 - 计算机可以通过查找低级特征(如边缘和曲线)来执行图像分类,然后构建通过一系列卷积层提供更抽象的概念
深入挖掘:
让我们把整个结构分成两部分:
1-卷积部分 - 负责从输入图像中提取高级特征,我们最终输入到完全连接的部分
2-完全连接部分 - 组合提取的所有特征并对输入图像进行分类
卷积由 - 1 /几层(卷积层+ Relu +池)
卷积层 -
输入 :像素值的3D阵列。
输出 :feature map
让我们试着通过类比来理解它:
你在黑暗的房间里,手里拿着一本加密的书和一个特别的手电筒,你的任务是阅读本书的一页,你将如何做:
在此之前,让我解释一下特殊手电筒中的“特殊”:从手电筒发出的光线也有一些信息
1-继续将闪光的焦点放在书上
2-在每一点上,使用手电筒的特殊功能,将书中当前光线中出现的信息与当时可用的信息“结合”
3-继续重复上述两个步骤,直到页面结束,也不要忘记继续滑动闪光灯的焦点(非常谨慎),以免错过任何东西。
额外提示:您可以一次读取的内容数量等于闪光灯焦点的大小
在这里,我们将过滤掉手电筒图像的位置,而不是页面和接受区域来代替手电筒的焦点。过滤器是一组数字(weight)
看看卷积运算是如何发生的。过滤器在Test_image上滑动1个像素,并且对于每个感受野发生,我们通过做两个矩阵的点积来计算结果矩阵中的数字。
作为结果获得的矩阵称为“特征映射”。通过使用不同的过滤器,我们可以获得不同的“功能图
你一定在想,如何使用多个矩阵的产品来帮助我们进行特征提取
我也解释一下。
幕后发生的事情:
每个过滤器都是“Feature identifier(功能标识符)”。特征意味着边缘,颜色,曲线 - >半圆或正方形 - >面(复杂特征)。
让我们试着了解我们将在测试图像上应用的第一个滤镜(曲线检测器):
注意在数组中,我们根据曲线的形状有很大的数字。
现在让我们开始在Test_image上滑动筛选器:
当我们将筛选器滑动到Test_image的正确位置时,我们发现结果很高。
现在让我们将其滑动到图像中不存在此特征(曲线)的部分:
结果太低了!原因是Test_image中没有任何内容对过滤器做出响应,所以过滤器未被激活。因此,Test_image中后面的区域在激活图中的值较小,表明该区域具有较少特定特征的可能性。
以类似的方式,我们计算其他过滤器的特征映射,以及将会告诉Test_image的哪一部分更可能具有该特定特征
非线性(Relu):
输入:来自卷积层的特征映射
输出:在特征映射中引入非线性来映射真实世界数据
Pooling
输入:Feature Map with(非线性引入)
输出:减少feature map的维度。
有“n”类型的池(Max、Sum、Avg)。让我们了解最常见的“最大池”
我们从feature map的一小部分(窗口)中取出最大的元素。
现在,如果我们在网络中继续前进,我们会继续应用以上三个步骤,并在每一层尝试检测更高级别的功能
一旦获得爪子,脸部,翅膀等高级特征,我们将其馈送到全连接层。
全连接层:
输入:来自卷积层的特征图
输出:N维向量,其中N是类的数量
例如,如果用于数字分类程序的结果向量是[0.1.1.75 0 0 0 0 .05],那么这代表10%的概率,即图像是1,10%的概率,即图像是2,图像是3的概率是75%,图像是9的概率是5%
它看起来哪个高级特征图具有较高的值,如图像是狗,那么表示翼的特征图具有高值,如果表示翼的鸟特征图具有高值。