#10个实用的开源计算机视觉案例

主要分享一个github项目,其中包含10个计算机视觉案例,供大家参考学习。

    项目地址:

https://github.com/VK-Ant/Computervision_Exploration/tree/main?tab=readme-ov-file

案例一:

    视频分析:用户提供特定的输入对象名称(图形分析:计数、速度和距离估计)

VideoAnalytics_User_Input_SpecificObject_Analytics.ipynb

案例二:

    使用 OpenCV、MediaPipe 控制音量

git clone https://github.com/VK-Ant/ComputerVision_Exploration


cd ComputerVision_Exploration


pip3 install -r requirements.txt


python ./volume_control.py

案例三:

    使用 MiDas(深度学习方法)进行深度映射并测量 FPS

git clone https://github.com/VK-Ant/ComputerVision_Exploration


cd ComputerVision_Exploration


pip3 install -r requirements.txt


python ./depth_m.py

    MiDas 模型下载https://github.com/isl-org/MiDaS

案例四:

    使用 EasyOCR 进行光学字符识别(单行和多行字符提取)

git clone https://github.com/VK-Ant/ComputerVision_Exploration


cd ComputerVision_Exploration


pip3 install -r requirements.txt


python ./ocr.py

案例五:

    使用 YoloV8 进行奶牛计数(基于区域的计数)

git clone https://github.com/VK-Ant/ComputerVision_Exploration


cd ComputerVision_Exploration


pip3 install -r requirements.txt


python3 yolov8_counter.py --source "co.mp4" --save-img --view-img

来源:

https://github.com/ultralytics/ultralytics/tree/main/examples/YOLOv8-Region-Counter

案例六:

    使用 DinoV2 进行深度图和分割

git clone https://github.com/VK-Ant/ComputerVision_Exploration


cd ComputerVision_Exploration


pip3 install -r requirements.txt


python3 depth_dinoV2.py

案例七:

    GeoPy:使用两个位置的距离计算(Folium)

代码:

https://www.kaggle.com/code/venkatkumar001/geopy-folium-distancecalculationbetweentwoplace

案例八:

    使用 Mediapipe 进行换脸(绿巨人和小丑)

git clone https://github.com/VK-Ant/ComputerVision_Exploration


cd ComputerVision_Exploration


pip3 install -r requirements.txt


python ./webcamFaceMeshExorcist.py

    参考:https://developers.google.com/mediapipe

案例九:

    使用 Mediapipe 进行面部交换互动(万圣节)

python ./smoke.py

案例十:

    YoloV8:目标检测(AutoLabelling 过程)并将对象存储在特定文件夹中

Autolabel_Particular_object.ipynb
AutoAnnotation_XML_Horse.ipynb



#Transformer的核心

Transformer的核心理解起来也不难,但为什么这么强呢?

Transformer的强大在于它的设计。高票答案已经详细讲解了Transformer在长距离依赖建模方面的能力,我就试着从设计方面补充一下“Transformer能够work很好”的其他几个原因吧。抛砖引玉,大家轻拍。

并行计算 + 强大的表达与泛化能力

传统的循环神经网络(RNN)在处理序列数据时需要按顺序逐步计算,无法并行。而Transformer可以做到”同时计算所有位置的输出”!它是怎样做到的呢?

上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。

首先,Transformer使用位置编码(Position Encoding)来记录各单词在语句中的位置或次序,位置编码的值遵循一定规则(如由三角函数生成),每个源单词(或目标单词)的Word Embedding与对应的位置编码相加(位置编码向量与Word Embedding的维度相同)得到自己的编码,并最终成为Encoder的输入。

Transformer的Encoder组件由6个相同结构的Encoder串联而成,Decoder组件也是由6个结构相同的Decoder串联而成。最后一层Encoder的输出将传入Decoder的每一层。

进一步看,每个Encoder中的Multi-Head Attention,通过多个独立的注意力头并行计算,可以从不同的子空间中学习到不同的表示,从而使模型拥有关注语言不同方面的能力。下面是Multi-Head Attention的内部结构,

从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层,首先将输入X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵。

然后,Multi-Head Attention 将它们拼接在一起 (Concat),传入一个Linear层,得到 Multi-Head Attention 最终的输出Z

Linear层(全连接的神经网络层)的映射是非线性变换,它的作用是对输入进行维度变换和特征提取。线性变换只能进行简单的比例缩放和平移操作,而非线性变换可以引入更多的复杂性,例如曲线形状、峰值和谷底等。这样可以使模型更加灵活,能够更好地适应不同类型的数据分布,从而增加模型的表达能力。

Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化(这也是RNN的顽疾),而Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化,也就是将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

除了多头机制,Transformer还使用了Feed Forward前馈网络,它由两个线性变换和一个非线性激活函数(通常是ReLU)组成。输入的词向量经过一个线性变换,将其映射到一个更高维度的空间。然后,通过ReLU进行非线性变换。最后,再经过一个线性变换,将其映射回原始的词向量维度。通过多层前馈网络的堆叠,模型可以学习到更复杂的特征表示,从而更好地捕捉输入序列中的语义信息。

