
人工智能深度学习计算机视觉图像处理视频处理【免费下载链接】BasicSROpen Source Image and Video Restoration Toolbox for Super-resolution, Denoise, Deblurring, etc. Currently, it includes EDSR, RCAN, SRResNet, SRGAN, ESRGAN, EDVR, BasicVSR, SwinIR, ECBSR, etc. Also support StyleGAN2, DFDNet.项目地址https://gitcode.com/gh_mirrors/ba/BasicSR点击查看免费下载本文围绕 BasicSR 的数据准备工作展开覆盖三大核心内容其一如何理解并切换硬盘、LMDB、Memcached 三种数据存储后端以及 LMDB 的目录结构、元信息格式与制作流程其二如何为图像超分DIV2K 等与视频超分REDS、Vimeo90K数据集完成从下载、裁剪/重组到 LMDB 构建、dataloader 验证的完整准备链路其三如何用prefetch_mode预读取机制进一步缓解 IO 瓶颈。读完本篇你可以按脚本化流程把任意标准复原数据集配置成 BasicSR 训练可直接读取的格式并从源码层面理解每一环的实现原理。一、数据存储格式三种后端与统一抽象1.1 支持的后端BasicSR 目前支持三种数据存储形式以图像/视频帧格式直接存放在硬盘上制作成LMDB可以加速训练时的 IO 与解码decompression速度若机器上安装了Memcached常见于集群环境也可以直接使用。1.2 通过配置文件切换后端三种后端的切换完全通过训练 yaml 的io_backend字段完成无需改动任何代码。以支持 DIV2K 的 PairedImageDataset 为例1直接读取硬盘数据type: PairedImageDataset dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic/X4_sub io_backend: type: disk2使用 LMDB使用前需要先制作 LMDB见 1.4 节。注意BasicSR 在标准 LMDB 之上附加了 meta 信息且二进制内容的编码方式与一般来源不同因此其他来源的 LMDB 不能直接拿来使用必须用仓库自带脚本重新制作。type: PairedImageDataset dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub.lmdb dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub.lmdb io_backend: type: lmdb3使用 Memcached机器/集群必须先支持 Memcached并按实际部署修改配置type: PairedImageDataset dataroot_gt: datasets/DIV2K_train_HR_sub dataroot_lq: datasets/DIV2K_train_LR_bicubicX4_sub io_backend: type: memcached server_list_cfg: /mnt/lustre/share/memcached_client/server_list.conf client_cfg: /mnt/lustre/share/memcached_client/client.conf sys_path: /mnt/lustre/share/pymc/py3仓库中的训练配置也验证了这种切换方式。例如 train_EDSR_Mx4.yml 中disk 与 lmdb 两套dataroot/io_backend配置以注释形式并排给出用户按需启用其一即可type: PairedImageDataset dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic/X4_sub # (for lmdb) # dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub.lmdb # dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub.lmdb filename_tmpl: {} io_backend: type: disk # (for lmdb) # type: lmdb1.3 实现原理FileClient 抽象层后端的统一抽象实现在 file_client.py。该设计借鉴自 MMCV 的 FileClient为了兼容 BasicSR主要是适配 LMDB做了接口改动。从源码结构看FileClient内部维护一个后端注册表_backends {disk: HardDiskBackend, memcached: MemcachedBackend, lmdb: LmdbBackend}构造时传入的backend字符串即对应 yaml 中io_backend.type的取值HardDiskBackend.get()直接用open(filepath, rb)读取字节流同时支持get_text()LmdbBackend以只读方式打开 lmdb 环境默认readonlyTrue, lockFalse, readaheadFalseget(filepath, client_key)把传入的文件名当作 lmdb 的 key在只读事务中txn.get(filepath.encode(ascii))取回字节client_key机制允许同一个 FileClient 挂多个 lmdb 环境MemcachedBackend依赖mc库构造时把sys_path追加到sys.path再import mc通过MemcachedClient的Get拉取数据。这样一来自定义 dataloader 时只需调用FileClient.get()即可透明地支持不同存储形式具体调用写法可参考 PairedImageDataset 的实现。1.4 LMDB 具体说明为什么用 LMDB训练时数据量巨大LMDB 把零散的小图片集中到一个数据库文件中显著加快 IO 与 CPU 解码测试时数据量小一般没有必要使用。加速效果取决于机器配置有三个影响因素需要注意有些机器会定期清理缓存而 LMDB 依赖页缓存机制。若数据一直缓存不进去需要排查——执行free -h后LMDB 占用的缓存会体现在buff/cache条目下机器内存是否足够容纳整个 LMDB。若装不下缓存需要不断换入换出速度会受影响首次缓存 LMDB 数据集时会影响训练速度建议训练前进入 LMDB 目录手动预热cat data.mdb /dev/null。目录结构与 meta 信息除标准的data.mdb与lock.mdb外BasicSR 额外写入一个meta_info.txt记录附加信息DIV2K_train_HR_sub.lmdb ├── data.mdb ├── lock.mdb ├── meta_info.txtmeta_info.txt采用纯文本以保证可读性内容形如0001_s001.png (480,480,3) 1 0001_s002.png (480,480,3) 1 0001_s003.png (480,480,3) 1 0001_s004.png (480,480,3) 1 ...每行记录一张图像的三个字段图像名称带后缀0001_s001.png图像尺寸(480,480,3)表示 480×480×3其他参数在复原任务中通常以 PNG 存储该值表示 OpenCV 的 PNG 压缩级别IMWRITE_PNG_COMPRESSION可取 [0, 9] 的整数越大压缩越强存储空间更小、压缩耗时更长。这一点在源码中得到印证lmdb_util.py 中make_lmdb_from_imgs每写入一张图就同步写一行 meta格式正是f{key}.png ({h},{w},{c}) {compress_level}且以不含后缀的图像名作为 lmdb key。二进制内容LMDB 中存的是cv2.imencode(.png, img, [cv2.IMWRITE_PNG_COMPRESSION, compress_level])编码后的 PNG 字节可通过compress_level在存储空间与读取含解码速度之间做权衡。make_lmdb_from_imgs还提供batch默认 5000 张提交一次事务、multiprocessing_read多进程读图入内存加速要求服务器内存充足、n_thread默认 40、map_size缺省时按首张图大小估算等参数LmdbMaker 类则面向边生成数据边写 LMDB的场景默认map_size1024**41TB。如何制作 LMDB仓库提供统一入口脚本 create_lmdb.py内置 DIV2K、REDS、Vimeo90K 三个数据集的制作函数其他数据集可仿照实现。脚本支持--dataset命令行参数python scripts/data_preparation/create_lmdb.py --dataset DIV2K # 或 --dataset REDS / --dataset Vimeo90K三个函数的要点运行前务必按实际环境修改其中的路径与配置create_lmdb_for_div2k()依次处理DIV2K_train_HR_sub、DIV2K_train_LR_bicubic/{X2,X3,X4}_sub四个子图文件夹需先运行extract_subimages.pykey 取去掉.png后缀的文件名create_lmdb_for_reds()处理train_sharp与train_sharp_bicubic需先重组 train/val见 3.1 节key 形如000/00000000递归扫描子目录并开启multiprocessing_readTrue加速create_lmdb_for_vimeo90k()基于sep_trainlist.txt生成 keyGT 模式只保留每段的第 4 帧im4.pngLQ 模式保留 7 帧同样使用多进程读图。1.5 数据预读取Data Pre-fetcher除了 LMDB还可以用预读取机制进一步加速 IO实现在 prefetch_dataloader.py通过配置文件的prefetch_mode指定。目前提供三种模式1None默认不使用预读取。若已用 LMDB 或 IO 本身不成问题可保持默认。prefetch_mode: ~2prefetch_mode: cuda使用 CUDA prefetcher原理参见 NVIDIA/apex 的相关实践会把数据提前搬到 GPU会额外占用显存且此模式下必须同时设置pin_memory: true。prefetch_mode: cuda pin_memory: true3prefetch_mode: cpu使用 CPU prefetcher队列长度由num_prefetch_queue控制默认 1。注意原文档提示实测该模式加速效果不明显。prefetch_mode: cpu num_prefetch_queue: 1 # 1 by defaulttrain_EDSR_Mx4.yml 中的默认配置即prefetch_mode: ~配合num_worker_per_gpu: 6可结合磁盘后端直接使用。二、图像超分数据集2.0 目录约定推荐用软链接把数据集根目录挂到datasets下ln -s xxx yyy。若你的目录结构不同需要相应修改配置文件中的路径。2.1 DIV2KDIV2K 是图像超分中最广泛使用的数据集。需要说明的是许多研究工作假设 MATLAB 双三次下采样核但该核并不是真实场景隐含退化核的良好近似针对这一差距的课题即盲复原blind restoration。准备步骤下载数据从 DIV2K 官网下载训练/验证集800 张训练 100 张验证。裁剪子图Crop to sub-imagesDIV2K 是 2K 分辨率例如 2048×1080而训练 patch 通常较小常见 128×128 或 192×192。若每次读取整图却只用一小部分会浪费 IO因此先把 2K 图裁剪成带重叠的 480×480 子图子图尺寸与配置文件中的训练 patch 尺寸gt_size是两回事480×480 子图存盘后训练时由 dataloader 再随机裁剪出gt_size × gt_size的 patch。运行脚本 extract_subimages.pypython scripts/data_preparation/extract_subimages.py使用前需修改脚本内的路径与配置。从源码看脚本对四个文件夹HR、X2、X3、X4分别设置裁剪参数n_thread20多进程并行、compression_level3控制 PNG 压缩级别各尺度的crop_size/step保持与 HR 相同的重叠比例文件夹crop_sizestepDIV2K_train_HR480240DIV2K_train_LR_bicubic/X2240120DIV2K_train_LR_bicubic/X316080DIV2K_train_LR_bicubic/X412060子图命名规则为{原名}_s{序号:03d}.png脚本会先去掉文件名中的 x2/x3/x4/x8 标记这正好对应 1.4 节 meta 信息示例中的0001_s001.png。可选制作 LMDBpython scripts/data_preparation/create_lmdb.py --dataset DIV2K使用其中的create_lmdb_for_div2k函数并按需修改路径与配置。测试 dataloader运行仓库自带的数据集测试脚本验证读写正常注意先按本机路径修改脚本内配置test_paired_image_dataset.py、test_paired_image_dataset.py。可选生成 meta_info_file若下游需要使用meta_info_file运行python scripts/data_preparation/generate_meta_info.py生成。2.2 常见图像超分数据集一览仓库文档整理了常用图像超分数据集清单按用途分为经典训练集、经典测试集、2K 分辨率训练集与户外场景/复原基准类别数据集说明经典 SR 训练T9191 张训练图经典 SR 训练BSDS200BSD500 的训练子集经典 SR 训练General100100 张训练图经典 SR 测试Set5Set5 测试集经典 SR 测试Set14Set14 测试集经典 SR 测试BSDS100BSD500 的测试子集经典 SR 测试urban100100 张建筑图规则结构经典 SR 测试manga109109 张日本漫画图经典 SR 测试historical10 张无 GT 的灰色低分辨率图2K 分辨率DIV2KNTIRE17 提出800 训练 100 验证2K 分辨率Flickr2K2650 张 2K 训练图2K 分辨率DF2KDIV2K 与 Flickr2K 合并的训练集OST户外场景OST Training7 个类别的丰富纹理图像OST户外场景OST300300 张户外场景测试图复原基准PIRMPIRM 的 self-val / val / test 数据集这些数据集可从各数据集官网或项目提供的网盘Google Drive / 百度网盘获取下载后按 2.0 节的datasets目录约定组织即可。三、视频超分数据集3.1 REDSREDS 的官方划分将 train/val 分开存放而 BasicSR 的做法是将训练与验证数据合并到同一文件夹原始训练集含 240 个 clip编号 000–239脚本把验证 clip 重命名为 240–269。验证集划分官方验证划分与 EDVR 比赛用划分不同名称clips总数REDSOfficial[240, 269]30 clipsREDS4原训练集中的 000、011、015、020 四个 clip4 clips其余 clip 全部用于训练。注意不需要显式分离训练/验证集dataloader 会自动完成这件事。仓库内的元信息文件也印证了两种划分方式并存meta_info_REDS_GT.txt、meta_info_REDS4_test_GT.txt 与 meta_info_REDSofficial4_test_GT.txt 分别对应完整集合与两种测试划分。准备步骤从 REDS 官网下载数据train_sharp、val_sharp、train_sharp_bicubic/X4、val_sharp_bicubic/X4合并 train/val 数据python scripts/data_preparation/regroup_reds_dataset.py。从 regroup_reds_dataset.py 源码看它对train_sharp←val_sharp与train_sharp_bicubic/X4←val_sharp_bicubic/X4分别执行把 val 目录下每个 clip 文件夹的编号加 240 后复制到 train 目录cp -r原 val 目录保留可选制作 LMDBpython scripts/data_preparation/create_lmdb.py --dataset REDS对应create_lmdb_for_reds记得修改路径与配置测试 dataloader运行 test_reds_dataset.py按实际路径修改其中的配置。3.2 Vimeo90K准备步骤下载数据下载官网提供的 The original training test set (82GB)vimeo_septuplet.zip即 Ground-Truth 数据压缩包内有sep_trainlist.txt用于区分训练样本生成低分辨率图像Vimeo90K 测试集的低分辨率图使用 MATLAB 双三次下采样核生成。运行 generate_LR_Vimeo90K.m在 MATLAB 中执行生成 LR 帧文档中标注此处仍有 TODO可结合仓库提供的测试配置核对生成结果可选制作 LMDBpython scripts/data_preparation/create_lmdb.py --dataset Vimeo90K对应create_lmdb_for_vimeo90kGT 只入库每段第 4 帧按实际修改路径与配置测试 dataloader运行 test_vimeo90k_dataset.py按实际路径修改配置。四、StyleGAN2 训练数据集FFHQBasicSR 支持 StyleGAN2 人脸生成训练训练数据采用 FFHQ 数据集推荐直接下载其 tfrecords 版本读取 tfrecords 需安装 TensorFlow。准备步骤下载 FFHQ 的 tfrecords 文件将 tfrecords 解包为图像文件夹或LMDB脚本对每个分辨率单独建文件夹/LMDBpython scripts/data_preparation/extract_images_from_tfrecords.py相关配置可参考 train_StyleGAN2_256_Cmul2_FFHQ.yml 中的 dataroot 组织方式数据集读写可用 test_ffhq_dataset.py 验证。五、小结数据准备的完整检查清单环节命令/配置关键源码/脚本切换存储后端yamlio_backend.type: disk / lmdb / memcachedfile_client.py裁剪 DIV2K 子图python scripts/data_preparation/extract_subimages.pyextract_subimages.py合并 REDS train/valpython scripts/data_preparation/regroup_reds_dataset.pyregroup_reds_dataset.py生成 Vimeo90K LRMATLAB 运行 generate_LR_Vimeo90K.m—制作 LMDBpython scripts/data_preparation/create_lmdb.py --dataset {DIV2K,REDS,Vimeo90K}create_lmdb.py、lmdb_util.py生成 meta_infopython scripts/data_preparation/generate_meta_info.pygenerate_meta_info.py预读取加速yamlprefetch_mode: ~ / cuda / cpuprefetch_dataloader.py验证 dataloader运行 tests 目录下的对应测试脚本test_paired_image_dataset.py、test_reds_dataset.py、test_vimeo90k_dataset.py掌握以上内容后即可把硬盘数据、LMDB 或集群 Memcached 三种形态的数据接入 BasicSR 的训练流程先用仓库脚本完成下载 → 裁剪/重组 → 可选LMDB → 测试脚本验证的流水线再在 yaml 中通过io_backend与prefetch_mode两个旋钮调优数据吞吐。赞分享人工智能深度学习计算机视觉图像处理视频处理【免费下载链接】BasicSROpen Source Image and Video Restoration Toolbox for Super-resolution, Denoise, Deblurring, etc. Currently, it includes EDSR, RCAN, SRResNet, SRGAN, ESRGAN, EDVR, BasicVSR, SwinIR, ECBSR, etc. Also support StyleGAN2, DFDNet.项目地址https://gitcode.com/gh_mirrors/ba/BasicSR点击查看免费下载相关推荐BasicSR项目数据集准备全指南BasicSR项目数据集准备全指南 前言 在计算机视觉领域高质量的数据集是模型训练的基础。BasicSR作为一个功能强大的图像和视频超分辨率框架对数据集的准人工智能深度学习计算机视觉图像处理视频处理BasicSR项目数据集准备全指南BasicSR项目数据集准备全指南 前言 在图像和视频超分辨率研究领域高质量的数据集准备是模型训练的关键第一步。BasicSR作为一个功能强大的图像视频复原工人工智能深度学习计算机视觉图像处理视频处理Fashion-MNIST 服装图像基准数据集实战指南数据加载、自动基准测试与可视化Fashion MNIST 服装图像基准数据集实战指南数据加载、自动基准测试与可视化 本文以 Zalando 出品的 Fashion MNIST 数据集为讲解数据集机器学习深度学习上一篇Textual 样式指南使用 scrollbar-corner-color 定制横向与纵向滚动条交汇处的角落颜色下一篇Prometheus Operator监控医疗系统设备状态与患者指标创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考