超分方法:跑通LIIF

使用场景:解决字符模糊问题

论文:《Learning Continuous Image Representation with Local Implicit Image Function》
            (用局部隐式图像函数学习连续图像表示)

工程:GitHub - yinboc/liif: Learning Continuous Image Representation with Local Implicit Image Function, in CVPR 2021 (Oral)

训练参数修改位置

在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尺寸需要根据实际的模糊图片(实际场景数据尺寸,自己做了模糊数据的尺寸分析,宽和高一般不相等,且图片宽度分布广泛,所以取了一个分布范围的中间值)尺寸来进行确认;

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫与橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值