2019-周报29

本周实验了一些的网络结构,观察了各种结构带来的增益情况,以及相应的优缺点。主要试验了以下结构的情况:

  • non-local
  • channel attention
  • spatial attention
  • multi-scale
  • 深度adaptive
  • 宽度adaptive

1 试验过程记录

以下试验结果均是在jonny码流的QP37下测试得到,BaseModel采用简单的卷积堆叠得到, 结果如下:

模型 BaseModle +NonLocal +spatial&channelAttention +multi-scale
PSNR_GAIN 0.8227 0.8401 0.8869 0.9102

参数量均控制在20k上下,最后 multi-scale 指同时加了spatial attention, channel attention, multi-scale的结果,multi-scale之间共享参数。

2 Adaptive

adapitve目前有两种方法可供选择, 深度adaptive和宽度adaptive. 深度adaptive性价比更高, 但由于不能并行化处理深度计算等原因带来的训练时间会比宽度adaptive更长. 宽度adaptive参数和增益的性价比差一些.

3 pre-train

接下来打算做预训练的试验, 观察预训练带来的训练时间减少情况.

Share Comments

2019-周报28

1. low level 图像处理

通过查阅近三年的论文,low level的图像处理可以分为以下几个方向,每个方向的处理方法都可以分为CNN和GAN两种,在low level图像处理中没有发现新的方向

  • 超分
  • 去噪
  • 去运动模糊
  • 去雾去雨 (不知道算不算low level)
  • 高质量图像修复

另外,19年CVPR还发现一篇去水的论文A Method for Removing Water From Underwater Images

2. 2K到4K超分数据集制作

2.1 尺寸对超分的影响

目前大多超分数据集都是通过bicubic下采样得到低清输入,此类方法对于数据集图片分辨率不敏感。比如,用1080p bicubic下采样到540p的数据集训练的模型用来放大480p分辨率的图片也是没有问题的,主要可以通过两点来论证此结论:

  1. 训练模型数据都是经过裁剪的预处理,比如裁剪为64x64,41x41….,超分过程对输入图片的尺寸不敏感
  2. 超分的标准测试集如set5,set14,city100,Manga109都没有统一测试图片分辨率

综上,2K到4K超分数据集的制作采用传统的其它分辨率的数据集没有问题。

2.2 其它数据生成方式

使用bicubic下采样制作的数据集存在很明显的缺点,在放大其它下采样方式导致的失真图片时增益会明显下降。在这个问题上,目前的解决方案主要有以下两种。

  1. 使用更复杂的下采样方式代替bicubic下采样使其拥有更复杂的质量损失 [1, 3, 4, 5]。例如结合高斯下采样,泊松噪声,运动模糊等…….来制作数据集 [3]
  2. 通过调节相机参数获取真实世界中的图像对 (realistic LR-HR image pairs) [2].

就实际工业应用来说,针对具体应用场景做适配性的超分数据集效果可能更好。

3 网络设计

网络设计目前按照以下步骤进行

  1. 设计一个简易,易扩展,易于进行参数量控制的基础模型作为BaseModle
  2. 在BaseModule的基础上,拓展attention结构观察实验效果
  3. 再逐步拓展新功能观察结果……..

目前还在第一步进行大量试验,目标是试验出整体效果能超越CVPR投稿论文上的结构作为BaseModle。参数量在 20k–200k 之间adaptive。

Conference

  1. Gu, Jinjin, et al. “Blind super-resolution with iterative kernel correction.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.
  2. Chen, Chang, et al. “Camera Lens Super-Resolution.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.
  3. Radu Timofte, Shuhang Gu, Jiqing Wu, and Luc Van Gool. Ntire 2018 challenge on single image super-resolution: Methods and results. In CVPR Workshop, 2018.
  4. Zhang, Kai, Wangmeng Zuo, and Lei Zhang. “Deep Plug-and-Play Super-Resolution for Arbitrary Blur Kernels.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.
  5. Zhang, Kai, Wangmeng Zuo, and Lei Zhang. “Learning a single convolutional super-resolution network for multiple degradations.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.
Share Comments

2019-周报27

之前做CVPR时,为了赶速度,代码写得很乱,本周重构了相关代码,并且开始试验新的模型。之外学习了图模型的一些知识。

1 新模型探索

通过分析之前模型的设计与实验结果,主要打算在以下两个方面进行改进从而提高增益

  • 增加参考帧,并充分利用参考帧的信息
  • 增加网络参数,找到最适合的参数量与BD增益

1.1 参考帧分析,3帧与7帧的选择

