#DeepLabV3~植叶病害检测

使用深度学习进行疾病检测是加快植物病理学过程的好方法。在大多数情况下,在使用深度学习时,我们会使用图像分类或疾病(对象)检测。但我们也可以使用语义分割。在某些情况下,使用语义分割进行叶病识别更有帮助。这是因为深度学习模型可以输出受疾病影响的区域。本文我们将介绍 PyTorch 和 DeepLabV3 进行叶片病害分割。

51c视觉~合集18_视觉

    分割叶子或植物上的特定区域可能非常具有挑战性。特别是,当患病区域不是那么大时。可能有几种类型的疾病会影响植物的叶子。有些疾病覆盖的面积较大,有些疾病覆盖的面积非常小。在做叶病分割项目时,我们还将分析模型可能面临的所有这些困难。

叶片病害分割数据集

    本文中我们将使用叶病分割数据集的变体。该数据集包含病叶的原始形式和增强形式的图像。但数据集不包含训练/验证集划分。

    我们准备了另一个数据集,具有训练和验证划分。您可以在此处找到具有训练/验证拆分的数据集。这是我们将在此项目中使用的数据集。它还包含原始图像和aug_data目录。

    但是,我们将使用原始图像并将增强添加到训练管道中。大约 15% 的图像保留用于验证,其余用于训练。这将带来大约 90 个验证图像和 498 个训练图像。

    以下是一些图片以及他们在训练场景中的掩码(mask)。

    下载数据集后,您应该会看到以下目录结构。

├── aug_data
│   ├── train_images
│   ├── train_masks
│   ├── valid_images
│   └── valid_masks
└── orig_data
    ├── train_images
    ├── train_masks
    ├── valid_images
    └── valid_masks

    我们将使用来自orig_data目录。

    叶子上的掩码代表了一种影响了它的疾病。请注意,我们不会对不同类型的疾病进行细分。取而代之的是,我们只是分割了受疾病影响的叶子区域。

    此外,在真实的掩码(ground truth mask)中,叶子上的患病区域的像素值为 (128, 0, 0),因此它显示为红色。在准备数据集时,我们需要像素值信息。

    现在,请继续下载带有训练/有效分割的叶病分割数据集。

https://www.kaggle.com/datasets/sovitrath/leaf-disease-segmentation-with-trainvalid-split

项目目录结构

    在进入编码部分之前,让我们看一下整个项目的目录结构。

.
├── input
│   └── leaf_disease_segmentation
│       ├── aug_data
│       └── orig_data
├── outputs
│   ├── valid_preds
│   │   ├── e0_b21.jpg
│   │   ...
│   │   └── e9_b21.jpg
│   ├── accuracy.png
│   ├── best_model_iou.pth
│   ├── best_model_loss.pth
│   ├── loss.png
│   ├── miou.png
│   └── model.pth
└── src
    ├── config.py
    ├── datasets.py
    ├── engine.py
    ├── inference_image.py
    ├── inference_video.py
    ├── metrics.py
    ├── model.py
    ├── train.py
    └── utils.py
8 directories, 71 files

    leaf_disease_segmentation目录包含数据集,整个目录将位于input文件夹。

    outputs文件夹将包含训练和验证实验的所有输出。

    src文件夹包含源代码文件。总共有 9 个 Python 文件。我们将在终端内执行所有命令在src目录下。

    如果你想直接使用训练后的模型推理,可以直接下载,然后放到output下:

https://www.kaggle.com/datasets/sovitrath/leaf-disease-segmentation-trained-weights

使用 PyTorch DeepLabV3 进行叶病分割

    现在让我们深入了解这个项目的实际细节。尽管我们无法深入了解代码文件的所有详细信息,但我们仍将检查以下内容:

  • 包含一些全局值的配置文件。
  • 我们用于叶片病害语义分割的深度学习模型。
  • 数据集准备策略以及增强。
  • IoU 和准确性指标。
  • 关于实用程序和帮助程序脚本的简短讨论。
  • 以及可用于训练的论点。

    配置文件

    我们有一个config.py的包含一些全局配置值的文件。我们可以通过导入它们来在不同的 Python 模块中使用它们。

ALL_CLASSES = ['background', 'disease']
LABEL_COLORS_LIST = [
    (0, 0, 0), # Background.
    (128, 0, 0),
]
VIS_LABEL_MAP = [
    (0, 0, 0), # Background.
    (255, 0, 0),
]

    ALL_CLASSES list 包含数据集中类的名称。由于这是一个二进制分割数据集,除了叶子的疾病类,我们也有背景类。

    了LABEL_COLORS_LIST是一个包含元组格式的 RGB 值的列表。这些是与ground truth分割掩码中的确切值一样的值。我们需要在datasets.py文件以正确准备数据集。

    我们还有VIS_LABEL_MAP包含用于可视化的颜色的列表。正如您可能观察到的,我们正在使用纯红色进行推理可视化,这与绿叶形成了更好的对比。

    DeepLabV3 模型

    我们将使用 DeepLabV3 ResNet50 作为我们在数据集上进行训练的主要模型。这意味着我们将使用它来分析训练结果和运行推理。由于 PyTorch (Torchvision) 已经包含了一个预训练模型,因此准备模型非常容易。

    我们只需要一个简单的函数来做到这一点。

def prepare_model(num_classes=2):
    model = deeplabv3_resnet50(weights='DEFAULT')
    model.classifier[4] = nn.Conv2d(256, num_classes, 1)
    model.aux_classifier[4] = nn.Conv2d(256, num_classes, 1)
    return model

    我们需要将输出通道更改为数据集中的classifier和aux_classifier。

model.py中取消注释。

    叶片病害分割的数据集准备策略

    准备数据集时最重要的部分是增强。从各种实验中,我发现我们需要大量的增强来防止 DeepLabV3 ResNet50 模型在此数据集上过拟合。

    注意:即使增强较少,DeepLabV3 MobileNetV3 Large模型的过拟合也没有那么严重。但是我们需要对 ResNet50 培训进行大量增强。

    由于其易于使用,因此在此项目中,我们将使用 Albumentation 库进行增强。

    这些是最终的增强以及括号中的概率值:

  • HorizontalFlip (p=0.5)
  • RandomBrightnessContrast (p=0.2)
  • RandomSunFlare (p=0.2)
  • RandomFog (p=0.2)
  • Rotate (limit=50)
  • ImageCompression (p=0.2)

    这些提供了大量的正则化。但正如我们稍后将看到的那样,我们还需要更多的东西来进一步规范训练过程。

    下面是一些样本以及它们在随机增强后的图示效果。

    只有 HorizontalFlip 和 Rotate 同时应用于图像和ground truth掩码。其余部分仅应用于图像。

    我们不会对验证数据集应用增强。但是,我们根据 ImageNet 归一化值对训练图像和验证图像进行归一化。这是因为我们正在使用预训练模型并对其进行微调。

    IoU 和准确性指标

    我们将使用 IoU和accuracy 指标来评估模型。metrics.py包含IOUEval类。

    我使用此存储库中的代码进行 IoU 和准确率计算,因为它包含一些不错的批处理和历史功能。

    这里值得注意一些。为了在训练期间保存最佳模型,我们将使用两个标准。我们将根据当前时期的最小损失值以及模型达到最高 IoU 时保存模型。

    有时,验证损失最小的模型可能不是 IoU 最高的模型。同样,有时,根据该特定时期的损失,具有最高 IoU 的模型可能是过拟合模型。

    保存两个不同的模型将使我们能够做出明智的决定,以选择最佳模型进行推理。

    实用程序和帮助程序脚本

    在训练 DeepLabV3 模型进行叶病分割时,我们将需要几个辅助函数和类。

    utils.py包含所有这些函数和类。这是一个相当长的文件。因此,这里是它包含的所有内容的列表:

  • set_class_values函数将特定整数转换为数据集中的特定类。
  • get_label_mask将图像中属于同一类的像素编码到同一标签中。
  • draw_translucent_seg_maps函数,用于在验证循环期间在其中一个图像上添加预测的分割图,并将其保存到磁盘。这有助于直观地分析训练过程。
  • SaveBestModel根据最小的损失保存模型。
  • SaveBestModelIOU 根据最高 IoU 保存最佳模型。
  • save_model函数最后一次使用优化器状态字典保存模型。您可以稍后使用它来恢复训练。
  • save_plots用于将损失、准确性和 IoU 图保存到磁盘的函数。
  • 用于推理的转换。
  • 这get_segment_labels在推理过程中将图像转发到模型中的函数。
  • draw_segmentation_map将预测的蒙版转换为 RGB 格式的函数。
  • image_overlay将RGB分割图叠加在图像上的功能。

    训练 DeepLabV3 模型进行叶片病害分割

    我们将使用train.py的脚本开始训练。在进入训练实验之前,让我们先看看训练脚本支持的所有参数解析器。

    --epochs:我们想要训练模式的纪元数。

    --lr:优化器的学习率。默认值为 0.0001。

    --batch:数据加载器的批量大小。

    --imgsz:在准备数据集时调整图像大小分辨率。默认值为 512,这会将图像大小调整为 512×512 分辨率。我们将仅使用默认值。

    --scheduler:这是一个布尔参数,指示我们是否要应用任何学习率计划。如果我们将此参数传递给训练脚本,那么每 20 个 epoch 后,学习率将降低 10 倍。这是检查较大模型过拟合的好方法。

    所有训练和推理实验均在配备 10 GB RTX 3080 GPU、第 10 代 i7 CPU 和 32 GB RAM 的系统上进行。

    DeepLabV3 ResNet50 训练

    要开始训练,我们可以在终端中执行以下命令,方法是保持来源:作为当前工作目录。

python train.py --epochs 50 --batch 4 --scheduler

    我们使用的批处理大小为 4,图像分辨率为 512×512。如果您遇到内存不足 (OOM) 错误,请减小图像大小和/或批量大小,然后继续操作。

    以下是终端的一些输出:

