问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

实战教程:使用YOLO-NAS进行图片与视频的对象检测

创作时间:
作者:
@小白创作中心

实战教程:使用YOLO-NAS进行图片与视频的对象检测

引用
CSDN
1.
https://blog.csdn.net/qq_42589613/article/details/145082141

YOLO-NAS(You Only Look Once - Neural Architecture Search)是YOLO系列目标检测算法的最新版本,通过神经架构搜索技术优化模型结构,实现了更高的检测精度和更快的推理速度。本文将详细介绍如何使用YOLO-NAS进行图片与视频的对象检测,并附有完整的代码示例。

YOLO简介

YOLO(You Only Look Once)的出现彻底改变了计算机视觉领域。YOLO的第一个版本由Joseph雷德蒙等人于2016年6月发布。它在速度和准确性方面都打破了基准。在对象检测方面,YOLO一直是数据科学家和机器学习工程师的最爱,也是检测图像中实体的首选模型。

自推出以来,YOLO有许多新的迭代,改善了以前版本的几个不足,即:

  • 改进底层深度学习模型的架构。
  • 实施替代方案以提高性能,例如数据扩充技术。
  • 迁移了原始的YOLO代码以使用pytorch培训和部署框架。
  • 改进了小物体的检测机制。

YOLO的最新版本是YOLO11。需要注意的一件重要的事情是,每个计算机视觉和目标检测模型都是基于两个参数进行评估的:准确度(由与计算机视觉分割相关的度量定义)和速度(由推理中的延迟定义)。如何评估CV算法的一个示例如下所示:


不同YOLO模型与EfficientDet的比较

配置环境

我们将从加载大型YOLO模型的预训练版本开始。在本例中,我们将使用带有NAS[神经架构搜索]的YOLO实现。神经结构搜索是神经网络优化技术的一种常见实现,用于改进深度学习模型中参数的自动选择。

我们将使用的模型是在COCO数据集上训练的。这些权重已经包含了一个很好的基线来检测图像上的对象。

首先,让我们添加几个我们需要的库到我们的环境中,即:

  • torchinfo,一个可视化我们的神经网络架构的助手;
  • super_gradients,用于加载模型的库;
!pip install torchinfo
!pip install super_gradients

接下来,我们将加载我们需要的函数和库:

from super_gradients.training import models
from torchinfo import summary
import torch

然后,我们开始使用super_gradients将COCO预训练模型加载到内存中:

# Using Yolo NAS Large
yolo_nas_l = models.get("yolo_nas_l", pretrained_weights="coco")

我们将预训练的模型存储在yolo_nas_l中。使用模型获取这些预先训练的YOLO版本非常容易。torchinfo为我们提供了一个非常酷的模型架构视图:

summary(model=yolo_nas_l,
        input_size=(16, 3, 640, 640),
        col_names=["input_size", "output_size", "num_params", "trainable"],
        col_width=20,
        row_settings=["var_names"]
)

如果你想查看YOLO架构,请查看下面的图片:

图像检测

让我们从一个简单的图像开始,以桌子为中心,周围环绕着各种物体。在这张图片中,我们可以看到:

  • 两把椅子
  • 书桌
  • 两个灯
  • 一个计算机
  • 耳机
  • 一种植物

在我们的代码中,我们只在模型置信度超过55%的情况下显示边界框。只有这些项目的标签将显示在检测的图像中。

img = "test.jpg"
yolo_nas_l.predict(img, conf=0.55).show()

可以看到,我们的模型能够很好地检测到椅子,笔记本电脑,桌子和植物(尽管它错过了灯,耳机和高科技水壶)。让我们看看如果我们降低我们的置信度阈值会发生什么:

img = "test.jpg"
yolo_nas_l.predict(img, conf=0.40).show()

使用YOLO标记的图像(40%置信度)

啊,有意思!降低我们的门槛导致了我们第一次错误分类。在这种情况下,耳机被错误地识别为计算机鼠标。降低阈值将不可避免地导致目标检测中的更多错误。

让我们尝试一个更拥挤的场景的图像:

我们的YOLO模型将检测哪些对象?由于这个图像有更多的元素,我将降低推断的置信度:

img2 = "test2.jpg"
yolo_nas_l.predict(img2, conf=0.3).show()

使用YOLO标记的图像(30%置信度)

正如我们所看到的,YOLO无法分割一些对象-特别是较小/较薄的对象。尽管如此,性能还是相当不错的,特别是对于这样一个拥挤的图像。

视频检测

在本节中,我将使用YOLO-NAS进行视频检测:

我们将首先准备好需要检测的视频test.mp4,然后以将视频传递给YOLO模型。

input_video_path = "test.mp4"
output = "traffic.mp4"

运行我们的检测模型:

device = 'cuda' if torch.cuda.is_available() else "cpu"
yolo_nas_l.to(device).predict(input_video_path).save(output)

注意:此代码可能需要一点时间才能运行,具体取决于您本地系统的配置

结果如下:

YOLO模型非常强大!你可以使用它们来检测图像或视频相当快,只需几行代码。使用本文展示的这段代码,你可以非常容易地使用你自己的资源来测试这个伟大的计算机视觉模型。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号