文章目录

  • 摘要
  • 1.引言
  • 2.相关工作
    • 车辆冲识别Vehicle Re-ID
    • 行人重识别Person Re-ID
    • Discriminative part localization(这个应该怎么称呼?具备可区分性的局部的定位?)
  • 3.方法
    • 3.1 问题描述
    • 3.2 Part-Regularized Re-ID(局部正则化的重识别)
    • 3.3 训练方案
  • 4.实验
    • 4.1 数据集和评估标准
    • 4.2 实验设置
    • 4.3 与其他方法比较
    • 4.4 模型简化测试
  • 结论

Part-regularized Near-duplicate Vehicle Re-identification
CVTEAM

摘要

  • 车辆重识别面临的近似重复挑战:如何区分具有几乎相同的外观的不同车辆实例
  • 提出一种简单但高效的局部正则化的差异性特征保持方法,可以提高对细微差异的感知能力
  • 进一步提出了一个新的框架,通过引入检测分支局部约束集成到全局重识别模块中,并通过局部和全局约束相互结合进行端到端训练
  • 测试步骤中没有部分正则化的局部约束,提出的Re-ID网络在大型基准数据集VehicleID和VeRi-776上的性能大大优于现有最先进的方法

1.引言

重识别任务:给定一张特定车辆(特定ID)的查询图像,目标是从大型摄像机网络中捕获的大型图像数据库中检索出该车辆ID对应的所有图像。

由于不同的车辆实例之间可能仅仅存在不显著的差异,车辆重识别任务仍然极具挑战性。一种直观的解决方案是,利用学习方法缩小相同车辆图像的距离,同时扩大不同车辆图像的距离。

  • 为了更好的描述距离,[12]利用深度度量学习将原始图像直接嵌入到欧氏空间中,而欧氏空间中的距离可以直接用作图像对之间的相似性度量。
  • Weinberger等人[25]则探索将度量学习用于k近邻分类,并提出了大间隔最近邻损失(LMNN)。
  • FaceNet[20]将LMNN损失改进为直接优化最终的距离度量的三元损失,可应用于重识别和人脸识别任务中。

虽然这些工作在车辆重识别任务中取得了显著的成功,但当车辆间仅存在不显著的差异时,它们往往会难以有效辨别,例如图1 (a)所示。

为了解决这一问题,近年的研究工作主要依靠额外的车牌和时空信息。

  • Liu等人[14]将车牌识别引入到reid任务中。但是车牌识别在无约束交通环境中往往由于视角的多变性和光照变化而失效。而且,出于隐私和安全考虑,车牌信息在公共基准数据集中是不可访问的。
  • 此外,还有一些方法[21,24]依靠额外的时空信息来探索最终的检索结果(一般用于重排序)。

这篇文章中,我们探讨了车辆重识别任务中的近似重复现象。如图1 (a),不同的车辆通常具有相似的几何形状和外观,难以通过深度模型进行区分。但是这些近似重复的车辆在局部细节特征上有显著差异,如车窗上的品牌和标签等,见图1 (b)。针对这种车辆重识别任务中的近似重复现象,我们提出了一种可以将局部特征和非局部特征共同整合到统一的架构中的局部正则化方法。为了避免局部特征的消融,我们在深度学习网络中增强了正则化部分的局部信息感知能力。受目标检测中ROI思想的启发,我们采用ROI接纳模块来捕获局部信息。我们使用了一种简单而有效的ROI映射方法,将检测分支与我们的重识别任务相结合。结合这些特征之后,我们又进一步提出了局部和非局部分类损失。总而言之,我们的工作有三方面的贡献:

  • 结合局部表示和全局表示,设计了一个高效的表示学习框架
  • 提出了一种局部正则化的方法来提高车辆全局特征的识别能力
  • 进行了大量的实验,证明所提出的方法优于已有最先进的方法:
    VehicleID[12]:提高57% in rank-1,23% in rank-5
    VeRi-776[14]:提高48% in mAP,2.1% in HIT@1,9.6% in HIT@5

2.相关工作