Namespace(epochs=50, lr=0.0001, batch=4, imgsz=512, scheduler=True)
41,994,308 total parameters.
41,994,308 training parameters.
Adjusting learning rate of group 0 to 1.0000e-04.
EPOCH: 1
Training
|                    | 125/? [01:29<00:00,  1.40it/s]                                                                                                                                         
Validating
|                    | 23/? [00:04<00:00,  5.15it/s]                                                                                                                                          
Best validation loss: 0.2707192062035851
Saving best model for epoch: 1
Best validation IoU: 0.6108606394368111
Saving best model for epoch: 1
Train Epoch Loss: 0.4412, Train Epoch PixAcc: 0.8103, Train Epoch mIOU: 0.536401
Valid Epoch Loss: 0.2707, Valid Epoch PixAcc: 0.8554 Valid Epoch mIOU: 0.610861
Adjusting learning rate of group 0 to 1.0000e-04.
--------------------------------------------------
.
.
.
EPOCH: 47
Training
|                    | 125/? [01:26<00:00,  1.45it/s]                                                                                                                                         
Validating
|                    | 23/? [00:04<00:00,  5.18it/s]                                                                                                                                          
Best validation loss: 0.1456461318809053
Saving best model for epoch: 47
Best validation IoU: 0.7550247198403427
Saving best model for epoch: 47
Train Epoch Loss: 0.1713, Train Epoch PixAcc: 0.9238, Train Epoch mIOU: 0.754309
Valid Epoch Loss: 0.1456, Valid Epoch PixAcc: 0.9028 Valid Epoch mIOU: 0.755025
Adjusting learning rate of group 0 to 1.0000e-06.
--------------------------------------------------
EPOCH: 48
Training
|                    | 125/? [01:26<00:00,  1.45it/s]                                                                                                                                         
Validating
|                    | 23/? [00:04<00:00,  5.16it/s]                                                                                                                                          
Best validation IoU: 0.7596472606104833
Saving best model for epoch: 48
Train Epoch Loss: 0.1744, Train Epoch PixAcc: 0.9207, Train Epoch mIOU: 0.746095
Valid Epoch Loss: 0.1499, Valid Epoch PixAcc: 0.9011 Valid Epoch mIOU: 0.759647
Adjusting learning rate of group 0 to 1.0000e-06.
--------------------------------------------------
EPOCH: 49
Training
|                    | 125/? [01:26<00:00,  1.44it/s]                                                                                                                                         
Validating
|                    | 23/? [00:04<00:00,  5.17it/s]                                                                                                                                          
Train Epoch Loss: 0.1708, Train Epoch PixAcc: 0.9229, Train Epoch mIOU: 0.752612
Valid Epoch Loss: 0.1483, Valid Epoch PixAcc: 0.9017 Valid Epoch mIOU: 0.753524
Adjusting learning rate of group 0 to 1.0000e-06.
--------------------------------------------------
EPOCH: 50
Training
|                    | 125/? [01:26<00:00,  1.44it/s]                                                                                                                                         
Validating
|                    | 23/? [00:04<00:00,  5.21it/s]                                                                                                                                          
Train Epoch Loss: 0.1848, Train Epoch PixAcc: 0.9169, Train Epoch mIOU: 0.736219
Valid Epoch Loss: 0.1501, Valid Epoch PixAcc: 0.9019 Valid Epoch mIOU: 0.754699
Adjusting learning rate of group 0 to 1.0000e-06.
--------------------------------------------------
TRAINING COMPLETE

    我们在第 47 epoch上获得了最佳 IoU + 最佳验证损失。但在第 48 epoch,随着 IoU 的改进,我们得到了最好的模型。此模型被另存为best_model_iou.pth在输出目录。我们将进一步使用此模型进行推理实验。

    以下是训练后的损失图、IoU 图和准确度图。

    我们选择的学习率时间表似乎运作良好。正如我们所看到的,在学习率计划周期之后,所有三个图形中的波动似乎都会减少。

    我们的最佳验证 mIoU(平均 IoU)为 75.5。

    DeepLabV3 MobileNetV3 Large结果

    如果您对此感到好奇,以下是 DeepLabV3 MobileNetV3 Large 训练的结果。

    最佳验证损失:0.156

    最高验证 mIoU:66.4

    正如我们所看到的,与 ResNet50 结果相比,最佳验证平均 IoU 要低得多。

    您可以访问这两个经过训练的权重。在转到推理部分之前,您可以从此 Kaggle 链接下载模型。

https://www.kaggle.com/datasets/sovitrath/leaf-disease-segmentation-trained-weights

使用经过训练的 DeepLabV3 模型进行叶病分割的推理

    让我们使用最好的 DeepLabV3 ResNet50 权重并运行一些推理实验。

    图像推理

    我们将使用inference_images.py的用于对数据集中的验证图像运行推理的脚本。这样,我们可以很容易地比较结果,因为我们也有ground truth掩码。

python inference_image.py --model ../outputs/best_model_iou.pth --input ../input/leaf_disease_segmentation/orig_data/valid_images/

使用--model标志设置最佳模型的路径,使用--input指定数据目录的路径。

    以下是一些很好的细分结果。

    如您所见,结果可能并不完美,但它们非常好。该模型甚至能够分割叶子上的小面积疾病。

    下图显示了模型未能正确分割叶子上的病变区域的一些结果。

    在上述示例中,该模型无法预测叶子上病害的整个区域。

    对新图像进行推理

    在最后一个实验中,让我们对互联网上一些未见过的图像进行推理。数据位于input/inference_data目录。

python inference_image.py --model ../outputs/best_model_iou.pth --input ../input/inference_data/images/

    下面是一些预测结果:

    预测结果还是不错,有些小的病害也可以正确检测出。开发板商城 天皓智联 TB上有视觉设备哦 支持AI相关~ 大模型相关也可用whaosoft aiot

总 结

    在本文中,我们训练了一个 DeepLabV3 模型,用于叶病的语义分割。在经历了整个过程之后,我们开始了解模型在验证图像上的表现。为了进一步提高性能,我们可以收集更多此类图像进行训练。另一种选择是使用 ResNet101 主干网训练更大的模型,例如 DeepLabV3。但这也需要更多的 GPU 内存,并且训练速度较慢。

    源码下载:

链接: https://pan.baidu.com/s/1uALH08v6DemqNqBUwOCVpQ 提取码: 28fb




#顶会rebuttal技术浅谈

作为拯救工作、争取被捞的最后一次绝佳机会,丁霄汉大佬为大家总结了他在多次rebuttal经历后的经验总结,争取最大机会上岸!

上次VALSE学生论坛的时候有同学问到了rebuttal的技巧,当时我谈到了一些浅见,有同学表示还挺有用。在我上学这几年里主导投稿全过程的文章中,有六七篇都在第一轮审稿中有borderline reject及以下的意见,最后还是通过rebuttal而最终中稿。所以说rebuttal真的有用,没必要看到两个负面意见就放弃。现在正好到了CVPR rebuttal的时候,我把这些经验总结了一下,希望对大家有所帮助。

谈到如何rebuttal,我们不妨列出如下几条公设。

  • 公设一:rebuttal的最终目的是说服AC,而说服审稿人只是说服AC的途径之一
  • 公设二:审稿人的水平参差不齐,有些根本不具备评判你文章质量的水平。
  • 公设三:尽管确实存在“what is softmax”类的审稿人,我们还是相信审稿人的平均责任感和正义感在社会平均水平之上。

基于这几条公设,我总结了以下四条经验。

实事求是,拒绝假装卑微

有的同学认为rebuttal的关键在于承认自己的错误,让审稿人高兴。但我认为这不是最优的策略。由于研究方向的不匹配、审稿时间的紧张或者干脆就是当天心情较差等原因,审稿人可能会做出各种错误的判断。当你的审稿人说错了,我们应该指出他说错了,而不是“啊对对对”。

当面对不恰当的负面评价时,有的同学采用的策略是部分承认,然后找各种理由来削弱这一负面评判对文章质量的影响程度。例如,审稿人说“没有XXX数据集上的实验结果”,但这个数据集实际上是可有可无的,有的同学会说“we apologize …, but … is still acceptable”,然后补上这些结果,再说句感谢您的建议完善了这篇论文。

但我认为更好的策略是列出几篇代表性文章标题:你看看这几篇也有一定影响力,他们也没做这个实验嘛。当然了,既然你要了,我们也就做了,虽然意义不大,还是谢谢你了。(内心:你作为一个审稿人,说出这样外行的话,是不是应该反思一下?AC你看看,他这么业余,我还是尊重他,我是不是比他靠谱多了?)

从一个审稿人的视角,我相信一篇值得被接收的论文的rebuttal里面应该有“we beg to differ”,而非满篇的“we apologize”。我看到作者坚定维护自己时,不管我是否认同他的观点,我至少会觉得他值得尊重,然后去认认真真读他反驳我的话。

停止辩经,指出谁在划水

有时候我们会遇到比较离谱的审稿人,他可能在审稿那几天中特别不在状态,或者干脆是个不知从哪得到审稿邀请的乐子人。当我们看到非常滑稽的意见时,我们应该干脆停止辩经,不要去解释“what is softmax”,而是直接通过对审稿人不可见的“AC message”向AC指出谁才是小丑,最终使得AC排除他的意见。当然了,如果你的rebuttal还有多余的空间的话,应付他几句也不是不行,毕竟这种乐子人的行为有时是完全无法预测的,没准直接给你连升三级改成accept呢(亲身经历)。

我们要相信,AC的平均水平是在审稿人的平均水平之上的,你的AC也未必看得上他分到的审稿人。如果你能实事求是地给出审稿人不称职的证据,AC可能也懒得看他的意见——到了后续的讨论阶段,跟乐子人打交道浪费的可是他的时间啊。

例如,下面这段来自我某一次给AC打的小报告。作为审稿过程的一部分,具体的内容是不能公开的,我只能概括了一下。

