论文:Densely Connected Pyramid Dehazing Network(CVPR2018)
论文就不讲解了,网上有,步骤开始:
1、环境安装:
Ubuntu16.0.4平台运行
Python2.7环境
Pytorch>=0.3.1框架
CUDA9.0+CUDNN7
训练网络需要使用GPU,显存和运行内存、还有系统交换区swap不要太抠,不然容易程序无法进行而报错。还有系统共享内存也不能不足,我的电脑勉强用100个训练数据训练,迭代了40000次。
建议安装Anaconda3创建Python环境,便于管理,运行程序时,如果缺什么包直接使用anaconda集成安装到环境里即可。
DCPDN的预训练模型可直接用于测试,测试数据、模型、训练数据数都很多,数据均为或者均要转化为h5文件来训练和测试,需要翻墙下载。需要仔细阅读README.md文件。
预训练模型、训练数据、测试数据等已经上传到百度网盘中,提取码为:pv5f,供大家参考,根据自己需要去下载,训练数据也不用全部下载使用。
2、项目文件结构(部分重点介绍)
项目下载解压后目录如下:
项目添加数据后的根目录如下:
checkpoints_new:利用合成图片生成无雾图片和训练生成的新模型的文件夹。
cvprw_test_resize_crop:存储自己的实际有雾图片。
demo_model:存储预训练模型,作者提供了netG_epoch_8.pth,需要自行下载,百度云里已经有了。
facades:最重要,也是最大的文件夹,内容如下图。其中,nat_new4文件夹存储用于测试的实际图片h5数据,test_cvpr文件夹存储你的实际有雾图片转换的h5文件,用于去雾。train512为用于训练的h5文件,共有4000个,根据你自己系统能力,从头按顺序连续选取部分数据,作者使用0-1000来训练网络,会迭代400*1000=400000次。val512存储400个用于对抗鉴别器训练的h5文件。
result_cvpr18:存储去雾结果的文件夹。
create_train.py:所有合成的,用于训练和测试的数据样本,都在HDF5文件中进行了扫描。您还可以使用“create_train.py”生成样本数据。
dehaze22.py:去雾网络模型框架。
demo.py:运行作者提供的预训练模型,anaconda进入创建的环境,cd进入项目根目录“cd 你的路径/DCPDN”,然后运行带参数的命令:(运行前确保对应目录下的文件下载齐全)
python demo.py --dataroot ./facades/nat_new4 --valDataroot ./facades/nat_new4 --netG ./demo_model/netG_epoch_8.pth
generate_testsample.py:用于将你自己的有雾图片生成h5文件,用于去雾。若要修改图片读取和存储方式,请修改代码中的
73行“train_list_per=glob.glob('./cvprw_test_resize_crop/*jpg')”和90行”directory='./facades/test_cvpr/'“。由于网络需要,图片会被resize为512*512的大小,生成去雾图片后请自行resize回来,代码百度云已提供。
train.py:训练网络使用,使用以下命令:(实际是微调作者提供的预训练模型,并保存下来)
python train.py --dataroot ./facades/train512 --valDataroot ./facades/test512 --exp ./checkpoints_new --netG ./demo_model/netG_epoch_8.pth
使用自己的有雾图片去雾:
首先使用 generate_testsample.py将自己的图片生成为h5文件,然后使用以下命令去雾:
python demo.py --dataroot ./facades/test_cvpr --valDataroot ./facades/test_cvpr --netG ./checkpoints_new/netG_epoch_9.pth
./facades/test_cvpr为你的实际有雾图片生成的h5文件所在的根目录,./checkpoints_new/netG_epoch_9.pth为生成的模型的路径。训练中途会保存很多模型,选择你觉得效果好的模型使用即可。
3、源码适配
作者原始源码部分需要修改,如下:(如果下载百度云的则不需要,已修改过了)
generate_testsample.py:
去掉99行的注释,防止自己输入的图片不是规定尺寸;
第一个包numpy不需要as np;
create_train.py:
第119行reshap的参数A改为a;
引用numpy包不需要as np。
我的操作到此结束,写的可能不是很清楚,有问题请随时留言,如果哪里理解有误还望指出。
4、致谢
感谢作者的贡献,感谢大家的支持!