今早终于把DRN跑起来了,因为大大小小改了很多bug,并且在数据集上用了一些时间所以把大致流程在这记录一下,方便以后看。
代码来源:https://github.com/VitaminyW/Super_Solution
http://t.csdn.cn/2flFmhttp://t.csdn.cn/2flFm这篇博客删除了,看下面这个。
基于文章
《Closed-loop matters: Dual regression networks for single image super-resolution》
文章源代码:
GitHub - guoyongcs/DRN: Closed-loop Matters: Dual Regression Networks for Single Image Super-Resolution大致了解到博主是基于源码作出了一系列改进,不过我既没享受到unpair的优势,又在数据集的制作上出了一点麻烦。
1、配置环境
这是论文源码处做出的要求,很宽松的要求
甚至torch2.0.1和对应的cuda11.7都可以运行。配环境时并未碰到太多麻烦。
2、数据集设置
大佬博客中提到可以用unpair的数据集及逆行训练,并给出数据集构建的框架但再未更多介绍,但我只有一些高清图像。所以还是选择采用了源码给的构建数据集的方式
副本不用管,重要的是下面三个 ,这三个文件夹的内容构成是类似的,如下:
HR放高清(我的是1024),LR_bicubic 放三个文件夹
其中X2(512*512) X4(256*256)X8(128*128)我认为这三个文件夹的大小是有关系的,但DRN源码给出的数据集示例中,不同文件夹图像size的关系却没能彻底弄懂,但是这样设置确实跑起来了。
同时X2、4、8中图片名称要与HR一一对应,并不是一样,如果HR中有1.png 则X2中要有1x2.png,X4中则要有1x4.png以此类推。
3,option.py 调参
首先最重要的是修改数据集位置
根据我的数据集命名这里不难改。其他的其实完全没必要在py文件里改,完全可以通过命令行
pycharm的话在run里找edit configuration
先在script path里找到我们工程的main函数,然后在parameters 对batchsize啥的进行设置。需要说明的参数差不多就是这些啊,除了scale其他的好像都是必须的,scale当时好像是因为报错了所以加上的,大致意思是放大倍数是8吧,然后LR就是X8那个文件夹,我也是个萌新啊,原理啥都不懂,为了以后复现才写的这个。
4、我目前只是单纯跑起来,其实博主给的代码基本不用动啊,只要在main那加一个if name = main 那个错,很常见的错一查就查到,每跑一个epoch就会用val数据集test一下,然后生成一个PSNR,再跑,刚才被人push了不想写了,如果有人看了还有问题就问我吧,总体来说算是好实现,但是值得探索的地方还有很多。
测试的时候报错了:
AttributeError: Can t pickle local object Data_reconstruction.__init__.<locals>.<lambda>
我测试使用的命令是通过博主新增的main_reconstruction测试的,这个错误我没去细致研究是咋回事,是pickle库的问题,网上和chatgpt提供的方法都是:
import dill as pickle就是将dill库替换为pickle库,但是我这个错是出现在pickle库中的一个py文件中的,而dill是基于pickle库的,所以这么改会导致循环import。
没办法了,还是用的源码测试的方法
main设置argument:
--data_dir
D:/python_project/Super_Solution-main/DataSet
--save
D:/python_project/Super_Solution-main/test-r
--data_test
my_val
--scale
2
--model
DRN-S
--pre_train
D:\python_project\Super_Solution-main\experiment\training_result\model\model_best.pt
--test_only
--save_results
补训练时的设置:
--batch_size
1
--n_GPUs
1
--scale
4
--save
./experiment/training_result
--model
DRN-S
--epochs
1000
训练时scale是啥,这里就是啥,数据集要将my_val改为自己要测试的数据集,构成方式和训练时的要一样,也就是说HR X2 X4 X8都要有而且文件命名也要正确,但真正起作用的只有scale对应文件夹,如你训练时scale=8 那么就会测试X8中的文件。