We feel it necessary to bring to your attention that some of the comments from Reviewer X confuse us a lot. It seems that the reviews lack some common knowledge of the deep learning literature.

  • 他提出了一个奇怪的名词XX,让我们解释我们所说的YY跟XX有什么关系。XX这个词把我们整懵了,任何人都知道YY是什么意思,我们不知道这有什么可解释的。
  • 我们说了很多遍是AAA这样做的,他在summary里说我们是BBB这样做的。
  • 他说我们语言错误很多,但是一个具体的错误都没列举出来。这违反了审稿准则中的X条Y款。

打小报告时要注意的问题:

  • 对事不对人,我们反对的只是他的言论,不要直接表达对审稿人的不满,不然会显得很不专业。
  • 所有对他的言论的指控都必须基于坚实的依据和简单的逻辑。他的言论必须是显而易见地荒诞,才值得你打小报告。AC也很忙,我们不能期望AC在对文章还不是很熟的情况下花几分钟来思考明白为什么某一句comment有事实性的严重错误。
  • 不要让AC有“你在教我做事”的感觉。我们可以说希望AC做决定时将这些review的质量问题纳入考虑,不要说希望AC排除这个审稿人的评分。

花式引战,勾起内部讨论

由于审稿人的领域和偏好各不相同,我们可能收到完全相反的评论:审稿人A说写作好,novelty一般;审稿人B却说写作不行,novelty不错。在这种情况下,我们可以“断章取义”(当然,也是在实事求是的前提下),用一个审稿人的观点去反驳另一个审稿人的负面判断,以谋求他们对自己观点的重新审视。

例如,我们可以在rebuttal的开始时说:We are glad that the Reviewers appreciate the novelty (Reviewer X), writing (Reviewer Y), impressive experimental results (Reviewer Z) …

分别回应每个审稿人时,要注意语言的技巧,不要说得太直接(“人家Reviewer Y都能看出来我的创新所在,你怎么就不懂?”),不然会给人一种“你在教我做事”的感觉。要把别人的正面评价作为暗示融入到你的回应中。例如:

We would like to note that XXX distinguishes our method from YYY and ZZZ, which is appreciated by Reviewer Y and Z.

除了让审稿人更容易重新审视自己的判断以外,这样做还可能起到的一个正面效果是激发rebuttal后AC带领审稿人进行的讨论(“各位审稿人,我看了rebuttal,注意到了你们的评价各不相同,你们说说这是怎么回事?”)。如果AC觉得讨论是热烈而有益的,自己没白忙活,也收获了一些知识,那么作为引发讨论的素材,你的文章可能会得到一些印象分。

要改就改,不画虚空大饼

如果审稿人说得对,你也想改,那就要在rebuttal中让他们知道你真的会改。由于会议论文只有一次审稿,审稿人和AC会担忧你的修改是不可控的(超出篇幅限制、删除了他们没想让你删的东西、引入了新的错误等)。所以要尽量避免虚空画饼:

  • 我们会做你说的实验
  • 我们会改Figure 2
  • 我们会重写第二章

要非常具体:

  • 我们做了XX和YY的实验,我们会将以下结果加入Table 1
  • 我们会把XX的图例加到Figure 2里并修改字号和颜色

在我曾经的一篇文章中,审稿人指出整个第三章(讲方法的部分)逻辑混乱,他“got completely lost”,要求重写。我用了相当的篇幅向他描述我会如何重组这个部分:

  • 原来第三章第一节是讲述背景的,所以我们会放进Related Work中;
  • 我们会在第三章开头加一个总括性的段落以概括整个方法,简述其主要组成部分并清晰地指向后续各个详述细节的小节。这个段落如下……
  • 后续各个小节分别描述的是……




#ControlNet

视频生成game-changer来了!贾佳亚团队提出下一代 ControlNet

在人工智能领域,生成模型尤其是扩散模型,已经在图像、视频生成方面展现出了卓越的能力。近日,更强大的game-changer来了!

贾佳亚团队提出ControlNeXt,一种强大而高效的图像和视频生成控制方法,被众网友评为下一代的ControlNet。

  • 项目主页:https://pbihao.github.io/projects/controlnext/index.html
  • 论文地址:https://arxiv.org/abs/2408.06070
  • GitHub:https://github.com/dvlab-research/ControlNeXt

相比ControlNet,它仅用不到10%的训练参数,可实现一样的生成效果,而且生成、收敛的速度更快,并完美适配SDXL、SD1.5、svd等模型,让即插即用成为现实。

51c视觉~合集18_视觉_02

轻量级,即插即用

作为一个轻量级、即插即用模块,ControlNeXt可与其他LoRA权重集成,无需额外培训即可改变生成风格。

研究团队为了证明ControlNeXt的鲁棒性和通用性,在各种Stable Diffusion模型实现该方法,SD1.5、SDXL、SD3(支持Super Resolution)以及视频生成模型SVD等。任务从图像生成、高分辨率生成、延展到视频生成,结果表明ControlNeXt十分强大,各种任务手到擒来。

从研究团队给出的不同案例可看到,在SDXL中加入边缘(Canny)引导后,轻松便可绘制出和控制线条几乎完美贴合的二次元少女。

51c视觉~合集18_视觉_03

无论控制轮廓多且细碎,模型依然可以绘制出符合要求的图片。

51c视觉~合集18_视觉_04

此外,我们可以把姿势(Pose)控制条件与各种LoRA搭配使用,无论风格如何迥异他们仍然可以做出一模一样的动作。

51c视觉~合集18_视觉_05

ControlNeXt也支持遮罩(mask)和景深(depth)的控制模式,在SD3当中还支持Super Resolution(超级分辨率),可生成超高清晰度的图像。

51c视觉~合集18_视觉_06

51c视觉~合集18_视觉_07

在视频生成当中,ControlNeXt对人物动作的控制也相当精准。

并且相比ControlNet,ControlNeXt需要的训练参数更少,收敛、生成的速度更快。

比如在SD1.5、SDXL中,ControlNet需要的训练参数分别是3.61亿和12.51亿、6.82亿,但ControlNeXt分别只需0.3亿、1.08亿,比其他方法减少了多达90%的参数。

51c视觉~合集18_视觉_08

可控基因生成的一个典型问题是难以训练的收敛,往往需要数千或超十万个步骤的训练来学习条件控制。但我们看到在训练过程中,ControlNeXt在几百步已接近收敛,但ControlNet却需要几千个步数。

51c视觉~合集18_视觉_09

生成的速度也比ControlNet更快,平均下来ControlNet相当于基础模型会带来41.9%的延时,但ControlNeXt只有10.4%,速度提升30%!

51c视觉~合集18_视觉_10

贾佳亚团队是如何让ControlNeXt实现这一切的呢?

化繁为简,交叉归一化的神奇作用

这张图为我们解释了整个ControlNeXt的工作流程。

51c视觉~合集18_视觉_11

贾佳亚团队坚持认为,预训练的大型生成模型是足够强大的,没必要引入这么多的附加参数来实现控制生成的能力。

因为我们看到,研究团队删除了ControlNet庞大的控制分支。这也是ControlNeXt轻量化的关键。

与此同时,ControlNeXt改为引多个ResNet块组成的轻量级卷积模块来替换,这些模块显著小于预训练模型,并且从中提取指导信息,将其与去噪特征对齐。

在训练过程中,研究团队也冻结了大多数预训练模块,并从预训练生成模型中选择性地优化一小部分可训练参数。

51c视觉~合集18_视觉_12

在设计ControlNeXt时,研发团队巧妙地保留了与原始模型相似的结构,让它能够轻松地融入现有的系统。

ControlNeXt和它的前身ControlNet一样,都需要在生成过程中加入特定的控制信息,就像给机器下达指令一样,不需要在每个步骤都加入这些指令。研发团队通过观察发现,其实在生成过程中,我们只需要在中间阶段加入一次控制信息,就能达到很好的效果。

ControlNeXt研究团队主要针对两个关键问题进行了深入研究——注入位置的选择和注入方式的设计。

研究团队观察发现,在大多数可控生成任务中,指导生成的条件信息形式相对简单,且与去噪过程中的特征高度相关。

团队尽量让聚合的方式变得简单——用交叉归一化对齐两组特征的分布后,直接将其相加。

这样既能确保控制信号影响去噪过程,又避免了注意力机制等复杂操作引入额外的学习参数和不稳定性。

这之中的交叉归一化,也是ControlNeXt的核心技术,替代了此前常用的zero-convolution等渐进式初始化策略。

传统方法通过从零开始逐步释放新模块的影响力来缓解崩塌问题,但往往导致的结果就是收敛速度慢。

交叉归一化则直接利用主干网络去噪特征的均值μ和方差σ对控制模块输出的特征做归一化,使二者的数据分布尽量对齐。

51c视觉~合集18_视觉_13

(注:ϵ是为数值稳定性而添加的小常数,γ为缩放参数。)

归一化后的控制特征再通过尺度和偏移参数调整幅度和基线,再与去噪特征相加,既避免了参数初始化的敏感性,又能在训练初期就让控制条件发挥作用,加快收敛进程。ControlNeXt还借助控制模块学习条件信息到隐空间特征的映射,使其更加抽象和语义化,更有利于泛化到未见过的控制条件。

整体而言,ControlNeXt采用精简的结构,消除了沉重的辅助组件,以最小化延迟开销并减少可训练的参数。这种轻量级的设计使其能够作为具有强大鲁棒性和兼容性的即插即用模块,进一步允许与其他LoRA权重集成以更改生成风格而无需进行额外的训练。




#U-KAN 网络与 U-Net 谁更胜一筹

作者首次探讨将U-KAN应用于农田像素分割,从性能和可解释性角度分析U-KAN和U-Net

段落分割对于提升农业生产力、监控作物的健康状况以及推广可持续的农业实践是至关重要的。为这项任务采用的深度学习模型必须确保准确和可靠的预测,以避免经济损失和环境影响。