分析之前3帧与7帧的试验结果,表明3帧和7帧的增益基本相同。这和视频超分中的结果不一致,视频超分中7帧效果明显好于3帧。这个结果主要是我们的网络结构导致,相距较远的帧最后放入网络,感受野仅为7 pixel,而帧间偏移远大于7 pixel,导致较远帧不能提供有效信息。

由于参数量一直是我们需要注意的问题,所以需要在不引入过多参数量的情况下解决这个问题。最后决定使用space-to-depth(如下图)无损下采样方法解决感受野问题,使用这个方法可以在不增加网络深度的情况下成倍扩大感受野,并且可以使用multi-scale的相关方法。

1.2 网络参数与BD增益的自适应探索

目前我们针对所有码流以及所有QP使用的网络结构都是完全固定的,CVPR论文中最后使用的网络,,网络参数占传统码流的比例在0.3%-10%之间浮动。对于其中占比低于5%的情况,有较大的优化空间,但对于占比10%上下的码流,增加网络参数会大大降低BD的增益情况,这个因素给网络的设计带来很大的困扰。

要想解决这个困扰,只能增加网络结构的自适应调整功能,初步的观察结果表明,网络参数占传统码流的比例在8%-10%之间的表现较好。可以通过固定网络参数的占比这一要素,调整网络大小,实现网络的自适应功能,从而进一步提高BD增益。针对这一设想,设计一个便于调节模型大小的网络结构,通过一个变量(该变量可通过待拟合码流与固定的网络参数占比计算得到)调节网络结构。

2 图模型学习

第一次接触该领域,阅读文献时有很多没听过的专业名词,目前的理解是使用图的数据结构表示待处理数据,并设计处理此类数据结构的网络。理论部分不是很了解,学习了基础的图数据结构的构建,与常用的深度优先与广度优先的图遍历算法,初步了解了该领域常用的编程框架:pytorch-geometric, DGL, networkX

Share Comments

2019-周报26

基于深度学习的图像增强目前的创新点主要在网络结构上面,如 multi-scale, LSTMRecursiveRecurrent, 其中很多创新是将序列模型中的东西用到了CNN中。在视频处理领域,由于其在空间维度上有图像处理的特性,在时间维度上有序列模型的特性,所以和序列模型的结合更为紧密。比如FRVSR[1]便是受RNN的启发,将前一序列的输出当作下一序列的输入,充分利用了视频的序列特性。

本周主要学习了序列模型,序列模型的发展可以分为表示学习(Representation Learning)和模型创新。本周从整体上初步了解了以下三个方面的内容。

  • 序列模型 (sequence model)
  • 表示学习(Representation Learning)
  • 图神经网络(Graph Neural Network)

其中表示学习和图神经网络都是刚刚接触,还没有深入了解。

1 序列模型

序列模型的发展选取以下几个较为重要的思想进行记录,充分体现出了序列模型网络结构的发展情况,主要参考了吴恩达序列模型的课程[3]。

  • GRU单元 (gate recurrent unit)
  • LSTM单元 (long short term memory)
  • Bidirectional RNN
  • Deep RNN
  • 注意力机制

####1.1 Standard RNN

首先是标准RNN的结构如下

standard rnn

1.2 GRU

GRU单元已经成为了序列模型的基本单元,可以看作简化版的LSTM模块,其提出主要是为了解决序列模型的长依赖关系以及梯度消失问题问题。其结构与前向传播公式如下

GRU

1.3 LSTM

与GRU相比,LSTM将更新门独立成了遗忘门输出门, 并进一步区分了细胞状态隐藏状态。其结构与前向传播公式如下

LSTM

1.4 B-RNN

bidirectional rnn主要是为了解决由上下文引起的语义歧义性,传统的RNN模型只能前向参考,而实际应用中后面的内容会引起语义的不同,例如 “He said, Teddy bears are on sale” 和 “He said, Teddy Roosevelt was a great President。其结构如下

B-RNN

其每次反向传播必须在两个方向的前向传播都完成之后才能进行,虽然准确率有所提升,但训练速度会大大降低。

1.5 Deep RNN

Deep RNN通过简单堆叠的方式提升模型的深度,从而获得更多的增益,其网络结构如下

Deep-RNN

1.6 注意力机制

注意力机制最早来自2014年Bahdanau等人的研究 [6],主要为了解决长句子BLEU得分衰减问题。其主要思想是序列中的某个位置对周围序列的参考权值是不一样的。通常来说,相距越远参考性应该越低。衰减曲线与网络结构如下