Transformer架构强大的表达与泛化能力使之成为GPT等大语言模型的底层核心,如果你也对Transformer和大模型感兴趣,想掌握使用和开发大模型的必备技巧,最终进入这一领域,那么选择一门相应的网课是比较快的路径。

自注意力模型的设计

传统序列模型在处理长序列时,由于信息的传递是依次进行的,容易出现梯度消失或梯度爆炸的问题,同时也无法充分捕捉到序列中不同位置之间的依赖关系。

通过引入注意力机制,我们可以对每个位置的注意力权重进行独立计算,不需要像传统序列模型那样依次进行计算,从而实现全局的信息交互。这也使得自注意力模型在处理长序列时具有更高的效率。

在这个模型中,MatMul是矩阵乘法的操作。具体来说,MatMul将查询矩阵Q与键矩阵K相乘,得到一个注意力分数矩阵。这个注意力分数矩阵表示了查询与每个键之间的相关性或相似度,从而决定在注意力机制中分配多少注意力权重给每个键对应的值(Value)。通过将注意力分数矩阵与值矩阵V相乘,可以得到最终的注意力表示。

Scale是指对注意力分数进行缩放的操作。在计算注意力分数时,通常会将点积的结果除以一个缩放因子,这个缩放因子是注意力机制中的一个超参数。缩放的目的是为了控制注意力分数的大小,使其更稳定和可解释。

具体来说,计算注意力分数的公式为:Attention(Q, K) = softmax(QK^T / sqrt(d_k)) * V

其中,Q表示查询(Query),K表示键(Key),V表示值(Value),d_k表示键的维度。在计算注意力分数时,将点积结果除以sqrt(d_k)来进行缩放。这个缩放因子可以使得注意力分数的范围更合适,避免了点积结果过大或过小的情况。

较大的缩放因子可以增加注意力分数的范围,使得模型更加关注不同位置之间的差异;较小的缩放因子可以减小注意力分数的范围,使得模型更加平均地分配注意力权重。

这种注意力机制不依赖于外部的上下文信息,而是通过内部的自我关注来计算注意力权重。因此,它被称为self-attention自注意力机制。

Mask是一种用于控制注意力机制的操作。它被用来屏蔽或限制模型在计算注意力分数时对某些位置的关注。在自注意力模型中,常见的mask操作有两种:padding mask和sequence mask。

  1. Padding mask(填充掩码):在处理变长序列时,为了保持序列的长度一致,通常会在序列的末尾添加一些特殊的填充符号(如0)。Padding mask的作用是将这些填充符号对应的位置的注意力分数设为一个很小的值(如负无穷),从而使模型在计算注意力分数时忽略这些padding符号。这样可以避免填充的内容对计算产生干扰。
  2. Sequence mask(序列掩码):在某些任务中,为了避免模型在生成序列时看到未来的信息,需要对注意力分数进行掩码操作。Sequence mask的作用是将当前位置之后的位置的注意力分数设为一个很小的值,从而使模型只能关注当前位置之前的信息。这样可以保证模型在生成序列时只依赖于已经生成的部分,而不会受到未来信息的影响。

通过使用mask操作,自注意力模型可以更好地处理变长序列和生成任务,并且能够控制模型在计算注意力分数时的关注范围。不同的任务和应用场景可能需要不同类型的mask操作。

比如在机器翻译任务中,我们希望将一个源语言句子逐步翻译成目标语言句子。使用sequence mask可以确保模型只能依赖于之前已生成的部分,逐步生成目标语言句子。

而在文本分类任务中,输入的文本长度可能不一致。使用padding mask可以将填充部分的注意力权重设为0,忽略填充部分的影响,确保模型只关注真实的文本内容。

演化

如今当我们谈论Transformer时,其实是在谈论一个大家族。2018年年初,AllenNLP发布了一个新模型ELMo。ELMo是一种比Word2vec更好的训练词向量的模型。而之后的BERT、RoBERTa、XLNet、T5、ALBERT、GPT-3等模型从自然语言理解及自然语言生成等角度,不断刷新自然语言处理领域任务的SotA(State of the Art)表现。

Transformer架构也像其他AI新技术一样,会不断迭代和更新,如果你也对Transformer大家族感兴趣,想进入大模型开发这一热门领域,那么通过学习一门靠谱的网课会是比较快的路径。



#GLARE

GLARE 利用外部正常光照先验,实现逼真的低光照增强效果!

本篇分享 ECCV 2024 论文GLARE: Low Light Image Enhancement via Generative Latent Feature based Codebook Retrieval,GLARE 利用外部正常光照先验,实现逼真的低光照增强效果!

  • 论文链接:https://arxiv.org/pdf/2407.12431
  • Github链接:https://github.com/LowLevelAI/GLARE

