2019-周报10

本周继续学习了CycleGAN,重点学习并总结了深度学习中常用的各种卷积之间的区别与联系。调试修复了视频编解码中的部分bug,完成了双路同步编解码的功能。

1 视频编解码项目现状说明

测试发现,现在编码解码部分虽然都使用GPU完成,但是中间拼接部分却是在CPU中进行的,整个过程的内存使用情况如下

图1.CodecMemoryV1.png

所以拼接部分目前实际是在内存中完成,针对此部分的改进方法目前有两种方案

  • ffmpeg + CUDA
  • ffmpeg + OpenCV

使用opencv只能针对拼接部分进行改进,即将内存中的帧转移到显存使用GPU拼接,中间有显存->内存->显存 的转移过程。

使用ffmpeg + CUDA或许能够完成整个解码,拼接,编码过程均在显卡中完成,目前还未实践。

2 深度学习常用卷积总结

深度学习在图像领域的操作主要依赖卷积操作,根据不同场景不同目的产生了各种不同的卷积方式。常用的二维卷积,三维卷积,转置卷积,增大感受野的扩张卷积,减小参数的可分卷积,模型并行的分组卷积,以及用于超分辨的亚像素卷积等等,选择不同的卷积对网络的性能,参数都会有很大的影响。

2.1 2DConv, 3DConv

使用二维卷积时,卷积核的深度等于被卷积图像的深度,所以卷积时在深度方向不移动,最后卷积的结果为二维特征。而三维卷积时,卷积核的深度小于被卷积图像的深度,所以卷积时除了横向纵向移动之外还会在深度上移动,所以被称为三维卷积,卷积结果为三维特征,如下图所示

2.2 转置卷积

转置卷积可以当作上面卷积的逆操作,在卷积操作之前通过在周围补零的方式达到卷积之后的size大于卷积之前的size,通常用于上采样。

当卷积核与其转置卷积相乘结果为单位矩阵时,卷积与转置卷积是完全互逆的,但不满足此条件时,卷积与转置卷积不是可逆的。

2.3 扩张卷积 (dilated convolutions)

扩张卷积的主要优点是在不增加模型参数的情况下扩大感受野,参数 I(扩张率) 表示希望将核加宽的程度,通常是在核元素之间插入 I-1 个空格实现。当 I=0 时,和普通卷积一样。

2.4 可分卷积

深度学习中使用的可分卷积通常指深度可分卷积,谷歌提出的MobileNet中便是使用的这种卷积。深度可分卷积主要是在卷积的深度上进行了创新,通过单层卷积与 1x1 卷积将最开始的卷积操作拆成两步进行。

先使用深度为 1 的卷积核进行卷积操作,于是卷积的输入输出拥有相同的深度,再使用 1x1 卷积扩大深度。通过这样的操作减小训练的参数。具体操作方法见参考资料。

2.5 分组卷积

分组卷积即将卷积操作分组进行,如将 255x255x16 数据分为两组 255x255x8 的数据各自进行卷积操作从而实现模型并行操作。模型并行不仅拥有数据并行的加速功能,因为能够将模型部署在不同GPU中,还能节省显存,从而能够增大训练的batch。分组卷积还能大大减小模型参数,分为 n 组,参数便能减小为原来的 $1/n$

初此之外,分组卷积甚至能改进模型,上面提到分组卷积能够减小模型参数,因此具有稀疏过滤器的功能,效果类似于dropout。

2.6 亚像素卷积

在做超分网络时,使用转置卷积上采样会造成棋盘效应,而亚像素卷积能很好地克服棋盘效应。其实现也很简单,就是将很深的低分辨率特征组装成高分辨图像,如下图所示。

图3.subpixConv

2.7 参考资料

Share Comments