车辆冲识别Vehicle Re-ID

  • Liu等人[12]提出了一个基准数据集VehicleID,和使用 Deep Relative Distance Learning(DRDL)将车辆图像映射到欧氏空间的方法,在欧氏空间中距离可以直接用来衡量车辆图像对之间的相似性。
  • Liu等人[14]提出了另一个数据集VeRi-776,而且利用视觉外观、车牌和时空信息构建一个由粗到细的渐进搜索框架。
  • Wang等人[24]研究了车辆视角属性,提出了方位不变的特征(不会随着视角变化而变化的车辆特征)嵌入模块,通过20个车辆关键点位置来提取车辆的方位信息。
  • Shen等人[21]将时空思想进一步利用,提出了可视化时空路径建议的方法。
  • 。。。

行人重识别Person Re-ID

略。。。

Discriminative part localization(这个应该怎么称呼?具备可区分性的局部的定位?)

Discriminative part localization(区别性局部定位?对目标之间差异化的局部特征进行定位?)一直是许多领域研究的热点,如纹理识别[5、10、18、29、30]、人脸识别[37、16、17、33、23]和行人重识别[26]。
略。。。

3.方法

3.1 问题描述

给定特定查询图像,车辆重识别任务需要计算图像库中的所有图像和查询图像的相似性。

定义训练集: { x i , y i } i = 1 N \left\{x_{i}, y_{i}\right\}_{i=1}^{N} {xi​,yi​}i=1N​ , x i x_i xi​为训练图像, y i y_i yi​为对应标签。训练集和对应标签用 x \boldsymbol{x} x和 y \boldsymbol{y} y表示。

查询图像 p p p 和库图像 g g g 的相似性定义: M ( ϕ ( p ; θ ) , ϕ ( g ; θ ) ) M(\phi(p ; \boldsymbol{\theta}), \phi(g ; \boldsymbol{\theta})) M(ϕ(p;θ),ϕ(g;θ))。其中 ϕ ( ⋅ ; θ ) \phi(· ; \boldsymbol{\theta}) ϕ(⋅;θ)代表特征提取函数,通常表示一个深度编码器, M ( ⋅ ) M(·) M(⋅)代表特征空间中定义的度量。

最重要的问题是如何学习特征提取函数 ϕ ( ⋅ ; θ ) \phi(· ; \boldsymbol{\theta}) ϕ(⋅;θ)。先前的工作使用分类方法来学习函数 ϕ ( ⋅ ; θ ) \phi(· ; \boldsymbol{\theta}) ϕ(⋅;θ)中的参数 θ \boldsymbol{\theta} θ,那么优化目标可以定义为:
arg ⁡ min ⁡ θ E ( ϕ ( x ; θ ) ⊤ w , y ) (1) \underset{\boldsymbol{\theta}}{\arg \min } \mathbb{E}\left(\phi(\boldsymbol{x} ; \boldsymbol{\theta})^{\top} \boldsymbol{w}, \boldsymbol{y}\right) \tag{1} θargmin​E(ϕ(x;θ)⊤w,y)(1)
其中, ϕ ( x ; θ ) \phi(\boldsymbol{x}; \boldsymbol{\theta}) ϕ(x;θ)是参数为 θ \boldsymbol{\theta} θ的深度神经网络提取的特征, w \boldsymbol{w} w是将特征映射到预测标签的参数。 E ( ⋅ ) \mathbb{E}(\cdot) E(⋅)为交叉熵损失函数。==但是就像之前讨论的,(1)式这样的优化目标只优化了全局特征,容易忽略细微的视觉线索。==为了应对这个问题,我们引入局部信息,提出了一种基于局部特征的优化目标:
a r g min ⁡ θ E ( ϕ ( x ; θ ) ⊤ w g , y ) + ∑ p ∈ P λ p E ( ( ϕ ( x ; θ ) ⊗ M p ) ⊤ w l , y p ) (2) \begin{aligned} \underset{\boldsymbol{\theta}} {arg \min} \mathbb{E}\left(\phi(\boldsymbol{x} ; \boldsymbol{\theta})^{\top} \boldsymbol{w}_{g}, \boldsymbol{y}\right)+ & \sum_{p \in \mathbb{P}} \lambda_{p} \mathbb{E}\left(\left(\phi(\boldsymbol{x} ; \boldsymbol{\theta}) \otimes M_{p}\right)^{\top} \boldsymbol{w}_{l}, \boldsymbol{y}_{p}\right) \end{aligned} \tag{2} θargmin​E(ϕ(x;θ)⊤wg​,y)+​p∈P∑​λp​E((ϕ(x;θ)⊗Mp​)⊤wl​,yp​)​(2)
其中, w g \boldsymbol{w}_g wg​是将全局特征映射到预测标签的参数, w l \boldsymbol{w}_l wl​是将局部特征映射到预测的局部标签的局部参数。 M p M_p Mp​是用来从全局特征中提取局部特征的局部位置矩阵(类似掩模?), ⊗ \otimes ⊗是局部特征提取操作。原文中这个符号里面是雪花✻。。 该公式将局部约束引入到重识别任务中,迫使网络保留局部位置线索来对局部位置进行识别。更多细节在3.2节进行分析。
(2)式中仍然存在其他问题:

  • 1、“局部”集合 P \mathbb{P} P没有定义,也就不知道应该使用哪一部分;
  • 2、“局部”的定位 M p M_p Mp​也需要提取出来;
  • 3、 y p \boldsymbol{y}_p yp​,局部的标签,也应该被确定。