亮点直击

  • 首次采用外部正常光码本作为指导,去自然地增强低光照图像。
  • 提出一种名为GLARE的新型低光照图像增强器,利用潜在归一化流来学习低光照图像特征分布,使其与自然光图像特征对齐。
  • 提出一种具有可调功能的自适应特征变换模块,以在保证输出自然性的同时巩固保真度。
  • 大量实验证明,GLARE在5个配对基准和4个真实世界数据集上的低光照图像增强任务中显著优于现有的最先进方法,并且作为高层次目标检测任务的预处理方法时,GLARE也具有很强的竞争力。

本文提出一种新型的基于生成式隐层特征的码本检索的低光照增强网络,命名为GLARE。其中码本先验是使用矢量量化(VQ)策略从未受损的正常光图像中提取的。

更重要的是,我们开发了一种生成式可逆的隐层归一化流模块,将低光照图像的特征分布对齐到正常光图像的隐层表征,从而保证了在码本中正确的代码检索。

为了保留由码本先验提供的真实细节的同时进一步提高保真度,我们设计了一种新颖的自适应特征变换模块。该模块包括一个自适应特征混合环节和一个双解码器结构,并具备用户调节功能。

大量实验证明GLARE在多个基准数据集和真实数据上的卓越性能,以及GLARE在低光照目标检测任务中的有效性进一步验证了其在高层次视觉应用中的适用性。

方法

除了引入外部自然光码本来指导低光到正常光的映射外,本文工作的创新之处还在于独特的可逆潜在归一化流和自适应特征变换模块。这些模块旨在最大限度地发挥自然光码本先验的潜力,并生成具有高保真度的逼真结果。

本文提出的方法的概览如图3所示,其中我们方法的训练可以分为三个阶段。

在第一阶段,在数千张清晰的自然光图像上预训练VQGAN,以构建一个全面的码书。

在第二阶段,利用低光照-正常光照图像对训练I-LNF模块,实现低光照和正常光照特征之间的分布变换。

在最后阶段,提出AFT模块(包含固定的自然光解码器、自适应混合块和多尺度融合解码器),用于保留码本所提供的自然性的同时增强细粒度细节。

51c视觉~合集5_AI

阶段I:正常光码本学习

为了学习一个通用且全面的码本先验,我们利用了一个结构类似于[15]的VQGAN。具体来说,一个自然光图像  首先被编码并重塑为隐层表征 ,其中 ,, 和  分别表示图像宽度、图像高度、隐层特征的维度和隐层特征的总数; 是自然光编码器的下采样因子。每个潜在向量  可以使用最近邻匹配量化为对应的代码  , 公式如下:

51c视觉~合集5_AI_02

其中  表示包含  个离散码的可学习码本,每个码由  表示。随后,量化后的码  被传送到自然光解码器 (记作  ) 以生成重建的图像  。

为了更好地展示正常光码本先验的优势和局限性,本文在低光照-正常光图像对上微调了预训练的VQGAN编码器。具体来说,本文在图2b的第2列中展示了增强后的结果,并使用t-SNE可视化了由微调后的自然光编码器生成的低光照图像特征(见图2a),这证明了外部自然光先验在低光照图像增强中的有效性。此外,这些可视化结果启发作者设计额外的网络来对齐低光照特征和正常光隐层表征,以进一步提高增强性能。

51c视觉~合集5_AI_03

阶段II:生成式隐层特征学习

为了充分利用外部码本先验的潜力,本文从减少低光照和正常光照特征分布差异的角度设计了额外的机制。具体来说,本文开发了一种可逆潜在归一化流,以实现低光照和正常光照特征分布之间的转换,从而实现更准确的码本检索。

如图3所示,本文在第二阶段优化了两个关键组件:条件编码器和可逆归一化流模块。

1)条件编码器  :其结构与自然光编码器  相同,输入一个低光图像并输出条件特征  。

2)本工作中的可逆归一化流模块通过一个可逆网络实现,表示为  。该模块利用  作为条件,将复杂的自然光特征分布  转换为一个潜在特征,即  。第二阶段训练的重点是获得 一个在  空间中的简化分布 ,例如高斯分布。因此,条件分布 [45] 可以隐式表示为:

51c视觉~合集5_AI_04

与传统的归一化流方法 [25, 45, 61, 68] 不同,本文在特征层面而不是图像空间独特地应用了归一化流,并且本文的设计中没有集成任何压缩层。此外,本文提出使用由卷积层基于  生成的低光照特征  作为  的均值,而不是使用标准高斯分布作为  的分布。

公式(2)中的条件分布使得可以通过最小化公式(3)中的负对数似然来训练条件编码器和可逆归一化流模块。此外,可以从  中采样  并使用完全可逆的网络  得到低光照输入的高质量特征 。

51c视觉~合集5_AI_05

