Lecture 3: Image as input
文章目录
Convolutional Neural Network (CNN)
Image Classification
![image-20220830165254662](https://i-blog.csdnimg.cn/blog_migrate/8affd395d6efa37f36922a4bb606e491.png)
如上图所示,假设所有的输入图片的大小都是 100 × 100 100\times 100 100×100,输出一个 one-hot 向量 y ′ y' y′,用交叉熵来计算标签值 y ^ \hat y y^ 和输出值 y ′ y' y′ 间的损失。
如下图所示,计算机在处理图片时,将图片视作三维的 Tensor(图片的宽、高、channel,三个 channel 代表了 RGB 三种颜色、宽和高就代表了图片的解析度也就是像素个数),将图片拉直成向量后就能作为模型的输入,向量中的数值代表了某个位置的某一颜色的强度。
![image-20220830171630800](https://i-blog.csdnimg.cn/blog_migrate/f2f4bd851cf91a8aef6a9143e5944903.png)
如果选择全连接网络(Fully Connected Network)作为模型,那么输入向量的总长度就是 100 × 100 × 3 100\times 100\times 3 100×100×3。假设第一层神经元(Neuron)的个数是 1000 1000 1000,那么第一次的权重(weight)的个数就是 3 × 100 × 100 × 1000 = 3 × 10 7 3\times 100\times 100\times 1000 = 3\times {10}^7 3×100×100×1000=3×107 个。
![image-20220830172149451](https://i-blog.csdnimg.cn/blog_migrate/acfd4a31c82fedc22b1bb4b8a125443c.png)
Observation and Simplification
我们尝试观察图片中的特点,并基于我们的发现在全连接网络上进行简化工作。
Observe and Simplify 01
观察:
![image-20220830172410890](https://i-blog.csdnimg.cn/blog_migrate/a9d27a0123a1d5c573b25942f469074d.png)
我们期待模型能够识别物体(object)的一些特定的模式(pattern)或特征,从而学会分辨物体。如上图所示,模型学习到了鸟的喙、眼和足,从而识别出这是一只鸟。
因此,当模型需要学习一些特定的模式或特征时,我们不需要让每一个神经元都看过一整张图片。一些特定的模式或特征往往比完整的图片要小得多。是否可以只将关键的模式或特征作为输入呢?
简化:
我们可以划定一个区域,称作感受野(Receptive Field),每个神经元只关心自己感受野中的数值。如下图所示,一个神经元只负责感受野中的 3 × 3 × 3 = 27 3\times 3 \times 3=27 3×3×3=27 个数值,因此总共需要 27 27 27 个权重再加上一个 b i a s bias bias 即可作为下一个神经元的输入。
![image-20220830202534561](https://i-blog.csdnimg.cn/blog_migrate/1b85a5d9f6a0ff29bd11a2ea9344e67d.png)
![image-20220830203833142](https://i-blog.csdnimg.cn/blog_migrate/74c7c854b4959ee848f15818b0c50cd6.png)
关于感受野(Receptive Field):
- 多个神经元可以作用于同一个感受野;
- 不同的感受野可以重叠;
- 不同的神经元可以有不同大小的感受野;
- 神经元可以只作用于某些通道;
- 感受野不一定得是正方形。
Receptive Field - Typical Setting
![image-20220830204402105](https://i-blog.csdnimg.cn/blog_migrate/331da79f06e15760dbea1dc66e63fc59.png)
如上图所示,是一个经典的感受野设定:
- 感受野包含了所有的通道(all channels),一般讨论
kernel size
的时候,我们只说宽和高,默认包含了所有的通道,比如一个大小为 3 × 3 3\times 3 3×3 的卷积核; - 通常会有一组神经元作用于同一个感受野,比如 64 64 64 或 128 128 128 个;
- 通过移动卷积核可以得到一个新的感受野,而移动的这一段距离叫做步长(Stride),步长不会设置得很大,我们希望不同的感受野之间要有重叠,比如 s t r i d e = 2 stride=2 stride=2;
- 如果移动卷积核超出了范围,那么我们需要填充(padding),比如补 0 0 0。
Observe and Simplify 02
观察:
同样一种模式或特征可能出现在图片的不同位置上,如下图中鸟喙的例子。这些作用于图中鸟喙部分的神经元,他们的作用是一样的,只是作用的感受野位置不同。那么是否每个感受野都需要一个检测鸟喙的神经元呢?当让是不需要的,这样参数量就太大了。
![image-20220831082204180](https://i-blog.csdnimg.cn/blog_migrate/942181c54b28cdf1a16a1b15872c5561.png)
简化:
我们希望不同感受野的神经元间能够共享参数(parameter sharing)。如下图所示,两个作用于不同感受野的神经元,它们的参数是相同的;而作用于同一感受野的不同神经元之间是不会共享参数的。
![image-20220831083052508](https://i-blog.csdnimg.cn/blog_migrate/8e144f9302a4b3c000477ac3c6d26e1c.png)
Parameter Sharing - Typical Setting
![image-20220831084445135](https://i-blog.csdnimg.cn/blog_migrate/e4baa4b2f661d0637ca3e30a1b5b5d01.png)
每个感受野都有一组神经元;不同感受野的神经元共享同一组参数;作用于不同感受野且共享参数的神经元,将这样的共享的参数叫做 filter (滤波器)。
Observe and Simplify 03
观察:
对图片进行下采样(subsample)不会改变图中的物品,比如去掉图片中的偶数行和奇数列。
![image-20220831092858616](https://i-blog.csdnimg.cn/blog_migrate/5d36e18ddbe73906988b99fdf3e0e9ab.png)
简化:
Pooling 池化,Pooling 可以减少计算量,让图片越来越小。
![image-20220831100618443](https://i-blog.csdnimg.cn/blog_migrate/7f8eb63c0b26246a85ef3f2596597c9c.png)
![image-20220831100711414](https://i-blog.csdnimg.cn/blog_migrate/5f687fee3d50257872016db94890d9e9.png)
Benefit of Convolutional Layer
![image-20220831085907998](https://i-blog.csdnimg.cn/blog_migrate/8aea9cd7351669e448e00ff67990c3fb.png)