卷积神经网络
参考资料
卷积
分组卷积
- 传统卷积权重数 = 卷积核大小 * 输入通道数 * 输出通道数
- 分组卷积权重数 = 卷积核大小 * 输入通道数 / 分组数 * 输出通道数 / 分组数 * 分组数 = 卷积核大小 * 输入通道数 * 输出通道数 / 分组数
- 只关注组内连接
DSC (Depthwise Separable Convolution 深度可分离卷积)
- 相当于每个通道一组的分组卷积 (Depthwise Convolution)
- 再加上一个 1x1 的卷积 (Pointwise Convolution) 来混合通道信息
- 还卷啥啊, 1x1 卷积就是线性变换, 不是卷积了, 只是为了混合通道信息而已
DCN 论文
DCNv1
- 在采样窗口上加了一个小卷积, 会输出每个采样点的 offset
- offset 是小数, 需要对变形后的位置进行双线性插值
- 变形前的位置的权重乘以变形后的采样点像素, 进行卷积计算
DCNv2
- 小卷积还输出了一个调节标量, 用 sigmoid 激活后
- 计算与 DCNv1 类似, 每个采样点的卷积结果还要乘以调节标量
DCNv3
- 引入分组卷积机制, 每组内的采样点共享一套偏移量和权重
- 调节标量用 softmax 激活
我的工程优化
- batch / step 并行
- 每组中的每个采样点共享一套偏移量和权重, 并行
- 累加通道时, SIMD
- 反向时, 组级隔离
DCNv4
- Softmax 其实限制了权重的表达能力, 因为 DCN 每个位置都有专属的聚合窗口, 不怕像 Attention 那样产生数值爆炸
- 内存访问优化, 让多个通道共用一次内存读取结果, 消除冗余的内存加载指令