深度特征嵌入和欧几里得相似性如何推动自动植物叶片识别

深度特征嵌入和欧几里得相似性如何推动自动植物叶片识别

原文:towardsdatascience.com/how-deep-feature-embeddings-and-euclidean-similarity-power-automatic-plant-leaf-recognition/

引言

自动植物叶片检测是计算机视觉和机器学习领域的一项显著创新,它通过检查叶片照片来识别植物物种。深度学习被应用于从叶片图像中提取有意义的特征,并将它们转换为称为嵌入的小型数值表示。这些嵌入捕捉了形状、纹理、叶脉模式和边缘等关键特征,使得比较和分组变得容易。基本思想是创建一个可以指纹化叶片照片并将其与已知物种数据库匹配的系统。

一个植物叶片识别系统通过最初在图像中识别和隔离叶片,然后编码嵌入向量,随后使用距离度量将嵌入向量与参考嵌入向量匹配来运行。更具体地说,欧几里得距离是测量高维空间相似性的直接方法。在归一化嵌入的情况下,这种距离与两片叶子之间的相似性呈正相关,允许使用最近邻分类方法。

我们的目标有三点:

  1. 展示深度 CNN 如何学习小的、具有判别性的叶片图像嵌入。

  2. 展示如何通过最近邻匹配来证明欧几里得相似性在物种分类中的可靠性。

  3. 创建一个在 UCI 一百种植物物种叶片数据集上完全可重复的流程,包括代码、评估以及结果的可视化。

自动植物物种识别为何重要?

能够根据叶片图像自动识别植物物种的重要性具有非常深远的影响,包括科学、环境、农业和教育。此类系统适用于生物多样性保护,提供了一个界面,用于在相机陷阱或公民科学平台上捕获的大量图像数据集,允许在几秒钟内对受威胁或入侵性植物物种进行编目和追踪。这种能力在高度多样化的生态系统中相关,包括热带雨林,以实现实时生态决策,并允许保护主义者针对其资源。

影响的关键领域:

农业:允许进行精准农业,以识别和治疗作物、杂草的疾病,并优化农药的使用。移动应用程序允许农民扫描叶片以获得即时反馈,提高产量并最小化环境退化。

教育: 通过用户拍摄叶片照片来促进互动学习,了解物种的生态、药用或文化用途。这可以帮助博物馆和植物园与游客进行更多互动。

*• 药理学: *能够正确识别药用植物,这将加快用于开发药物的新生物活性物质的发现。

数字图书馆和物联网: 在大型数据库中自动对植物图像进行标记、索引和检索。它集成了具有物联网的智能摄像头,这为持续监控温室和研究区域提供了机会。

探索 UCI 一百种植物叶片数据集

我们的识别系统依赖于存储在 UCI 机器学习存储库(CC BY 4.0 许可)上的一百种植物叶片数据集。这是一个包含 1,600 张高分辨率照片的集合,每张照片都有 100 种样本中的 16 个样本。这些物种包括常见的树木如橡树以及更多异国物种,它们在叶片形态学方面提供了丰富的多样性。

将每张图片都聚焦于一片叶子和一个单调的背景,使得干扰最小化,主要特征清晰。但在实际操作中,世界的运作通常是复杂场景,因此有必要进行如分割等处理步骤。数据将包含如 Acer palmatum(日本枫)和 Quercus robur(英国橡树)等具有独特特征但变化的物种。

通过调整图像大小到标准输入尺寸(例如,224×224 像素)并进行归一化来准备数据。可以通过增加旋转和翻转等增强技术来模拟变化,从而提高模型的鲁棒性。

数据集的标签提供了地面真实物种,这允许进行监督学习。我们通过将数据分为训练集(80%)、验证集(10%)和测试集(10%)来实现无偏评估。

这个数据集的优势在于其平衡性和现实性,描绘了一些困难,例如扫描中的轻微遮挡或颜色差异。与 PlantNet 等更大的结果相比,它更容易用于原型设计,但具有足够的多样性。

