轻量级文档图像清理实战:computervision-recipes 中基于感知损失的编解码模型解读与训练推理指南
计算机视觉深度学习【免费下载链接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.项目地址https://gitcode.com/gh_mirrors/co/computervision-recipes点击查看免费下载文档图像清理Document Image Cleanup的目标是给定一张带噪声的文档图像通过去除老化污渍、阴影、非均匀光照等噪声元素提升其可读性与可视质量。本文以 computervision-recipes 仓库中contrib/document_cleanup/light_weight_document_cleanup_ICDAR2021/目录下的官方实现为主体完整讲解其轻量级编解码卷积网络架构、VGG19 感知损失设计、训练数据生成与增强流程以及单图/整目录推理方法。读完本文你将掌握该 ICDAR 2021 方案的模型族M16/M32/M64、可复现的训练参数与端到端使用步骤。一、任务背景与核心思路智能手机让文档的数字化拍摄与分享变得非常容易但文档图像往往因老化、污渍或拍摄环境带来的阴影、非均匀光照等退化降低了可理解性。该方案聚焦于嵌入式/移动端场景下的文档图像清理——这类场景受限于设备的内存、能耗与延迟预算。为此作者提出一种轻量级编解码器结构的卷积神经网络用很低的网络容量去除文档图像中的噪声元素。为弥补低容量网络的泛化能力损失损失函数中引入了感知损失Perceptual Loss借助预训练深度 CNN 实现知识迁移。根据 README.md 中的记载与既有 SOTA 文档增强模型相比该系列模型在参数量上小 65–1030 倍、在乘加运算product-sum量上小 3–27 倍从而在资源占用与精度之间取得有利的权衡。该工作发表于 ICDAR 2021Dey, Soumyadeep Jawanpuria, Pratik引用信息完整保存在 README.md 中InProceedings{10.1007/978-3-030-86334-0_16, authorDey, Soumyadeep and Jawanpuria, Pratik, editorLlad{\o}s, Josep and Lopresti, Daniel and Uchida, Seiichi, titleLight-Weight Document Image Cleanup Using Perceptual Loss, booktitleDocument Analysis and Recognition -- ICDAR 2021, year2021, publisherSpringer International Publishing, addressCham, pages238--253, isbn978-3-030-86334-0 }二、环境依赖与目录结构2.1 依赖清单README.md 的 Setup 一节明确给出了运行环境要求其中 TensorFlow 2.4 为训练与推理的核心框架依赖版本python3.7numpy1.16opencv4.2skimage0.17tensorflow2.4albumentations未固定版本用于数据增强tqdm未固定版本用于进度显示scikit-learn未固定版本用于训练/验证集切分2.2 关键文件DocumentCleanup_ICDAR2021.ipynbREADME 官方推荐的训练与测试示例覆盖训练 → 单图推理 → 整目录推理全流程model.py全部网络结构定义loss_function.py感知损失与光照损失实现CreateTrainingData.py训练块block生成与在线增强train.py 与 sample_train.py训练入口infer.py单图与整目录推理utils.py重叠分块、拼接、缩放等图像工具函数dataset/sample_data/与dataset/sample_gt_data/随仓库提供的样例训练数据image_42.png、image_56.png及对应真值ground-truth。三、网络架构M16 / M32 / M64 模型族所有模型均定义在 model.py 中核心基础单元是res_net_blockmodel.py#L9-L16连续两层Conv2D(filters, 3x3, relu6, paddingsame, kernel_initializerhe_normal)BatchNormalization再通过Add()与输入相加并接relu6激活构成残差块。3.1 模型变体一览通过统一入口GetModel(model_name, gray, block_size, batch_size)model.py#L207-L223按名称实例化共 6 种组合模型名通道演进Conv 滤波数输出通道输出策略M16_gray16 → 16×5 个残差块 → 161灰度输入经rgb_to_grayscale后与残差输出相加再经 sigmoidM16_color16 → 16×5 个残差块 → 163与原始 RGB 输入相加后 sigmoidM32_gray16 → 32 → 32×5 个残差块 → 32 → 161灰度分支相加后 sigmoidM32_color16 → 32 → 32×5 个残差块 → 32 → 163RGB 分支相加后 sigmoidM64_gray16 → 32 → 64 → 64×5 个残差块 → 64 → 32 → 161灰度分支相加后 sigmoidM64_color16 → 32 → 64 → 64×5 个残差块 → 64 → 32 → 163RGB 分支相加后 sigmoid3.2 关键设计点残差学习残差以 M16 灰度模型为例CreateModel_M16_binarymodel.py#L22-L44网络并不直接输出清理后的像素而是学习输入与干净输出之间的残差映射最后通过layers.add([gray_in, out])把残差加回灰度输入再经sigmoid归一化到 [0,1]。这使得网络容量需求大幅降低。可迁移到任意输入尺寸input_shape默认(None, None, 3)配合paddingsame模型可接受任意宽高的图像实际训练/推理时以固定 block 尺寸切块送入。参数规模极小notebook 中打印的 M16Gray 模型model.summary()显示总参数仅26,885可训练 26,499、不可训练 386印证了轻量级的设计目标。灰度/彩色双分支gray_flagTrue时输出 1 通道适合二值化/灰度清理gray_flagFalse时输出 3 通道彩色结果。四、损失函数感知损失 光照损失IlluminationLossloss_function.py#L106-L154是该方案的核心它把 VGG19 感知损失与面向文档的光照损失组合在一起。4.1 感知损失Perceptual Loss实现细节位于Compute_PLossloss_function.py#L79-L104加载tf.keras.applications.VGG19(include_topFalse, weightsimagenet)预训练权重并冻结vgg.trainable False用于从预测图与真值图中提取深层特征内容损失取block2_conv2层特征图的 L1 距离风格损失取block1_conv1至block5_conv1五个层的 Gram 矩阵gram_matrixloss_function.py#L14-L18的 L1 距离最终PLoss style_loss * style_weight / num_style_layers content_loss * content_weight / num_content_layers。以预训练 VGG 作为特征提取器让低容量清理网络在高维语义/纹理空间上对齐输入输出即 README 所述知识迁移。4.2 灰度模式损失当gray_flagTrue时总损失为loss PLoss 1e2 * mean(|gray_gt - y_out|)即感知损失加上 100 倍加权的灰度空间像素级 L1 损失保证逐像素保真。4.3 彩色模式损失当gray_flagFalse时在感知损失之外还叠加了多项颜色空间损失loss_function.py#L123-L154RGB 损失三个通道的 L1 距离之和权重 1e2Hue 损失将输出转 HSV对 H 通道计算 L1 距离代码中被注释可通过取消注释启用Luminance 损失将输出转 YUV对 Y 通道计算 L1 距离同样默认为注释状态默认激活项为PLoss rgb_lossy_loss/hue_loss作为可选的补充组合。illu_Loss(style_weight, content_weight, gray_flag)loss_function.py#L156-L159是返回闭包的工厂函数用于向model.compile(loss...)注入自定义损失。五、训练数据生成与增强5.1 样例数据集仓库随附两个样例数据目录dataset/sample_data/image_42.png、image_56.png两张带退化输入图dataset/sample_gt_data/同名干净真值图。训练时以data_foldersample_data、gt_foldersample_gt_data传入两目录下文件需同名一一对应GetData中按gt name拼接真值文件名见 train.py#L55-L69。5.2 训练块生成GenerateTrainingBlocksCreateTrainingData.py#L34-L137将每张训练图按三种尺度[0.7, 1.0, 1.4]缩放ImageResizeLanczos 插值再通过GetOverlappingBlocks(..., Part8)切成 256×256 的重叠块随后对每张图随机抽取len(blocks)/5个随机位置块。全部块以block_N.png/gtblock_N.png写入dataset_path/data_folder_Trainblocks/并把文件名列表写入train_block_names.txt。5.3 在线数据增强随机块在保存前经过 albumentations 组合增强CreateTrainingData.py#L16-L30模拟真实拍摄退化增强组具体算子概率噪声/压缩ISONoise(p0.4) 或 JpegCompression(quality 50–70, p0.8)0.6模糊MotionBlur(≤10)、MedianBlur(3)、GaussianBlur(≤7)0.8光照RandomBrightnessContrast(±0.3) 或 RandomShadow(1–18 个阴影)0.8每个随机块仅对输入施加退化真值块保持不变从而构建退化输入 → 干净真值的监督信号。六、模型训练6.1 训练入口直接运行 sample_train.py 即可启动样例训练from train import train data_folder sample_data gt_folder sample_gt_data batch_size 21 train(data_folder, gt_folder, dataset_pathdataset, checkpointcheckpoints, train_batch_sizebatch_size)train()定义于 train.py#L97-L162其关键参数及默认值如下参数默认值说明data_folder必填退化输入图所在子目录位于dataset_path下gt_folder必填真值图所在子目录dataset_pathdataset数据集根目录checkpointcheckpoints模型 JSON 与权重保存目录epochs10训练轮数pretrain_flagFalse是否用预训练权重初始化pretrain_model_weight_pathNone预训练权重文件路径如checkpoints/M16_dibco13_epoch-958.hdf5model_nameM32可选M16/M32/M64gray_flagTrueTrue输出单通道灰度False输出三通道彩色block_size(256, 256)模型输入块尺寸train_batch_size1训练 batch size6.2 训练流程要点数据切分train_test_split(..., test_size0.2, random_state1)将生成的块按 8:2 划分训练/验证集数据加载My_Custom_Generatortrain.py#L71-L95继承tf.keras.utils.Sequence逐 batch 读取并ImageResizeSquare缩放、BGR2RGB转色模型与优化器GetModel(model_name, gray, block_size)构建网络Adam优化器lossillu_Loss(style_weight1e-1, content_weight1e1, gray_flag...)编译train.py#L125-L128回调TensorBoard 日志写入logs/scalars/时间戳/ModelCheckpoint依据val_loss保存最优权重权重文件命名形如模型名_gray/color_data_folder_epoch-{epoch:02d}.hdf5模型结构持久化训练前将model.to_json()写入checkpoints/模型名_gray.json或_color.json供推理阶段反序列化使用硬件设置train.py顶部通过os.environ[CUDA_VISIBLE_DEVICES]0指定 GPU并启用tf.config.experimental_run_functions_eagerly(True)便于调试多卡场景可参照注释改用MirroredStrategy。notebook 中的样例训练调用以 M16 为例含预训练权重初始化model_name M16 train(data_folder, gt_folder, dataset_pathdataset, checkpointcheckpoints, epochs1, gray_flagTrue, model_namemodel_name, pretrain_flagTrue, pretrain_model_weight_pathcheckpoints/M16_dibco13_epoch-958.hdf5)notebook 运行日志显示2 张样例图经多尺度分块共生成496 个训练块验证了小数据 分块 增强的可行性。七、推理单图与整目录推理实现在 infer.py 中分为两个入口。7.1 单张图片推理infer_imagefrom infer import infer_image test_img_name dataset/sample_data/image_56.png out_img_name test_out1.jpeg infer_image(checkpoints/M16_gray.json, checkpoints/M16_gray_sample_data_epoch-01.hdf5, test_img_name, out_img_name)流程读取模型 JSON →model_from_json(loaded_model_json, custom_objects{relu6: tf.nn.relu6, convert2gray: convert2gray})重建结构infer.py#L31-L35→load_weights载入权重 → 将整图按 256×256、Part8重叠切块 → 逐块model.predict→CombineToImage拼接并对重叠区域取均值utils.py#L69-L102消除块边缘拼接痕迹。输出通道为 1 时按灰度写 PNG为 3 时RGB2BGR转回 OpenCV 颜色空间。7.2 整目录推理inferfrom infer import infer input_dir dataset/sample_data out_dir sample_out_data infer(checkpoints/M16_gray.json, checkpoints/M16_gray_sample_data_epoch-01.hdf5, input_dir, out_dir)infer()infer.py#L31-L72遍历目录内所有图像文件以tqdm显示进度逐张执行与单图相同的分块推理并将结果以原文件名的.png形式写入save_out_dir。7.3 样例输入/输出仓库的sample_input_output/目录提供了真实对比示例除上文书页book外还有演示文稿页pres1_org.jpg/pres1_dnn.jpg与单据bill_org.jpg/bill_dnn.jpg输入图带有拍摄噪声、阴影与非均匀光照清理后纸张底色恢复干净、文字与手写内容保持清晰。八、端到端复现路径小结在 DocumentCleanup_ICDAR2021.ipynb 中官方给出了完整的一站式示例可归纳为四步按 README.md 依赖清单安装环境Python 3.7 TensorFlow 2.4 等将dataset/sample_data/与dataset/sample_gt_data/作为输入与真值目录调用train()可选pretrain_flagTrue加载预训练权重加速收敛训练结束后在checkpoints/获得模型名_gray|color.json与..._epoch-XX.hdf5权重通过infer_image()或infer()对单张图片或整个目录完成清理并保存为 PNG 输出。整套方案从轻量残差编解码结构、感知损失约束、退化模拟增强到重叠分块推理为端侧文档增强类任务提供了一条完整的、可复现的工程路径需要进一步阅读源码细节时可重点对照 model.py、loss_function.py 与 utils.py 三个核心实现文件。赞分享计算机视觉深度学习【免费下载链接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.项目地址https://gitcode.com/gh_mirrors/co/computervision-recipes点击查看免费下载相关推荐AutoGen.NET 实战使用 OpenAIChatAgent 连接 Ollama 等第三方 OpenAI 兼容 APIAutoGen.NET 实战使用 OpenAIChatAgent 连接 Ollama 等第三方 OpenAI 兼容 API 本文基于 AutoGen 仓库中的人工智能AI AgentAgent 框架多智能体大模型工具调用Campus-iMaoTai智能茅台自动预约系统的完整部署与使用指南Campus iMaoTai智能茅台自动预约系统的完整部署与使用指南 还在为每天手动抢购茅台而烦恼吗Campus iMaoTai是一款基于Java开发的智能后端前端任务调度工作流自动化如何用AutoTrain Advanced训练图像超分辨率模型多尺度损失与感知损失结合的终极指南如何用AutoTrain Advanced训练图像超分辨率模型多尺度损失与感知损失结合的终极指南 AutoTrain Advanced是一款功能强大的开源工具机器学习深度学习NLP计算机视觉微调后端上一篇AngularFire 开源项目实战指南下一篇Camel-5B API开发指南快速构建智能聊天助手和内容生成应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Midway 生命周期指南:从配置加载到优雅关闭的完整实践

