【论文翻译】Cluster Contrast for Unsupervised Person Re-Identification(2021)

Cluster Contrast for Unsupervised Person Re-Identification(2021)

论文
code

Abstract

最先进的无监督reid方法使用基于memory的非参数softmax损失来训练神经网络。 它们将预先计算的实例特征向量存储在内存中,然后通过聚类算法为它们指定伪标签,并在实例级别更新。 然而,由于cluster size不同,导致每个类别的特征更新进度不一致。

为了解决这个问题,本文提出了cluster contrast方法,它可以存储特征向量并在聚类级别计算对比度损失。 该方法使用一个独特的cluster表示来描述每个cluster,从而生成一个cluster级内存字典。 通过这种方式,cluster的一致性可以在整个pipeline中得到有效维护,并且可以显著降低GPU内存消耗。 因此,该方法可以解决聚类不一致的问题,并且适用于更大的数据集。此外,本文还采用了不同的聚类算法来证明该框架的健壮性和泛化性。

1. Introduction

深度无监督人员再识别(Re-ID)旨在训练一个神经网络,能够在没有任何标记数据的情况下跨摄像头检索感兴趣的人员。由于实际视频监控需求的增长和昂贵的标签成本,这项任务近年来越来越受到关注。解决这个问题主要有两种方法。一种是纯无监督学习(USL)person re-ID,它通常利用完全未标记数据中的伪标签。另一个是无监督域适配(UDA)person re-ID,它首先在源标记的数据集上预训练模型,然后在目标未标记的数据集上微调模型。一般来说,由于外部源域的引入,UDA的性能优于USL。然而,UDA仍然受到复杂训练过程的影响,并且要求源域和目标域之间的差异不显著。

在本文中,重点学习没有任何标记数据(即USL)的person re-ID任务。现有的最先进的USL方法[12,41]利用聚类中的记忆字典和伪标签来训练神经网络。在每个epoch开始时,训练数据的所有图像特征都由当前的神经网络提取。我们把存储在内存中的这些图像特征视为字典。 然后,使用DBSCAN[8]或K-means[29]等聚类算法对图像特征进行聚类并生成伪标签。 同时,cluster ID被分配给每个图像作为person id。 最后,使用对比损失(例如三元组损失、信息损失或基于记忆字典的其他非参数分类损失)对神经网络进行训练。 虽然这些基于伪标签的方法取得了很好的性能,但是USL和监督方法之间仍然存在很大的差距,这限制了USL在实际应用中的应用。

为了弥补这一差距,我们重新研究了基于伪标签的USL pipeline,并认为存储器字典存储机制,包括初始化、更新和丢失计算,对于模型优化是至关重要的。最先进的方法将每个实例的特征向量存储在内存字典中,并使用查询实例计算多标签非参数分类损失[41]或信息损失[30]。 这种内存字典存储机制有两个主要缺点。首先,记忆词典的特征更新过程是不一致的,因为训练数据在实例级的分布是有偏差的。在像MSMT17这样的大规模re ID数据集中,这个问题尤其严重。 其次,聚类质心不是记忆词典中伪标签的最佳特征表示。由于聚类方法不可避免地引入了噪声标签,因此聚类[12]中特征的这种平均操作也会污染其相应的聚类特征表示。

为了解决这两个问题,我们提出了cluster contrast(聚类对比)。 它构建了一个cluster级内存字典,其中每个cluster由单个特征向量表示,所有cluster特征向量都以一致的方式更新。 更具体地说,该cluster特征被初始化为集群中所有图像的平均特征,并在训练期间由batch query实例特征更新。 因此,我们提出了一种cluster级信息损失,称为ClusterNCE损失,它计算cluster特征和query实例特征之间的对比损失,如图1所示。 基于cluster级内存字典,ClusterNCE损失占用的GPU内存比实例级特征内存少得多,因此允许我们的方法在更大的数据集上进行训练。
在这里插入图片描述
图1。聚类对比度计算聚类级别的对比损失。 在cluster级内存字典中,通过从相应cluster中均匀采样一个随机实例特征来初始化集群特征,并由batch query instance更新。 x∈ X 是训练数据集。q是query实例特征向量。 c k c_{k} ck代表第k个聚类特征向量。具有相同颜色的特征向量属于同一簇。