新提出的Kolmogorov-Arnold网络(KANs)在神经网络的性能方面提供了有前景的进展。本文分析了将KAN层整合到U-Net架构(U-KAN)中,使用Sentinel-2和Sentinel-1卫星图像对农田进行分割,并提供这些网络的性能和可解释性的分析。


作者的研究发现,与传统的全卷积U-Net模型相比,在更少的GFLOPs下,IoU提高了2%。此外,基于梯度的解释性技术表明,U-KAN预测具有很高的合理性,并且该网络具有非常高的聚集在耕作区域边界而不是区域本身的能力。关于每个通道的相关性分析揭示,有些通道对这个任务来说是无关的。

1 Introduction

近年来,远程感应和深度神经网络已经彻底改变了作者如何应对农业管理、环境监测以及许多与地球观测相关的工作。它们的结合证明在各种任务上都是有效的,例如紧急管理[19]和土地覆盖[31]等。与土地覆盖相关的一个任务是划分农田,这对优化农业生产力、评估农作物健康和规划可持续的耕作方法至关重要[7]。

在这个过程中使用的神经网络的准确性和可解释性是确保可靠和可操作性洞察力的基础。精确划分农田可以使计算面积覆盖准确,评估农作物类型,并监测农业因子如植物健康和土壤条件[6]。这些信息对于作出关于灌溉、施肥和作物轮换的有知情的决策至关重要,这对于提高产量和可持续性[10]。此外,语义分割任务的准确性直接影响政府及机构各种 Level 的经济计划和政策制定。提供准确的决策是必要的,但是模型可理解性和可用性也是关键,以允许实践者验证它们并遵守机构规定[45]。这些因素至关重要,因为它们极大地影响经济和环境。[15].深度学习模型可以实现高精度,但它们通常被认为是“黑 Box ”,因为它们的复杂结构由许多层和难以解释的参数组成。这种复杂性在理解这些模型的决策过程方面 pose 了巨大的挑战。在遥感背景下,这种模型的可解释性进一步复杂化,因为数据的性质包括各种光谱带、时间序列和空间分辨率。此外,噪声、遮挡和大气效应可能会 Mask 模型的决策过程。

因此,深度学习在遥感解释的可行性至关重要,因为它确保人类可以理解这些模型的决策和输出。开发解释模型输出背后的逻辑是验证其结果并建立其实际应用信心的必要条件。一种普遍采用的方法是,以模型预测的个别效果进行事后解释,从而提高其可解释性,但不会影响其准确性。这一解决方案在地球观测领域得到应用,其中解释作为显著图(或热力图)呈现,突出显示卫星图像中哪些部分影响了模型预测[15; 18](图1(c)和(d)为例)。

51c视觉~合集18_视觉_14

最近Kolgomorov-Arnold网络(KANs)[23]的引入为神经网络提供了一种新型范式,作为多层感知模型(MLPs)的替代品。受到Kolomorov-Arnold表示定理[2; 20]的启发,KANs允许学习网络边缘的定制激活值。这样,作者可以分析输入数据中单个组成部分的贡献,从而提供网络决策过程更透明的视图。由于其在改善视觉任务方面的潜力,KANs最近被集成[22]到U-Net架构[36]中,该架构是一种知名的分割架构。所得网络,称为U-KAN,用于医学影像分割,并展现了卓越的准确性和效率。

在本文中,作者首次探讨将U-KAN应用于农田像素分割,从性能和可解释性角度分析U-KAN和U-Net。

作者的研究问题如下:

RQ1: U-KAN与U-Net在农田像素分割任务上的表现有何差异?RQ2: 卫星图像的哪些部分对模型的预测影响最大?U-Net和U-KAN是否优先考虑图像的不同方面?

为回答第一个研究问题,作者在Sentinel-2[14]和Sentinel-1[44]卫星图像上的南半球农田类型数据集[46]上评估U-KAN和U-Net,该数据集用于农田像素分割。作者的发现表明,与U-Nets相比,U-KAN在交并比(IoU)和每秒千亿浮点运算(GFLOPs)方面更准确和高效。

对于第二个研究问题,作者分析了两者的可解释性。作者利用事后可解释性技术确定图像中哪些部分影响了模型识别。作者对U-Net和U-KAN的这些重要性评分,称为显著性图,分析了识别行为的差异。作者的结果表明,U-Net和U-KAN确实考虑图像的不同方面进行预测。U-KANs通常侧重于农作物的边缘,而U-Nets更专注于内部,如图1(c)和(d)所示。此外,作者还定量评估了显著性图的质量,发现U-KANs更为忠实和可靠。

作者的贡献可以总结如下:

  1. 作者首次探索了将U-KAN应用于农田图像分割的应用。
  2. 作者对U-KAN和U-Net在卫星图像上的农田图像分割进行了比较分析。
  3. 作者利用事后可解释性技术分析了两者的可解释性,并用于生成和评估显著性图。
  4. 作者发现与U-Net相比,U-KAN提供了更高的精确度和效率,以及更忠实且更合理的显著性图。

实验代码可在https://github.com/DarthReca/crop-field-segmentation-ukan。

2 Related Work

在本节中,作者将概述农业遥感技术的最新进展,解释神经网络的可解释性,并探讨二者之间的交集。

Remote Sensing

遥感的应用已经被广泛应用于农业领域,旨在加强农作物的监测、管理和产量提升。早期的研究主要集中在利用卫星影像评估农作物健康和估算产量 [5]。传感器技术和数据处理技术的进步使得遥感数据的分辨率和准确性大幅提高,使得对农业景观的详细分析成为可能 [33]。在农业中应用遥感的其中一个例子是农作物田块分割,它涉及到识别耕作区域。

卷积神经网络(CNNs)和U-Net架构的引入进一步提升了农作物田块分割的效果 [4, 48]。虽然近年来提出了其他架构,但由于其设计,它仍然是最有效的遥感 Baseline 之一。将多光谱和超光谱影像整合也为更准确农作物田块分割作出了贡献。这些影像记录了不同波长下的数据,提供了关于农作物特性更丰富的信息 [43]。

Explainable AI

可解释的人工智能(XAI)是AI研究中一个致力于使机器学习模型对人类可解释和理解的分支 [32, 1, 3]。近年来,由于需要在远程感知中应用复杂的AI模型,使解释的需求越来越大,这项技术在地球观测任务中的应用变得非常热门。该领域的解决方案遵循着XAI方法的分类标准:设计得易于解释和事后可解释的方法 [32]。其中,设计得易于解释的方法,如将可解释性内在地集成到模型算法或其架构的设计中。然而,这些方法往往不能解释个体模型预测,人们对它们是否能真正帮助人类理解过程持怀疑态度 [15]。此外,它们往往比黑盒模型更不精确。为了克服这些限制,许多工作专注于事后解释 ,它们旨在解释训练黑盒模型,同时保留其准确性和增强透明度。

显著性图(Saliency maps)是用于可视化输入图像哪些部分影响模型预测的最为广泛使用的后置解释方法。显著性图(或 Heatmap )是像素基的重要性分数,突出每个像素对预测的贡献。这些图广泛应用于医学诊断等语义分割任务 [16, 17, 18, 26]。由于遥感模型决策过程的理解急需,已有研究开始将其应用于卫星图像和农田分割等领域。

在这些研究中,Kakogeorgiou和Karantzalos [18]对在遥感多标签深度学习分类任务中解释显著性图的十种可解释AI方法进行了系统评估,并从定性和定量角度进行了系统性分析。然而,作者的方法并非与多个XAI方法对比,解释同一个模型,而是用与同一可解释性技术从两个模型中推导显著性图,进行系统性评价。他们的研究将Grad-CAM [38]认定为可靠且可解释的方法,且计算成本较低 [18]。作者利用这项分析的结果,并选择Grad-CAM作为可解释性方法。

为了解释的需求,最近提出的KANs [23]通过允许通过剪枝与网络互动以及可视化可学习激活函数,提供自身的一定程度的解释性。工作进行将其集成到U-NET架构 [36],提高了在医学诊断任务上的性能和效率 [22]。作者的研究是首次将U-KANs应用于农田分割领域。此外,作者从解释的角度比较了U-NET和U-KAN架构,并提出了它们解释性的系统评价。就作者所知,作者也是首次以事后解释的角度评估U-KAN,并分析了Grad-CAM提供的个体解释。

3 Methodology

在本节中,作者首先详细阐述了农田分割任务,接着是可解释性部分,最后是模型部分。

Problem statement

本研究针对基于辐射度或光谱图像的作物田间分割问题。该问题的表述如下:

设  为任意大小为  的卫星图像, 其中  和  分别表示图像在像素中的宽度和高度, 而  表示图像的深度 (即每个像素的特征数量)。目标是自动创建与  相关联的二进制 Mask  ,它是由一个大小为  的矩阵表示,其中单元格的值为 1 表示该像素包含耕作区域, 值为 0 表示该区域为非耕作区域。

Explainability Statement

作者旨在通过为用户提供模型预测的可视化解释来帮助用户充分理解模型如何实现有效分割。从XAI(交互式人工智能)的角度来看,这个问题可以表述为以下形式:

给定图像  和其二值 Mask , 作者希望生成一个大小为  的显著性图(或 Heatmap ) , 以突出表示模型预测重要区域的  中的区域。 中的每个元素  都是与图像  中的像素  相关的显著性得分。每个值  表示  对成熟区域预测的影响。通过可视化显著性图,有助于解释模型如何做出其决策。

Models

在这项研究中,作者比较了著名的U-Net [36]与一种修改版[22],该版本将KAN[23]层集成到架构中。接下来,作者首先概述U-Net架构。然后,作者概述KAN神经网络,并最后将其集成到U-KAN架构中。

3.2.1 U-Net

卷积神经网络(CNN)是一种在医学图像分割领域的常用架构。它的结构特征是一种U型,如图2所示,收缩路径用于捕捉上下文,而对称扩展路径用于实现精确的局部定位。收缩路径由重复的卷积和池化操作组成,而扩展路径涉及上采样和卷积层以恢复图像分辨率。这种设计使U-Net能够有效地从相对较少的训练图像中学习,并产生高质量的分割,使其成为医学图像分割之外的广泛选择。

