跳转至

卷积神经网络

参考资料

卷积

分组卷积

  • 传统卷积权重数 = 卷积核大小 * 输入通道数 * 输出通道数
  • 分组卷积权重数 = 卷积核大小 * 输入通道数 / 分组数 * 输出通道数 / 分组数 * 分组数 = 卷积核大小 * 输入通道数 * 输出通道数 / 分组数
  • 只关注组内连接

DSC (Depthwise Separable Convolution 深度可分离卷积)

  • 相当于每个通道一组的分组卷积 (Depthwise Convolution)
  • 再加上一个 1x1 的卷积 (Pointwise Convolution) 来混合通道信息
    • 还卷啥啊, 1x1 卷积就是线性变换, 不是卷积了, 只是为了混合通道信息而已

DCN (Deformable Convolutional Networks)

DCN 论文

DCNv1

  • 在采样窗口上加了一个小卷积, 会输出每个采样点的 offset
  • offset 是小数, 需要对变形后的位置进行双线性插值
  • 变形前的位置的权重乘以变形后的采样点像素, 进行卷积计算

DCNv2

  • 小卷积还输出了一个调节标量, 用 sigmoid 激活后
  • 计算与 DCNv1 类似, 每个采样点的卷积结果还要乘以调节标量

DCNv3

  • 引入分组卷积机制, 每组内的采样点共享一套偏移量和权重
    • 解决线性投影权重过多的问题
  • 调节标量用 softmax 激活

我的工程优化

  • batch / step 并行
  • 每组中的每个采样点共享一套偏移量和权重, 并行
  • 累加通道时, SIMD
  • 反向时, 组级隔离

DCNv4

  • Softmax 其实限制了权重的表达能力, 因为 DCN 每个位置都有专属的聚合窗口, 不怕像 Attention 那样产生数值爆炸
  • 内存访问优化, 让多个通道共用一次内存读取结果, 消除冗余的内存加载指令