总之,我们提出的cluster contrast USL有以下几个优点:

  • 我们引入了cluster contrast,它在cluster级别初始化、更新和执行对比损失计算。它使用独特的cluster表示来解决cluster一致性问题。据我们所知,这是第一个在整个pipeline中保持cluster一致性的工作。
  • 我们的方法采用了一个简单的pipeline,这与现有的方法有很大不同。通过构建cluster级内存字典,可以存储和更新所有cluster表示。这种简单的策略使我们能够占用更少的GPU内存,这使得我们的方法可以在更大的数据集上进行训练。
  • 我们的方法为有效利用不同的聚类算法提供了一个通用框架。我们在我们的框架中使用了DBSCAN和InfoMap,这两种方法在不同规模的数据集上都被证明是有效的。
  • 我们证明了所提出的具有cluster contrast的无监督方法在很大程度上超过了所有现有的无监督人员识别方法。

2. Related Work

Deep Unsupervised Person Re-ID.

深度无监督人员识别可归纳为两类。第一类是无监督领域适应(UDA)reID,它利用迁移学习来改善无监督reid。第二类是纯无监督学习(USL)行人 reID,它在未标记的数据集上训练模型目录。 最先进的USL reid pipeline 通常包括三个阶段:内存字典初始化、伪标签生成和神经网络训练。 之前的工作在部分或整个pipeline上都取得了重大改进。 具体来说,Lin等人[24]将每个单独的样本视为一个簇,然后逐渐将相似的样本分组到一个簇中,以生成伪标签。 MMCL[41]预测由相似性计算和循环一致性组成的高质量伪标签。然后将模型训练为一个多分类问题。 SPCL[12]提出了一种新的自定步调对比学习框架,该框架逐步创建更可靠的聚类,以细化记忆词典的特征。 在本文中,我们提出了聚类对比来改进记忆字典和损失函数部分。接下来我们将讨论这两个方面的相关研究。

Memory Dictionary.

对比学习[14]可以被认为是为字典查找任务训练编码器。最近几项关于无监督视觉表征学习的研究[2,15,17,19,30,38,46,58]通过构建动态词典给出了有希望的结果。 记忆词典不断更新,以促进对比无监督学习。 与无监督视觉表征学习类似,最先进的无监督人称识别方法也为对比学习建立了记忆词典。 在训练过程中,内存字典中的实例特征向量由相应的查询实例特征更新。

Loss Functions.

在受监督的个人re ID中,批量硬三重态丢失已被证明是提高re ID性能的有效解决方案。 在无监督人员身份识别中,由于不存在基本真实的人员身份,且伪标签在训练过程中发生变化,因此使用InfoNCE[30]等非参数分类损失作为身份损失。与InfoNCE类似,Tong等人[47]设计了一个在线实例匹配(OIM)丢失,并使用一个记忆字典方案,将查询图像与未标记身份的记忆特征集进行比较。 Wang和Zhang[41]介绍了基于记忆的非参数多标签分类损失(MMCL),它将USL re ID视为一个多标签分类问题。 为了减少伪标签的噪声,MMT[11]提出了一种新的软softmax三重态丢失,以支持软伪三重态标签的学习。SPCL[12]引入了统一的对比损失,包括源域数据集和目标域数据集。在本文中,我们将聚类特征和查询实例特征之间的信息损失应用于USL re-ID。

3. Proposed Method

我们首先在第3.1节中从高层次介绍我们的总体方法。然后,我们将不同的对比学习方法与第3.2节中的聚类对比学习方法进行比较。最后在第3.3节中,我们解释了集群对比的细节以及工作原理。

3.1. USL Person Re-ID via Cluster Contrast

最先进的USL方法通过对比学习解决了USL person reid。具体来说,他们构建了一个包含所有训练图像特征的记忆词典。 每个特征都被分配一个由聚类算法生成的伪ID。在训练过程中,对比损失最小化,以训练网络学习与伪ID一致的适当特征嵌入。