51c视觉~合集18_视觉_15

KAN

[23] 科尔莫戈罗夫-阿诺德网络(KANs)是一种新颖的神经网络类型,灵感来自于科尔莫戈罗夫-阿诺德表示定理[2, 20],该定理表明:每个多变量连续函数可以表示为两个参数函数的求和:

51c视觉~合集18_视觉_16

其中  。与传统的多层感知机(MLPs)固定在节点上的激活函数不同,KANs采用可学习的激活函数在边上。这通过用带样条的单变量函数参数替代每个线性权重参数来实现。训练过程中,激活值逐步变化以更好地区分目标,KANs还提供了一种可视化可学习激活函数的可能途径。这样,KANs可以比MLPs更透明和高效地学习复杂关系,提供了一种有前途的替代深度学习模型。在不需要复杂非线性时,学习的激活可以表示为价格低廉的函数(如常数或线性)。这也授予了理解输入的关键部分的可能性。

U-Kan

U-KAN [22] 提出了一种方法,使用KANs来实现U-Net深处。这些层包括一个分词层,一个KAN层,一个下采样层和一个最后的归一化层。如图3所示,深度表示的处理器网络是区别的关键。U-Net的主要特征(如下采样和跳跃连接)保持不变,共享相同的好处。编码器最后层和译码器第一层的修改使得网络可以学习自定义激活函数而不是固定函数,这有可能提高嵌入的表示性,并在需要时通过学习简单的激活减少所需的计算资源。

51c视觉~合集18_视觉_17

4 实验设置

本节描述所采用的数据集、实验设置和用于评估生成的图像分割性能和解释质量的采用的评价指标。

Dataset

作者使用了南非作物类型数据集[46],该数据集包含来自Sentinel-2和Sentinel-1的图像,覆盖南非广阔的地区。数据集中包括形状不规则的小型农作物区域,使得区分耕作和非耕作区域更具挑战性,同时该数据集提供了比其他覆盖该区域的图像更高的分辨率(大小为256×256)。标注包含覆盖了特定作物的区域的 Mask 。在作者的分析中,作者仅限于通过分析从Sentinel-2和Sentinel-1获得的两种类型的图像来区分耕作和非耕作区域。

Sentinel-1[44]是Copernicus计划下的一颗卫星,配备了C波段合成孔径雷达成像仪(SAR),可以进行全天候、昼夜的雷达成像。卫星能够在单极化和双极化模式下运行。在陆地,它主要收集VV和VH极化。

Sentinel-2[14]是Copernicus计划的一部分,由两颗卫星组成。这些卫星配备了能在红外光谱中工作的多光谱成像仪器,具有13个光谱波段,从Ultra-Blue、Visible、近红外(NIR)到短波红外(SWIR)。由于Sentinel-2具有仪器,因此对植被特别敏感。

虽然Sentinel-1图像可以因为其辐射特性覆盖不同的气象情况,但Sentinel-2受到云中和类似的气象干扰的影响。由于提供的云 Mask 往往不准确,作者使用s2cloudless算法[39]计算了 Mask 。作者排除了与作物区域重叠严重的Sentinel-2低质量图像(云 Mask 和包含作物的区域交集超过0.7)。

由于没有给出划分,作者将数据集随机分为包含2019个训练样本、267个验证样本和364个测试样本的训练集。这三个划分根据卡方检验(衡量类频率)测量相似度。这样,由于Sentinel-1和Sentinel-2的日期不完全匹配,因为不同的重访时间,作者创建了包含三个划分的两个数据集。图4显示了Sentinel-1 VV和Sentinel-2 RGB的测试集样本。

51c视觉~合集18_视觉_18

Experimental Setting

实验设置部分详细描述了实验所需的技术和硬件环境。在此部分,研究者们会阐述实验中的算法、数据预处理方法以及实验所需的硬件要求。此外,实验设置部分还应包含有关实验设计、实验参数调整和实验结果收集的详细描述。这将有助于读者充分理解实验流程,并为实施类似研究提供指导。

本实验主要研究[研究目标],并采用[实验方法]。为保证实验结果的有效性和可重复性,作者使用了[数据集]。在本部分,作者将详细说明实验过程,包括数据集的预处理方法、模型训练和验证的设置,以及实验结果的分析和讨论。

首先,作者将对数据集进行预处理。预处理的目标是消除噪声,提高数据质量并为后续的模型的训练和验证做好准备。作者采用了[预处理方法],包括数据清洗、数据标准化和平滑等步骤。这一步骤将有助于提高实验的准确性和稳定性。

接下来,作者将采用[模型结构]进行模型的训练和验证。作者首先使用[训练集]进行模型的训练,并利用[验证集]对模型性能进行评估。在此过程中,作者将设置多个训练参数,如学习率、批次大小和迭代次数等,以获得最佳的模型性能。在模型训练过程中,作者将采用[监控指标]评估模型训练的稳定性,以确保模型能够准确地学习到数据中的隐藏规律。

最后,作者将对实验结果进行分析和讨论。

作者将在以下几个方面展开讨论:模型性能、实验误差和实验结果的可靠性。通过这些讨论,作者将努力为读者提供有价值的信息,并希望为未来相关研究表明提供一个参考。

4.2.1 Crop Field Segmentation

图像尺寸:对于Sentinel-1数据,大小为256x256x2;对于Sentinel-2数据,尺寸为256x256x12。作者训练所有网络使用AdamW优化器,并使用学习率调度器,当达到平台时降低因子0.2并耐心5次。初始学习率设定为1e-4,批次大小为16。作者训练模型60个周期。作者应用随机水平翻转和垂直翻转作为增强。损失函数是广义 dice 损失 [41],它考虑图像中的类别不平衡。作者将两种具有相同编码器(因此解码器)嵌入大小的网络进行比较,以更好地理解决如何利用相同的表示空间。

作者在 Intersection-Over-Union (IoU),F1-Score(F1),Precision(Prec)和 Recall(Rec)指标上评估网络在正类的性能。作者还可以使用 GFLOPs 指标来衡量网络的效率。

4.2.2 Explainability

作者使用Grad-CAM[38]作为一个视觉后的解释方法,因为其在远程感知[18]之前的XAI研究中已被证明是有效的。由于其独特的优势,它能帮助作者解答一个关键问题:“模型在划分作物时关注哪些像素?”

对于每一张图像,作者生成单个显著图来量化每个像素对模型(例如,U-NET或U-KAN)的预测(即,耕作区域)的影响。在Grad-CAM中,生成过程首先涉及计算与所选卷积层特征图相关的正类分数的梯度。这些梯度被全局平均以获取每个特征图的重要性权重。然后,使用计算出的权重对这些特征图进行加权求和,这会产生一个粗糙的位置图,突出显示输入图像中最 influential 的区域。接着,作者对加权求和施加ReLU激活,以确保只考虑正的影响因素,产生最终的Grad-CAM Heatmap 。在作者的实验中,作者使用Sentinel-2数据,提供了12个通道的多光谱图像,并为测试集图像生成解释。

作者评估了生成的Grad-CAM Heatmap 的可信度[39]、充分性[40]和每个通道的相关性[40]。接下来,作者提供一个详细描述每个度量指标的说明。

可信度指显著图与人类理解和领域专业知识[39, 18, 37]的符合程度。这对于确保模型不仅表现出色,而且与人类的期望和知识相契合至关重要。在本研究中,作者希望评估每个生成的显著图与相对真实值之间的契合程度。作者通过计算生成显著图与相应真实值 Mask 之间的每个指标(IoU,F1,Prec,Rec)来评估显著图的可信度。

由于作者的显著图提供了连续的的解释,其中每个像素都有重要性值,作者建立了一个重要性阈值,以定义哪些像素被认为是奥特斯方法[34]中分割显著图的重要因素。奥特斯方法将显著图分割成不同的区域,创建一个可以直接与二进制真实值 Mask 相比较的二进制 Mask 。

4.2.3 Sufficiency

[24, 35]。充分性是忠实度的一个方面,评估解释是否确实捕获了导致分段的重要因素,因此是充分的。

为了评估解释的充分性,作者只保留解释确定的重要像素,并 Mask 其他像素。然后,作者在改变后的图像上评估正类的性能指标(IoU,F1分数,精确率和召回率)。充分性计算为原始图像和改变后的图像之间的指标变化。性能下降得更小表示解释更充分。在此次实验中,作者还使用了Otsu方法对二值显著图进行阈值分割。

4.2.4 Per-channel Relevance

标准XAI评估的另一个重要方面是当输入图像被扰动时性能指标的变化。覆盖敏感性(Occlusion sensitivity)是一种方法,它通过使用滑动窗口系统地遮挡输入图像的一部分来测量模型输出的变化。这种技术识别出模型预测的关键图像区域,为作者解释模型的推理过程和解释的忠实度提供了洞察。

在作者的具体情况下,作者将遮挡的想法应用到了输入图像的所有通道,而不是图像的一部分。这种方法与作者的数据性质更为契合,每个像素都具有自身的权力和分类。通过遮挡整个通道,作者可以系统地评估特定通道的缺失如何影响模型的解释,从而明确每个通道在分类过程中的作用。

在作者的测试中,作者一次遮挡一个通道,并计算出的重要性地图。然后,作者计算出通过遮挡一个通道得到的重要性地图与使用所有通道得到的重要性地图之间的IoU。

5 Experimental Results

在本节中,作者展示了分析数据集得到的成果。首先,作者概述了裁剪分割性能,以回答研究问题RQ1。

接着,作者从定性和定量的角度分析了U-Net和U-KAN预测的解释,以回答RQ2。

Task Performances