这些问题将在下一节一一分析!!!

3.2 Part-Regularized Re-ID(局部正则化的重识别)

在本节中,我们将局部正规化(PR)约束引入到车辆重识别任务中。我们的框架由两个组件组成,一个全局模块,用于进行重识别分类一个局部正则化模块,以强化对(识别出的)part的正确分类。保留更好的局部(的)周围(的)信息对于处理近似重复问题非常重要,所以我们使用边界框检测网络来进行局部定位。

1、Part definition(局部定义,这儿的part理解为车辆目标的特定部位,比如车灯,车牌等部位)
对于第一个问题,我们为局部检测模块选择了三个车辆部件,(包括前灯和后灯),++(包括前窗和后窗),以及车标。车顶头部是区分不同车型的关键,我们使用前灯来推断包括车标在内的车辆头部区域。不同的车辆模型可能有差异巨大(比如有的很大有的很小)的遮光灯,所以我们定义的车灯边界框是包含了车前灯、同时延伸到车辆底部的紧密边界框。这样的定义可以保存更多的局部目标的周围信息,我们在实验中也发现这些信息确实更稳定。模型中三个部分的定义如图3所示。

我们在图2中绘制了N个局部分支,因为我们的框架对于车辆局部的多种定义是灵活的(可以添加其他part,例如车门),我们只测试了N = 3个部分(窗、灯、车标)来验证这个框架的有效性。

如果再考虑车门部分,面临侧面视角的问题。可以结合视角检测?

2、Part detection(局部检测)
对于第二个问题,我们需要找到训练图像的局部位置坐标。现有的局部定位算法有很多,主要分为检测分割两类。分割方法需要的像素级标注难以获取,所以本文中我们使用一个检测分支来检测预定义的车辆特定部分。

如图2所示,原始车辆图像输入到 L o c a l N e t LocalNet LocalNet (实验中用的是YOLO,其中包含24个卷积层),得到原始的局部检测结果。我们期望的结果是,每个图像得到三个边界框窗口,分别是车窗,左灯和右灯。但是在训练过程中,我们发现在一些罕见的情况下,车辆局部检测模型可能由于遮挡而失效。为了处理特定车辆图像中的这些不可见的部分,我们参考同一车辆的其余图像并计算缺失部分的平均位置。然后将这些平均局部位置作为该特定图像的伪检测结果,方便后续的训练过程。

3、Part-based Feature Extraction and Aggregation(局部特征提取与整合)
基于局部的特征提取和整合模块有一个全局分支和三个局部分支。所有四个分支共享同一个backbone网络,这里可以使用any卷积backbone,我们使用的是ResNet-50 [4]。

  • 所有输入图像 resize 为 H × W H×W H×W,生成的特征图形状为 S × S × C S×S×C S×S×C
  • 全局分支简单地使用全局平均池化层来生成全局特征向量
  • 在每个局部分支里,将局部定位模块生成的ROI映射到全局特征图
  • 将输入图像划分为S×S网格,其中S×S等于全局特征图的空间大小(S×S),每个与ROI重叠的网格单元都被标记为与该ROI对应的部分
  • 然后利用局部平均池化层提取每个部分的局部特征向量