Midway 生命周期指南:从配置加载到优雅关闭的完整实践

后端微服务云原生 【免费下载链接】midway 🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate w…

2026/10/11 7:50:36 阅读更多 →
CSP 2019 第三题:纪念品

CSP 2019 第三题:纪念品

CSP 2019 第三题:纪念品 题目链接 题目: 题意: 数据给出能预测的天数,纪念品种类,持有金币。每天对金币进行买卖,求买卖后的金币最大值(如何赚得更多) 知识点考: 动态规划…

2026/10/9 14:27:30 阅读更多 →
PhysX刚体系统深度解析:从Actor到Shape

PhysX刚体系统深度解析:从Actor到Shape

PhysX 中,一个“物理对象”通常不是单独的类,而是几个对象共同组成的: Actor:物理身份与运动状态│├─ Shape:碰撞形状实例│ ├─ Geometry:几何描述│ ├─ Material:摩擦、恢复系数│ ├─ Local Pose:相对 Actor 的位姿│ └─ Filter / Flags:碰撞…

2026/10/10 9:55:22 阅读更多 →

最新新闻

AutoCAD各版本怎么装?从PDF清单到安装验证的实操指南

AutoCAD各版本怎么装?从PDF清单到安装验证的实操指南

简介:这是一份AutoCAD各版本下载地址汇总手册,面向需要安装或升级AutoCAD的设计、制图与工程类用户。文档按32位与64位系统分门别类,整理了从AutoCAD 2000到2013的绿色版、精简版、中文破解版及对应补丁,并注明各版本适合的系统环…

