Skip to content

一个图像复原或分割的统一框架,可以用于去雾🌫、去雨🌧、去模糊、夜景🌃复原、超分辨率👾、像素级分割等等。

License

Notifications You must be signed in to change notification settings

misads/cv_template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9976ee0 · Mar 17, 2021

History

59 Commits
Feb 7, 2021
Jan 19, 2021
Jul 1, 2020
Jan 19, 2021
May 15, 2020
Jan 19, 2021
May 15, 2020
Jan 19, 2021
May 19, 2020
May 15, 2020
Mar 17, 2021
Dec 1, 2020
Dec 15, 2020
Dec 1, 2020
Jan 19, 2021
Dec 1, 2020
Jan 19, 2021

Repository files navigation

cv_template

  一个图像复原或分割的统一框架,可以用于去雾🌫、去雨🌧、去模糊、夜景🌃复原、超分辨率👾、像素级分割等等。

  preview

Highlights

  • 特色功能
    • 快速搭建baseline,只需生成输入和标签对应的txt文件,无需修改任何代码即可运行
    • (参数控制)多模型
    • 训练过程监控
    • 命令行日志记录
    • 支持TTA

环境需求

python >= 3.6
torch >= 1.0
tensorboardX >= 1.6
utils-misc >= 0.0.5
mscv >= 0.0.3
opencv-python==4.2.0.34  # opencv>=4.4需要编译,建议安装4.2版本
opencv-python-headless==4.2.0.34
albumentations>=0.5.1 

使用方法

训练和验证模型

① 生成输入图片和标签对应的train.txt和val.txt

  新建一个datasets文件夹,制作文件列表train.txt和val.txt并把它们放在datasets目录下,train.txt和val.txt需要满足这样的格式:每行是一对样本的输入和标签的绝对路径,用空格隔开。如下所示:

# datasets/train.txt
/home/xhy/datasets/RESIDE/ITS_v2/images/94_4.png /home/xhy/datasets/RESIDE/ITS_v2/labels/94.png
/home/xhy/datasets/RESIDE/ITS_v2/images/687_6.png /home/xhy/datasets/RESIDE/ITS_v2/labels/687.png
/home/xhy/datasets/RESIDE/ITS_v2/images/441_3.png /home/xhy/datasets/RESIDE/ITS_v2/labels/441.png
/home/xhy/datasets/RESIDE/ITS_v2/images/102_7.png /home/xhy/datasets/RESIDE/ITS_v2/labels/102.png
/home/xhy/datasets/RESIDE/ITS_v2/images/988_2.png /home/xhy/datasets/RESIDE/ITS_v2/labels/988.png
/home/xhy/datasets/RESIDE/ITS_v2/images/860_8.png /home/xhy/datasets/RESIDE/ITS_v2/labels/860.png

  如果输入图片和标签是一一对应的并且存放在两个文件夹中,可以使用下面的脚本生成:

# !- bash
python utils/make_filelist.py --input datasets/images/ --label /datasets/labels --val_ratio 0.1 --out datasets

  生成好train.txt和val.txt后目录结构是这样的:

cv_template
    └── datasets
          ├── train.txt      
          └── val.txt    

② 训练模型

CUDA_VISIBLE_DEVICES=0 python train.py --tag ffa --model FFA --epochs 20 -b 2 --lr 0.0001 # --tag用于区分每次实验,可以是任意字符串

  训练的中途可以在验证集上验证,添加--val_freq 10参数可以指定10个epoch验证一次,添加--save_freq 10参数可以指定10个epoch保存一次checkpoint。

③ 验证训练的模型

CUDA_VISIBLE_DEVICES=0 python eval.py --model FFA -b 2 --load checkpoints/ffa/20_FFA.pt

  验证的结果会保存在results/<tag>目录下,如果不指定--tag,默认的tagcache

④ 恢复中断的训练

CUDA_VISIBLE_DEVICES=0 python train.py --tag ffa_resume --model FFA --epochs 20 -b 2 --lr 0.0001 --load checkpoints/ffa/10_FFA.pt --resume

  --load的作用是载入网络权重;--resume参数会同时加载优化器参数和epoch信息(继续之前的训练),可以根据需要添加。

⑤ 在测试集上测试

CUDA_VISIBLE_DEVICES=0 python submit.py --model FFA --load checkpoints/ffa/20_FFA.pt

记录和查看日志

  所有运行的命令和运行命令的时间戳会自动记录在run_log.txt中。

  不同实验的详细日志和Tensorboard日志文件会记录在logs/<tag>文件夹中,checkpoint文件会保存在checkpoints/<tag>文件夹中。

参数说明

--tag参数是一次操作(traineval)的标签,日志会保存在logs/标签目录下,保存的模型会保存在checkpoints/标签目录下。

--model是使用的模型,所有可用的模型定义在network/__init__.py中。

--epochs是训练的代数。

-b参数是batch_size,可以根据显存的大小调整。

-w参数是num_workers,即读取数据的进程数,如果需要用pdb来debug,将这个参数设为0。

--lr是初始学习率。

--load是加载预训练模型。

--resume配合--load使用,会恢复上次训练的epoch和优化器。

--gpu指定gpu id,目前只支持单卡训练。

另外还可以通过参数调整优化器、学习率衰减、验证和保存模型的频率等,详细请查看python train.py --help

清除不需要的实验记录

  运行 python clear.py --tag <your_tag> 可以清除不需要的实验记录,注意这是不可恢复的,如果你不确定你在做什么,请不要使用这条命令。

如何添加新的模型:

如何添加新的模型:

① 复制network目录下的FFA文件夹,改成另外一个名字(比如MyNet)。

② 仿照FFA的model.py,修改自己的网络结构、损失函数和优化过程。

③ 确认network/<MyNet>/model.py正确,现在network下的目录会被自动检测到,不再需要手动添加。

④ 运行 python train.py --model MyNet 看能否正常训练

About

一个图像复原或分割的统一框架,可以用于去雾🌫、去雨🌧、去模糊、夜景🌃复原、超分辨率👾、像素级分割等等。

Resources

License

Stars

Watchers

Forks

Packages

No packages published