我们专注于设计适当的contrast 函数,以保持整个pipeline的简单,同时获得更好的性能。如图2所示。 内存字典初始化在上面的分支中进行了说明。我们使用标准的ResNet50[16]作为主干编码器,该编码器在ImageNet上预训练以提取特征向量,虽然没有针对re ID任务进行优化,但具有基本的可分辨性。然后,我们应用DBSCAN[8]和InfoMap[34]聚类算法将相似的特征聚类在一起,并为它们分配伪标签。通过循环一致性进一步细化伪标签,如果两个图像共享相似的邻居,则使用相同的标签分配它们。 然后计算每个聚类的平均特征向量,形成一组聚类表示。内存字典由这些集群表示及其相应的伪标签初始化。如下面的分支所示,在训练阶段,我们计算查询图像特征和字典中所有聚类表示之间的聚类损失来训练网络。 同时,字典功能也会随着查询功能的发展而不断更新。
在这里插入图片描述
图2。我们的无监督人员身份识别方法的系统管道。 上面的分支描述了内存初始化阶段。 通过聚类为训练数据特征分配伪标签,其中相同颜色的特征属于同一聚类。下面的分支代表模型训练阶段。迭代迷你批处理中的查询功能用于以动量更新内存集群表示。ClusterNCE损失计算查询特征和所有聚类表示之间的对比损失。

3.2. Contrastive Learning

为了便于描述方法,我们首先介绍本文中使用的符号。 设 X = { x 1 , x 2 , . . . , x N } X=\left\{ x_{1},x_{2},...,x_{N}\right\} X={x1,x2,...,xN}表示具有N个实例的训练集。 U = { u 1 , u 2 , . . . , u n } U=\left\{ u_{1},u_{2},...,u_{n}\right\} U={u1,u2,...,un}表示从主干编码器 f θ f_{\theta } fθ获得的相应特征,描述为 u i = f θ ( x i ) u_{i}=f_{\theta }(x_{i}) ui=fθ(xi)。 q是由 f θ ( ⋅ ) f_{\theta }(\cdot ) fθ()提取的查询实例特征 ,其中查询实例属于X 。在这一部分中,我们分析了不同的结构学习方法来激发我们的集群结构一致性学习。
在这里插入图片描述
如图3(a)所示,多标签分类损失通过实例级对比损失计算实例级损失,由InfoNCE损失定义如下: L q = − l o g e x p ( q ⋅ u + / τ ) ∑ i = 0 N e x p ( q ⋅ u i / τ ) L_{q}=-log\frac{exp(q\cdot u_{+}/\tau )}{\sum_{i=0}^{N}exp(q\cdot u_{i}/\tau)} Lq=logi=0Nexp(qui/τ)exp(qu+/τ)其中τ是温度超参数。内存字典在实例级别更新为: u i ← m u i + ( 1 − m ) q u_{i}\leftarrow mu_{i}+(1-m)q uimui+(1m)q其中m是动量更新因子。 它存储所有图像特征向量,并通过将查询特征q与内存字典中的所有图像特征向量进行比较来计算多类分数。 每次训练迭代后,q将更新内存字典。

在图3(b)中,SPCL[12]通过聚类对比损失计算聚类级别的损失。它可以定义如下: L q = − l o g e x p ( q ⋅ c + / τ ) ∑ k = 0 K e x p ( q ⋅ c k / τ ) L_{q}=-log\frac{exp(q\cdot c_{+}/\tau )}{\sum_{k=0}^{K}exp(q\cdot c_{k}/\tau)} Lq=logk=0Kexp(qck/τ)exp(qc+/τ) 其中 { c 1 , c 2 , . . . , c k } \left\{ c_{1},c_{2},...,c_{k}\right\} {c1,c2,...,ck}是簇质心,K代表簇数。 该算法以聚类中心为聚类级特征向量,计算查询实例与所有聚类之间的距离。 通过每个簇的平均特征向量计算簇质心,如下所示: c k = 1 ∣ H k ∣ ∑ u i ∈ H k u i c_{k}=\frac{1}{\left| H_{k}\right|}\sum_{u_{i}\in H_{k}}^{}u_{i} ck=Hk1uiHkui其中 H k H_{k} Hk表示第k个簇集, ∣ ⋅ ∣ \left| \cdot \right| 表示每个簇的实例数。 H k H_{k} Hk包含聚类k中的所有特征向量。 但与多分类丢失类似,它将所有图像特征向量存储在内存字典中。 然后使用等式2通过相应的查询图像特征更新存储的图像特征向量。