2026/10/11 15:50:16 阅读更多 →
MBD三维模型智能标注全指南:从数据集到公差避坑与组合视图管理

MBD三维模型智能标注全指南:从数据集到公差避坑与组合视图管理

简介:这是一份围绕基于MBD的三维模型智能标注技术的专业论文资料,针对传统二维工程图在信息传递中容易遗漏数据、影响设计意图理解的问题,给出基于三维实体模型数字化来完整表达产品信息的解决思路。内容系统介绍了MBD的起源与特点&#xff0…

2026/10/11 15:50:16 阅读更多 →
AutoCAD 2021实用教程:从环境设置到出图避坑的完整操作路径

AutoCAD 2021实用教程:从环境设置到出图避坑的完整操作路径

简介:面向AutoCAD初学者与希望系统提升绘图效率的工程技术人员,这份PDF教程以中文版AutoCAD2021为主题,从软件入门基础讲到简单二维图形绘制,覆盖界面组成、文件管理、命令与系统变量、参数设置等核心环节。资源为单个PDF文档&…

2026/10/11 15:50:16 阅读更多 →
金融级分布式数据库选型指南:安全可靠测评与厂商落地实践

金融级分布式数据库选型指南:安全可靠测评与厂商落地实践

简介:这份报告由沙利文联合头豹研究院发布,聚焦2024年中国金融级分布式数据库市场,面向金融行业从业者、数据库供应商、政策制定者、研究机构及投资者。内容涵盖行业发展背景、安全可靠测评名单分析、厂商技术动态与生态动态、市场容量与份额…

2026/10/11 15:50:16 阅读更多 →
Oracle SCN 与检查点机制详解:从 ORA-01555 到恢复优化

Oracle SCN 与检查点机制详解:从 ORA-01555 到恢复优化

简介:这份PDF资料聚焦Oracle数据库两大核心机制——SCN(System Change Number)与检查点(Checkpoint),面向已具备一定Oracle基础、希望深入理解数据库一致性读与崩溃恢复原理的DBA、开发人员及备考OCP的学习…

2026/10/11 15:50:16 阅读更多 →
AI写论文被标高AI率?从写作到修改的降痕实操指南

AI写论文被标高AI率?从写作到修改的降痕实操指南

最近用豆包、Kimi这类对话式AI辅助写论文的朋友,几乎都会撞上同一个尴尬:AI帮你把段落捋顺了、逻辑也理清了,结果往学校要求的检测系统里一丢,AI率直接飙到40%、50%,甚至更高。看着满屏标红的“疑似AI生成”&#xff0…

2026/10/11 15:49:16 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →