在NTIRE2023中,我们基于CVPR 2022 Bring Old Films Back to Life 进行了比赛,这里给出了使用方法。这次以NTIRE 2023 Video Colorization比赛的数据为例。本次我们不做开源,不过代码的修改也很简单。
1. 数据集下载
数据集的下载可以在比赛官网下载 天池地址,数据集下载好后的数据如下图所示:
官方给出了如何将彩色视频转化为灰色视频的脚步,色彩转换脚本
2. 代码库准备
下载Bring Old Films Back to Life代码,代码结构如下,基本所有的核心部件都在VP_code目录下
首先,我们需要根据比赛的数据集改写数据加载方式,数据加载在VP_code/data/dataset.py下完成。
dataset.py主要内容如下,原本的脚本只有Film_dataset_1~Film_dataset_8:
我们为比赛写了Film_dataset_9和Film_dataset_10两个类,分别用来做训练和验证,两者区别不大,以Film_dataset_9为例:
在初始化时,主要关注self.lq_frames与self.gt_frames,用来加载路径,如果对超分辨率数据集REDS结构熟悉,那么这个初始化和加载方式基本是一样的。
在__getitem__方法中,每次根据预先设定好的加载帧数,加载灰色和彩色视频,加载方式是用OpenCV读取,最后放到一个字典里。验证集的Film_dataset_10和该类写法基本一直,准备好判断条件即可。
这里加入你有了自己的新想法,设计了新模型,那么就把他放在VP_code/models下面,可以看到所有实现的网络结构Class都在这个目录下,我们可以新建一个.py脚本然后去实现即可。
所有实现网络的脚本,里面的主体结构必须写成Video_Backbone,因为该代码库加载网络以这个为统一命名的。
加载模型时,该代码库以python脚本名进行加载的,所以在训练时,训练脚本main_gan.py的--name参数就是你在modes下面新建方法的命名,比如我自己想了方法叫testA,建立了脚本testA.py,那么训练时也是需要将--name参数叫为testA,保持一致即可。
###################################################################
补充:所有新建的数据加载类都需要在VP_code/train.py进行import,同时加上判断条件,实现如下:
原来的代码库是没有NTIRE2023这个判断的,我们自己加上即可,这个命名在后面写.yaml配置时会用到。
###################################################################
在数据和模型都准备好后,最后需要准备好配置文件,在configs下面新建一个.yaml配置文件,可以仿照官方给的那个去建立,然后去更改数据集加载类的命名以及数据路径即可。
这里可以看到,我把datasets的train和val的name都换成了自己建立的class命名,数据集路径也做了相应替换。所有这些都准备好后就可以开始训练了!
如果你想从某个预训练模型开始微调,那么需要做两个事情:1.原本的代码实现里没有添加加载预训练模型,我们在train.py的初始化部分__init__()方法里要添加pytorch加载模型的代码:
这部分代码原来的代码是没有的,我们自己实现一下即可。然后就是配置文件了,配置文件里把预训练模型的路径加载进来即可:
这里加载你的预训练模型即可!这样你就可以针对场景做微调了。
接触视频上色时间不长,还有很多问题没有搞清楚,还需要继续研究,欢迎和大家继续交流!
邮箱:1792418414@qq.com