第二阶段训练完成后,本文在LOL数据集[65]上评估了提出的模型,以验证可逆归一化流模块的有效性。如图2a所示,由可逆归一化流模块生成的低光照特征分布与正常光照特征分布高度一致,促进了准确的码本组装。此外,令人满意的增强结果(图2b,第3列)表明本文提出的方法在第二阶段后,已经具备良好的低光照图像增强性能。然而,这些结果仍然有很大的改进空间,特别是在保真度方面。例如,颜色(图2b,第1行)或结构细节(图2b,第2行)与真实值有显著差异。这一观察促使作者将输入信息融入解码过程中,以提高保真度。

阶段III:自适应特征融合

为了进一步增强纹理细节和保真度,本文提出了一种自适应特征变换模块,该模块灵活地将条件编码器生成的特征  融入解码过程中,其中  表示分辨率级别。具体来说,为了保持正常光解码器(NLD)的真实输出并避免受损的低光照特征的影响,本文采用了双解码器架构,并参考[20, 66]开发了多尺度融合解码器(MFD)。双解码器设计使本文如方程4所示,能够利用可变形卷积()来对NLD特征()进行变形处理,并将变形后的特征  输入多尺度融合解码得到最终的增强结果。

51c视觉~合集5_AI_06

其中  和  分别表示分辨率级别和目标特征本文设计了一种新颖的特征融合网络,该网络自适应地将低光照信息融入上述变形操作,并在实际测试中为用户提供潜在的调整功能。

自适应混合块多尺度融合解码器(MFD)在结构上与正常光解码器(NLD)相似,旨在解码生成的低光照特征  并获得中间层表征 , 其中  表示分辨率级别。在每个分辨率级别,来自条件编码器信息  被添加到相应的  中,以引入更多的低光照信息。不同于常规的特征融合操作,本文使用了一种自适应混合策略,如下所示:

51c视觉~合集5_AI_07

其中  表示可学习系数,表示Sigmoid运算符, 用于实际测试中的调整,训练时设置为1。

灵活调整功能尽管公式(5)中  在训练阶段被设置为1,但在测试真实世界图像时,用户可以根据个人偏好灵活调整。这种设计的灵感来自于许多现有方法在处理真实世界数据时通常表现不佳,造成这一现象的原因是因为真实世界数据中的光照情况通常与训练阶段使用的图像有所不同。

实验

与现有方法的比较

  • 比较的方法:包括 KinD, MIRNet, DRBN, SNR, Restormer, Retformer, MRQ, LLFlow, LL-SKF等
  • 数据集:LOL,LOL-v2-real,LOL-v2-synthetic,SDSD-indoor, SDSD-outdoor,分别在这些数据集的训练数据训练,在相应测试集上评估。
  • 跨数据集验证:在LOL训练集上训练,在真实世界数据集: MEF,LIME,DICM 和 NPE 上测试。

定量比较如表1所示 GLARE在五个基准数据集上优于当前最先进的方法。本文提出的GLARE在PSNR上表现出色,在LOL和LOL-v2-synthetic数据集上分别超过LL-SKF 0.55 dB和0.74 dB。此外,在SDSD-indoor和SDSD-outdoor数据集上,它比Retformer分别提高了0.33 dB和1.01 dB。

另外,GLARE的LPIPS在表1中分别超过了第二名20.9%和12.6%,这表明本文提出的方法的增强结果与人类视觉系统更为一致。表2展示了在非配对的真实世界数据集上的跨数据集评估结果。本文首先在LOL训练集上训练GLARE。然后,将在LOL测试数据上表现最佳的模型应用在四个非配对真实世界数据集上。

与当前最先进的方法相比,GLARE在DICM和MEF数据集上表现优越,并在平均表现上达到最佳。这些结果不仅证明了本文方法在生成高质量视觉结果方面的优越性,也展示了其良好的泛化能力。

51c视觉~合集5_AI_08

51c视觉~合集5_AI_09

定性比较图4、图5和图6展示了本文提出的GLARE与其他方法的视觉对比结果。显然,以往的方法在噪声抑制方面表现较差。此外,它们还往往会产生明显的色彩失真(参见图4中的KinD、LLFlow、Retformer、LL-SKF的增强结果,以及图5中的SNR和LLFlow)。

此外,从定性比较来看,可以看到LLFlow、LL-SKF和Retformer在其增强结果中可能会导致细节缺失(参见图4和图5),而图4中的KinD和图5中的SNR由于引入了不自然的伪影而表现不佳。

相比之下,GLARE能够有效增强低光照图像,同时可靠地保留色彩和纹理细节。图6中在非配对真实世界数据集上的视觉比较也展示了本文提出的GLARE在细节恢复和色彩保持方面的优势。

51c视觉~合集5_AI_10

51c视觉~合集5_AI_11

低光照物体检测

在ExDark数据集上进行实验该数据集收集了7,363张低光图像,分为12个类别,并附有边界框注释,旨在研究低光图像增强(LLIE)方法作为预处理步骤在改善低光物体检测任务中的有效性。本文使用在LOL数据集上训练的不同的LLIE模型来增强ExDark数据集内图片,然后对增强后的图像进行目标检测。

