Invertible Image Rescaling 开发者指南:基于 BasicSR 扩展自定义子网与数据加载模式(完整教程) Invertible Image Rescaling 开发者指南基于 BasicSR 扩展自定义子网与数据加载模式完整教程【免费下载链接】Invertible-Image-Rescaling[ECCV 2020, IJCV 2022] Invertible Image Rescaling项目地址: https://gitcode.com/gh_mirrors/in/Invertible-Image-RescalingInvertible-Image-RescalingIRN是 ECCV 2020 Oral / IJCV 2022 论文《Invertible Image Rescaling》的官方 PyTorch 实现核心功能是通过可逆网络完成图像的下采样与超分辨上采样一个网络同时承担缩小和放大两个方向。项目基于BasicSR 框架构建采用 Config → Data → Model → Network 四层结构非常适合想深入理解可逆图像缩放、学习如何**扩展自定义子网Subnet和数据加载模式Dataset Mode**的开发者。本指南将带你快速读懂代码骨架并动手完成一次扩展。上图来自项目 figures/architecture.jpg左下→右上为下采样编码路径右上→左下为可逆的上采样解码路径整个网络由可逆块Inv Block与 Haar 下采样算子堆叠而成。 一、先认识 IRN一张图看懂可逆缩放传统先缩小、再超分的方案是两条独立链路信息在下采样时就丢失了。IRN 的思路是下采样路径图像经过若干 Haar 下采样 可逆块InvBlockExp得到低分辨率图像同时隐式编码出残差信息上采样路径低分辨率图像 噪声样本 z沿完全可逆的运算栈反向执行即可恢复出高分辨率图像。由于每一步都可逆恢复过程可以精确回传雅可比Jacobian用于训练时的熵建模损失这是 codes/models/modules/Inv_arch.py 中jacobian()方法的作用。定量结果显示x2/x4 倍数下 IRN 以极少的参数量1.66M / 4.35M显著超过 Bicubic、EDSR、RDN 等方法可在 README.md 中查看完整表格。 二、项目结构BasicSR 式四件套整个代码集中在codes/目录遵循 BasicSR 的经典分层模块路径职责配置codes/options/YML 配置文件 参数解析数据codes/data/数据集与 DataLoader 构建模型codes/models/训练/测试模型逻辑网络codes/models/modules/可逆网络与子网结构关键入口文件速查训练train.py测试test.py配置示例codes/options/train/train_IRN_x4.yml、codes/options/test/test_IRN_x4.yml指标计算metrics/calculate_PSNR_SSIM.py快速跑起来准备 DIV2K 等训练数据后一条命令即可训练python train.py -opt options/train/train_IRN_x4.yml python test.py -opt options/test/test_IRN_x4.yml命令行入口会自动完成四件事解析 YML 配置 → 创建数据加载器 → 创建模型 → 启动训练循环含日志、验证、学习率调度。理解这一流程就掌握了 BasicSR 系项目的通用骨架。 三、扩展自定义子网一个构造函数搞定IRN 的可逆块InvBlockExp定义于codes/models/modules/Inv_arch.py内部需要三个可学习的子网F、G、Hy1 x1 F(x2) y2 x2 · exp(H(y1)) G(y1)子网的具体结构不写死在可逆块里而是通过一个子网构造函数注入——这就是 codes/models/modules/Subnet_constructor.py 中subnet()工厂函数的作用def subnet(net_structure, initxavier, gc32): def constructor(channel_in, channel_out): if net_structure DBNet: return DenseBlock(channel_in, channel_out, init, gcgc) else: return None return constructor扩展新子网只需三步实现子网在Subnet_constructor.py中新增一个nn.Module例如替换为 RRDB 块项目已提供 codes/models/modules/RRDB.py 可参考保证输入通道channel_in、输出通道channel_out与构造参数匹配即可注册分支在subnet()的if/else中为新结构名如RRDBNet增加一个返回分支修改配置在 YML 的network_G段把subnet_type: DBNet改成你的新结构名即可生效network_G: which_model_G: subnet_type: RRDBNet # 新子网名称 in_nc: 3 out_nc: 3 block_num: [8, 8] scale: 4网络组装逻辑在 codes/models/networks.py 的define_G()中它读取subnet_type、调用subnet(subnet_type, init, gcgc)得到构造函数再传入InvRescaleNet完成HaarDownsampling InvBlockExp的自动堆叠。你甚至不需要改动InvRescaleNet本身——这正是构造函数注入模式的优雅之处可逆主干保持稳定只换零件。 四、扩展数据加载模式加一行分支即可数据侧的入口在 codes/data/init.py 的create_dataset()它按配置中的mode字段分发数据集类def create_dataset(dataset_opt): mode dataset_opt[mode] if mode LQ: from data.LQ_dataset import LQDataset as D elif mode LQGT: from data.LQGT_dataset import LQGTDataset as D ...两个内置模式的特点LQ模式codes/data/LQ_dataset.py只提供低分辨率图像适用于测试/重建阶段LQGT模式codes/data/LQGT_dataset.py读取 LQ/GT 图像对若未提供 LQ会在 DataLoader 中即时把 GT 下采样生成 LQ训练时还带随机裁剪、翻转、旋转等增强。新增数据模式的标准姿势参考LQGTDataset新建一个继承data.Dataset的类如支持带分割掩码的 codes/data/LRHR_seg_bg_dataset.py在create_dataset()中为新的mode值增加一个elif分支在 YML 的datasets.train.mode中填上新模式名同时可配置dataroot_GT、GT_size、use_flip、use_rot等字段。配合 codes/data/data_sampler.py 中的采样器即可支持分布式训练下的批次调度。整个数据管道的设计原则是配置驱动、按名分发——这也是 BasicSR 框架最值得借鉴的工程习惯。 五、注册新模型并验证效果如果扩展子网后需要新的训练逻辑例如压缩联合任务IRN-CRM、去色任务IRN-Color只需在 codes/models/init.py 的create_model()中注册if model IRN: from .IRN_model import IRNModel as M elif model IRN: from .IRNp_model import IRNpModel as M ...然后在 YML 顶部设置model: IRN等字段训练、验证、保存权重、TensorBoard 日志全部自动接管。跑完训练后可用 metrics/calculate_PSNR_SSIM.py 批量计算 PSNR / SSIM与figures/quantitative_results.jpg中的基准对比确认你的自定义子网没有破坏可逆性带来的精度优势。⚡ 六、新手常见坑与最佳实践子网必须严格可逆吗不必。F/G/H 是普通前馈网络可逆性由 InvBlock 的整体构造保证但注意H子网输出会经sigmoid压缩成缩放因子通道数要设对通道数配置Haar 下采样每做一次通道数 ×4block_num: [8, 8]对应下采样前后的可逆块数量修改scale时二者要同步调整数据对齐LQGT模式依赖 GT 与 LQ 按文件名排序配对若只给 GT 路径LQ 会即时生成无需额外准备数据学习率策略参考 train_IRN_x4.yml 中的MultiStepLR与pixel_criterion_forw/back双向损失权重lambda_fit_forw: 16.、lambda_rec_back: 1微调子网时建议沿用相同策略便于对比权重初始化subnet_type分支默认使用xavier初始化见Subnet_constructor.py的mutil.initialize_weights_xavier自定义子网建议保持一致以获得稳定收敛。 总结IRN 的本质用可逆块 Haar 下采样搭建一条双向高速公路下采样与超分共用同一网络扩展子网改Subnet_constructor.py一个分支 改 YML 一行配置零侵入主干扩展数据新建 Dataset 类 在data/__init__.py注册 mode配置驱动即可生效注册模型在models/__init__.py中加一个分支训练框架全自动接管。掌握这套 BasicSR 式的扩展套路后你不仅能玩转 IRN也能快速上手其他基于该框架的图像恢复项目。【免费下载链接】Invertible-Image-Rescaling[ECCV 2020, IJCV 2022] Invertible Image Rescaling项目地址: https://gitcode.com/gh_mirrors/in/Invertible-Image-Rescaling创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