图3(a)和图3(b)都使用等式2在实例级别更新特征向量 ,导致聚类不一致问题。如图4所示,集群大小分布不均衡。在每次训练迭代中,在大型集群中,只有一小部分实例特征可以更新,而在小型集群中,所有实例都可以更新。 因此,更新过程是高度多样的,导致有偏见的聚类中心。 一些聚类中心由更新的实例决定,而另一些则依赖于未更新的实例。 在每次迭代中,网络不断更新,从而导致小批量的不一致振荡分布。相比之下,我们使用以下等式设计ClusterNCE损耗,如图3(c)所示: L q = − l o g e x p ( q ⋅ ϕ + / τ ) ∑ k = 0 K e x p ( q ⋅ ϕ k / τ ) L_{q}=-log\frac{exp(q\cdot \phi_{+}/\tau )}{\sum_{k=0}^{K}exp(q\cdot \phi_{k}/\tau)} Lq=logk=0Kexp(qϕk/τ)exp(qϕ+/τ)其中 ϕ k \phi_{k} ϕk是第k个簇的唯一表示向量。它更新特征向量,并在聚类级别计算损失。值得注意的是,内存字典存储了所有群集功能表示,并且可以按照以下方式进行一致更新: ϕ k ← m ϕ k + ( 1 − m ) q \phi_{k}\leftarrow m\phi_{k}+(1-m)q ϕkmϕk+(1m)q
在这里插入图片描述
我们可以看到,我们提出的算法使用唯一的特征向量来表示每个聚类类别,并且在更新过程中保持不同,这是与以前的对比损失方法最显著的区别。 在下一节中,我们将详细讨论我们的方法如何一致地更新集群表示以保持集群一致性。

3.3. Cluster Contrast Learning

提出的聚类对比包括记忆字典初始化、记忆更新和神经网络训练过程。算法1给出了训练细节。

Memory Initialization.

与实例级内存字典不同,我们将每个簇的表示 { ϕ 1 , . . . , ϕ k } \left\{ \phi_{1},...,\phi_{k}\right\} {ϕ1,...,ϕk}存储在基于内存的特征字典中。我们使用每个聚类的平均特征向量来初始化聚类表示,即 ϕ k = 1 ∣ H k ∣ ∑ u i ∈ H k u i \phi_{k}=\frac{1}{\left| H_{k}\right|}\sum_{u_{i}\in H_{k}}^{}u_{i} ϕk=Hk1uiHkui当每个历元被初始化时,执行等式7。聚类算法在每个时期都运行,所以K随着模型的训练而变化。

Memory Updating.

在训练期间,从训练集中抽取P个人身份和每个个人身份的固定数量Z个实例。因此,我们在小批量中获得了总数为P×Z的查询图像[18]。 我们使用等式6来更新集群表示,如图3所示。值得注意的是,所有集群表示都存储在内存字典中,因此我们通过将每个查询实例与每个迭代中的所有集群表示进行比较来计算损失。与之前的实例级特征存储方法[11,12]相比,P×Z查询实例特征只是通过等式2在实例级内存中更新。通过将式2代入式4,每次迭代后SPCL的聚类质心可通过以下方式获得: c k ← 1 ∣ H k ∣ { ∑ u i ∈ H k , u i ∈ Q [ m u i + ( 1 − m ) q ] + ∑ u i ∈ H k , u i ∉ Q u i } c_{k}\leftarrow \frac{1}{\left| H_{k}\right|}\left\{ \sum_{u_{i}\in H_{k},u_{i}\in Q}^{}[mu_{i}+(1-m)q]+\sum_{u_{i}\in H_{k},u_{i}\notin Q}^{}u_{i}\right\} ckHk1uiHk,uiQ[mui+(1m)q]+uiHk,ui/Qui其中Q表示查询实例特征集,其中包含一次迭代的查询图像的所有特征向量。从等式8可以清楚地看到,每次迭代只更新每个集群中属于Q的部分实例,但集群中不属于Q的实例不会更新。在一个历元之后,所有小批量实例都会迭代更新,也就是说,所有实例只更新一次。 这可以表示为Q包含集群中的所有实例,即 Q ⊇ H k Q\supseteq H_{k} QHk,以便 ∑ u i ∈ H k , u i ∉ Q u i = 0 \sum_{u_{i}\in H_{k},u_{i}\notin Q}^{}u_{i}=0 uiHk,ui/Qui=0。那么等式8可以写成: c k ← 1 ∣ H k ∣ ∑ u i ∈ H k , u i ∈ Q [ m u i + ( 1 − m ) q ] = m 1 ∣ H k ∣ ∑ u i ∈ H k , u i ∈ Q u i + ( 1 − m ) 1 ∣ H k ∣ ∑ u i ∈ H k , u i ∈ Q q = m c k + ( 1 − m ) q c_{k}\leftarrow \frac{1}{\left| H_{k}\right|}\sum_{u_{i}\in H_{k},u_{i}\in Q}^{}[mu_{i}+(1-m)q]=m\frac{1}{\left| H_{k}\right|}\sum_{u_{i}\in H_{k},u_{i}\in Q}^{}u_{i}+(1-m)\frac{1}{\left| H_{k}\right|}\sum_{u_{i}\in H_{k},u_{i}\in Q}^{}q=mc_{k}+(1-m)q ckHk1uiHk,uiQ[mui+(1m)q]=mHk1uiHk,uiQui+(1m)Hk1uiHk,uiQq=mck+(1m)q最值得注意的是,只有在一个历元完成后,集群中心才能持续更新一次。然而,我们的更新方法(公式6)在整个训练过程中保持了聚类的一致性。通过比较上述方程,可以看出我们的方法唯一地更新了聚类表示,从而解决了一致性问题。