在表1中,作者报告了在Sentinel-1和Sentinel-2数据上使用U-Net和U-KAN的结果。U-KAN在Sentinel-2数据上的IoU性能上表现最佳,证明了其在处理复杂关系方面的适应性。在Sentinel-1上,U-KAN在IoU方面的表现与U-Net相当。在精度方面,KAN变体表现更好,得分比U-Net高约3%。尽管Sentinel-1影像受大气事件影响较小,但Sentinel-2波段通过对两种网络区域的理解提供更好的信息。U-KAN在GFLOPS方面的计算效率高于标准的U-Net,其耗电量为U-Net的一半。

51c视觉~合集18_视觉_19

在两种情况下,KAN变体都被证明是一种更好的解决方案,提供更佳或可比较的性能,且在更少的GFLOPS下运行。此外,它在任何情况下都表现出更高的精度。

Analysis of explanations

作者通过定性及定量评估分析了U-KAN和U-Net网络在Sentinel-2数据集上的可解释性结果。

5.2.1 Qualitative Evaluation

作者研究了两种网络产生的显著图。这种分析揭示了每个模型关注的重点领域,提供了对其分割行为更深入的理解。

图1展示了由U-Net和U-KAN模型生成的显著图实例。红色像素表示网络最关注的点,突显了两种模型行为的差异。图1(c)表明,U-Net模型关注的区域比U-KAN模型大得多。这一观察结果表明,无论分割任务的效率如何,U-Net模型倾向于将关注点分散在更大的区域中。相比之下,U-KAN模型在处理分割任务方面有一个有趣的特点。网络主要关注的是耕作区域的边界,而不是这些区域内部。对边界的关注表明,U-KAN模型优先考虑定义感兴趣区域的边缘。这一最后特性开放了U-KAN网络在边界划分和映射任务中的潜在使用,这些任务需要精确的边缘检测和划分。这些考虑适用于数据集中的图像。作者在作者的存储库中包含了多个显著图示例。

图5说明了当U-KAN特定的通道B01,B06和B11被遮挡时,显著图的变化。从图5(c)作者可以推理,通过遮挡与波段B01相关的通道,得到的显著图与原始图非常相似,表明这个通道对模型关注几乎没有影响。当与波段B06相关的通道被遮挡时,作者观察到显著图的变化,表明这个通道对网络关注有影响。当与B11(1610 nm - 短波红外1)相关的通道被遮挡时,得到显著图模型不关注任何特定区域,意味着网络在没有这个通道的情况下无法检测到分割特性。这一结果凸显了模型在执行分割任务时,通道B11的重要性。对于U-Net的类似观察。作者进一步在后面的定量分析中探讨了通道对显著图的影响。

51c视觉~合集18_视觉_20

表2呈现了_Plausibility_的评估结果。关于解释的可信度,U-KAN比其竞争对手U-Net具有更高的IoU和Precision。这表明U-KAN提供了更准确、可靠的解释,更接近人类的理解。另一方面,U-Net具有更高的Recall和F1得分,这意味着它更能捕获明显图中的特征,尽管它包括更多的假阳性。

51c视觉~合集18_视觉_21

在表3中,作者呈现了评估解释充分性的结果。充分性可以用被遮挡图像和原始图像之间指标差异量化。有趣的观察是Precision指标的变化。其他指标的下降与移除不那么关键的像素相符,但U-KAN和U-Net的Precision都增加了。这个增加的Precision值得注意,因为在排除不那么重要的像素的同时,两种网络都展示了增强的能力,在像素划分任务上定义属于作物的像素。

51c视觉~合集18_视觉_22

表4报告了_每通道相关性_的结果。对于每个模型,作者报告了所有通道显著图与遮挡特定波段相关通道显著图之间的IoU分数。在这个背景下,较低的IoU表示该通道的重要性较高。具体来说,如果移除一个通道导致较低或零的IoU,那么该通道在最终的分割任务中起着重要作用。对于U-KAN和U-Net模型,作者得到以下结论:对应的波段B05(705 nm - 红色边缘)、B8A(865 nm - 窄近红外)和B11(1610 nm - 短波红外1)对于作物分割任务是最重要的,因为它们具有特定的敏感性。具体来说,B05和B8A对叶绿素含量和植被生物量敏感,而B11对土壤和植被中的湿度敏感。所有测试样本的定量评估与图5中显示的定性结果一致,证实了以下观察到的见解。分析每个通道在Sentinel-2图像中的相关性开辟了优化所使用通道的可能性,即仅关注重要通道,以减少使用通道的数量。这种优化可以提高效率,降低计算成本,同时保持分析质量。

51c视觉~合集18_视觉_23

Analysis of the trained models

如图6所示,作者报告了一个解码层中嵌入元素的学习激活值。作者可以看到基函数(SiLU,由U-Net常见使用)和ReLU之间的巨大差异。U-KAN在深层嵌入中有效地表示了更复杂的关系。第二个激活与SiLU相反,沿着y轴进行反转。第一和第三个激活相似,但斜率不同(第一个函数更陡峭)。

51c视觉~合集18_视觉_24

此外,每个嵌入元素都学习到不同的激活,具有不同的复杂性。一些元素可能是嵌入中某个部分的常数激活。具有方差小于1的学习函数占约26%,而方差小于0.1的学习函数占约8%。这表明这些是嵌入中的不相关部分,因为每次输入都被映射到相同的价值。

6 Conclusions

在这项工作中,作者展示了新的 KANs 如何在农业领域改进著名架构,尤其是在效率方面,只使用了全 CNN 架构的一半资源。

作者的研究表明,U-KAN 通过实现比 U-Net 更高的精确度和 IoU 分数,提供优越的性能。

可解释性分析还揭示了两个重要的洞察。首先,U-KAN 网络强调边界细节,使其在边界划分和映射等任务上特别有效。其次,对分割任务并不是所有通道都有用。

因此,用户可以决定只依赖最重要的,以降低模型的计算成本。在未来的工作中,作者将实施从作者的网络可解释性分析中得到的洞察,以提高性能和降低计算成本。




#yolo8景区行人检测

针对当前景区行人检测具有检测精度低、算法参数量大和现有公开数据集在小目标检测上存在限制等问题,创建TAPDataset行人检测数据集,弥补现有数据集在小目标检测方面的不足,并基于YOLOv8算法,构建一种检测精度高、硬件要求低的新模型YOLOv8-L。首先引入DepthSepConv轻量化卷积模块,降低模型的参数量和计算量。

其次采用BiFormer注意力机制和上采样算子CARAFE,加强模型对图像的语义理解和信息融合能力,提升模型的检测精度。最后增加一层小目标检测层来提取更多的浅层特征,从而有效地改善模型对小目标的检测性能。

在TAPDataset、VOC 2007及TAP+VOC数据集上的实验结果表明,与YOLOv8相比,在FPS基本不变的情况下,在TAPDataset数据集上,模型的参数量减少了18.06%,mAP@0.5提高了5.51%,mAP@0.5∶0.95提高了6.03%;在VOC 2007数据集上,模型的参数量减少了13.6%,mAP@0.5提高了3.96%,mAP@0.5∶0.95提高了6.39%;在TAP+VOC数据集上,模型的参数量减少了14.02%,mAP@0.5提高了4.49%,mAP@0.5∶0.95提高了5.68%。改进算法具有更强的泛化性能,能够更好地适用于景区行人检测任务。

引言

行人检测在智慧文旅建设中扮演着重要角色,该技术已广泛应用于智能视频监控和客流统计等领域[1]。景区行人检测利用计算机视觉技术对景区中的视频或图像进行分析,旨在准确识别和跟踪行人。通过实时监测和分析景区内的人员流动,管理人员能够获得关键的数据信息,以便进行人员调度、安全管理和服务优化等方面的决策[2]。

行人检测主要关注单一目标类别的多尺度和遮挡问题,而目标检测则需要处理多个目标类别的多尺度、遮挡和复杂场景问题[3]。早期的行人检测方法主要基于手工设计的特征和传统的机器学习算法,如Histogram of Oriented Gradients(HOG)和线性支持向量机(SVM)[4]。

然而,这些方法在复杂场景下的鲁棒性和准确性上存在一定的限制。随着深度学习的引入,卷积神经网络(CNN)在行人检测任务中取得了突破性的进展。其中,基于区域提议的方法,如R-CNN、Fast R-CNN和Faster R-CNN等,通过使用CNN进行候选框生成和分类取得了较好的性能[5]。

另外,单阶段检测算法也取得了显著进展,如YOLO、SSD和RetinaNet,它们通过直接在图像中预测边界框和类别,实现了实时性和高准确度之间的平衡。近年来,在行人检测领域还涌现出许多改进和优化的方法,如基于注意力机制的方法、轻量化网络设计、多尺度特征融合等。这些方法不断推动行人检测性能和效果的进一步提升[6]。

YOLO是由REDMON等开发的一种端到端的目标检测方法,依据单个神经网络完成检测任务。其通过多次迭代与不断改进来提高性能,这种持续的改进使得YOLO在目标检测领域取得了显著突破,但其在景区行人检测中存在参数量大、对硬件要求高、检测精度低等问题[7]。

为了解决现有公开数据集(如VOC、COCO、MIT行人数据库和USC行人数据库)在小目标检测任务中数据量不够及小目标较少的限制,本文通过云视频和实地采集等方式,在景区环境中收集了大量的多尺度图片数据,共采集到8 450张形状大小不一的图片,并使用Makesense数据集标注工具进行标注,创建了TAPDataset行人检测数据集。该数据集在形状和大小上具有多样性,适用于工程实践中的目标检测任务。

本文研究旨在解决景区行人检测中YOLOv8检测精度较低且参数量较大等问题。首先创建了TAPDataset数据集,并在YOLOv8的基础上,以DepthSepConv作为基本卷积模块,对整个网络进行轻量化处理,提高模型的计算效率和泛化能力;然后引入BiFormer注意力机制,以实现更灵活的计算分配和内容感知;虽后引入轻量化上采样算子CARAFE,在较大的感受野内聚合上下文信息,提高算法的检测速度和检测精度;最后增加一层小目标检测层,将目标检测层由三层变为四层,提升模型对小目标的检测能力。