现在,我们有了(2)式中的集合 P \mathbb{P} P 和局部定位 M p M_p Mp​,我们还需要定义每个part的标签label y p \boldsymbol{y}_p yp​(这也就是(2)式中存在的问题三)。但是标签很难获取,例如,车标的标签可以设置为汽车制造商的名称,因为所有来自同一制造商的车辆车标应该是相同的。另一方面,车窗部分包含特定车辆的个性化细节,所以它应该被标注为对应的那个特定车辆的ID。考虑车辆模型和车辆制造信息在某些情况下是不可用的,我们提出使用车辆ID标签来近似part(车窗,车灯,车标)标签。所以(2)式可以修改为:
a r g min ⁡ θ E ( ϕ ( x ; θ ) ⊤ w g , y ) + ∑ p ∈ P λ p E ( ( ϕ ( x ; θ ) ⊗ M p ) ⊤ w l , y ) (3) \begin{aligned} \underset{\boldsymbol{\theta}} {arg \min} \mathbb{E}\left(\phi(\boldsymbol{x} ; \boldsymbol{\theta})^{\top} \boldsymbol{w}_{g}, \boldsymbol{y}\right)+ & \sum_{p \in \mathbb{P}} \lambda_{p} \mathbb{E}\left(\left(\phi(\boldsymbol{x} ; \boldsymbol{\theta}) \otimes M_{p}\right)^{\top} \boldsymbol{w}_{l}, \boldsymbol{y}\right) \end{aligned} \tag{3} θargmin​E(ϕ(x;θ)⊤wg​,y)+​p∈P∑​λp​E((ϕ(x;θ)⊗Mp​)⊤wl​,y)​(3)
其中 y ≈ y p \boldsymbol{y}≈\boldsymbol{y}_p y≈yp​,那么现在就可以用车辆ID标签进行模型优化了。

3.3 训练方案

我们的局部定位模块局部特征提取与整合模块都可以使用反向传播进行端到端的训练。我们采用成功的YOLO网络[19]作为 L o c a l N e t LocalNet LocalNet的backbone。在训练步骤中,首先对局部检测模块进行训练,提取出训练图像的所有局部定位(也就是边界框)。由于在测试阶段,我们没有使用局部特征分支,所以测试图像的局部信息是没有提取的。对于VehicleID和VeRi-776,我们采用了迁移学习方案,并将在ImageNet上预训练的权值用于backbone网络 G l o b a l N e t GlobalNet GlobalNet(ResNet-50)。然后使用(3)式的优化函数,初始学习率为0.01,采用指数学习速率schedule对整个特征提取模块进行微调,包括全局和局部分支。

4.实验

4.1 数据集和评估标准

数据集:VehicleID,VeRi-776

在这两个数据集中,都没有车辆局部(车窗,车灯等部分)的边界框(bounding box)标注。因此,我们从VehicleID数据集中随机选择500张车辆图像,并使用边界框标注了三个车辆局部区域(车窗、车灯和车标),并将这些图像用于训练YOLO模型。经过训练的模型在VehicleID和VeRi-776数据集上都显示出了令人印象深刻的检测结果,表明了其良好的泛化能力。

实验中采用了 mean average precision ( m A P mAP mAP) 和 cumulative match curve ( C M C CMC CMC) 评价指标,对于VeRi-776,也采用了image-to-track度量HIT@1和HIT@5。CMC:
C M C @ k = ∑ i = 1 N m ( q i , k ) N (4) C M C @ k=\frac{\sum_{i=1}^{N} m\left(q_{i}, k\right)}{N} \tag{4} CMC@k=N∑i=1N​m(qi​,k)​(4)
其中, N N N代表检索的次数,如果 q i q_i qi​出现在排序列表的前 k k k个(top-k)的话 m ( q i , k ) = 1 m(q_i,k)=1 m(qi​,k)=1。为了使用 C M C CMC CMC曲线,检索图像的真实匹配数目应该正好是1,也就是一张检索有多个匹配的情况不适用。对于 m A P mAP mAP,每个查询q的平均精度 A P AP AP如下:
A P ( q ) = ∑ k = 1 N P ( k ) Δ r ( k ) (5) A P(q)=\sum_{k=1}^{N} P(k) \Delta r(k) \tag{5} AP(q)=k=1∑N​P(k)Δr(k)(5)
m A P mAP mAP:
m A P = ∑ q = 1 N A P ( q ) Q (6) m A P=\frac{\sum_{q=1}^{N} A P(q)}{Q} \tag{6} mAP=Q∑q=1N​AP(q)​(6)
Q Q Q为查询总数。