attention

2 表示学习

在神经网络出现之前,存在特征提取师这么一个行业,特侦提取这个过程便称作表示,不同的表示对后续的处理影响很大。比如阿拉伯数字和罗马数字就是对数字的两种不同表示,使用阿拉伯数字进行算数运算比使用罗马数字进行相同的运算简易很多,这就是表示不同带来的差异。下面主要介绍序列模型中的表示学习,并引出图像处理中的表示学习。

序列模型中和表示学习相关的论文便是大名鼎鼎的word2vec [2] , 使用word Embedding方法代替了传统的one-hot编码,现在序列模型处理基本没有使用one-hot编码直接处理了。

2.1 word2vectore

使用one-hot编码,每个单词相互独立没有关联,任意两个单词之间的L2距离均为 $\sqrt{2}$ 而现实世界中不同单词之间存在不一样的关联性,word2vectore便是学习更贴近现实世界的表示。论文中给出了CBOWSkip-gram两种实现方法,具体实现还没来得及仔细研究。

2.2 图像的表示

现在基于深度学习的图像处理很多都是end-to-end模式,直接将图像的表示和具体应用融合进行。end-to-end的方法训练与使用都很方便,但迁移效果并不理想,很多时候不如随机初始化的效果好。这也让人开始思考图像是否有更优的表示方法,图像表示的一个特殊应用便是人脸识别,使用Triplet损失学习人脸的表示。

3 图神经网络

图神经网络还没有深入了解,序列的表示以及有了很大的发展,然而由于图像的高维特性,其特征的表示发展缓慢,图神经网络的一大目标便是更好地学习图像的表示[7]。

参考资料

  1. Sajjadi, M. S., Vemulapalli, R., & Brown, M. (2018). Frame-recurrent video super-resolution. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 6626-6634).
  2. Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781.
  3. 网易云课堂-吴恩达-序列模型
  4. Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780.
  5. https://www.cse.iitk.ac.in/users/sigml/lec/Slides/LSTM.pdf
  6. Bahdanau, D., Cho, K., & Bengio, Y. (2014). Neural machine translation by jointly learning to align and translate. arXiv preprint arXiv:1409.0473.
  7. Advancements in Graph Neural Networks Includes joint work with H. Ren, W. Hamilton, R. Ying, J. You,
    M. Zitnik,W. Hu, K. Xu, S. Jegelka
Share Comments

2019-周报25-试验结果与分析

试验结果记录与分析

1. classB 单个epoch(50帧)运行时间

  • 训练:21s
  • 测试:9s

2. x264结果

week25-x264-result

3. ClassE结果

week25-classE-HM

4. 分析总结

分析目前为止的BD情况,差的基本都是低码率的码流,按常规理解来说,码流的大小和传输的信息量是相关的。我们之前拟合帧数是以50帧为基准,按原始码流的像素信息决定拟合的帧数。按照 learning-to-remember 的思路,网络记住的是信息,而非YUV数据占据的磁盘空间。现在正在初步试验根据码流确定拟合帧数的效果,相当于之前网络对不同码流都是拟合相同帧数,而现在加入了一个调度系统 (熵调度?),根据实际码流确定拟合帧数。但是由于我们的试验涉及编码和网络训练,要确定一个好的调度方案需要很多时间,而我们现在没有足够的时间进行试验。

论文总结

BRCN (NIPS2015 & PAMI2018)

Huang, Yan, Wei Wang, and Liang Wang. “Video super-resolution via bidirectional recurrent convolutional networks.” IEEE transactions on pattern analysis and machine intelligence 40.4 (2017): 1015-1028.

Huang, Yan, Wei Wang, and Liang Wang. “Bidirectional recurrent convolutional networks for multi-frame super-resolution.” Advances in Neural Information Processing Systems. 2015.

主要创新点在网络部分,相当于将RNN的结构使用了两次,一次从前往后,一次从后往前,最后重构的时候将两部分合并。

BRCN-NET-architecture

FRVSR (CVPR2018)

Sajjadi, Mehdi SM, Raviteja Vemulapalli, and Matthew Brown. “Frame-recurrent video super-resolution.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.

  • 网络输入有三个:当前帧小图,前一帧小图,前一帧超分图。输出一个:当前帧超分图
  • 将网络的输出信息利用了起来,把前一帧的修复结果利用起来修复当前帧,节省了计算量
  • 在光流对齐部分新增了损失函数,用来增强对齐效果
  • 使用subpixel的反操作,将大图分成多张小图当作输入
  • 单帧超分中,5个残差块增益基本到顶,再增加残差块效果提升也不明显了。多帧超分,增加网络深度,超分效果提升明显

