普通的CNN结构
这里经过卷积—下采样—FC然后最后Output(最终的输出结果这里一般做多分类,当然也有很多别的不同的任务)
在1986年才广泛开始应用反向传播。
在Imagenet第一次得到比较好的效果
一些CNN结构的历史
LeNet(第一次应用在手写字体识别的CNN)
AlexNet(在ImageNet分类任务得到很好效果的CNN架构)
CNN的一些应用
这里是AlexNet的应用
这里是一些其他的应用(物体检测与语义分割)
身体结构描述以及CNN玩游戏
识别与切割
图片的描述
风格转换
CNN
首先解释一下FC(全连接层),这里的全连接层是将图片所有的像素值展开变成一维的一组向量。
在这里可以看到卷积操作,我们会有一个与原图片通道数一样的一个滤波器,做卷积后得到activation maps再将得到的经过ReLU以及池化等操作后继续卷积。
这里需要注意的是滤波器的数量多少会改变activation maps的数量
上述描述可以从图中看出
在这里可以看到经过卷积操作后得到的特征
从这张图中可以看出其实我们这里所说的卷积操作和数字图像处理中的卷积并不是完全一样的,其实质是相关操作;但是相关与卷积是相反的操作,即可以看做是同样的,这里也因为历史问题将这种操作叫做卷积。
该图可以完整的描述识别的过程
CNN卷积
1.卷积操作
用3*3滤波器的话会出现5*5的输出
同样的在步长为2的时候可以得到3*3的输出
当不能适应卷积规模的时候会进行padding,即填充操作以符合可以输出整数的卷积(Tips:还有Asymmetric padding即非对称填充,或者进行卷积操作的时候会对最后一行填充的不参与卷积操作)
最后我们可以得到一个卷积操作的公式
O是输出图片的尺寸
I是输入图片的尺寸
P是填充的大小
S是步长
这里最后+1是因为我们最开始做卷积时还没有移动的时候就存在一个输出点
2.从神经元的角度去看CNN
75维度(75个数据)的点乘相加才能得到新的一个特征点
最后每一个输入都在滤波器的卷积作用下做特征的提取(在这个过程中,滤波器的参数是共享的)
这里有一个感受野(Receptive field)的概念,感受野是从后往前算的,可以说做的卷积越多,感受野越大“看到的东西”越多,可以粗略的认为卷积层越多感受野越大。
利用不同的滤波器可以得到不同的特征
3.FC(全连接层)
这就是最后做分类作用的一层,不过值得注意的是现在很多文章中都被softmax取代了
池化层(pooling layer)
将得到的特征缩小,提取更加有效的特征减少需要处理的数据量,也减少参数量。
现在的pooling一般使用的都是max pooling,不同于以前使用的average pooling。
最终的总结
CNN需要经历卷积、池化、全连接操作
这里有个很有意思的趋势-将CNN简化到只进行卷积操作而不进行其他的操作