使用场景:解决字符模糊问题
论文:《Learning Continuous Image Representation with Local Implicit Image Function》
(用局部隐式图像函数学习连续图像表示)
训练参数修改位置
在configs中的yaml文件为训练参数配置文件,训练自己的数据时,单独建立了一个文件夹放yaml格式的文件:
里面的内容如下:
train_dataset:
dataset:
name: paired-image-folders
args:
#root_path_1:存放的是低精度图片
root_path_1: ./train/img_ok_16_160 #./load/celebAHQ/32
#root_path_2:存放的是高精度图片
root_path_2: ./train/img_ok_64_640 #./load/celebAHQ/256
#split_file可以不使用
split_file: #./load/celebAHQ/split.json
split_key: train
#cache:数据读入时的格式,无需修改,若样本为常用图片格式,该工程自行处理
cache: bin
wrapper:
name: sr-implicit-uniform-varied
args:
#size_min:LR分辨率,根据训练样本来设置
size_min: 16
#size_max:HR分辨率,根据训练样本来设置
size_max: 64
#sample_q:采样数量
sample_q: 1024
#augment:是否进行数据增强
augment: true
#batch_size:训练时,批处理图片数量
batch_size: 4
val_dataset:
dataset:
name: paired-image-folders
args:
root_path_1: ./test/img_ok_16_160 #./load/celebAHQ/32
root_path_2: ./test/img_ok_64_640 #./load/celebAHQ/256
split_file: #./load/celebAHQ/split.json
split_key: val
first_k: 100
cache: bin
wrapper:
name: sr-implicit-paired
args:
sample_q: 1024
batch_size: 1
data_norm:
inp: {sub: [0.5], div: [0.5]}
gt: {sub: [0.5], div: [0.5]}
model:
name: liif
args:
encoder_spec:
name: edsr #edsr-baseline #网络结构的名字 候选项:edsr
args:
no_upsampling: true
imnet_spec:
name: mlp
args:
out_dim: 3
hidden_list: [256, 256, 256, 256]
optimizer:
name: adam #优化方式
args:
lr: 1.e-4 #基础学习率
epoch_max: 200 #训练最大的epochs
multi_step_lr:
milestones: [100]
gamma: 0.1
epoch_val: 1 #间隔多少个epoch进行模型验证
epoch_save: 100 #间隔多少个epoch保存
然后在main函数中加载该文件
数据预处理修改
工程中默认训练的图片是宽高相等,但是在实际使用的时候图片宽高不相等,在datasets/wrappers.py中修改class SRImplicitUniformVaried(Dataset)中的代码为:
def __getitem__(self, idx):
img_lr, img_hr = self.dataset[idx]
p = idx / (len(self.dataset) - 1)
# w_hr = round(self.size_min + (self.size_max - self.size_min) * p)
h_hr = round(self.size_min + (self.size_max - self.size_min) * p)
scale_ = img_hr.shape[1]*1.0 / h_hr
w_hr = img_hr.shape[2]
w_hr = round(w_hr / scale_)
# img_hr = resize_fn(img_hr, w_hr)#totensor, hw通道交换,同时从hr尺寸resize为self.size_min+offset尺寸
img_hr = resize_fn(img_hr, [h_hr, w_hr]) # totensor, hw通道交换,同时从hr尺寸resize为self.size_min+offset尺寸
模型存储位置
在main函数中修改
预训练模型加载位置
models/models.py中line22:
if load_sd:
model.load_state_dict(model_spec['sd']) #加载预训练模型
中间模型加载
train_liif.py中line63:
if config.get('resume') is not None: #加载中间训练模型
sv_file = torch.load(config['resume'])
实际场景使用经验
用于字符识别的前处理,将相应的字符区域图片进行超分辨率处理,将模糊的图片变清晰;
实验数据:用一批高清图片切割区域后,resize为对应的低清图片,具体的resize尺寸需要根据实际的模糊图片(实际场景数据尺寸,自己做了模糊数据的尺寸分析,宽和高一般不相等,且图片宽度分布广泛,所以取了一个分布范围的中间值)尺寸来进行确认;