FRVSR-NET-ARCHI

文章细节给得很详细,循环利用网络的输出信息,在光流对齐处加损失函数的做法也是比较新颖的,利用subpixel的反操作(space-to-depth)将大图变为小图再输入的方法也是第一见到,很值得借鉴。

YOLO (CVPR2016)

Redmon, Joseph, et al. “You only look once: Unified, real-time object detection.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

  • 滑动窗口卷积 (sliding window approach)

  • 之前的目标识别都是多步骤进行,先生成候选框,再识别框内物体。YOLO一步完成候选框与识别任务

    Using our system, you only look once (YOLO) at an image to predict what objects are present and where they are.

  • 一次完成对整张图片目标的框定与识别

  • 在同样的速度下,识别准确率是其它模型的两倍

论文比较复杂,没有细看,后面有时间再仔细研究一下

Share Comments

2019-周报24

Share Comments

2019-周报23

本周主要在64通道FRCNN的基础上试验了网络剪枝的效果,同时在之前的网络结构的基础上通过增加channel观察增益变化情况,具体试验结果如下。

1 增加channel试验

以下试验结果均是BasketballDrive码流在RandomAccess编码模式下得到

1.1 BPRN试验结果
QP 22 增益 (db) QP 37 增益 (db) 参数 (个)
channel 32 0.1999 0.5314 14945
channel 64 0.2891 0.6661 48321
1.2 FRCNN试验结果
QP 22 增益 (db) QP 37 增益 (db) 参数(个)
channel 32 0.2339 0.4993 19169
channel 64 0.2885 0.7216 75201
1.3 总结

由试验结果可以看出channel由32增加到64增益有明显的提升,但算上参数量增加,BD稍有下降。同时,具体实现的过程中,学习率,图片裁剪大小等细节也会引起大约 ±0.05 的增益波动。

2 FRCNN剪枝

本周的主要工作是试验网络剪枝的情况,由于BPRN网络各卷积层之间交替连接,不能用市面上常用的减枝方法试验,所以最后选择了FRCNN进行剪枝试验。

2.1 剪枝简介

FRCNN结构中,仅中间循环部分的两组卷积核可使用传统剪枝方法。剪枝过程中特征图卷积核的变化情况可简单由下图表示(仅中间两层卷积变化情况):

prune

由图可见,对卷积核1进行剪枝,会使其输出特征图通道数减小,下一个卷积核的对应的输入通道也需要剔除,在对复杂网络结构的剪枝中前后卷积的关联会导致剪枝涉及到的卷积核增加。

2.2 试验结果

以下试验结果是在原始通道64的FRCNN基础上进行的剪枝,每次裁剪2个通道,每次剪枝后进行10个Epoch的微调。下表是试验的部分数据统计

层数 64 60 56 52 48 44 40 36 32 28
参数 75201 70593 65985 61377 56769 52161 47553 42945 38337 33729
增益(db) 0.721 0.657 0.620 0.593 0.561 0.551 0.523 0.509 0.477 0.467

由于每次剪枝之后仅进行了10个epoch的微调,所以每次剪枝之后并未达到完全的收敛。不过从总体趋势来看结果并不理想。

参考资料

Share Comments

2019-周报21

本周主要针对新的数据制作方式进行训练,既有好的一面同时也遇到了新的问题。这里主要对本周的试验结果进行总结分析,并说明接下来计划的试验。

试验结果总结

用DnCNN拟合新的数据得到了目前为止最高的增益如下表:

QP32 (1帧) QP32 (25帧) QP32 (50帧) QP27 (50帧) QP22 (50帧)
3.1db 1.4db 1.2db 0.62db 0.38db

但试验发现使用新的数据很容易进入局部极小值而不收敛,这个问题的存在十分影响工作效率,同一网络由于初始化不同可能出现不同的收敛情况,很多时候训练了很久最后却不能够收敛,而得不到任何增益,白白浪费了很多时间。

因为没有及时进行总结,在没解决进入局部极小值导致不收敛这个问题的情况下,又尝试了多种多帧拟合网络,其中包括直接输入多帧使用3D卷积融合的多帧网络,光流法融合的多帧网络,BPRN中的循环融合等。均没有取得较好的提升情况,并且不清楚是因为局部极小值导致的提升不够还是网络的原因。

后续试验计划