YOLOV8概述

YOLOv8于2023年1月由开发YOLOv5的Ultralytics公司发布。YOLOv8具备了同时实现分类、检测、分割和姿态估计任务的能力。相比之前的版本,YOLOv8采用了无锚框的结构,这使得它的速度更快、准确率更高。此外,YOLOv8是在以前版本的基础上进行改进和增强的,引入了新的功能和改进,以进一步提升性能和灵活性。

为了满足不同需求,根据网络的深度和宽度,将YOLOv8分为YOLOv8-N、YOLOv8-S、YOLOv8-M、YOLOv8-L和YOLOv8-X等不同版本。这些版本在COCO数据集上的性能均优于其他YOLO版本。本文考虑到模型大小的问题,选择了YOLOv8-N作为研究对象。

YOLOv8由输入端、Backone、Neck、Head 4个部分组成,其结构如图 1所示。其中输入端以大小为640×640像素的图像进行输入,Backbone部分在YOLOv5的基础上,将第一层卷积由原来的6×6卷积改为3×3卷积,参考YOLOv7 ELAN的思想,将C3模块换成了C2f模块;在Neck部分移除了1×1卷积的采样层,使用C2f模块替换C3模块;在Head部分换成解耦头的结构,将分类任务和回归任务解耦。在训练过程中,采用Mosaic数据增强对图像进行预处理,并在最后10个Epochs中关闭了Mosaic数据增强操作,可以有效提升检测精度。

图1 YOLOv8架构

其中,Conv模块是由二维卷积(Conv2d)、批量归一化(BN)和非线性激活函数SiLU等组件构成的复合模块,具体结构如图 2所示[8]。卷积层通过应用一组可学习的滤波器(也称为卷积核或卷积矩阵)对输入数据进行卷积运算,从而提取特征信息。这些滤波器具有不同的特征提取能力,可以有效捕捉输入数据的边缘、形状等特征[9]。为了增强网络的表达能力,输出经过非线性激活函数SiLU进行激活[10]。然而,Conv模块的参数量较大,需要大量的计算资源。此外,由于卷积操作的局部性质,Conv模块在理解全局上下文信息方面仍然存在一定的限制,导致对全局信息的理解不充分[11]。

51c视觉~合集18_视觉_25

编辑

图2 Conv模块结构

C2f模块融合了C3模块和高效轻量级注意力网络(ELAN)设计思想。该模块在保证模型轻量化的同时,能够获取丰富的梯度流信息。它由Conv、Split和BottleNeck等组件构成,具体结构如图 3所示。

图3 C2f模块结构

串行并行池化融合(SPPF)是基于空间金字塔池化(SPP)提出的一种方法,旨在扩大感受野[12]。它通过串行多个5×5的最大池化层来实现,从而减少参数数量,并大幅降低计算量。SPPF模块接受特征图作为输入,然后通过ConvBNSiLU模块进行处理,并进行最大池化下采样操作。最后,将不同下采样结果进行拼接形成输出特征图,该模块的结构如图 4所示。通过使用SPPF可以有效地扩大感受野,提取全局的上下文信息,并且具有较少的参数量和较小的计算负载[13]。

图4 SPPF结构

本文算法

2.1 网络整体结构

本文在YOLOv8的基础上进行改进,提出一个适用于景区行人检测的网络模型YOLOv8-L。首先,通过引入注意力机制BiFormer和上采样算子CARAFE来提高网络的回归精度和收敛速度;其次,通过引入DepthSepConv卷积模块降低模型复杂度,减少参数量;最后,通过增加一层小目标检测层改善对小目标的检测性能。该模型的网络结构如表 1、图 5所示。其中,在表 1中,from表示该层的输入层,-1表示上一层,参数量决定了模型的容量和表示能力,并且直接影响模型的性能。

表1 YOLOv8-L网络结构

图5 YOLOv8-L架构

2.2 DepthSepConv

传统的卷积操作在处理高维输入数据时会引入大量的参数和计算开销。具体而言,对于具有n个通道的上一层特征图,传统卷积操作需要n个卷积核与之对应。每个卷积核分别与上一层对应通道的特征图进行卷积操作,然后将这些卷积结果相加,生成下一层的一个通道特征图。如果需要在下一层生成多个通道的特征图(假设为m个通道),则需要m个卷积核[14]。这种操作方式导致了大量的参数和计算开销。

深度可分离卷积(DepthSepConv)是一种卷积神经网络中常用的卷积操作,采用分离的卷积方式来代替传统卷积,分为深度卷积和逐点卷积两个步骤[15]。

深度卷积是在输入的每个通道上应用一个卷积核,生成与输入通道数量相等的中间特征图。每个通道的卷积核只负责处理该通道上的特征,通过在空间维度上进行滑动窗口计算来提取局部特征。这样,深度卷积输入特征图的深度(通道数)与输出特征图的深度相等,如图6所示。逐点卷积是在深度卷积的输出特征图上应用1×1的卷积核,用于将通道之间的特征进行组合和线性变换。逐点卷积通过在每个位置上独立地对各个通道进行计算,将深度卷积得到的中间特征图映射到最终的输出特征图,如图 7所示。

图6 深度卷积

图7 逐点卷积

深度可分离卷积模块的主要优势在于减少计算开销,特别是在逐点卷积阶段,1×1的卷积核计算成本相对较低。此外,由于深度卷积和逐点卷积的分离降低了内存需求,使得模型更适合于资源受限的环境。这使得DepthSepConv可以在保持模型表征能力的同时,具有较小的模型尺寸和计算开销。因此,本文引入DepthSepConv模块,降低模型的参数量和计算量,提升检测速度。

2.3 注意力机制

注意力机制用于增强模型对输入数据的关注和权重分配。通过自动学习数据中的相关性和重要性,使模型能够更有针对性地处理不同的输入。它通过动态计算元素之间的权重,使模型能够聚焦于输入中最相关的部分。然而,注意力机制的引入会增加计算和内存负担[16]。

为了解决计算量和内存负担大的问题,本文引入2023年由文献[17]提出的基于双层路由注意力(BRA)作为核心构建模块的BiFormer注意力机制。

BRA是在粗粒度的区域过滤掉最不相关的键值对,然后通过构建区域级亲和图对其进行修剪,仅保留每个节点的前k个连接。因此,每个区域只需要关注前k个路由区域。之所以称为双层路由,是因为它包含路由步骤和令牌级注意步骤。BRA通过在前k个相关网格收集键值对,利用稀疏性跳过最不相关的区域计算,如图 8所示。

图8 BRA结构

本文引入将BRA作为基本构建模块的BiFormer注意力机制,并采用四级金字塔结构。具体而言,在第1阶段使用重叠的补丁嵌入,在第2~4阶段使用补丁合并模块来降低输入空间分辨率,同时增加通道数量,然后使用N个连续的BiFormer模块来变换特征。在每个BiFormer模块中使用3×3深度卷积来隐式编码相对位置信息。然后,依次应用扩展比为e的BRA模块和2层MLP模块,分别用于跨位置关系建模和逐位置嵌入。BiFormer采用参数共享的策略,即多个位置或通道共享相同的权重,参数共享降低了模型的参数量,使其变得更加轻量化。BiFormer的结构如图 9所示。

图9 BiFormer结构

在图 9中,DWConv为3×3的深度可分离卷积。

为了验证本文引入注意力机制的有效性,在YOLOv8的基础上分别添加SE、ECA、CBAM、BiFormer注意力机制,使用TAPDataset数据集做了5组对比实验,实验结果如表 2所示。从表2可以看出,加入注意力机制后算法的检测精度普遍提高。相比于原始算法,加入SE、ECA、CBAM注意力机制后,mAP@0.5分别提升了0.128%、0.512%、0.256%,mAP@0.5∶0.9分别提升了3.22%、4.63%、6.04%;加入BiFormer注意力机制后,mAP@0.5提升了1.14%,mAP@0.5∶0.9提升了6.45%;相比于加入CBAM,在mAP@0.5∶0.9基本不变的情况下,mAP@0.5提升了1.15%,证明加入BiFormer后算法性能显著提升。且在加入BiFormer注意力机制后,算法性能均高于加入其他注意力机制,这表明BiForrmer注意力机制可以显著提高算法的检测精度。

表2 各种注意力机制在YOLOv8下的对比

2.4 上采样算子CARAFE

上采样是一种在计算机视觉和图像处理中常用的操作,用于增加图像或特征图的尺寸或分辨率。使用最广泛的特征上采样是最近邻插值和双线性插值。但是最近邻插值和双线性插值仅通过像素点的空间位置来决定上采样,并没有利用特征图的语义信息,感受野通常都很小,无法捕获密集预测任务所需的丰富语义信息。另外一种上采样方法是反卷积,又称转置卷积,通过卷积核与输入特征图进行卷积操作,使用补零和步长调整来增加输出特征图的尺寸。但是,转置卷积在整个图像上应用相同的内核,限制了响应局部变化的能力,同时具有较大的参数量,影响计算效率[18]。

CARAFE(ContentAware ReAssembly of Features)是由文献[19]提出的一种轻量级且具有高效运算的上采样方法,其利用内容感知的特征重组来对特征图进行上采样。在每个位置上,利用底层内容信息来预测重组内核并在预定义的附近区域内重组特征,并且可以在不同位置使用自适应和优化的重组内核。

CARAFE特征上采样第1步是根据每个目标位置的内容预测一个重组内核,第2步是利用预测的内核重组特征。

内核预测模块负责以内容感知的方式生成重组内核。输入大小为C×H×W的特征图X上的每个源位置对应于输出特征图X1上的σ2个目标位置,其中,σ为上采样率。每个位置都需要K×K个重组内核,其中K是重组内核的大小。所以模块的输出大小为C'×H×W,C'为σ2×k2。内核预测模块由通道压缩器、内容编码器和内核归一化器3个子模块组成。通道压缩器减少输入特征图的通道,内容编码器将压缩的特征图作为输入并对内容进行编码以生成重组内核,内核标准化器将Softmax函数应用于每个重组内核。因此,本文加入CARAFE上采样算子后,可以提取更丰富的特征信息。