4.2 实验设置

  • 使用ResNet-50作为特征提取的backbone
  • 在global feature map上采用average global pooling[11],然后使用1×1 卷积层提取最终的256-d 全局特征向量
  • 在训练和测试阶段,采用欧氏距离(L2)计算图像对的相似度评分
  • 值得一提的是,在测试阶段,我们只使用全局分支。因为在实验中我们发现,相比只使用全局分支,融合全局和局部特征带来的表现是类似的,这意味着我们的模型在测试阶段不需要局部检测模块。

4.3 与其他方法比较

VehicleID:
测试数据集根据大小划分为三个子集。对于每个测试数据集的划分,将选择每个车辆的一张图像并将其放入图像库,其余的图像都是查询图像。这样的设定下,对应每个车辆ID有许多查询图像,但图像库中仅有一张真实匹配图像,所以就可以使用 C M C CMC CMC度量指标。表1和表2是该数据集上的表现比较。


VeRi-776:
在测试阶段,车辆的每一张来自各个相机图像都分别作为查询图像,用于在其他相机中搜索同一车辆的轨迹。这意味着,VeRi-776的评估是通过图像到轨迹的方式进行的,其中探针(probe)是图像,目标是轨迹中的图像。那么重点是如何定义一张查询图像和一条轨迹库(里面有多张图像)的相似性,根据[14]中的设定,相似性定义为查询图像与轨迹中所有图像的最大相似性。从图像到轨迹的评价结果如表3所示。

4.4 模型简化测试

我们在VehicleID数据集上进行了模型简化测试,以考察模型中各部分分支的有效性。在我们的架构中,有三个local part 分支,分别是车窗分支、车灯分支和车标分支。我们每次删除一个分支,并对整个网络进行再训练以评估性能。如图6,是一些可视化的例子。

Vehicle window(车窗):如表4所示,去掉车窗分支会使重识别性能降低7%。车辆窗口包含的个性特征是区分同一车型的不同车辆ID的关键。可视化结果证实了这一点。如图6所示,前十名检索结果几乎全部来自同一车型。在这种情况下,来自车窗的视觉线索变得非常重要,因为其他车辆部分几乎是相同的。

Vehicle brand and light(车标和车灯):同样如图4,去掉车标或车灯分支同样会降低我们的模型性能。但是与去掉车窗分支相比,去掉车灯和车标分支只会产生更小的性能下降。这是因为全局特征也可以学习到一些车灯和车标的信息,就像之前在图5中讨论的类似。模型性能的下降表明了对神经网络进行显式约束可以提高学习效率。

Global branch(全局分支):去掉全局分支,只用三个局部分支来训练网络。在测试过程阶段,提取三部分特征向量并融合在一起计算相似度评分。毫无疑问,模型的性能急剧降。所以,车身、车轮等其他部分在区分车辆ID时也是很有用的,而全局分支是用来提取那些具备可区分性的信息的。

Influences of resolution(分辨率影响):我们对不同分辨率的输入尺寸进行实验,如表5和表6所示。对于VehicleID数据集,我们在三个不同分辨率的测试集上进行了实验。一个直观的结果是,具有更高分辨率的图像表现得更好,但同时计算成本也较高。有趣的是,我们发现尺寸为128×128的图像表现出较大的性能下降,尤其是针对CMC@1指标,而对于CMC@5和HIT@5,低分辨率的图像也产生了可行的实验结果。

结论

略。。。

这篇文章读起来比较容易理解(比上一篇NVIDIA的那个好理解多了),毕竟这篇是国人写的hahahaha。。不过模型的细节感觉文章没有描述得很清晰 >_<

