BasicSR项目数据集准备全指南
BasicSR 项目地址: https://gitcode.com/gh_mirrors/bas/BasicSR
前言
在图像和视频超分辨率研究领域,高质量的数据集准备是模型训练的关键第一步。BasicSR作为一个功能强大的图像视频复原工具库,支持多种数据存储格式和预处理方式。本文将详细介绍BasicSR项目中的数据集准备流程,帮助研究人员高效地构建训练和测试环境。
数据存储格式详解
BasicSR支持三种主流的数据存储格式,各有其适用场景和优势:
1. 直接硬盘存储
特点:
- 以原始图像/视频帧格式直接存储在硬盘上
- 实现简单,无需额外处理
- 适合小规模数据集或测试阶段
配置示例:
type: PairedImageDataset
dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub
dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic/X4_sub
io_backend:
type: disk
2. LMDB存储
优势:
- 显著加速IO和CPU解压过程
- 特别适合大规模训练数据集
- 采用键值对存储,读取效率高
技术细节:
- 在标准LMDB文件基础上增加了meta_info.txt
- 记录图像名称、尺寸和压缩级别等信息
- 二进制内容使用OpenCV的PNG编码格式存储
缓存优化技巧:
- 首次使用前可执行
cat data.mdb > /dev/null
预缓存 - 确保机器内存足够容纳整个数据集
- 监控系统缓存状态(
free -h
命令)
3. Memcached存储
适用场景:
- 集群环境下的分布式缓存
- 需要多节点共享数据的场景
配置要求:
io_backend:
type: memcached
server_list_cfg: /path/to/server_list.conf
client_cfg: /path/to/client.conf
sys_path: /path/to/pymc
图像超分辨率数据集准备
DIV2K数据集处理流程
- 数据下载:从官网获取原始2K分辨率图像
- 子图像裁剪:
- 使用
extract_subimages.py
脚本 - 典型裁剪尺寸480×480
- 训练时进一步随机裁剪为更小patch
- 使用
- LMDB转换:
- 使用
create_lmdb.py
脚本 - 可调整PNG压缩级别平衡空间和速度
- 使用
- 元信息生成:
- 使用
generate_meta_info.py
脚本 - 记录图像基本属性信息
- 使用
常用图像SR数据集概览
| 数据集类型 | 代表数据集 | 特点 | |------------|------------|------| | 经典训练集 | T91, BSDS200 | 小规模训练样本 | | 经典测试集 | Set5, Set14 | 标准评估基准 | | 2K分辨率集 | DIV2K, Flickr2K | 高清训练素材 | | 室外场景集 | OST | 丰富纹理特征 |
视频超分辨率数据集处理
REDS数据集规范
- 数据重组:
- 原始训练集240个片段(000-239)
- 验证集重编号为240-269
- 验证划分:
- 官方验证集:30个片段
- REDS4验证集:从训练集选取4个片段
- LMDB转换:
- 使用专用处理函数
create_lmdb_for_reds
- 使用专用处理函数
Vimeo90K处理要点
- 从官方下载82GB的Septuplets数据集
- 使用MATLAB脚本生成低分辨率版本
- 测试时使用
test_vimeo90k_dataset.py
验证数据加载
StyleGAN2数据准备
FFHQ数据集处理
- 从官方源下载tfrecords格式文件
- 使用专用脚本提取为图像或LMDB格式
- 不同分辨率数据分开存储
性能优化技巧
-
数据预取机制:
- CUDA模式:加速但增加显存占用
- CPU模式:对某些配置可能效果有限
-
配置示例:
prefetch_mode: cuda
pin_memory: true
num_prefetch_queue: 2
- IO瓶颈诊断:
- 监控数据加载线程利用率
- 测试不同存储格式的吞吐量
- 根据硬件配置调整并行度
结语
正确准备数据集是超分辨率研究的基础。BasicSR提供了一套完整的数据处理工具链,从原始数据下载到高效存储格式转换,再到性能优化配置,覆盖了研究所需的各个环节。建议根据实际硬件条件和使用场景,选择最适合的数据存储和处理方案,以充分发挥硬件性能,加速模型训练过程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考