Loss Function.

我们使用公式5来计算簇特征损失。当q与其正簇特征 ϕ + \phi _{+} ϕ+相似且与所有其他簇表示不同时,损失值较低。这是基于K-way softmax的分类器的对数损失,该分类器试图将q分类为 ϕ + \phi _{+} ϕ+

4. Experiment

4.1. Datasets and Implementation
Datasets

我们在四个大规模的人员重新识别(re ID)基准上评估了我们提出的方法:Market1501[53]、DukeMTMC reID[33]、MSMT17[44]、PersonX[37]和一个车辆reID数据集VeRi-776[27]。Market-1501、DukeMTMC-reID和MSMT17被广泛用于现实世界中的人员重新识别任务。 PersonX是基于Unity[32]合成的,其中包含手动设计的障碍物,如随机遮挡、分辨率和光照差异。 为了证明我们的方法的鲁棒性,我们还对广泛使用的真实场景VeRi-776数据集进行了车辆重新识别实验。 表1总结了这些数据集的详细信息。 在这里插入图片描述

Implementation Details

我们采用ResNet-50[16]作为特征提取程序的主干编码器,并使用ImageNet[6]上预先训练的参数初始化模型。 在第4层之后,我们移除所有子模块层,并添加全局平均池(GAP),然后是批量标准化层[20]和L2标准化层,这将生成2048个维度特征。在测试过程中,我们利用全局平均池层的特征来计算距离。在每个时代的开始,我们分别使用DBSCAN[8]和InfoMap[34]进行聚类以生成伪标签。

对于Market-1501、PersonX和MSMT17数据集,输入图像的大小为256 x 128;对于V eRi776,输入图像的大小为224 x 224。对于训练图像,我们执行随机水平翻转、10像素填充、随机剪切和随机擦除[54]。每个小批量包含16个伪个人身份的256个图像(每个人16个实例)。我们采用Adam优化器对权重衰减为5e-4的re-ID模型进行训练。初始学习速率设置为3.5e-4,在总共50个历元中,每20个历元将其降低到其先前值的1/10。为了证明我们方法的泛化能力,我们将DBSCAN和InfoMap[1]聚类方法应用于伪标签分配。对于DBSCAN,我们使用了与[12]相同的参数设置,其中两个样本之间的最大距离d为0.6,核心点中的最小邻居数为4。对于InfoMap,我们采用两级定向链接网络进行聚类,不需要设置超参数。

4.2. Comparison with State-of-the-arts
Compared with SOTA USL Methods.

我们首先将我们的方法与最先进的USL方法进行比较,这是我们方法的主要重点。从表2可以看出,我们的方法明显优于所有现有的无监督方法,这证明了我们的方法的有效性。基于相同的管道和DBSCAN聚类方法,我们的方法的mAP在Market-1501[53]、MSMT17[44]、DukeMTMC reID[33]、PersonX[37]和V eRi-776[27]上分别超过最先进的USL方法SPCL[12]9.0%、8.5%、7.3%、12.4%和3.4%。

