来自 GoPro 的一篇视频降噪的文章,发表在 CVPR 2020 年论文,也公布了 Python 源码
视频降噪和图片降噪区别在于视频降噪后输出的结果,观感上能否保持连贯和平滑,而为了达到这个目的,算法在对视频帧进行降噪时,需要参考相邻帧的信息。
创新点
- 使用了类 UNet 架构的网络,因为 Encoder-Decoder 架构本身具有在感受野范围内对齐的功能,所以不需要加入光流或运动估计模块,从而大大降低了计算量,也避免了引入光流带来的伪影
- 为了更好的缓解降噪后的视频出现闪烁(flickering)的问题,使用了两阶段的网络架构
上面的 gif 展示了 video flickering 的现象,右边是逐帧的图片降噪算法处理后的结果,可以看到视频播放时,画面是不停闪烁的,看上去不连贯也不舒服。
网络架构
与常见 U-Net 主要不同的地方有下面三点
1、在上采样这里,采用了 PixelShuffle 层来避免最后的输出结果出现人工痕迹(譬如说用反卷积会出现棋盘效应)的情况
2、而跳层这里采用的是像素维度上的相加,而不是通道维度上的,从而降低了网络对内存的要求
3、模块中包含残差,它连接了Encoder和Decoder,可以加快训练
什么是 PixelShuffle,它的原理入下图所示,可以避免使用反卷积出现的棋盘效应,在 TensorFlow 中,又被称为 depth-to-space,个人认为后者名称更加形象一些
可以有效的利用相邻帧之间存在的信息,且强化时序上噪音与输出帧之间的相关性,为了证明二阶段的优势,文中还做了消融试验,把它和一阶段网络进行比较,下图是对比的一阶段的架构图
多尺度架构和端到端训练
文中对比了多尺度和单尺度,实验表明,多尺度对比单尺度在精度上提升很多。这里的多尺度指的就是使用了类 UNet 的网络架构
处理运动物体
一般的视频去噪方法一般都会加入运动或光流估计模块,但如果运动估计的不准确,最终输出的降噪视频就会出现人工痕迹(artifact),作者实验证明了两阶段级联的网络加上端到端的训练可以缓解这个问题
为什么除了输入视频序列外,还要输入一个噪音图?
这个噪音图是根据设置一个方差值后便可以生产不同强度的高斯噪声。
这个噪音图的输入是借鉴于 FFDNet,好处在于可以作为噪声抑制和细节保持之间的 trade-off
训练细节
优化器:Adam
学习率:前 50 epoch 为 1e3,接下来的 10 epoch 为 1e4,最后的 20 epoch 为 1e6
损失函数:均方误差 MSE,也就是 L2 Loss
数据增益:随机 resize 和 flip
其他参数:batch_size = 96,时序窗口为 5,输入图片大小 96x96
为啥这里输入尺寸这么小,在现实当中真的有效吗?
经测试,是可以去噪的,只是速度慢了一些,大胆猜测可能是因为网络学习到了如何识别噪音= =
在前 60 epoch 迭代的训练中,会对卷积核的权重做 svd 的正交化,这么做的原因是参照了 FFDNet 的经验,浅浅看了 An Analysis and Implementation of the FFDNet Image Denoising Method 文章中对这个 trick 的对比图,PSNR 值会有细微的提升,下面是对应的 python 源代码
效果评估
数据集:两个 DAVIS-test 和 Set8
评估指标: PSNR
横向对比 PSNR 指标如下图所示,其中蓝色表示第一,红色表示第二
从论文中展示图来看,简直就是小龙女劈腿神雕,雕的一批啊,但我拿实际的视频进行测试后发现,效果并没有想像中的好,如果要达到可用的效果的话,可能自己还是需要下不少功夫的
关于计算量这块,我也顺便用 torchprofile 评估了一下网络的计算量,在 720P 下,一帧降噪要 587 G 左右,GoPro 最终在产品使用的网络计算量应该不可能会有这么大
源代码中提供的是对于图片序列的去噪代码,我用 cv2 实现了个读取视频输出视频的代码,有需求的朋友可自取,同时也可以 follow 和 star 我一波。
https://github.com/edvardHua/fastdvdnet/blob/master/run_video_fastdvdnet.py
参考文献
- FastDVDnet: Towards Real-Time Deep Video Denoising Without Flow
以上就是本篇文章【【视频降噪】 GoPro FastDVDNet 看名字就知道它很快】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/quote/6672.html 栏目首页 相关文章 动态 同类文章 热门文章 网站地图 返回首页 企库往资讯移动站http://ww.kub2b.com/mobile/,查看更多