数据集中的样本叶片图像

图片

照片由Cope 等人(未注明日期)UC Irvine 机器学习存储库上提供

使用 ResNet-50 的深度特征嵌入

在 ImageNet 上预训练的深度卷积神经网络(CNN)ResNet-50 是我们在结构中用于提取特征的主要骨干模型。ResNet-50 已经具备了解决视觉识别任务所需的能力,特别是它有 50 层设计为残差网络,通过跳跃连接帮助缓解了深层网络中的梯度消失问题。使用预训练的权重,我们使用数百万自然图像的图像来寻找通用图像表示,并将它们推广到植物叶子世界,这需要很少的训练数据和计算。

ResNet-50 为每个叶子图像生成一个 2048 维的嵌入向量,这是一个极其低维的数值描述,它包含了叶子图像中所有最重要的特征。嵌入向量是作为最终平均池化层的输出产生的(该层从网络的最后特征图输出并创建一个一维摘要),它总结了网络的最后特征图。这个摘要包括了关于叶子图像的细微和明显方面的信息,例如颜色、纹理、叶脉几何形状、边缘曲率等。然后,每个叶子的嵌入向量被转换成一个由 2048 个数字组成的字符串,每个数字代表一个学习到的模式。这些 2048 个数字用于在多维数学空间中创建叶子的指纹。在数学空间中,相似的叶子将更靠近,而不同物种的叶子将更远。

这些嵌入向量随后使用欧几里得距离进行比较,从而使得测量两个叶子之间的相似度成为可能。较小的距离表示密切相关或几乎相同的叶子形状,而较大的距离表示两个叶子之间存在显著差异。在嵌入空间中比较这些嵌入向量为我们识别流程提供了基础,提供了一种快速且易于理解的方法来比较新样本与数据库中的物种。

预处理管道

叶子图像在输入我们的深度模型之前需要通过一个统一的预处理管道,以确保一致性和与 ResNet-50 输入要求的兼容性。为了预处理图像,我们基于 Torchvision 转换创建了一个预处理转换,该转换通过调整大小和裁剪每个图像,将其转换为灰度并归一化图像,依次执行图像转换。

from torchvision import transforms

