BasicVSR(CVPR2021)复现过程

BasicVSR(CVPR2021)复现

本文主要介绍如何复现BasicVSR模型,以及如何在自己定义的数据集下做测试。关于BasicVSR的详细介绍大家可以参考文献和其他大神的博客,这里不做过多介绍。
BasicVSR(CVPR2021)复现过程_第1张图片
BasicVSR(CVPR2021)复现过程_第2张图片
首先,进入github链接:https://github.com/ckkelvinchan/BasicVSR-IconVSR:
BasicVSR(CVPR2021)复现过程_第3张图片
可以看到MMEditing的链接,因为BasicVSR已经在MMEditing中实现了,所以直接访问MMEditing,下载源码。
BasicVSR(CVPR2021)复现过程_第4张图片
对于初次接触这个工具的同学,首先要了解tools和configs这两个目录。tools下面包含着训练和测试的主代码,而configs下包含着各种各样的配置文件,而且这些配置都是.py文件,所以如果要在标准数据集上测试时,只要修改各种各样的路径就可以了。另外尽量在别人写好的配置文件上修改,因为这些配置文件即使是开发人员,从头写一个新的配置也是很头疼的。因为最近在做视频超分,所以这里只演示如何在标准数据集REDS4上做单卡测试。

首先,新建好自己的工作目录,用来加载预训练模型、保存自己的实验结果,我在根目录下新建了works_dir/demo,这个目录用来存放我的测试数据,另外要自己新建好自己的results.pkl文件,这个文件存放每个视频的测试结果:psnr和ssim。
BasicVSR(CVPR2021)复现过程_第5张图片
这里可以看到我存放的.pkl文件以及预训练模型。

然后需要准备预训练模型,模型的地址:https://github.com/open-mmlab/mmediting/tree/master/configs/restorers/basicvsr
BasicVSR(CVPR2021)复现过程_第6张图片
用来计算光流的SPynet不用下载,代码会自动下载。

我自己准备了REDS4的数据集,并且组织好后,修改对应的config文件(.py文件)的目录。
BasicVSR(CVPR2021)复现过程_第7张图片
这里的路径可能不太正确,但是目的是为了告诉大家如果想做测试,需要在哪里修改。找到对应的参数文件,修改好路径后,可以参考官方文档给出的命令去运行test.py,也可以像我一样直接写在test.py文件里面。
官方给出的做法:
BasicVSR(CVPR2021)复现过程_第8张图片
我的做法如下,效果是一样的,但是这样做是为了帮助自己后面debug。
BasicVSR(CVPR2021)复现过程_第9张图片
准备好后可以运行了,这里我只选择了000这个目录去测试,得到的实验结果如下:
在这里插入图片描述
因为前面已经选择保存图片,即–save_path不为空,那么测试后得到的SR image会自动保存到这个目录里面。
在这里插入图片描述
BasicVSR(CVPR2021)复现过程_第10张图片
打开查看效果:

貌似还不错,以上就是一个简单的复现过程。后面我会补充一些细节,比如如果选指定的测试目录、在自己的数据集上做测试等等。
欢迎大家交流!

最近更新日期:5.17


在完成测试后,可以开始训练了,如果你想要在标准数据集上做训练,那只需要按照标准准备好训练数据集就好了,我这边还是使用REDS数据集做了训练,但是我这边的训练是不贴切的,因为我只是为了看代码中途会不会出什么问题,没有把训练数据和测试数据严格分开,下面简单贴出我的实验过程,供大家参考:

数据的组织:
BasicVSR(CVPR2021)复现过程_第11张图片
BasicVSR(CVPR2021)复现过程_第12张图片
BasicVSR(CVPR2021)复现过程_第13张图片
测试的目录和训练的目录结构一样。但是需要注意的是,真正在训练时,应该有270个视频,但是我这里只给了240个,所以需要修改一个地方:
BasicVSR(CVPR2021)复现过程_第14张图片
将这里的keys修改好就可以了。执行的命令,这里的命令按照官方文档给的去做就可以了:
BasicVSR(CVPR2021)复现过程_第15张图片
BasicVSR(CVPR2021)复现过程_第16张图片
然后训练就开始了。


持续更新中。。。
最近更新日期:6月4日