CVPR 2019 Part-regularized Near-duplicate Vehicle Re-identification相关推荐

  1. (九:2020.08.27)CVPR 2019 追踪之论文纲要(译)

    CVPR 2019 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  2. CVPR 2019 论文汇总(按方向划分,0409 更新中)[转载]

    转载链接:http://bbs.cvmart.net/topics/302/cvpr2019paper 作为计算机视觉领域三大顶会之一,CVPR2019(2019.6.16-6.19在美国洛杉矶举办) ...

  3. CVPR 2019 论文大盘点-目标跟踪篇

    点击我爱计算机视觉标星,更快获取CVML新技术 跟踪在计算机视觉里有很广泛的内涵,本文所指的跟踪为通用目标跟踪,不包括比如人脸特征点跟踪.视线跟踪等特定领域. 本文总结了 19 篇相关论文,列出了代码 ...

  4. 点云 3D 目标检测 - PointPillars(CVPR 2019)

    点云 3D 目标检测 - PointPillars(CVPR 2019) 摘要 1. 导言 1.1 相关工作 1.1.1 使用CNNs进行目标检测 1.1.2 激光雷达点云中的目标检测 1.2 贡献 ...

  5. 谷歌查看html地址_104篇CVPR 2019论文,追踪谷歌、Facebook、英伟达研究课题

    [新智元导读]人工智能顶级会议CVPR刚刚公布了最佳论文,谷歌.Facebook和英伟达也随后公布了自家发表的论文共计104篇,本文列出了三家大厂论文的完整列表. 本周,在美国加利福尼亚州长滩举办了C ...

  6. 刷新记录,算法开源!字节跳动获人体姿态估计竞赛双冠 | CVPR 2019

    整理 | Jane 出品 | AI科技大本营(id:rgznai100) [导读]6 月 16--20 日,计算机视觉与模式识别领域顶会 CVPR 2019 在美国长滩举行.每年的 CVPR 盛会除了 ...

  7. 商汤62篇论文入选CVPR 2019,一览五大方向最新研究进展

    (图源自视觉中国) 作为与ICCV.ECCV并称为计算机视觉领域三大国际会议之一,本届CVPR大会共收到5265篇有效投稿,接收论文1300篇,接收率为25.2%. 商汤科技CVPR 2019录取论文 ...

  8. CVPR 2019超全论文合集新鲜出炉!| 资源帖

    整理 | 夕颜 出品 | AI科技大本营(ID: rgznai100) 实不相瞒,这是一个资源福利帖--CVPR 2019 接收论文超全合集! 此前关于 CVPR 2019 论文和合集出过不少,但是这 ...

  9. 告别低分辨率网络,微软提出高分辨率深度神经网络HRNet | CVPR 2019

    来源 | 微软研究院AI头条(ID:MSRAsia) 作者简介:孙可,中国科学技术大学信息学院在读博士生,目前在微软亚洲研究院视觉计算组实习,导师是王井东和肖斌老师.他的研究兴趣包括人体姿态估计.语义 ...

  10. 17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)

    整理 | 阿司匹林 出品 | AI科技大本营(公众号id:rgznai100) 计算机视觉和模式识别大会CVPR 2019即将于6月在美国长滩召开,作为人工智能领域计算机视觉方向的重要学术会议,CVP ...

最新文章

  1. 通过配置NFS使Ubuntu和海思3559A板子共享目录
  2. 如何拿到高薪数据分析师offer?从精准解读一篇招聘信息开始!
  3. Python 列表(List)操作方法详解
  4. equipment download scenario3
  5. Python—实训day3—简单的在线翻译程序
  6. web.py开发web 第一章 Hello World
  7. Facebook的体系结构分析---外文转载
  8. Unity工程中 .Meta 文件的来龙去脉
  9. 多线程等待/通知机制
  10. asp教程一:创建 Active Server Page 页
  11. Mac实用软件及功能吐血总结
  12. 【开源】在线教育系统.net源码-PC端-手机端
  13. r语言如何下载carzip包本地安装_R语言安装R package的2种方法
  14. 好看的php表格样式,HTML5制作表格样式
  15. Android NDK 下载地址
  16. 学习笔记(26):玩转Python-Python3基础入门-案例-快递价格计算器(1)
  17. Sap hana 升级思路
  18. 5不触发系统键盘_智能化子系统红外周界报警的基础知识介绍!
  19. chtMultiRegionFoam求解器及算例分析
  20. supermap使用idesktop发布二三维管线地图

热门文章

  1. 【历史上的今天】9 月 10 日:互联网上第一个搜索工具诞生;微软首席架构师出生;马云诞生
  2. Android自定义弹窗
  3. 【HCIA-openEuler】V1.0 华为认证(题目)
  4. 【AI绘图】咒术师的评级指南
  5. Leetcode139.单词拆分
  6. 追风筝的人 第四章
  7. linux如何隐藏文件夹名称,如何在Ubuntu中隐藏文件或文件夹
  8. Hadoop实例:二度人脉与好友推荐
  9. 作为新人,如何快速融入新团队?用好这8个点
  10. Python 3中的lambda函数使用