本文采用的目标检测器是预先在COCO数据集上训练的YOLOv3,并使用计算平均精度(AP)和平均的AP(mAP)作为评估指标。

表3 提供了本文方法GLARE 与其他方法的定量比较结果。与KinD、MBLLEN、LLFlow和LL-SKF相比,本文提出的GLARE在mAP方面至少提高了0.8分。

更重要的是,GLARE也优于在低光照目标检测中表现突出的IAT方法。图9展示了各个LLIE方法低光目标检测上的视觉比较结果。可以看出,尽管每种LLIE方法在一定程度上提高了图像的可见度,但本文方法GLARE实现了最佳的视觉表现,从而对下游的检测任务最有利。

不出所料,GLARE的增强效果使得YOLO-v3检测器能够以更高的置信度识别更多的目标。

51c视觉~合集5_AI_12

51c视觉~合集5_AI_13

消融实验

为了验证GLARE每个组件的有效性并证明用于训练的优化目标的合理性,本节在LOL数据集上进行了广泛的消融实验。具体来说,本节讨论了自适应特征融合模块、可逆归一化流模块和正常光码本先验的重要性。

自适应特征融合模块从GLARE中移除自适应特征融合模块,可以得到一个简单的低光图像增强模型,称为SimGLARE。基本上,SimGLARE仅利用自然光码本先验中的信息而不进行特征变换。SimGLARE的定量结果如表4所示。在PSNR、SSIM和LPIPS方面,SimGLARE在低光照图像增强任务中相当具有竞争力(与表1中的SOTA方法相比)。

然而,借助提出的自适应特征融合模块,本文提出的GLARE在定量指标和视觉结果上均取得了进一步的改进(如图7所示)。此外,表4中还检验了各种损失函数,显示了本文在第三阶段选择的损失函数是合理的。

本文还设计了两个变体,分别命名为Variant 1和Variant 2,以说明所提出的双解码器架构和自适应混合块的重要性。具体来说,Variant 1直接将低光照特征通过自适应混合块引入到正常光解码器(NLD),而Variant 2采用并行解码器策略,但用skip-connection操作[26]替换了自适应混合块。

通过比较表4中的(4)与(2)和(3),可以发现PSNR和SSIM与LPIPS呈负相关,这验证了本文提出的自适应混合块和双解码器设计的有效性。

51c视觉~合集5_AI_14

可逆归一化流模块为了展示I-LNF和采用的NLL损失的重要性,本文基于SimGLARE进行了几种调整:(1)使用L1损失训练SimGLARE,以验证本文采用的NLL损失的有效性。(2)用一个结构上类似于[84]的Transformer模型取代可逆归一化流模块,直接预测码本中的码索引。(3)在(1)的基础上移除可逆归一化流模块,并在低光-正常光图像对上训练条件编码器。

定量结果如表5所示。通过比较(4)和(1),可以验证NLL损失的优越性。此外,比较图8中第二列和第三列的图像也表明,与L1损失相比,使用NLL损失可以产生更清晰的轮廓和边缘。

此外,与基于Transformer的码预测方法相比,本文提出的可逆归一化流模块可以帮助生成更好地与正常光特征对齐的低光特征,从而确保更准确的码匹配并实现更优的性能。

更重要的是,当从SimGLARE(L1)中移除可逆归一化流模块时,PSNR(降低1.16 dB)和SSIM(降低0.017)显著下降,这证明了本文提出的可逆归一化流模块的有效性。

51c视觉~合集5_AI_15

自然光码本先验为了研究正常光码本先验的重要性,从SimGLARE(L1)移除了VQGAN中的码本和量化过程,得到一个名为Variant 3的模型,并使用类似于SimGLARE(L1)的策略进行训练。

定量结果如表6所示。缺少码本先验显著影响了性能,PSNR平均下降了2.0 dB,SSIM下降了0.024,这突显了码本先验在本文方法中的关键作用。

51c视觉~合集5_AI_16

结论

本文提出了一种名为GLARE的低光图像增强(LLIE)新方法。鉴于LLIE的病态性质引起的不确定性和模糊性,本文利用从清晰、曝光良好的图像中使用VQGAN获得的正常光码本来指导低光到正常光的映射。为了更好地发挥码本先验的潜力,本文采用了可逆潜在归一化流来生成与正常光隐层表征对齐的低光照特征,从而最大限度地提高码向量在码本中正确匹配的概率。

最后,本文引入了具有双解码器架构的自适应特征变换模块,以灵活地在解码过程中提供输入信息,从而在保持感知质量的同时进一步提高增强结果的保真度。

大量实验表明,本文提出的GLARE在5个配对数据集和4个真实世界数据集上显著优于当前最先进的方法。GLARE在低光目标检测中的卓越性能使其成为高层次视觉任务中有效的预处理工具。

更多ECCV2024论文,请关注

  • Github:https://github.com/52CV/ECCV-2024-Papers