之前的试验结果表明,使用41x41的数据集没有出现局部极小值的情况,且测试大图时没有出现增益衰减的情况。所以后续训练打算分两步进行,使用41x41初始训练避免进入局部极小值,换成大图加载保存点继续训练进一步提升增益。

使用41x41的数据集测试不同网络的增益情况,尽量寻找参数量与增益性价比最高的网络。

Share Comments

2019-周报20

1 当前情况分析

观察以下两组数据分析当前 X265, VTM, X265+FRCNN 三种编码方式的效果。

week20-x265-vtm

week20-x265-FRCNN

分析得到以下情况:

  1. 效果排名 VTM > X265 + FRCNN > X265
  2. PSNR (VTM) ≈ PSNR (X265 + FRCNN) + 0.2
  3. Bitrate (VTM) ≈ 0.77 * Bitrate (X265 + FRCNN)

VTM在编码码率编码效果两个方面都好于 X265+FRCNN, 我们编码方式的性质决定了码率必然是大于VTM,所以只能从提升PSNR的角度出发。通过计算得知,要使 X265+FRCNN 的效果赶上 VTM,需要在保持模型参数不变的情况下使PSNR在当前基础上再提升0.7

2 思路与实践

要使psnr在目前的基础上提升0.7,根据之前做编码损伤修复的经验来看仅仅通过以前的方法几乎不可能实现。

2.1 思路

和吴畅讨论之后有以下收获:

2.1.1 多帧融合

目前为止使用的网络都是处理单帧,没有做多帧融合网络,而视频编码会参考周围帧,所以可以从使用带多帧融合的网络试验观察效果。

2.1.2 过拟合

当前的试验其实并不算真正的过拟合,可能是图片数据量太大和网络参数不够导致的。参考之前做过减小数据量的试验(如下表),仅拟合一帧的效果反而不好。week20-different-frame

但继续减小数据量,在仅拟合一帧 42x42 的图片时达到了完全的过拟合,无损地恢复出了标签数据

week20-overfit

也就是说当前的网路结构与参数,仅能过拟合 42x42 的数据量,而现在50帧的1080x1920数据量太大做不到过拟合。

2.2 实践

首先简单试验了多帧融合拟合,在参数量不增加的情况下做了一个简单的多帧网络进行训练。结果和单帧拟合相比并没有明显的提升

2.3 总结

分析以上结果发现由于图片的数据量太大,过拟合非常困难,而现在试验的提升都不算真正的过拟合,是具有一定的泛化能力的。

所以当前的工作重点是想办法在保证网络参数的情况下尽量实现过拟合,考虑到视频编解码过程的帧间参考,之后的工作主要想办法做多帧融合的过拟合试验。

Share Comments

2019-周报19

本周使用REDS的视频数据制作了视频图片通用的编解码去噪数据集。考虑到视频处理使用到更大的模型与更多的数据,学习了pytorch的并行机制。

1 去编解码噪声数据集

之前图片超分数据集使用HDF5打包,这种方式虽然使用简单,但是不适用于数据量过大的场景,而现在一组QP的训练集达到40G的量级,所以采用了LMDB对数据打包,其优点是轻量化,读写快。

在吸取了之前数据集制作的不足之处后,现在的数据集具备以下之前没有的特点:

  • 图片视频通用,没有预设网络输入的帧数,可弹性调整输入帧数而不用重做数据集
  • 没有进行预裁剪,可灵活更改决定输入的size,而不用重做数据集

新的数据集具有较好的通用性

2 pytorch并行机制

pytorch并行分为两种,分别是数据并行模型并行。数据并行就是将一个batch的数据分为多组置于不同GPU种进行运算,最后将结果进行组合做反向传播,每个GPU需要存储整个模型。模型并行则是将模型的各部分存储于不同GPU进行训练。

2.1 数据并行

数据并行适用于数据量较大的情况,每张GPU中都需要存储整个模型,所以存在一定的使用空间冗余。由于存在多张GPU之间的通信,必须等到每张GPU上的epoch都完成了才能进入下一个epoch,所以某些情况下多卡的速度可能比单卡更慢。

2.2 模型并行

模型并行适用于模型过大的情况,相比数据并行实现上相对复杂一些。将模型分为多个模块存储于不同的GPU中,相比数据并行消除了模型存储的冗余。

多GPU之间的同步是代码优化的主要工作,模型在各个GPU上每一次数据前向传播耗费的时间越接近越好,和木桶效应一样,运行的速度为最慢的GPU的速度,所以做模型拆分的时候需要了解各个拆分后模型的计算量以保证各个GPU上运行的时间接近。

3 参考资料

Share Comments