查看 Markdown

SwinIR

一个用于图像恢复的 Swin Transformer 网络。LibreYOLO 为它的 4x 超分辨率检查点提供推理和验证:官方轻量版、真实场景中号和真实场景大号生成器。

任务
restore
尺寸
s, m, l at 64 px
安装
pip install libreyolo
支持层级
仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
上游
SwinIR,由 Computer Vision Lab, ETH Zurich 发布,采用 Apache-2.0 许可。论文源码
许可
代码采用 Apache-2.0,权重采用 Apache-2.0。商用

安装

SwinIR 不需要任何可选 extra。它导入的一切都在基础安装里。

bash
pip install libreyolo

预测

权重在首次使用时从 Hugging Face 下载,并缓存在本地。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSwinIRm-restore.pt")result = model(SAMPLE_IMAGE, save=True) restored = result.restoredprint(restored.array.shape, restored.array.dtype)
CLI
libreyolo predict model=LibreSwinIRm-restore.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
分块处理大图
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRl-restore.pt") # tile 把前向过程切成互相重叠的分块,再把接缝混合回去;tile_pad 是每个# 分块在被裁回去之前,四周额外加的一圈边距。两者都只是 Python 的关键字# 参数,不是 CLI 标志result = model("large-photo.jpg", tile=512, tile_pad=16, save=True)

恢复类结果不带检测框;result.restored 是一张稠密的 (H, W, 3) uint8 RGB 图 像,画布在每个维度上都是输入的 4 倍。save=True 会把这张图像直接写入磁盘,而不 是写一张画了标注的图。输入不会被缩放,而是被填充到 8 的倍数,所以预测跑的是照片 自身的分辨率;超出内存承受范围的数据源可以用 tiletile_pad 切开,它们会在 输出里把分块的接缝混合回去。数据源、流式处理和结果处理见预测

变体

三个尺寸,放大倍数都固定为 4x。s 是官方的轻量生成器,有四个残差 Swin Transformer 块(RSTB)阶段,配 pixel-shuffle-direct 上采样。ml 是真实场 景的中号和大号生成器,分别有六个和九个 RSTB 阶段,上采样器用的是最近邻加卷积, 为真实世界的退化而设计,而不是只针对双三次下采样。

验证

val() 测量恢复输出和干净目标图像之间的 PSNR 和 SSIM,两者都在 RGB 上、按原始 画布计算,不裁边框也不做缩放。SSIM 用的是 11x11 的高斯窗口,sigma 为 1.5,在三 个颜色通道上取平均。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRm-restore.pt")metrics = model.val(data="my-restore-dataset.yaml") print(metrics["metrics/PSNR"])print(metrics["metrics/SSIM"])
CLI
libreyolo val model=LibreSwinIRm-restore.pt data=my-restore-dataset.yaml

数据集参数是一个 YAML,把一个存放退化输入图像的目录和一个存放同分辨率干净目标 图像的目录配成对;确切的键见数据集格式

导出

任务ONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
restorerestore to ONNX:支持restore to TorchScript:支持restore to ExecuTorch:不支持restore to TensorRT:支持restore to OpenVINO:支持restore to Paddle:不支持restore to MNN:不支持restore to RKNN:不支持restore to ncnn:不支持restore to TFLite:支持restore to CoreML:不支持restore to Core AI:不支持

导出的产物按文件后缀经由 LibreYOLO() 重新加载,所以一个 .onnx.engine 文件的表现和检查点一样,返回同样的 Results。ExecuTorch 以及矩阵里标为不支持的 每一种格式,这个家族都用不了;能用的是 ONNX、TorchScript、TensorRT、OpenVINO 和 TFLite。导出列出了每种格式都接受的参数,以及其中少数几种额外增加 的参数。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSwinIRm-restore.pt") # 省略 imgsz 时,默认用的是一个很小的内部 patch 尺寸,而不是你的工作分# 辨率,所以请传入部署时真正喂给模型的尺寸model.export(format="onnx", imgsz=512)model.export(format="tensorrt", imgsz=512, half=True)
CLI
libreyolo export model=LibreSwinIRm-restore.pt format=onnx imgsz=512
使用导出的文件
from libreyolo import LibreYOLO, SAMPLE_IMAGE # 工厂按文件后缀分发,所以导出的产物加载方式和任何检查点一样,# 返回的也是同一个 Results 对象model = LibreYOLO("LibreSwinIRm-restore.onnx")result = model(SAMPLE_IMAGE) print(result.restored.array.shape)

检查点

这个家族已发布的全部权重文件。

文件输入(px)权重许可
restore
LibreSwinIRs-restore.ptapache-2.0
LibreSwinIRm-restore.ptapache-2.0
LibreSwinIRl-restore.ptapache-2.0

上面的每个文件目前都在 LibreYOLO 组织中,并会在首次使用时下载。

许可证

请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。

这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。

原始工作
SwinIR, Computer Vision Lab, ETH Zurich
上游许可
Apache-2.0
LibreYOLO 代码
MIT
权重
采用 Apache-2.0 许可,重新发布在 huggingface.co/LibreYOLO
解读
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code. LibreYOLO's checkpoints are format conversions of the official pretrained generators, with the learned parameters unchanged; SwinIR's real-world variants need a degradation and GAN training pipeline that is not wired into this library, so there is no LibreYOLO-trained variant to license separately.

引用

@article{liang2021swinir,
  title={SwinIR: Image Restoration Using Swin Transformer},
  author={Liang, Jingyun and Cao, Jiezhang and Sun, Guolei and Zhang, Kai and Van Gool, Luc and Timofte, Radu},
  journal={arXiv preprint arXiv:2108.10257},
  year={2021}
}

复制自作者在 github.com/JingyunLiang/SwinIR#citation 上提供的引用块。

已针对 LibreYOLO v1.5.0 验证。本页的支持表、检查点和基准测试数据由已发布的库和权重生成,并非手工编写。