#RegionDrag

DragDiffusion快100倍!港大&牛津提出RegionDrag:快准好的图像编辑方法!RegionDrag在分辨率为512×512的图像上完成编辑的时间少于2秒,这比DragDiffusion快了100倍以上,同时性能更优。

文章链接:https://arxiv.org/pdf/2407.18247

git链接:https://github.com/LuJingyi-John/RegionDrag

亮点直击

  • 引入了一种基于区域的图像编辑方法,以克服基于点拖拽方法的局限性,利用更丰富的输入上下文来更好地对齐编辑结果与用户的意图。
  • 通过采用无梯度的复制粘贴操作,基于区域的图像编辑比现有方法快得多(见上图1),在一次迭代中完成拖拽。
  • 扩展了两个基于点拖拽的数据集,添加了基于区域拖拽的指令,以验证RegionDrag的有效性并为基于区域的编辑方法提供基准。

基于点拖拽的图像编辑方法,如DragDiffusion,已引起了广泛关注。然而,由于点编辑指令的稀疏性,基于点拖拽的方法存在计算开销大和用户意图误解的问题。本文提出了一种基于区域的复制粘贴拖拽方法,RegionDrag,以克服这些局限性。RegionDrag 允许用户以操作区和目标区的形式表达其编辑指令,从而实现更精确的控制并减少模糊性。此外,基于区域的操作可以在一次迭代中完成编辑,速度比基于点拖拽的方法快得多。还引入了注意力交换技术,以增强编辑过程的稳定性。为了验证本文的方法,扩展了现有的基于点拖拽的数据集,添加了基于区域拖拽的指令。实验结果表明,RegionDrag在速度、准确性和与用户意图的对齐方面均优于现有的基于点拖拽的方法。值得注意的是,RegionDrag在分辨率为512×512的图像上完成编辑的时间少于2秒,这比DragDiffusion快了100倍以上,同时性能更优。

编辑效果

51c视觉~合集5_AI_17

51c视觉~合集5_AI_18

51c视觉~合集5_AI_19

51c视觉~合集5_AI_20

RegionDrag

RegionDrag 允许用户输入操作区和目标区对,然后通过以下两个主要步骤进行编辑:

  1. 复制操作区覆盖的潜在表示,并在反转过程中存储自注意力特征;
  2. 将复制的潜在表示粘贴到目标位置,并在去噪过程中插入存储的自注意力特征。

本节讨论基于点拖拽方法的局限性,并介绍基于区域的输入如何解决这些局限性。最后,展示了处理基于区域输入的编辑流程。

从基于点的拖拽到基于区域的拖拽

尽管基于点拖拽的方法提供了一种直观的用户输入方式,但从稀疏点中获得的有限信息在编辑过程中对模型构成了挑战。具体来说,点指令会导致两个主要问题:输入模糊性和推理速度慢。

首先,点指令本质上是模糊的。一种拖拽操作可能对应多种可能的编辑效果。例如,用户试图在图像中延长鸟的喙,如下图2所示。用户选择鸟喙上的一个点并向左上角拖拽。然而,基于点拖拽的方法可能会误解用户的目标,认为是要放大喙或者将整只鸟移动到左侧,而不是延长喙,从而导致用户意图与模型输出之间的不对齐。

51c视觉~合集5_AI_21

其次,基于点拖拽的编辑涉及的复杂性需要相当大的计算开销。基于点拖拽的编辑具有挑战性,因为模型必须从单个或少数点的运动中推断出整个图像的变化。为了在保持对象身份的同时执行这种复杂的拖拽操作,基于点拖拽的方法严重依赖于两个计算密集的步骤:为每个图像训练一个独特的LoRA和将拖拽过程分解为一系列子步骤。特别是,LoRA帮助模型保持原始图像的身份,逐步拖拽则增加了实现预期编辑效果的机会。否则,编辑结果可能会受到显著的身份扭曲或无效编辑的影响,如上图2所示。问题的根源在于稀疏点对编辑施加的约束不足,因此模型必须依赖LoRA来防止扭曲,并通过迭代编辑在拖拽路径上提供一定程度的额外监督。因此,大多数基于点拖拽的方法需要几分钟才能编辑一张图像,使其在现实世界应用中不切实际。

解决这些问题的最简单方法是鼓励用户提供足够数量的点。然而,这种方法会导致用户在指定和拖拽点时花费过多时间。因此,作者设计了一种不仅对用户友好且能为模型提供更多信息上下文的编辑形式,从而避免指令模糊、推理速度慢和用户过度劳累。提出使用基于区域的操作来代替依赖拖拽点的方法,其中用户指定一个操作区(H)以指示他们希望拖拽的区域,并指定一个目标区(T)以展示他们希望实现的位置。然后,通过区域到点映射算法建立这两个区域之间的密集映射,并通过一次反转和去噪循环直接将操作区覆盖的潜在表示复制到目标区域来完成编辑。

