图像卷积
卷积filter
一般为$3 \times 3$,例如:
垂直边缘检测
水平边缘检测
- 若其他filter内数值不同,对应不同的特性、角度
- 可以把这些数值作为参数$w$
padding
将原图像四周,补充一圈(对于$3 \times 3$大小的filter)
- 卷积之后,图像大小不变
- (用0padding)
步长
filter每次求卷积值后移动的长度,可以大于1
图像$n \times n$,filter $f \times f$,padding $p$,步长$s$,则输出维度为:$\left \lfloor \frac{n+2p-f}{s} + 1 \right \rfloor$
multiple filters卷积
- 维度:$(n \times n \times n_{c}) * (f \times f \times n_{c})$ —> $((n - f + 1) \times (n - f + 1) \times n_{f})$,其中$n_{c}$为chanel数,$n_{f}$为卷积filter数
- 使用一个$f \times f \times n_{c}$卷积,得到$((n - f + 1) \times (n - f + 1))$
- 使用$n_{f}$个$f \times f \times n_{c}$卷积,将结果堆叠,得到$((n - f + 1) \times (n - f + 1) \times n_{f})$
卷积unit
维度检查
对于第$l$层
- $f^{[l]}$:filter大小
- $p^{[l]}$:padding大小
- $s^{[l]}$:stride大小
- input维度:$n^{[l-1]} \times n^{[l-1]} \times n_{c}^{[l-1]}$
- output维度:$n^{[l]} \times n^{[l]} \times n_{c}^{[l]}$
可知关系
- $n^{[l]} = \left \lfloor \frac{n^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}} + 1 \right \rfloor$
- $n_{c}^{[l]}$:本层filter数量($n_{c}^{[0]}$原始图像chanel数)
- 本层filter的维度:$f^{[l]} \times f^{[l]} \times n_{c}^{[l-1]}$
activation
- 卷积操作相当于线性$W$,进而将卷积结果进一步加$b$
- 上述结果输入一个激活函数(如ReLU)
多个filters操作、堆叠,即构成一个卷积层
CNN各层
conv卷积层
pooling
- 按filter抽取(如max pooling,找到各filter区域最大值)(有点像马赛克化)
- 没有需要学习的参数,只需要设置超参数(filter大小、步长)
fully connected,FC
- 这是NN一层
一般的,随着层数变深,图像长宽的大小$n^{[l]}$变小,但$n_{c}^{[l]}$会变大
CNN结构
经典结构
conv + pooling -> conv + pooling -> fc -> fc -> softmax
残差网络 residual network
residual block
第$l$层输入,向第$l+2$层激活函数传递
$1 \times 1$ conv
- 控制$n_{c}$大小
- 增加非线性(使用了激活函数)
inception network
并行堆叠conv、pooling等模块作为一层
- $1 \times 1$ conv作为bottleneck层,加速计算