transform = transforms.Compose([
    transforms.Resize(256),                 # Shorter side → 256 px
    transforms.CenterCrop(224),             # 224×224 center crop (ResNet-50 input)
    transforms.ToTensor(),                  # PIL image → PyTorch tensor [0,1]
    transforms.Normalize(                   # ImageNet normalization
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
]) 

为了确保我们的数据分布与预训练模型分布相匹配,我们紧密遵循 ImageNet 归一化参数。这保证了输入值被归一化到零均值和单位方差,并增强了提取嵌入的稳定性。然后,每张图像都被转换为张量形式的表现,可以直接与我们的深度学习模型一起使用。

嵌入提取

预处理阶段之后,我们的系统附加深度特征嵌入。为此,我们对原始 ResNet-50 进行了修改,排除了全连接(FC)分类层,因为我们不感兴趣于图像的分类,而是对获取它们的高级特征表示感兴趣。

model = models.resnet50(pretrained=True)
model = torch.nn.Sequential(*list(model.children())[:-1])  # Remove FC layer
model.eval()  # Set model to evaluation mode

被截断的网络是在全局平均池化层截断的网络,这导致了一个产生 2048 维单图像输出的特征提取器。这些向量是有意义的,它们识别出在两个或更多叶物种之间具有区分性的模式。

我们在所有图像信息集上建立嵌入函数以开发此过程:

def get_embedding(img_path):
    img = Image.open(img_path).convert('RGB')	# Open and ensure RGB format
    img_t = transform(img).unsqueeze(0)           # Apply preprocessing and add batch dimension
    with torch.no_grad():                         # Disable gradient tracking for efficiency
        emb = model(img_t).squeeze().numpy()      # Extract 2048-D embedding
    return emb / np.linalg.norm(emb)              # Normalize the vector using L2 normalization

L2 归一化使得嵌入位于单位超球面上,从而可以在样本之间进行公平和一致的欧几里得距离比较。此归一化步骤消除了尺度变化,并且仅比较特征的方向,最适合用于测量叶嵌入之间的相似性。

最后,此嵌入函数应用于 100 种植物的 1600 张叶图像。然后,这些结果特征向量以系统组织的形式存储在按物种划分的数据库中,这是我们识别系统的核心。

species_db = {
    species: [get_embedding(path) for path in paths]
    for species, paths in species_images.items()
} 

在这里,每个物种键的值是对应物种归一化嵌入的列表。我们的系统能够通过快速计算成对距离,基于我们对存储样本的有序数据库与查询嵌入的相似性搜索,进行准确的植物物种识别。

用于相似性匹配的欧几里得距离

在获得 2048 维 L2 归一化嵌入后,我们可以使用欧几里得距离来测量两张叶图像之间的相似性。给定两个嵌入 x,y∈R2048

由于所有嵌入都被归一化到单位长度,因此这个距离与它们的角区分度成正比,即:

其中 cos𝜃=𝑥⋅𝑦。较小的欧几里得距离意味着两个嵌入在特征空间中更相似,这增加了叶子是同一类的概率。

作者提供的图片

该度量使我们的系统能够根据查询嵌入对数据库图像进行排序,并基于相似性实现准确且可解释的分类。

识别流程

我们系统中的识别流程涉及自动识别查询叶子图像匹配到的物种,无论是匹配物种数据库的组成还是其存储的嵌入。以下函数逐步阐明这一过程。

def recognize_leaf(query_path, threshold=0.68):
    query_emb = get_embedding(query_path)          # Extract embedding of query leaf
    min_dist = float('inf')
    best_species = None
    for species, embeddings in species_db.items(): # Iterate over all stored species embeddings
        for ref_emb in embeddings:
            dist = np.linalg.norm(query_emb - ref_emb)  # Compute Euclidean distance
            if dist < min_dist:
                min_dist = dist
                best_species = species
    if min_dist < threshold:                      # Decision based on similarity threshold
        return best_species, min_dist
    else:
        return "Unknown", min_dist 

在这种暴力搜索中,计算查询嵌入与所有存储嵌入之间的欧几里得距离,并选择最近的匹配项。当距离小于预定义的值(0.68)时,系统将标签为该物种的叶子,否则,它将答案标记为未知。在大型或实时应用中,我们建议用 FAISS 索引替换,以实现更快的最近邻访问,同时不损失准确性。

可视化和分析

嵌入的 t-SNE 投影

为了更好地掌握我们学习到的特征空间,我们采用 t 分布随机邻近嵌入(t-SNE)将 2048 维嵌入投影到 2D 平面上。这种非线性降维方法能够保留局部联系,因此我们可以绘制出根据物种对嵌入进行分类的图。高物种内相似性和高物种内区分度通过明显且紧凑的簇反映出来,这表明我们的深度模型在识别每种植物物种的显著特征方面能力很强。

每个点代表一个叶子嵌入,按物种着色;紧密的簇显示相似物种,而分离良好的组确认了强大的区分学习。

图片

图片由作者提供

距离分布分析

为了测试我们嵌入的区分能力,我们检查了一对图像之间欧几里得距离的分布。同一物种(类内)的距离应该远小于物种之间的距离(类间)。通过映射这种关系,我们发现了一条明显的线或多种线作为最大相似度阈值(例如,设置为 0.68)的指标,在此阈值上我们做出相似度识别决策。这一观察结果验证了我们的嵌入模型在特征空间中成功聚类相似叶子并区分不同物种的发现。

图片

图片由作者提供

阈值调整的 ROC 曲线

为了以系统的方式推导出真实和假阳性之间的最佳决策边界,我们绘制了接收者操作特征(ROC)曲线,该曲线展示了在不同阈值下真阳性率(TPR)和假阳性率(FPR)之间的权衡。曲线上升表示对相同物种和不同物种对的判断得到改善。曲线下面积(AUC)是总性能的衡量标准,我们的系统具有出色的 AUC 值为 0.987,这确保了它在基于相似性的识别方面非常可靠。Youden J 统计量最大化了最佳阈值的敏感性和特异性(0.68)。

图片

图片由作者提供

精度-召回率权衡

为了进一步评估在不同决策阈值下的识别性能,我们测试了精确率-召回率(PR)曲线,该曲线强调了系统识别真实匹配的能力,与正确百分比(精确率)相比,系统召回所有相关样本的能力(召回率)。这个值在信息不平衡的情况下尤其有用,其中某些物种可能被代表性不足。我们的模型在召回率超过 0.9 时非常精确,这意味着预测准确且错误很少。这表明系统在现实世界条件下得到了适当的泛化,并且非常活跃。

图片

图片由作者提供

性能评估

为了评估我们识别系统的总体有效性,我们考虑了它在训练、验证和测试中独立数据分割时的性能。该模型使用 1280 张叶片图像进行训练,并使用每种 100 个物种的 160 张图像进行验证/测试。

如下所示,研究结果具有高度的准确性和整体泛化能力。使用 Top-1 准确率(衡量模型在第一个实例上做出的正确预测比例)和 Top-5 准确率(衡量在五个最近预测中最接近的正确物种比例)进行衡量,这很重要,因为在物种视觉重叠的情况下,它们可能会面临误识别的风险。

Split Images Top-1 Accuracy Top-5 Accuracy
Train 1280
Val 160 96.2% 99.4%
Test 150 96.9% 99.4%

其他性能测量也证实了该模型的准确性,误报率为 0.8%,漏报率为 2.3%,平均每张图像(CPU)推理时间为 12 毫秒。这些发现表明,我们的系统既高效又准确,这意味着它可以以最低的计算成本支持植物的实时叶片识别。

结论和最终思考

在本文中,我们展示了使用欧几里得相似度进行深度特征嵌入可以为自动识别植物叶片提供强大且可解释的机制。我们的基于 ResNet-50 的模型,当与 UCI 机器学习仓库中的 One-Hundred Plant Species Leaves 数据集结合使用时,实现了超过 96% 的准确率,并展示了高效的计算性能。这是一种增量方法,不仅可以用于监测生物多样性和农业诊断,还可以为未来实施生态和视觉识别系统提供一个可扩展的基础。

关于作者

Sherin Sunny 是沃尔玛 Vizio 的高级工程经理,在那里他领导着负责 AWS 云中大规模自动内容识别 (ACR) 的核心工程团队。他的工作涵盖了云迁移、由 AI 机器学习驱动的智能管道、向量搜索系统和为下一代内容分析提供动力的实时数据平台。

参考文献

[1] M. R. Popp, N. E. Zimmermann 和 P. Brun, 评估在瑞士使用自动植物识别工具进行生物多样性监测——案例研究 (2025), Ecological Informatics, 90, 103316.

[2] A. G. Hart, H. Bosley, C. Hooper, J. Perry, J. Sellors-Moore, O. Moore 和 A. E. Goodenough, 评估免费自动植物识别应用的准确性 (2023), People and Nature, 5(3).

[3] G. Tariku, I. Ghiglieno, G. Gilioli, F. Gentilin, S. Armiraglio 和 I. Serina, 使用无人机收集的 RGB 图像和迁移学习自动识别和分类异质植物区域的植物物种 (2023), Drones, 7(10), 599.

[4] F. Deng, C. H. Feng, N. Gao 和 L. Zhang, 标准化和选择非差异表达基因可改善跨平台转录组数据的机器学习建模 (2025), PMC.

posted @ 2026-03-28 09:40  布客飞龙II  阅读(14)  评论(0)    收藏  举报