尽管这种操作简单,但它从两个方面解决了模糊性和开销问题:

  • 基于区域的操作比拖拽点更具表现力和准确性,从而显著减少了模糊性。如图2所示,通过简单地画一个更长的喙来表示延长鸟的喙,从而减少了基于点拖拽输入的模糊性。
  • 每个区域在密集映射后对应大量的点,因此它比稀疏点对编辑结果提供了更强的约束。结果是,不需要沿拖拽路径插值中间点或渴望额外的监督,编辑可以在一个步骤中完成。此外,操作区和目标区可以大小不一且形状任意,允许用户方便地定义它们。


编辑流程

首先介绍基于区域的用户输入,然后介绍区域到点映射算法,最后介绍主要的工作流程。

用户输入:操作区和目标区可以通过两种方式定义:

  1. 输入顶点以形成多边形(例如三角形或四边形)
  2. 使用画笔工具刷出一个灵活的区域。

输入形式的选择主要取决于用户的偏好。顶点适用于编辑定义明确的形状,如移动建筑物上的窗口;画笔工具则更适合处理不规则的形状,如弯曲的道路或人类的头发。

区域到点映射:为了在复制和粘贴潜在表示时保留原始空间信息,需要在操作区和目标区之间建立密集的映射。如果区域限制为三角形或四边形,可以使用仿射或透视映射计算转换矩阵。然而,为任意形状的刷出区域找到类似的转换是具有挑战性的。为了解决这个问题,提出了一种算法来数值地找到两个区域之间的映射。

设  和  分别为操作区和目标区中的像素集合。首先线性缩放目标区域的宽度以匹配操作区的宽度。对于目标区中的每个像素 ,  通过首先减去  坐标的下边界  并使用目标区域的  坐标范围  进行归一化。然后它被缩放到操作区的  坐标范围 , 得到  。

该步骤确保两个区域具有相同数量的像素列。接下来, 将每个目标区域的垂直像素列映射到其对应的操作区域列。目标区域中每个点的 y 值通过减去其垂直列的下边界  并通过其列的 y 坐标范围  进行归一化, 然后缩放到对应的操作区域列的 y 坐标范围  )。符号  表示一个函数  (例如  或  ),该函数接受一个变量和一个条件, 并返回满足条件的点中该变量的函数值。整个过程总结如下面算法 1 所示。

51c视觉~合集5_AI_22

主要流程:如下图3所示, RegionDrag利用了图像编辑流程。首先, 将图像的潜在表示  反转为 ,其中  是选定的最大时间步长  之前的一个时间步长。在反转过程中, 缓存每个中间步骤  以备将来使用。然后复制  并将副本记为  。根据在公式 (5) 中定义的混合函数 , 将高斯噪声  与  的操作区域进行混合。

51c视觉~合集5_AI_23

51c视觉~合集5_AI_24

其中, H 是一个二值mask, 操作区赋值为  是一个介于 0 到 1 之间的混合系数, 用于控制混合效果的强度。噪声  从均值为 0 、协方差矩阵为单位矩阵的高斯分布中抽取, 记为  。如果  设置得较低, 则添加的噪声较少, 从而在操作区保留更多原始图像的特征和细节。与高斯噪声混合后,  通过 DDPM 采样器进行去噪, 拖拽以复制粘贴的方式进行。在去噪时间步 , 提取  操作区内的潜在表示, 并根据几何变换或算法1计算的密集映射将其映射到  的目标区域。同时, 使用互相自注意力控制来帮助保持图像的身份。简而言之, 当通过 UNet 的自注意力模块时, 用于去噪  的键和值  被替换为来自  的  。这使得编辑后的图像保持原始图像的布局和身份, 从而稳定编辑过程。

在  逐渐去噪到  (见上面图3) 后, 它被解码为编辑后的图像  。尽管 RegionDrag 是通过单个操作-目标区域对引入的, 但它支持多个输入对 , 允许用户在单个编辑会话中指定多个修改。每个区域对单独构建密集映射, 但在潜在表示复制粘贴操作中共同使用。整个流程总结如算法 2 所示。

51c视觉~合集5_AI_25

实验结果评估指标

LPIPS:按照【24】的方法,使用 Learned Perceptual Image Patch Similarity (LPIPS) v0.1来测量编辑后图像与原始图像之间的身份相似性。LPIPS 计算图像对之间的 AlexNet特征距离。高 LPIPS 分数表明由于编辑而发生了意外的身份变化或伪影。较低的 LPIPS 分数表明在编辑过程中对象的身份得到了很好的保留;然而,这并不一定意味着编辑效果更好,因为两个完全相同的图像会产生 LPIPS 分数为0。