因为中间掺杂很多事情给耽搁了,所以搁置了很久,这次就把我在这个框架下的其他学习大概分享一下,主要有这些内容:

  1. sliding window 与 recurrent两种网络类型的复现,主要还是在REDS这个数据集上。
    对于sliding window类型的网络,这里还是以EDVR-M为例,首先去查看配置文件:edvrm_x4_g8_600k_reds.py
    BasicVSR(CVPR2021)复现过程_第17张图片
    和之前BasicVSR不同的是,这次不仅需要添加lq_path和gt_path,还需要你准备ann_file,也就是DataLoader需要读取的索引文件,这个文件的制作方法在根目录./tools/data/super-resolution中已经给出,所以直接去参考就好了。
    BasicVSR(CVPR2021)复现过程_第18张图片
    同时,不要忘记准备预训练模型,去官网上下载,同时将路径添加到你的配置文件中:
    BasicVSR(CVPR2021)复现过程_第19张图片
    将配置文件下的load_from修改:
    BasicVSR(CVPR2021)复现过程_第20张图片
    修改好以后,直接去官网上找命令运行就可以了,我用的是自己的第2,3块卡,命令差不多都是以下这样的:CUDA_VISIBLE_DEVICES=2,3 ./tools/dist_train.py your_config.py 2
    运行后可能会出现这样的错误:
    BasicVSR(CVPR2021)复现过程_第21张图片
    在多卡训练时可能会出现这样的错误,告诉你模型的部分计算结果没有存放在计算图中,所以需要重新设置参数:
    BasicVSR(CVPR2021)复现过程_第22张图片
    需要在这个文件下,将find_unused_parameters 改为True,也就是让这部分loss不要做backward(),这个文件直接去debug运行的主文件就可以找到(mmedit/api/train.py)。一切就绪,可以开始训练了!!!
    BasicVSR(CVPR2021)复现过程_第23张图片

recurrent类型的网络其实和sliding window的是类似的,所以大家照着本文已经给出的两个例子做就可以了。


  1. 如何添加自己的loss(损失函数)。

首先,去mmedit路径下,找models/losses,因为我做的是超分辨率,所以就用pixelwise_loss.py作为例子。
BasicVSR(CVPR2021)复现过程_第24张图片
打开后,可以看到熟悉的l1_loss,mse_loss以及charbonnier_loss,l1_loss和mse_loss pytorch里面是有实现的,所以直接调用就可以了,如果想要定义自己的loss,就参考charbonnier loss的写法重做就好了。
BasicVSR(CVPR2021)复现过程_第25张图片
pred和target分别是模型的预测帧以及GT,如果你去装饰器masked_loss中去查看,可以发现loss的细节以及帮你实现好了,你只需要做减法一类的操作就好,至于loss是如何加和的,可以看masked_loss的细节:
BasicVSR(CVPR2021)复现过程_第26张图片
更详细的部分大家自己debug去看就可以了。

比如我想要实现这篇论文的loss:focal_loss,论文和公式我贴在这里:
BasicVSR(CVPR2021)复现过程_第27张图片
在这里插入图片描述
那么,首先需要实现最基本的部分,在pixelwise_loss.py中这样实现focal_loss:
BasicVSR(CVPR2021)复现过程_第28张图片
BasicVSR(CVPR2021)复现过程_第29张图片
实现这个loss的代码在这里:https://github.com/HeonKK/Focal-Frequency-Loss
当然,原作者的github上也给出实现代码了,感兴趣的同学可以自己上去查找。
现在如果我想对charbonnier loss 和focal_loss 做一个简单的加法,实现如下:

BasicVSR(CVPR2021)复现过程_第30张图片
这部分主要注意两个细节,一个是给你自己的损失函数取一个好听的名字(dog,),然后一定要对你的loss进行注册,即头部添加@LOSSES.register_module(),然后你需要在__init__.py文件里面引用你的Loss.
BasicVSR(CVPR2021)复现过程_第31张图片
这样就可以在你的配置文件里面就可以用你自己定义的新Loss了!!
BasicVSR(CVPR2021)复现过程_第32张图片


小结:很早开始学习这个框架了,但是中间有很多事情耽搁,断断续续更新到现在,总体来讲,这个框架读起来还是很晦涩的,很多细节我现在依然没有读懂,虽然MMEditing看起来是将一个简单的问题做得非常复杂,但是通过阅读这样的代码,还是可以学习到很多知识和思想的。希望本文能帮助到大家。

你可能感兴趣的:(视频超分(CV),论文复现,神经网络,深度学习)