需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获取完整版:地址
图1. 给定一幅图像和提升图像的指令,我们的全能恢复模型通过人类指导纠正图像。InstructIR 能够处理各种类型和程度的降级,并在一些实际场景中实现泛化
图像恢复一直是计算机视觉领域中备受关注的问题,因为图像通常会因为多种原因而降级,包括噪声、模糊、雨滴等不良效果。这些降级会影响图像的质量,限制了图像在各种应用中的有效性。传统的图像恢复方法虽然在某些特定任务上表现不错,但它们往往对于多种不同类型的降级无法做到很好的泛化。随着深度学习的兴起,基于神经网络的图像恢复方法取得了显著的进展,但在处理多样化的降级仍然存在挑战。
在这个背景下,《High-Quality Image Restoration Following Human Instructions》提出了一种创新性的图像恢复方法,该方法采用人类编写的指令作为引导,引入了一种新颖的图像恢复思路。通过借助自然语言指令,该方法能够有效地从降级图像中恢复出高质量的清晰图像,涵盖了多种降级类型。这篇论文的研究不仅在图像恢复领域引起了广泛关注,同时也为文本引导图像处理任务提供了全新的思路。
为了更好地理解《High-Quality Image Restoration Following Human Instructions》的贡献,让我们首先了解图像恢复问题的背景。图像恢复涉及从降级图像中恢复出高质量的清晰图像,这是一个复杂的问题,因为同一张图像可能有多种不同的恢复方式。噪声、模糊、雨滴等降级效果常常是图像中不可避免的问题,尤其在低光等复杂环境条件下。传统的方法通常针对特定的降级类型设计,而深度学习方法则在多任务学习中表现出色,但仍然面临泛化到多种降级的挑战。
图像降级是指图像质量因各种原因而下降的过程,其效果可通过噪声、模糊、雨滴等多种降级类型来体现。噪声是图像中随机出现的不期而至的颜色或亮度变化,使图像失真。模糊通常由于图像的运动或光学系统导致,使图像细节不清晰。雨滴效应是在雨天拍摄图像时,雨滴遮挡部分图像内容,引起图像模糊和失真。
图像恢复旨在通过算法或模型还原被降级的图像,使其质量达到原始状态或接近原始状态。这是一个复杂的问题,因为同一张图像可能受到多种降级的影响,而每种降级都需要不同的处理方法。传统方法往往需要先验知识或任务特定的模型来处理特定类型的降级,而深度学习方法则试图通过端到端学习从降级图像中学到恢复映射。
在《High-Quality Image Restoration Following Human Instructions》中,研究者们关注了多种降级类型,包括但不限于:
噪声(Denoising): 由于环境或设备等原因引入的随机颜色或亮度变化。 模糊(Deblurring): 由于运动或光学系统等原因导致的图像细节不清晰。 去雨(Deraining): 针对雨滴效应,试图从雨天拍摄的图像中去除雨滴遮挡。 去雾(Dehazing): 针对雾霾效应,试图使雾化图像变得更加清晰。 低光增强(Low-light Image Enhancement): 针对低光条件下拍摄的图像,试图提高图像的亮度和可见度。 这些降级类型的综合处理是该论文的研究重点,为图像恢复问题带来了更全面的考虑。
图2.展示了我们采用常见图像数据集以及GPT-4生成的提示进行自监督学习的盲目图像恢复模型的训练过程。在推理阶段,我们的模型可以泛化到由人类编写的指令,并对图像进行恢复(或增强)处理
回顾先前的图像恢复方法,传统技术和深度学习方法各有优势。传统技术主要专注于特定的降级类型,如噪声去除、去模糊、去雨等,但其泛化能力较差。深度学习方法则在全局学习中获得了显著的性能提升,尤其是一些通用的 All-In-One 恢复模型。然而,训练每个具体任务的模型需要大量的资源,而全局模型在处理多样性降级时也面临一定的困难。
在图像恢复领域,传统方法主要依赖于先验知识和手工设计的特征。这些方法通常采用一些特定的模型或算法来处理特定类型的降级,如去噪、去雨、去雾等。虽然这些方法在某些场景下表现出色,但它们往往缺乏对多种降级类型的统一处理能力,需要针对不同问题使用不同的模型,因此在实际应用中存在一定的局限性。
随着深度学习的兴起,基于深度学习的图像恢复方法逐渐成为主流。这类方法通常采用卷积神经网络(CNNs)和注意力机制等深度学习技术,通过端到端的学习从降级图像中学到恢复映射。与传统方法相比,基于深度学习的方法具有更强的表达能力,能够处理复杂的非线性映射关系,取得了一系列显著的成果。然而,这些方法通常需要大量的标记数据和计算资源,且在处理多种降级类型时存在一定的困难。
近年来,为了更好地解决多降级类型的图像恢复问题,研究者们提出了 All-In-One 恢复模型。这些模型试图通过一个统一的深度学习模型来处理多种降级类型,如去噪、去雨、去雾等。这种综合处理的优势在于简化了模型的管理和部署,并提高了模型的通用性。然而,挑战也随之而来,包括模型的复杂性、资源需求较大以及在处理多降级时的性能表现等方面的问题。
在这一部分中,我们对传统方法和基于深度学习的图像恢复方法进行了回顾,并突出了 All-In-One 恢复模型的优势和挑战。在博客中,可以进一步介绍具体的传统方法和深度学习方法的代表性工作,以及它们在实际场景中的应用和局限性。
InstructIR 模型的提出为图像恢复领域带来了一种创新的思路。通过引入人类编写的指令,模型能够更好地理解用户对图像的期望,从而在多种降级类型中进行准确而高效的恢复。该模型的训练使用了 GPT-4 生成的一万多个自然语言提示,这些提示覆盖了七种不同的图像恢复任务,为模型提供了多样性的训练数据。模型的设计考虑了使用纯文本编码器和 NAFFNet 作为图像模型的高效性和简单性。
图4. 使用多任务学习的任务路由近似的指令条件块(ICB)
InstructIR 模型作为《High-Quality Image Restoration Following Human Instructions》中的重要创新,采用了一种独特的图像恢复方式。其基本原理是利用人类编写的指令来引导图像的恢复过程。相较于传统的图像恢复方法,InstructIR 摆脱了对大量标记数据和特定问题定制模型的束缚,使用户能够通过自然语言指令来精准控制图像的处理过程。
InstructIR 引入了人类编写的指令作为图像恢复的新型引导方式。通过使用 GPT-4 生成的多样性指令集,用户可以用自然语言明确指出图像中存在的降级类型,如噪声、模糊、低光等。这种方式使得模型更贴近用户需求,提高了用户的交互体验,同时也降低了用户在领域专业知识上的要求。
InstructIR 模型的训练过程主要分为两个关键步骤。首先,通过 GPT-4 生成了一个包含上万条不同指令的训练集。这些指令涵盖了多种降级类型和处理任务。其次,构建了一个庞大的配对训练集,其中包含了指令与对应降级/清晰图像的配对。模型的结构设计采用了 NAFNet 作为骨干网络,这是一种简单而高效的结构,特别适用于各种图像恢复任务。
4.3.1 训练策略
InstructIR 模型的训练过程涉及两个关键步骤,旨在确保模型具有对多样性指令的理解和对各种降级类型的适应性。通过使用 GPT-4 生成了一个庞大的指令集,包含上万种不同的指令。这些指令由模型自动生成,旨在涵盖多种降级类型和处理任务。这一步骤的目标是提供多样性和广泛性的指导,以使模型能够理解并应对用户提出的各种需求。其次,构建了一个大规模的配对训练集。这个训练集包含了指令与对应降级/清晰图像的配对。通过引入真实用户编写的指令,模型可以在更真实的场景中进行训练,确保模型对于用户输入的指令有更好的适应性。这个训练集的多样性确保了模型在不同任务和降级类型上的鲁棒性。
4.3.2 网络结构 InstructIR 模型采用 NAFNet 作为骨干网络。NAFNet 是一种高效而简单的结构,由一个 4 层的编码器-解码器组成,每个级别的块数量都有所不同。模型还包括 4 个中间块,用于进一步提取特征。在编码器和解码器之间使用 4 个中间块有助于加强特征的表达。此外,解码器中采用了加法而不是拼接的方式,以保持模型的简洁性。
4.3.3 指令生成的过程 指令生成是通过使用 GPT-4 模型实现的。在这一过程中,GPT-4 基于大规模的语言数据训练,生成多样性的自然语言指令。这些指令覆盖了多个领域,确保了用户可以通过各种方式表达对图像的期望。
指令引导在 InstructIR 模型中具有明显的优势。首先,通过采用人类编写的指令,模型更贴近用户需求,提高了用户的交互体验。用户无需了解专业的图像处理术语,只需通过自然语言简单地描述降级,即可得到满足期望的图像。其次,模型的高度通用性是指令引导的结果。由于模型在训练过程中接触了多样性的指令和任务,它能够很好地适应用户提出的各种需求。这种通用性使得 InstructIR 模型成为一种全能的图像恢复工具,可以在多个降级类型和任务上表现出色。
图5. 在五个图像恢复任务(5D)上的定量结果,与通用图像恢复和全能图像恢复方法的最新方法进行对比。我们突出显示没有文本(仅图像)的参考模型,最佳整体结果以及次优结果。同时,我们呈现了我们多任务变体的消融研究(从5到7个任务—5D、6D、7D)
通过广泛的实验,InstructIR 在多个图像恢复任务上取得了令人瞩目的成果。无论是在图像去噪、去雨、去雾、去模糊还是低光增强等方面,该模型都展现出了强大的性能。论文详细呈现了模型在不同任务和数据集上的定量和定性结果,证明了其在图像恢复领域的领先地位。
在实验设计方面,采用了一种创新的方式来进行图像恢复,即通过引入人类编写的指令来控制图像的恢复过程。为了训练模型生成了一组超过10000个指令,涵盖了7种不同的任务,为模型提供了多样性的训练数据。通过GPT-4生成的这些指令,模型能够理解用户对图像的期望,而无需额外的信息,如干净图像的示例或对图像内容的描述。这使得模型更易用,特别适用于缺乏领域专业知识的普通用户。
数据集的准备也是关键的一步。根据先前的工作使用了多个经典数据集,如BSD400、WED、Rain100L、Reside SOTS、GoPro、LOL、MIT5K等,来涵盖不同的图像恢复任务,包括去噪、去雨、去雾、去模糊、低光增强以及图像增强。将这些数据集结合起来,为多任务的图像恢复提供了充足的训练样本。
InstructIR 模型通过端到端的训练展现出令人瞩目的性能。模型无需预训练,只需使用预训练的语言模型作为文本编码器。对于文本编码器的选择,论文使用了 BGE-MICRO-V2 模型,这是一个经过蒸馏的 BERT-like 编码器,参数较小,约为1730万,保证了模型的高效性。同时,在图像模型方面,使用了 NAFNet,一个包含四个级别的编码器-解码器结构,通过 Instruction Condition Block (ICB) 实现任务路由。在训练过程中,通过 L1 损失和交叉熵损失进行优化,采用AdamW优化器,经过500个epoch的训练,模型在标准GPU上仅需几天即可完成。
InstructIR 在多任务图像恢复上展现了卓越的通用性。不同于传统方法和其他深度学习方法,InstructIR 的用户引导方式使得模型更灵活,能够处理各种复杂的降级情况。论文通过在不同的图像恢复任务上进行全面的定量和定性评估,证明了模型在去噪、去雨、去雾、去模糊、低光增强等方面的出色性能。
通过与其他先进的图像恢复方法进行比较,InstructIR 显著地超越了传统方法和深度学习方法。论文列举了对比实验结果,并强调了 InstructIR 的优越性。与其他 all-in-one 恢复模型相比,InstructIR 不仅在性能上更具竞争力,而且通过引入人类编写的指令,为用户提供了更为直观和可控的图像处理方式。这种与用户的交互方式使得 InstructIR 在处理不同降级时更具灵活性和精确性。
Description图6. 基于指令的图像恢复。InstructIR能理解给定任务的各种指令(第一行)。在给定对抗性指令的情况下(第二行),该模型执行一种身份操作—我们在训练期间没有强制执行这一点
对于多任务处理,InstructIR 模型采用 3D 和 5D 设置,成功处理了图像去噪、去雨、去雾、去模糊、低光等多种任务。论文对比了不同任务数下的性能,强调了模型在处理多任务时的有效性。引入了 6D 和 7D 变体,其中 7D 模型还包括图像增强任务,扩展了模型的多任务处理能力。 在研究中详细探讨了 InstructIR 模型在多任务处理方面的性能,强调了该模型的卓越通用性和灵活性。以下是对第六部分的更为详细的描述:
InstructIR 模型在不同降级任务上表现出色,为用户提供了强大的图像处理工具。通过引入人类编写的指令,模型能够成功还原图像中存在的各种降级,包括去雾、去雨、去模糊、低光增强等任务。论文通过详细的实验证明,InstructIR 通过指令引导的方式,能够精准地理解用户的意图,并根据指令进行图像恢复,为用户提供了更为精细和自由的图像处理体验。 这种多任务处理的能力使得 InstructIR 在不同应用场景下都能取得卓越的效果。无论用户面临的是雨天的模糊图像、低光条件下的暗淡图像,还是存在多种降级的复杂图像,InstructIR 都能够在一个统一的框架下完成任务。用户不再需要针对不同降级使用不同的模型,而是通过一套指令实现多任务处理,极大地提高了操作的便捷性。
Description图7.多个实际指令。 我们可以提示多个指令(按顺序)来恢复和增强图像。这提供了额外的控制。我们展示了两个多指令应用于“输入”图像的例子——从左到右
InstructIR 通过单一模型涵盖了多个任务,展示了其对多任务处理的高效性。传统的图像恢复方法往往是单一任务模型,需要分别训练。相较之下,InstructIR 利用指令引导实现了一种模型即可处理多任务的机制。这种高效性不仅提高了模型的通用性,还简化了用户在处理不同降级时的操作流程。
模型对多任务处理的有效性得益于指令引导的方式。用户通过简单而直观的指令告诉模型他们的期望,而模型则根据指令智能地调整自身参数,完成多样的任务。论文中的实验证明,InstructIR 不仅在每个具体任务上取得了优异的成绩,而且在处理多任务时,能够平衡各个任务之间的性能,不出现明显的性能下降。
通过引入3D和5D模型,论文进一步探讨了模型的扩展性和适应性。这两个模型涉及了更多的降级任务,展现了模型在处理复杂场景时的潜力。3D模型包括噪声去除、去雨、去雾等任务,而5D模型则包括噪声去除、去雨、去雾、去模糊、低光增强。
通过对它们在不同降级任务上的性能进行比较,可以看出模型的适应性和性能。这不仅为用户提供了更多选择,根据具体需求选取相应的模型,实现更精细化的图像处理,也为模型的未来发展提供了方向。这种灵活性和可选择性使得 InstructIR 在处理不同任务时更为全面,更贴近实际应用需求。InstructIR 在多任务处理上的性能表现,以及与其他模型的比较结果,充分展示了该模型在图像恢复领域的卓越性能和前景。通过引入人类编写的指令,实现了用户与模型之间的更直接、更智能的互动方式,为图像处理技术的未来发展指明了新的方向。
一项突出的优势是 InstructIR 模型的可解释性和用户交互性。通过人类编写的指令,用户可以更灵活地控制图像的恢复过程。论文提到了模型对于不同用户的适应能力,包括儿童、成年人和摄影师等,使得该模型在真实世界中更易于应用。
InstructIR 模型通过引入人类编写的指令,展现了其卓越的可解释性。模型不仅仅是被动地执行任务,更是能够理解用户的意图并相应地调整图像恢复过程。这种能力使得模型能够更加智能地处理图像,更好地满足用户的需求。通过深入分析InstructIR 模型不仅仅是简单地根据指令执行预定义任务,而是能够适应各种指令的语境,理解其中的信息,并作出相应的处理。这种解释和理解的能力使得模型在处理复杂任务时更具灵活性,能够更好地适应各种用户需求。
模型的可解释性与用户交互密不可分。通过引入用户编写的指令,实际上是在建立一种直接的人机交互方式,让用户参与到图像处理的决策过程中。用户可以通过指令传达他们的具体期望,引导模型完成更个性化、符合实际需求的图像恢复。这种用户交互方式不仅提高了用户参与感,也让图像处理不再是黑盒操作。用户可以通过指令直观地看到模型的响应,进而调整和优化指令,实现更满意的图像处理效果。这种直观的交互方式为用户提供了更大的自由度,使得图像处理更贴近实际需求。
InstructIR 模型对自然语言指令的高度适应能力。这包括儿童、成年人和摄影师等各个群体。模型能够理解不同群体的表达习惯,对于儿童友好且容易理解,对于成年人提供更专业的处理,对于摄影师能够理解更复杂的指令。这种广泛适应不同群体的特点使得 InstructIR 模型更具通用性和普适性。不同领域和经验的用户都可以通过自然语言指令来操作模型,而无需深入了解复杂的图像处理技术。这种用户友好的设计为模型的实际应用提供了更广泛的可能性。用户通过自然语言指令参与到图像恢复的过程中,为模型提供更多信息,使得模型能够更好地理解用户需求,实现更加个性化的图像处理。这种人机交互方式代表了图像处理技术未来的发展方向,将更多地融入用户的实际需求和操作习惯中。
<span style="background-color:#f8f8f8"><span style="color:#333333">pip install PTL numpy matplotlib yaml random </span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">model <span style="color:#981a1a">=</span> instructir.create_model<span style="color:#0000ff">(input_channels</span><span style="color:#981a1a">=</span>cfg.model.in_ch, <span style="color:#0000ff">width</span><span style="color:#981a1a">=</span>cfg.model.width,
<span style="color:#0000ff">enc_blks</span><span style="color:#981a1a">=</span>cfg.model.enc_blks, <span style="color:#0000ff">middle_blk_num</span><span style="color:#981a1a">=</span>cfg.model.middle_blk_num,
<span style="color:#0000ff">dec_blks</span><span style="color:#981a1a">=</span>cfg.model.dec_blks, <span style="color:#0000ff">txtdim</span><span style="color:#981a1a">=</span>cfg.model.textdim)</span></span>
在这里,使用配置文件中的参数创建了 InstructIR 模型。
<span style="background-color:#f8f8f8"><span style="color:#333333">model.load_state_dict(torch.load(MODEL_NAME), <span style="color:#0000ff">strict</span><span style="color:#981a1a">=</span>True)</span></span>
加载了预训练的图像恢复模型的权重。
<span style="background-color:#f8f8f8"><span style="color:#333333">language_model <span style="color:#981a1a">=</span> LanguageModel<span style="color:#0000ff">(model</span><span style="color:#981a1a">=</span>LMODEL)
lm_head <span style="color:#981a1a">=</span> LMHead<span style="color:#0000ff">(embedding_dim</span><span style="color:#981a1a">=</span>cfg.llm.model_dim, <span style="color:#0000ff">hidden_dim</span><span style="color:#981a1a">=</span>cfg.llm.embd_dim, <span style="color:#0000ff">num_classes</span><span style="color:#981a1a">=</span>cfg.llm.nclasses)
lm_head.load_state_dict(torch.load(LM_MODEL), <span style="color:#0000ff">strict</span><span style="color:#981a1a">=</span>True)</span></span>
如果配置中启用了文本信息 (cfg.model.use_text),则初始化并加载了语言模型和 LMHead 的权重。
<span style="background-color:#f8f8f8"><span style="color:#333333">def process_img(image, prompt):
y <span style="color:#981a1a">=</span> torch.Tensor(image).permute(2,0,1).unsqueeze(0)
lm_embd <span style="color:#981a1a">=</span> language_model(prompt)
text_embd, deg_pred <span style="color:#981a1a">=</span> lm_head(lm_embd)
x_hat <span style="color:#981a1a">=</span> model(y, text_embd)
restored_img <span style="color:#981a1a">=</span> x_hat[0].permute(1,2,0).cpu().detach().numpy()
restored_img <span style="color:#981a1a">=</span> np.clip(restored_img, <span style="color:#116644">0</span>., <span style="color:#116644">1</span>.)
return restored_img</span></span>
定义了一个图像处理函数 process_img,通过输入的图像和文本提示信息,使用 InstructIR 模型进行图像恢复。
<span style="background-color:#f8f8f8"><span style="color:#333333">image <span style="color:#981a1a">=</span> load_img(IMG)
restored_image <span style="color:#981a1a">=</span> process_img(image, PROMPT)
plot_all([image, restored_image], <span style="color:#0000ff">names</span><span style="color:#981a1a">=</span>[<span style="color:#aa1111">"Before"</span>, <span style="color:#aa1111">"After"</span>], <span style="color:#0000ff">figsize</span><span style="color:#981a1a">=</span>(10,5))</span></span>
通过示例图像和用户输入的提示信息,调用 process_img 函数进行图像处理,最后使用 Matplotlib 绘制了图像的对比结果。
需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获取完整版:地址
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!