智能体驱动的图像修复:基于感知-规划-执行框架的复杂退化处理
图像修复是计算机视觉中的基础任务,旨在从退化的图像中恢复出高质量的视觉内容。其核心原理在于通过算法模型对图像中的噪声、模糊、低照度等退化因素进行建模与逆处理。在工程实践中,传统方法通常针对单一退化类型设计专用模型,但在面对现实世界中多种退化并存的复杂场景时,固定流水线的处理方式往往效果有限。近年来,大语言模型驱动的智能体技术在序列决策与工具调用方面展现出强大潜力,为解决这一问题提供了新思路。通过构
1. 项目概述:当图像修复遇上智能体决策
在计算机视觉的低层任务领域,图像修复(Image Restoration)一直是个既经典又充满挑战的活儿。我们平时处理的,比如老照片去划痕、模糊照片变清晰、夜景照片提亮去噪,都属于这个范畴。传统方法或者早期的深度学习模型,通常针对单一类型的退化(比如只去噪或只去模糊)效果不错。但现实世界里的图片,往往是“祸不单行”——一张用旧手机在昏暗光线下抓拍的运动物体,可能同时存在 运动模糊、噪点、低照度 等多种问题。这时候,用一个固定的、单一任务的模型去处理,效果往往不尽如人意,甚至可能“按下葫芦浮起瓢”。
最近,大语言模型(LLM)驱动的智能体(Agent)在规划、决策和工具调用上展现出了惊人的潜力。那么,一个很自然的想法就来了:能不能让一个智能体来充当“图像修复工程师”?它观察一张复杂退化的图片,自主分析问题所在,然后规划一个合理的修复步骤序列(比如先做去模糊,再做去噪,最后增强色彩),并调用一系列专业的图像修复工具(即预训练好的单任务模型)来执行这个计划。这正是ICLR 2025的论文《AgenticIR》所探索的核心方向。它不再是一个端到端的黑箱模型,而是一个具备 感知、规划、执行、反思 能力的智能系统。今天,我就结合论文和开源代码,带大家深入拆解这个系统的设计思路、实现细节,并分享在复现和应用过程中可能遇到的“坑”以及解决技巧。
2. 核心设计思路:从“流水线”到“智能调度”
AgenticIR 的核心创新在于其 “智能体化” 的工作流。这与传统多阶段修复模型或简单的模型串联有本质区别。我们可以从两个层面来理解它的设计哲学。
2.1 问题定义与挑战
复杂图像修复的本质是一个 序列决策问题 。给定一张退化图像,目标是找到一组最优的图像处理操作(如 {去雨, 去模糊, 色彩增强} )及其执行顺序。这里的挑战在于:
- 组合爆炸 :多种基础修复操作(工具)排列组合,可能的序列数量巨大。
- 顺序依赖性 :操作的顺序至关重要。先增强对比度再去噪,可能会放大噪声;先去模糊再去雾,效果可能更好。最优顺序并非固定,而是依赖于输入图像的具体退化情况。
- 评估困难 :如何让智能体在没有真实干净图像(Ground Truth)参考的情况下,评估中间或最终结果的好坏?这需要一种可靠的、无需参考的感知评估能力。
2.2 智能体系统架构拆解
AgenticIR 的系统架构模仿了人类专家的决策过程,主要由四个模块构成一个闭环:
感知模块 :负责“看诊”。它使用一个经过微调的多模态大模型(论文中称为 DepictQA ),对输入图像进行视觉问答(VQA)。系统会向 DepictQA 提问一系列预设问题,例如“图像是否有运动模糊?”、“图像是否光照不足?”,从而生成一份对图像退化类型的 结构化诊断报告 。这份报告是后续所有决策的基础。
规划模块 :负责“开药方”。这是智能体的“大脑”。它接收感知模块的诊断报告,结合一个 经验知识库 ,推理出修复当前图像应该采取的操作序列。规划器本质上是一个策略函数,输入是当前状态(图像特征+诊断报告),输出是下一个要执行的最佳操作。这个策略是通过强化学习或从探索经验中蒸馏而来的。
执行模块 :负责“抓药”。它就是一个 工具库 ,里面存放着各种预训练好的、高性能的单任务图像修复模型,例如用于去模糊的 NAFNet ,用于去噪的 Restormer ,用于低光增强的 LLFlow 等。规划器发出指令后,执行模块就调用对应的工具模型对当前图像进行处理,得到中间结果。
评估与反思模块 :负责“复查疗效”。图像经过一个工具处理后,系统会再次调用感知模块(DepictQA)对处理后的图像进行评估,判断退化是否被消除、是否引入了新的伪影。这个评估结果一方面用于决定是否继续执行下一个操作(即进入下一轮“感知-规划-执行”循环),另一方面也会作为经验存储到知识库中,用于优化未来的规划决策。
这个“感知 -> 规划 -> 执行 -> 评估 -> 再感知”的循环,构成了一个自主的、迭代的修复工作流,直到系统认为图像质量已达到满意标准或达到最大操作步数为止。
3. 核心组件深度解析与实操要点
理解了宏观框架,我们再来深入看看几个关键组件的实现细节,这是复现和应用的基石。
3.1 DepictQA:系统的“眼睛”与“质检员”
DepictQA 是整个系统可靠性的关键。它不是一个通用的图像描述模型,而是专门为评估图像修复质量而微调的多模态VQA模型。
- 微调数据构建 :这是最大的工程难点。论文中提到,他们使用高质量的清晰图像,通过模拟多种退化过程,生成“退化-清晰”图像对。然后,针对每一对图像,人工或半自动地生成一系列问答对。例如,对于一张有模糊的图片,问题可能是“这张图片看起来模糊吗?”,答案标签是“是”。对于处理后的清晰图片,同样的问题,答案标签应为“否”。这些问答对覆盖了所有关心的退化类型。
- 模型选型与训练 :通常基于开源的、强大的VLM架构进行微调,例如 LLaVA 或 Qwen-VL。微调的目标是让模型能精准理解与图像质量相关的抽象概念(如“模糊”、“噪声”、“色彩失真”),并做出二分类或程度判断。
- 实操注意点 :
提示:在自行构建微调数据时,退化模拟的强度要尽可能贴近真实分布。过于简单或极端的合成数据,会导致 DepictQA 在真实图像上表现不佳。建议混合使用公开的退化数据集(如
GoPro用于运动模糊,SIDD用于噪声)的合成方法。
3.2 经验引导的规划器:系统的“大脑”
规划器如何学会制定正确的修复序列?论文提出了 “探索-提炼” 的学习范式,这是系统能工作的核心逻辑。
- 经验探索 :系统在一个由大量合成复杂退化图像构成的环境中进行“试错”。对于每一张图像,规划器(初始可能是随机策略)会生成一个修复序列并执行,最终得到一个修复后的图像。
- 经验评估 :使用 DepictQA 和其他的无参考图像质量评估指标(如
NIQE,MANIQA)来评估修复前后的质量变化,从而为这次“探索”打分。例如,如果序列[去雾, 去模糊]让图像质量评分提升了20分,而[去模糊, 去雾]只提升了5分,那么前者就是一个更好的经验。 - 知识蒸馏 :收集了海量的
(退化图像, 修复序列, 质量增益)三元组经验后,这些数据被用来训练一个 序列预测模型 。这个模型的输入是退化图像的特征(或DepictQA的诊断报告),输出是预测的最佳修复操作序列。它本质上是从探索产生的“状态-动作-奖励”数据中,蒸馏出了一个稳定的、高效的决策策略。
- 技术选型思考 :规划器可以是一个简单的多层感知机(MLP),也可以是一个序列模型(如Transformer)。如果修复操作序列较短,MLP可能足够;如果考虑更长的、可变长度的规划,Transformer编码器可能更合适。论文中似乎采用了基于图像特征直接预测序列的方式。
- 实操心得 :
探索阶段非常耗时,因为涉及大量前向推理。务必确保你的工具库(执行模块)的每个模型都处于
eval()模式,并尽可能使用半精度(fp16)推理,以加速探索过程。可以考虑先在一个小的图像子集上完成探索和蒸馏的完整流程,验证学习机制是否生效,再扩展到全量数据。
3.3 工具库构建:系统的“工具箱”
执行模块的工具库需要精心挑选和准备。
- 工具选择原则 :
- 高性能 :每个单任务模型都应该是该任务上SOTA或接近SOTA的,确保基础能力过硬。
- 兼容性 :所有模型的输入输出格式应尽量统一(如
RGB图像,值域[0, 1]或[0, 255]),避免在工具调用链中频繁进行数据转换。 - 效率 :考虑到智能体可能需要多次调用,模型不宜过于庞大和缓慢,需要在效果和速度间取得平衡。
- 一个典型的工具库可能包含 :
DeblurringTool: 基于NAFNet或MPRNet。DenoisingTool: 基于Restormer或SwinIR。LowLightEnhancementTool: 基于LLFlow或Zero-DCE。DehazingTool: 基于FFANet或MSBDN。DerainingTool: 基于PreNet或RCDNet。
- 实操踩坑记录 :
不同模型预训练时使用的数据归一化方式可能不同(有的用
ImageNet的均值和标准差,有的用自定义的)。在封装成工具时,必须将输入图像预处理成该模型期望的格式,并将输出后处理回统一格式。建议为每个工具类编写一个标准的__call__(image)方法,内部处理好所有预处理和后处理逻辑,对外提供一致的接口。
4. 完整工作流实现与代码级详解
让我们结合开源代码的框架,梳理一遍从环境搭建到推理的完整流程。项目结构通常如下:
AgenticIR/
├── config.yml # 配置文件,存放API密钥、路径等
├── dataset/ # 数据合成脚本
├── exploration/ # 探索经验相关代码
│ ├── exhaust_seq.py # 生成探索序列
│ ├── explore.py # 执行探索,积累经验
│ └── distill.py # 蒸馏经验,训练规划器
├── pipeline/
│ └── infer.py # 推理入口
├── src/
│ ├── agent/ # 智能体核心类定义
│ ├── tools/ # 工具库封装
│ ├── perceiver/ # DepictQA 封装
│ ├── planner/ # 规划器模型定义
│ ├── app_eval.py # 评估应用
│ └── app_comp.py # 对比应用
└── installation/ # 安装和微调说明
4.1 环境配置与依赖安装
根据 INSTALL.md ,第一步是创建环境并安装依赖。通常需要 Python 3.8+ , PyTorch 1.12+ 以及对应的 CUDA 工具包。
# 克隆项目
git clone https://github.com/Kaiwen-Zhu/AgenticIR.git
cd AgenticIR
# 创建并激活conda环境(推荐)
conda create -n agenticir python=3.9
conda activate agenticir
# 安装PyTorch (请根据你的CUDA版本到官网选择命令)
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# 安装项目依赖
pip install -r requirements.txt
关键依赖解析 :
transformers,accelerate: 用于加载和运行 DepictQA(通常是基于 Transformer 的 VLM)。opencv-python,Pillow: 基础图像处理。scikit-image,numpy: 图像计算和数组操作。tqdm: 进度条显示。- (可能还有)
einops,timm: 某些修复模型会用到。
4.2 数据准备:合成复杂退化图像
为了训练规划器,我们需要一个包含各种复杂退化组合的图像数据集。项目提供了合成脚本。
- 准备高清图像和深度图 :将高清无损图像放入
dataset/HQ/,对应的深度图(用于模拟景深模糊等依赖深度的退化)放入dataset/depth/。论文使用了MiO100数据集。 - 配置退化组合 :文件
dataset/degradations.txt定义了要合成的退化类型序列,例如一行“motion_blur defocus_blur low_light”表示依次施加运动模糊、散焦模糊和低光照退化。 - 运行合成脚本 :
脚本会读取python -m dataset.synthesizeHQ/下的每张图,根据degradations.txt中的每一行组合,依次调用dataset/add_single_degradation.py中对应的退化函数,生成最终的复杂退化图像,并可能保存中间结果和退化参数。
深度技术细节 :
add_single_degradation.py中的每个退化函数都应尽可能真实。例如:- 运动模糊 :使用随机生成的点扩散函数(PSF)进行卷积。
- 高斯噪声 :添加与信号强度相关的噪声。
- JPEG压缩伪影 :使用不同质量因子进行编码再解码。
- 低光照 :模拟光子散粒噪声和相机读出噪声的联合效应。
- 合成数据的质量直接决定了智能体所学经验的泛化能力。建议仔细审查合成图像的视觉效果,确保其与真实场景的退化相似。
4.3 核心学习阶段:探索与知识蒸馏
这是整个项目最耗资源但也最核心的部分。
阶段一:生成探索空间
python -m exploration.exhaust_seq
这个脚本可能负责枚举所有可能的修复操作序列(或采样一个子集),并为每张合成退化图像分配一些待尝试的序列,生成一个任务列表。
阶段二:执行探索,积累经验
python -m exploration.explore
这个脚本是重头戏。它会:
- 加载一张退化图像和分配给它的一个修复序列。
- 初始化智能体,按序列顺序调用工具执行修复。
- 每执行一步,调用 DepictQA 评估当前图像状态。
- 序列执行完毕后,计算整个序列带来的 累计质量增益 (如最终评估分减去初始评估分)。
- 将
(图像特征/诊断报告, 修复序列, 累计质量增益)保存为一条经验数据。 这个过程会遍历大量图像和序列,产生一个庞大的经验数据集。
阶段三:蒸馏经验,训练规划器
python -m exploration.distill
这个脚本读取探索阶段积累的经验数据,将其转化为监督学习的数据集来训练规划器模型。
- 输入 :可以是图像的深度特征(通过某个CNN提取),也可以是DepictQA生成的文本诊断报告的嵌入向量。
- 输出 :一个修复操作序列(可能被建模为多标签分类或序列生成任务)。
- 损失函数 :通常使用最大似然估计,让模型预测的序列概率与高质量增益的经验序列相匹配。也可以考虑用强化学习的思想,将质量增益作为奖励来微调模型。
4.4 推理阶段:见证智能体工作
当规划器训练好后,就可以对新的图像进行修复了。
- 配置 :在
config.yml中填入你的 DepictQA 模型路径和 API 密钥(如果需要调用云端VLM)。 - 运行推理 :
在python -m pipeline.infer --input_path /path/to/your/degraded_image.jpg --output_path ./restored_result.jpginfer.py脚本内部,会进行如下循环:
你可以观察到智能体一步步分析问题、选择工具、改善图像的过程,这比直接得到一个最终结果更有趣,也更具可解释性。# 伪代码示意 agent = Agent(perceiver, planner, tool_kits) current_image = load_image(input_path) max_steps = 5 # 最大操作步数 for step in range(max_steps): # 1. 感知 diagnosis = agent.perceive(current_image) # 2. 规划 (规划器根据当前状态决定是否停止或执行下一个操作) action, should_terminate = agent.plan(current_image, diagnosis) if should_terminate: break # 3. 执行 current_image = agent.execute(action, current_image) # 4. 评估(内嵌在感知或规划中) save_image(current_image, output_path)
5. 复现与应用中的常见问题与排查技巧
在实际操作中,你可能会遇到以下典型问题:
5.1 DepictQA 评估不准
- 现象 :智能体做出的决策很荒谬,比如对一张清晰图像仍然执行去模糊操作。
- 排查 :
- 单独测试 DepictQA :编写一个简单的测试脚本,输入清晰和模糊的图片,看它是否能正确回答“这张图模糊吗?”。如果不行,问题出在微调不充分或数据质量上。
- 检查问题模板 :确保推理时提问的方式和微调时完全一致。VLM对问题措辞比较敏感。
- 确认输入格式 :检查输入给 DepictQA 的图像尺寸、颜色空间(RGB)、数值范围是否与训练时一致。
5.2 规划器学习失败
- 现象 :训练后规划器预测的序列总是固定或随机,修复效果没有提升。
- 排查 :
- 检查经验数据 :查看
explore阶段生成的经验文件。确认“质量增益”字段是否有合理的区分度(好的序列增益高,坏的序列增益低或为负)。如果所有增益都差不多,说明评估模块(DepictQA)失效或退化合成太简单/太难。 - 简化任务 :先从极简环境开始,比如只使用2种退化(模糊、噪声)和2个工具,确保智能体在这个小环境下能学会正确顺序(通常先去模糊再去噪)。
- 可视化决策过程 :在推理时,打印出每一步的感知诊断结果和规划器选择的动作,观察其决策逻辑是否合理。
- 检查经验数据 :查看
5.3 工具链处理导致图像劣化
- 现象 :经过多步处理后的图像,虽然某些退化被移除,但出现了颜色失真、过度平滑或伪影。
- 排查 :
- 隔离测试每个工具 :单独用每个工具处理其专长任务(如只用去模糊工具处理模糊图),检查输出是否正常。可能某个工具模型本身在特定情况下就不稳定。
- 检查数据流 :确保图像在工具间传递时,数值精度(
float32)和范围([0, 1])没有发生意外的截断或缩放。工具A的输出可能需要归一化后才能作为工具B的输入。 - 顺序敏感性 :这本身就是研究点。如果发现某种顺序总导致劣化,可以将这个“坏经验”加入到探索数据中,让规划器学习避免它。
5.4 运行速度过慢
- 现象 :处理一张图片需要数十秒甚至几分钟。
- 优化技巧 :
- 模型轻量化 :考虑为工具库中的模型寻找更轻量的版本,或使用模型剪枝、量化技术。
- 缓存感知结果 :在一次循环中,同一张图像的感知结果(DepictQA输出)可以被缓存和复用,避免重复调用耗时的VLM。
- 并行化探索 :
explore阶段可以很容易地并行化,因为每张图片的探索是独立的。使用torch.distributed或多进程库来加速。 - 使用更快的评估器 :在探索阶段,如果DepictQA太慢,可以考虑先用一个轻量级的无参考图像质量评估算法(如
NIQE)进行初筛,只在关键节点使用DepictQA进行精细评估。
5.5 泛化到真实图像效果下降
- 现象 :在合成数据上表现良好的智能体,处理真实手机拍摄的复杂退化图片时效果不佳。
- 解决思路 :
- 数据域的鸿沟 :合成退化与真实退化存在差异。尝试在合成数据中加入更多样化、更不可控的噪声和模糊模型,或引入少量真实退化数据到训练中。
- 感知模块增强 :在微调 DepictQA 时,加入一些真实退化图像的问答对,提升其对真实世界退化的判断力。
- 在线适应 :可以让智能体在推理时,对当前输入的真实图像进行极少量步骤的“元探索”(例如,随机尝试两三种短序列,看哪个开头效果最好),用实时反馈微调本次推理的决策倾向。
这个项目将前沿的大模型智能体思想与扎实的低层视觉任务相结合,为我们提供了一个非常新颖且强大的图像处理框架。它的价值不仅在于其修复效果,更在于其 可解释、可迭代、可学习 的决策过程。复现整个过程虽然需要投入相当的计算资源和工程精力,但对于深入理解智能体在感知-决策任务中的应用,以及如何构建一个鲁棒的、自动化的图像处理流水线,是一次极佳的实践。最大的体会是,系统的稳健性严重依赖于每一个组件(尤其是感知模块)的精度,任何一个环节的短板都会在闭环中被放大。因此,在构建类似系统时,采用“分而治之,逐个击破”的策略,确保每个子模块都达到较高的独立性能,是成功的关键。
更多推荐




所有评论(0)