2.5 小目标检测层

深层的特征图可以提供更多的语义信息,而浅层的特征图可以提供更多的位置信息。本文将YOLOv8-N中的检测层由原来的P3、P4、P5 3层增加到P2、P3、P4、P5 4层。P2、P3、P4、P5是通过在卷积神经网络(CNN)中不同的阶段提取特征而得到的[20]。通常,P2位于网络的较早阶段,具有较高的分辨率,而P5则位于较深的阶段,具有较低的分辨率和更大的感受野。由于P2具有较高的分辨率,可以更细致地捕捉图像中的细节信息。对于小目标,更高的分辨率可以更容易地区分目标和背景,提高检测精度;相反,P5等具有较大的感受野,适合检测较大的目标。较大的感受野可以涵盖更广泛的区域,捕获更多的上下文信息[21]。

为了验证其有效性,设计两组对比实验,如表 3所示。其中,YOLOv8+P2表示模型有4个不同尺度的检测层,YOLOv8+P1P2表示模型有5个不同尺度的检测层。从表 3的实验结果可以看出,在增加P2检测层后,mAP@0.5提升了2.307%。由此可以看出,特征图的浅层位置信息对于小目标的检测很重要,增加P2检测层能够进一步提升网络的检测精度。但是,将检测层加至五层后,在mAP@0.5及mAP@0.5∶0.9基本保持不变的情况下,参数量大幅提升。因此,本文在YOLOv8的基础上,增加一个P2小目标检测层来提升模型对小目标的检测能力。

表3 增加小目标检测层后与原模型的实验对比

实验结果与分析

3.1 数据集及预处理

本文分别使用自制数据集TAPDataset、公开数据集VOC 2007及VOC 2007的测试集作为训练集,TAPDataset的验证集和测试集组成TAP+VOC数据集。数据集信息如表 4所示。

表4 数据集划分结果

另外,在训练过程中,本文使用Mosaic方法进行增强,即随机选取9张图片进行随机编排和拼接。使用Mosaic数据增强可以增强数据的多样性,提供更丰富的上下文信息,变相地增大了Batchsize,提高了模型的鲁棒性和泛化能力。

3.2 实验环境与参数配置

具体实验环境如表 5所示。初始学习率为0.01,最终学习率为0.02,Batchsize为16,输入图片尺寸为640×640像素,warm_epochs为3.0,最后10个Epochs关闭Mosaic数据增强。

表5 实验环境

3.3 评价指标

本文使用mAP@0.5、mAP@0.5∶0.95和参数量、FPS作为目标检测模型的评估指标[22]。AP为PR曲线与坐标轴所围成的面积,其基于精度和召回率指标处理多个对象类别,并使用IoU定义正预测,精度(P)衡量模型正预测的准确性,而召回率(R)衡量模型正确识别的正例与实际正例的比例。AP指标提供准确率和召回率的平衡评估[23]。

AP的计算方法如式(1)所示:

51c视觉~合集18_视觉_26

编辑

取数据集中所有对象类别的平均AP作为mAP。

3.4 定量评价

为了验证本文所提出算法YOLOv8-L的有效性,将其与目前主流的单阶段、两阶段和轻量化检测模型进行比较,并比较YOLOv8和YOLOv8-L在不同数据集上的性能,实验结果如表 6、表 7、表 8所示。

表6 YOLOv8-L在TAPDataset上的对比实验

表7 YOLOv8与YOLOv8-L在不同数据集上的对比实验

表8 YOLOv8-L在VOC 2007数据集上的对比实验

从表 6可以看出,在FPS基本保持不变的情况下,YOLOv8-L相比于YOLOv8-N参数量降低了11.3%,mAP@0.5提高了5.6%,mAP@0.5∶0.95提高了6.03%,证明了本文算法改进的有效性。同时,由于引入BiFormer注意力机制、CARAFE上采样算子及轻量化DepthSepConv卷积模块,参数量比实验中的其他算法小,精度比其他算法高,使模型在训练和检测时对计算机硬件的要求更低,这可以被应用于低成本的检测中。在对比实验中,YOLOv8-L的mAP@0.5指标在降序排列中位于第1,与位于第2的YOLOv5-ghostNet相比,提高了2.61%;参数量在升序排列中位于第2。结合模型的复杂度、检测精度与应用场景,YOLOv8-L在众多模型中表现出色,更适合应用于景区行人检测。

从表 7可以看出,YOLOv8在3个数据集中,TAPDataset的参数量在升序排列中位于第1,比位于第2的数据集低6.4%,同时mAP@0.5和mAP@0.5∶0.95在降序排列中均位于第1,证明TAPDataset数据集在工程实践中具有更好的应用性能;在FPS基本不变的情况下,相较于YOLOv8,YOLOv8-L在3个数据集上的参数量均较低,mAP@0.5和mAP@0.5∶0.95均较高。在VOC 2007数据集中,FPS基本不变,YOLOv8-L的参数量比YOLOv8低13.6%,mAP@0.5比YOLOv8高4.12%,mAP@0.5∶0.95比YOLOv8高6.3%,这证明了对网络改进的有效性。在TAP+VOC数据集上,使用VOC的测试集训练模型,使用TAPDataset数据集进行模型的测试和验证,YOLOv8-L的参数量比YOLOv8低14.01%,mAP@0.5和mAP@0.5∶0.95分别比YOLOv8高4.49%和5.68%。

从表 8可以看出,在FPS基本不变的情况下,YOLOv8-L的参数量比YOLOv8降低了9.375%,mAP@0.5和mAP@0.5∶0.95在降序排列中均位于第1,证明YOLOv8-L具有很强的泛化性能,并能更好地应用于景区行人检测任务。

3.5 定性评价

本文使用三组场景的图片对YOVOv5、YOLOv8和YOLOv8-L的检测效果进行定性评价。实验时输入的图片大小为640×640像素,置信度阈值为0.25,实验结果如图 10所示。在第1列图片中行人较少,可以看出,YOLOv5和YOLOv8出现了漏检和误检的情况,但是YOLOv8-L检测出了更多的正确目标,证明YOLOv8-L能够从输入图片中提取出更丰富的特征。在第2列图片中,行人较为密集,YOLOv5出现漏检的情况,YOLOv8的漏检数量增多,但YOLOv8-L并未出现漏检的情况。在第3列图片中,有大量的远距离小目标,YOLOv8-L比YOLOv5和YOLOv8的检测效果出色,检测到了大量YOLOv8未检测到的小目标。总体来说,YOLOv8-L对目标的检测效果普遍优于YOLOv8,证明网络能够提取更丰富的语义信息,性能更好。

图10 YOLOv5、YOLOv8和YOLOv8-L效果对比

3.6 消融实验

为了综合探究本文提出的YOLOv8-L算法的检测性能与各个方法的有效性,在YOLOv8的基础上设计12组消融实验,所有的实验使用同样的实验环境配置和相同的超参数,实验结果如表 9所示。其中,DepthSepConv代表DepthSepConv卷积模块,BiFormer代表BiFormer注意力机制,CARAFE代表上采样算子,P2代表添加的小目标检测层,√代表在该组实验中引了入该模块。

从表9可以看出,相比于原始算法,在第2组实验中引入了DepthSepConv卷积模块,参数量减少了约27.4%,mAP@0.5提升了约0.6%,mAP@0.5∶0.95基本保持不变,证明其是有效的轻量化手段;在第3组实验中引入了BiFormer注意力机制,参数量略有上涨,但mAP@0.5提升了1.4%,证明加入BiFormer注意力机制是提升检测效果的有效手段;在第4组和第5组实验中,分别引入上采样算子和小目标检测层P2,在参数量保持基本不变的情况下,mAP@0.5和mAP@0.5∶0.95都有不同程度的提升,证明其在不改变模型复杂度的情况下,均可有效提升模型的检测精度。

对比第6组、第7组、第8组实验,在DepthSepConv卷积模块的基础上分别加入BiFormer注意力机制、小目标检测层P2和上采样算子CARAFE,相比原始算法,mAP@0.5和FPS均有不同程度的提升;在这3组实验中,mAP@0.5在降序排列中第8组实验位于第1,相比于第2组实验,提升了3.71%。在第9组、第10组和第11组实验中,相比原始算法,虽然mAP@0.5和mAP@0.5∶0.95均大幅提升,mAP@0.5最高提升了4.61%,mAP@0.5∶0.95最高提升了5.47%,但参数量最高提升了4.51%,FPS最高降低了7.54%。

第12组实验同时加入了DepthSepConv卷积模块、BiFormer注意力机制、CARAFE上采样算子和P2小目标检测层,FPS基本保持不变,参数量减少了约18.06%,mAP@0.5提升了5.51%,mAP@0.5∶0.95提升了6.03%,均衡了检测精度、参数量、FPS之间的关系,证明本文实验方法可以在参数量减少的情况下,显著提升算法的检测性能,更适用于景区的行人检测任务。

表9 消融实验结果

结束语

针对YOLOv8在景区行人检测方面精度不高、参数量较大等问题,本文创建了TAPDataset行人检测数据集,并提出一种改进的行人检测算法YOLOv8-L。

采用DepthSepConv卷积模块对网络进行轻量化处理以减少参数量,并引入BiFormer注意力机制和CARAFE上采样算子,提升网络的检测精度,最后通过加入一层小目标检测层,改善算法对小目标的检测效果。

实验结果表明,与YOLOv8-N相比,YOLOv8-L算法参数量减少了18.06%,mAP@0.5提高了5.51%,mAP@0.5∶0.95提高了6.03%。

为了进一步提升模型的检测性能并降低复杂度,下一步将继续对模型进行轻量化处理,同时对Head部分的注意力机制和上采样方式进行改进,以在景区行人检测中展现出更好的性能。