平均距离 (MD) :DragDiffusion引入了 MD 指标来评估某方法将操作点内容移动到目标点的效果。为了确定方法将操作点移动到的位置, DragDiffusion 使用 DIFT找到与操作点  最相似的点, 并将它们记为  。然后, 它使用 DIFT 匹配点与真实目标位置  之间的归一化欧几里得距离作为指标。然而, 只需在操作点及其对应的真实目标点周围的区域搜索 , 而不是在整个图像中搜索, 以避免 DIFT 错误地将图像中的无关点识别为  并过度惩罚某些方法。正式地, 给定一个拖拽点对 , 定义其搜索mask 为:

51c视觉~合集5_AI_26

其中  计算两个点  和  之间的归一化欧几里得距离, 公式为:

51c视觉~合集5_AI_27

其中  和  分别是图像的宽度和高度。在下图5中提供了搜索mask 的示例。MD 然后被定义为所有 个点的目标点与 DIFT 匹配点之间的归一化距离  的平均值:

51c视觉~合集5_AI_28

51c视觉~合集5_AI_29

实现细节

本文的方法使用 Python 实现,依赖于 HuggingFace和 PyTorch库。采用 Stable Diffusion v1-5 作为扩散模型,图像尺寸为 512 × 512,保持与之前基于扩散的拖拽方法一致。使用 DDPM 采样器进行反转和去噪采样过程,配置为总共使用 20 个步骤。潜在表示反转到时间步 t′ = 500(总共 1000 个步骤中的 SD1-5)。因此,进行 10 次反转步骤和 10 次去噪步骤。互相自注意力控制在所有时间步中都启用,并且潜在的复制粘贴操作在 t'' = 200 处终止。噪声权重设置为 1。所有实验结果均在 NVIDIA Tesla V100 GPU 上获得。

基准对比

将 RegionDrag 与基于点拖拽的扩散方法进行比较,包括 DragDiffusion、SDE-Drag和 DiffEditor。由于 GAN 基于的方法在编辑 DragBench-S 和 DragBench-D 数据集中的多样图像时存在局限性,且需要领域特定的 StyleGAN 检查点,因此排除了 GAN 基于的方法。基于扩散的方法在编辑任务中优于 GAN 基于的方法,更适合评估。执行时间在两个数据集上取平均,并且所有方法均在同一设备上使用公开发布的代码进行测试。

定量评估

为了定量评估方法的编辑性能,使用 LPIPS 和平均距离作为指标,并将两者均乘以 100 以便于说明。如下表1所示,RegionDrag 在 DragBench-S(R) 和 DragBench-D(R) 数据集上显著优于那些计算开销大的基于点的方法。这些结果突显了 RegionDrag 在保持图像一致性同时,在不同数据集上实现竞争性编辑结果的卓越性能。除了效果外,RegionDrag 在效率方面也表现出色。RegionDrag 实现了快速推理速度,编辑一个 512 × 512 的图像大约需要 1.5 秒,比第二快的方法快 20 倍,比 DragDiffusion快 100 倍。鉴于复制粘贴操作引入的计算开销可忽略不计,RegionDrag 的推理时间与使用 SD1-5 生成一张 20 步的图像相当。

51c视觉~合集5_AI_30

定性结果

下图6 比较了基于点拖拽和基于区域的编辑输入及其对应的结果,展示了 RegionDrag 的有效性。基于区域的方法利用了注释区域提供的全面上下文来实现期望的修改,同时保持图像的整体一致性,优于基于点拖拽的编辑方法。

51c视觉~合集5_AI_31

51c视觉~合集5_AI_32

消融研究

作者认为点输入的稀疏性导致了较差的编辑结果。为了定量证明这一点,在 DragBench-DR 数据集上进行了测试,通过随机选择每个样本中等效转换点的子集,并使用这些子集进行推理。逐渐减少所选点的百分比,以观察对 MD 指标的影响。如下图7所示,随着所用点的百分比减少,MD 的结果明显呈上升趋势。这表明,与基于区域的输入相比,稀疏点输入对输出的约束较弱,导致编辑结果不令人满意。这证实了在 RegionDrag 中采用基于区域的输入的好处。

51c视觉~合集5_AI_33

在去噪过程中,在时间间隔内进行图像潜在表示的复制和粘贴。为了验证这一设计,将其与仅在初始去噪时间步进行复制粘贴的方法进行了比较。下图8显示,仅在初始步骤进行编辑可能会导致不可预测的结果,因为后续的去噪阶段可能会丢失这些编辑。多步复制粘贴通过在较小的时间步提供额外的指导,同时保持图像的保真度,从而解决了这一问题。

51c视觉~合集5_AI_34

本文引入了一个高效且有效的基于区域的编辑框架——RegionDrag,用于高保真图像编辑。与现有的基于点拖拽的编辑方法不同,RegionDrag 从区域的角度重新审视了编辑问题。RegionDrag 通过复制和粘贴图像的潜在表示和自注意力特征,实现了单步编辑,这不仅提供了卓越的效率,还达到了优越的编辑性能。此外,基于现有数据集引入了两个新的基准测试,DragBench-SR 和 DragBench-DR,用于评估基于区域的编辑。实验结果一致证明了本文方法在效率和编辑性能上的卓越表现。