Compared with SOTA UDA Methods.

我们还将我们的方法与最新的UDA re ID方法进行了比较。UDA方法可以充分利用标记的源域数据集,因此它们通常比USL re ID方法获得更好的结果。ClusterNCE损失也可以很容易地推广到UDA re ID方法。 表2显示,我们的纯无监督re-ID方法的mAP仍然比SOTA UDA方法[12]高出6%,尽管它们使用了更多的训练数据。

Compared with Different Clustering Algorithms

如表2所示,除了在以前的re ID方法中广泛使用的DBSCAN聚类算法外,使用InfoMap聚类算法进行聚类对比可以获得更好的结果。Infomap是一种基于Map等式[34]的网络聚类算法,其目的是最大限度地减少在不同集群之间移动所需的信息。它的超参数比DBSCAN少。

Compared with IBN-ResNet-50 and ResNet-50 back-bones.

实例批量归一化(IBN)[31]结合了IN[39]学习外观不变性特征和BN[20]学习内容相关信息的优点。在有监督的学习任务中,它在对象识别方法中被证明是有效的。如表3所示,使用IBN ResNet作为主干可以进一步提高性能。

4.3. Ablation Studies

在本节中,我们研究了聚类对比法中各种成分的有效性。我们将带有实例级内存字典(图3(b))的USL管道定义为基线方法。

Memory Updating Consistency

在第3.3节中,我们认为与实例级内存相比,集群级内存可以更一致地更新集群功能。如图3(b)所示,实例级内存字典维护数据集每个实例的功能。在每次训练迭代中,minibatch中的每个实例特征都将更新到自己的内存字典中。由于集群大小分布不均衡,当一个小集群中的所有实例都被更新时,在一个大集群中只有一小部分实例特征可以被更新。

最简单的解决方案是增加批量。随着批量大小的增加,一个集群内可以更新更多的实例功能。如表4所示,基线的性能随着批量的增加而增加。然而,由于GPU内存的原因,批处理大小达到了256的上限。

为了解决GPU内存的限制,我们提出了另一个解决方案,将集群大小限制为一个常数。因此,在每次迭代中,实例特征的固定部分都可以更新。通过这种方式,实例特征向量可以以小批量一致地更新。表5中的结果表明,基线的性能随着更新的实例特征部分的增加而增加,直到一个集群中的所有实例特征向量可以在一次迭代中更新。总之,我们提出了聚类对比度,它可以在一次迭代中更新聚类特征表示。

Cluster Feature Representation

如图3(b)所示,实例级内存平均所有实例特征向量,以表示集群特征。然而,在USL re ID中,伪标签生成阶段将不可避免地引入异常实例。在图6中,我们计算了Market-1501数据集上不同真实类别聚集到同一类别中的比例。结果表明,当模型训练结束时,仍有大约20%的噪声实例。

将这些不正确的实例特征向量与正确的实例特征向量进行平均,计算出聚类特征质心,这对聚类表示是有害的。我们的方法可以得到更好的特征表示,如图7所示。通过类内距离和类间距离度量的方法的特征质量比基线方法要好得多。由此我们可以推测,更好地表示类之间的特征是我们的方法获得更好结果的一个重要因素。

Momentum Values.

我们使用动量更新策略来更新内存字典中的集群表示。如等式6所示,动量值m控制集群内存的更新速度。m的值越大,集群内存更新越慢。我们在Market-1501数据集上进行了实验,以探索不同m值对我们的方法的影响。如图5(b)所示,当m小于0.9时,它的性能相当好。当m太大(例如,大于0.9)时,精度会显著下降。这些结果支持我们构建更好的集群表示。

Batch Size.

为了探索不同的批量大小对我们的方法的影响,我们使用32到256的不同批量大小来训练我们的方法。从图5(a)所示的实验结果中,我们可以看出,大批量将获得更好的结果。与表4中的基线方法相比,我们的方法在64到256的大批量范围内保持稳定。

5. Conclusion

在本文中,我们提出了聚类对比机制,它在聚类级存储字典中存储特征向量并计算对比度损失。无论集群大小或数据集大小如何,它都会统一集群功能的更新进度。它使用了一种更健壮的聚类特征表示来计算对比损失。实验表明,具有簇对比度的简单USL管道优于所有现有的USL和UDA re ID方法。
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值