图片可能有大有小,而且不是所有图片都是正方形的啊,有长方形的怎麼办
今天常见的处理方式,丢进影像辨识系统处理方式就是,把所有图片都先 Rescale 成大小一样,再丢到影像的辨识系统裡面,
所以这些 Neuron 也许根本就不需要,把整张图片当作输入,它们只需要把图片的一小部分当作输入,就足以让它们侦测某些特别关键的 Pattern有没有出现了
这是第一个观察,根据这个观察,我们就可以做第一个简化 怎麼简化呢
看所有的 Channel
在描述一个 Receptive Field 的时候,只要讲它的高跟宽就好了,就不用讲它的深度,反正深度一定是考虑全部的 Channel,而这个高跟宽合起来叫做 Kernel Size
在这个例子裡面,我们的 Kernel Size 就是 3×3
常见的 Receptive Field 设定方式,就是 Kernel Size 3×3,
一般同一个 Receptive Field,不会只有一个 Neuron 去关照它,往往会有一组 一排 Neuron 去守备它
Stride
Padding
那你除了这个横著移动,你也会这个直著移动,你有会有这个垂直方向上的移动,
同样的 Pattern,它可能会出现在图片的不同区域裡面
我们真的需要每一个守备范围,都去放一个侦测鸟嘴的 Neuron 吗?
让,不同 Receptive Field 的 Neuron共享参数,也就是做 Parameter Sharing权值共享,那共享参数是什麼意思呢
共享参数就是,这两个 Neuron 它们的 weights完全是一样的,我这边特别用顏色来告诉你说,它们的 weights 完全是一样的
常见的在影像辨识上面的共享的方法
用到 Convolutional Layer 的 Network,就叫 Convolutional Neural Network
以每一个 Filter,都会给我们一群数字,红色的 Filter 给我们一群数字,蓝色的 Filter 给我们一群数字,如果我们有 64 个 Filter,我们就得到 64 群的数字了,那这一群数字啊,它又有一个名字,它叫做 Feature Map
我们把一张比较大的图片做 Subsampling,举例来说你把偶数的 Column 都拿掉,奇数的 Row 都拿掉,图片变成為原来的1/4,但是不会影响裡面是什麼东西,把一张大的图片缩小,这是一隻鸟,这张小的图片看起来还是一隻鸟
Pooling,它本身没有参数,所以它不是一个 Layer,它裡面没有 Weight,它没有要 Learn 的东西,所以有人会告诉你说 Pooling 比较像是一个 Activation Function,比较像是 Sigmoid , ReLU 那些,因為它裡面是没有要 Learn 的东西的,它就是一个 Operator,它的行為都是固定好的,没有要根据 Data 学任何东西
刚才说每一个 Filter 都產生一把数字,要做 Pooling 的时候,我们就把这些数字几个几个一组,比如说在这个例子裡面就是 2×2 个一组,每一组裡面选一个代表,在 Max Pooling 裡面,我们选的代表就是最大的那一个
CNN 并没有你想像的那麼强,那就是為什麼在做影像辨识的时候,往往都要做 Data Augmentation,所谓 Data Augmentation 的意思就是说,你把你的训练资料,每张图片都裡面截一小块出来放大,让 CNN 有看过不同大小的 Pattern,然后把图片旋转,让它有看过说,某一个物件旋转以后长什麼样子,CNN 才会做到好的结果