贝叶斯机器学习中CRPS:评估概率预测准确性与不确定性的核心指标

贝叶斯机器学习中CRPS:评估概率预测准确性与不确定性的核心指标

1. 项目概述:为什么我们需要CRPS?在贝叶斯机器学习的实战中,我们常常会陷入一个困境:模型训练好了,后验分布也采样出来了,但怎么评价这个模型的好坏呢?特别是当模型的输出不是一个确定的点&…

2026/8/23 12:36:24
AI智能体工具克隆评估:构建安全高效MCP工具的实战框架

AI智能体工具克隆评估:构建安全高效MCP工具的实战框架

1. 项目缘起:当AI智能体开始“复制”工具时,我们该警惕什么?最近在折腾各种AI智能体(Agent)框架时,我发现一个越来越普遍的现象:开发者们热衷于为智能体“克隆”工具。这里的“克隆”&#xff0…

2026/8/23 12:36:24
从MathorCup竞赛到工业实践:二手车估价的数据清洗、特征工程与模型融合全解析

从MathorCup竞赛到工业实践:二手车估价的数据清洗、特征工程与模型融合全解析

1. 项目概述:从一场竞赛到一套完整的二手车估价方法论 去年带队参加了MathorCup大数据挑战赛的A题,题目是二手车估价。说实话,当时看到这个题目,团队里既有兴奋也有压力。兴奋在于,这是一个非常“接地气”的工业级问题…

2026/8/23 12:36:24
flux-lora-collection的ComfyUI工作流实战:comfy_converted版权重如何使用

flux-lora-collection的ComfyUI工作流实战:comfy_converted版权重如何使用

flux-lora-collection的ComfyUI工作流实战:comfy_converted版权重如何使用 【免费下载链接】flux-lora-collection 项目地址: https://ai.gitcode.com/hf_mirrors/XLabs-AI/flux-lora-collection flux-lora-collection 是 XLabs-AI 发布的面向 FLUX.1-dev 模…

2026/8/23 12:36:24
Linux内核性能优化:Jump Labels与Static Keys原理与实践

Linux内核性能优化:Jump Labels与Static Keys原理与实践

1. 背景与核心概念 在 Linux 内核开发中,性能优化是一个永恒的话题。你是否遇到过这样的场景:内核中某个功能(如调试信息打印、性能计数器、特定硬件支持)在绝大多数情况下是关闭的,只有在特定条件下才需要启用。如果使…

2026/8/23 12:36:24
Python大数据招聘爬虫系统设计与实现

Python大数据招聘爬虫系统设计与实现

1. 项目背景与核心价值 最近几年大数据分析在人力资源领域的应用越来越广泛,而招聘数据作为反映就业市场动态的第一手资料,其价值不言而喻。作为一名计算机专业的毕业生,选择"基于Python大数据招聘爬虫可视化系统"作为毕业设计课题…

2026/8/23 12:31:24