使用 YOLOv7 PlatoBlockchain 数据智能在 Python 中进行实时对象检测推理。 垂直搜索。 人工智能。

使用 YOLOv7 在 Python 中进行实时对象检测推理

介绍

目标检测是计算机视觉中的一个大领域,也是计算机视觉“在野外”更重要的应用之一。

对象检测不像图像分类那样标准化,主要是因为大多数新开发通常是由个人研究人员、维护人员和开发人员完成的,而不是大型库和框架。 很难将必要的实用程序脚本打包到 TensorFlow 或 PyTorch 等框架中,并维护迄今为止指导开发的 API 指南。

这使得对象检测稍微复杂一些,通常更冗长(但并非总是如此),并且比图像分类更不易接近。

对大众来说幸运的是——Ultralytics 围绕他们的 YOLOv5 开发了一个简单、非常强大和漂亮的对象检测 API,其他研发团队已经将其扩展为更新的版本,例如 YOLOv7。

在这个简短的指南中,我们将使用最先进的 YOLOv7 在 Python 中执行对象检测。

YOLO 风景和 YOLOv7

YOLO(你只看一次) 是一种方法论,也是为对象检测而构建的一系列模型。 自 2015 年成立以来,YOLOv1、YOLOv2 (YOLO9000) 和 YOLOv3 都是由同一作者提出的——并且深度学习社区在接下来的几年中继续推进开源。

Ultralytics 的 YOLOv5 是 PyTorch 中 YOLO 的第一个大规模实现,这使得它比以往任何时候都更易于访问,但 YOLOv5 获得如此立足点的主要原因还在于围绕它构建的精美简单且功能强大的 API。 该项目抽象出不必要的细节,同时允许可定制性,几乎所有可用的导出格式,并采用惊人的实践,使整个项目既高效又尽可能优化。

YOLOv5 仍然是构建对象检测模型的主要项目,许多旨在推进 YOLO 方法的存储库以 YOLOv5 作为基线并提供类似的 API(或简单地分叉项目并在其之上构建)。 情况就是这样 YOLOR(你只学习一种表示) 和建立在 YOLOR 之上的 YOLOv7(同一作者)。 YOLOv7 是 YOLO 方法论的最新进展,最值得注意的是,YOLOv7 提供了新的模型头,除了以前的 YOLO 模型不标准的边界框回归之外,它还可以输出关键点(骨架)并执行实例分割。

这使得实例分割和关键点检测比以往任何时候都更快!

此外,由于减少了参数数量和提高了计算效率,YOLOv7 的执行速度比以前的模型更快且准确度更高:

使用 YOLOv7 PlatoBlockchain 数据智能在 Python 中进行实时对象检测推理。 垂直搜索。 人工智能。

该模型本身是通过架构更改以及优化培训方面创建的,被称为“免费赠品”,在不增加推理成本的情况下提高了准确性。

安装 YOLOv7

安装和使用 YOLOv7 归结为将 GitHub 存储库下载到本地计算机并运行随附的脚本。

请注意: 不幸的是,在撰写本文时,YOLOv7 没有提供干净的编程 API,例如 YOLOv5,通常从 torch.hub(),传入 GitHub 存储库。这似乎是一个应该工作但目前失败的功能。 随着它得到修复,我将更新指南或在程序化 API 上发布新指南。 现在——我们将专注于存储库中提供的推理脚本。

即便如此,您也可以对视频、图像等进行实时检测并轻松保存结果。 该项目遵循与 YOLOv5 相同的约定,YOLOv5 具有广泛的文档,因此如果您有一些问题,您可能会在 YOLOvXNUMX 存储库中找到更多小众问题的答案。

让我们下载存储库并执行一些推断:

! git clone https://github.com/WongKinYiu/yolov7.git

这创造了一个 yolov7 当前工作目录中的目录,该目录包含项目。 让我们进入该目录并查看文件:

%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md       detect.py        models           tools
README.md        export.py        paper            train.py
cfg              figure           requirements.txt train_aux.py
data             hubconf.py       scripts          utils
deploy           inference        test.py          runs

请注意: 在 Google Colab Notebook 上,你必须发挥魔力 %cd 您希望将目录更改为的每个单元格中的命令 yolov7,而下一个单元格会将您返回到原始工作目录。 在本地 Jupyter Notebooks 上,更改目录 一旦 让您留在其中,因此无需多次重新发出命令。

detect.py 是运行检测并将结果保存在 runs/detect/video_name,您可以在其中指定 video_name 在调用 detect.py 脚本。 export.py 将模型导出为各种格式,如 ONNX、TFLite 等。 train.py 可用于训练自定义 YOLOv7 检测器(另一个指南的主题),以及 test.py 可用于测试检测器(从权重文件加载)。

几个附加目录包含配置(cfg), 示例数据 (inference),关于构建模型和 COCO 配置的数据 (data)等

YOLOv7 尺寸

基于 YOLO 的模型可以很好地扩展,并且通常以更小、更不准确的模型和更大、更准确的模型的形式导出。 然后将它们分别部署到较弱或较强的设备。

YOLOv7 提供了多种尺寸,并将它们与 MS COCO 进行了基准测试:

查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!

型号 测试尺寸 APtest AP50test AP75test 批处理 1 fps 批次 32 平均时间
YOLOv7 640 51.4% 69.7% 55.9% FPS 161 2.8毫秒
YOLOv7-X 640 53.1% 71.2% 57.8% FPS 114 4.3毫秒
YOLOv7-W6 1280 54.9% 72.6% 60.1% FPS 84 7.6毫秒
YOLOv7-E6 1280 56.0% 73.5% 61.2% FPS 56 12.3毫秒
YOLOv7-D6 1280 56.6% 74.0% 61.8% FPS 44 15.0毫秒
YOLOv7-E6E 1280 56.8% 74.4% 62.1% FPS 36 18.7毫秒

根据您期望模型在其上运行的底层硬件以及所需的精度——您可以在它们之间进行选择。 在 V160 上,最小的模型在 640 尺寸的图像上达到 100FPS 以上! 您也可以在更常见的消费级 GPU 上获得令人满意的实时性能。

使用 YOLOv7 进行视频推理

创建 inference-data 文件夹来存储您想要从中检测的图像和/或视频。 假设它在同一个目录中,我们可以运行一个检测脚本:

! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img

这将在您的桌面上提示一个基于 Qt 的视频,您可以在其中逐帧查看实时进度和推理,并将状态输出到我们的标准输出管道:

Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU

Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]

Fusing layers... 
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
 Convert model to Traced-model... 
 traced_script_module saved! 
 model is traced! 
 
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS

请注意,该项目将在基于 CPU 的机器上运行缓慢(例如上面输出中的每个推理步骤 1000 毫秒,在基于 Intel 的 2017 MacBook Pro 上运行),而在基于 GPU 的机器上运行速度明显更快(接近约 5 毫秒/帧在 V100 上)。 即使在像这样的基于 CPU 的系统上, yolov7-tiny.pt172ms/frame,虽然远非实时,但仍然非常适合在 CPU 上处理这些操作。

运行完成后,您可以在下面找到生成的视频 runs/video_1 (我们在 detect.py 调用),另存为 .mp4:

使用 YOLOv7 PlatoBlockchain 数据智能在 Python 中进行实时对象检测推理。 垂直搜索。 人工智能。

图像推理

图像推断归结为同一个过程——将 URL 提供给文件系统中的图像,然后调用 detect.py:

! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt

请注意: 在撰写本文时,即使您设置了输出也不会将标签缩放到图像大小 --img SIZE. 这意味着大图像将具有非常细的边界框线和小标签。

使用 YOLOv7 PlatoBlockchain 数据智能在 Python 中进行实时对象检测推理。 垂直搜索。 人工智能。

结论

在这个简短的指南中——我们简要介绍了 YOLOv7,它是 YOLO 家族的最新进展,它建立在 YOLOR 之上。 我们已经了解了如何在您的本地计算机上安装存储库并使用预先训练的视频和图像网络运行对象检测推理脚本。

在进一步的指南中,我们将介绍关键点检测和实例分割。

走得更远——计算机视觉的实用深度学习

你好奇的天性让你想走得更远? 我们建议查看我们的 套餐: “使用 Python 进行计算机视觉的实用深度学习”.

使用 YOLOv7 PlatoBlockchain 数据智能在 Python 中进行实时对象检测推理。 垂直搜索。 人工智能。

另一个计算机视觉课程?

我们不会对 MNIST 数字或 MNIST 时尚进行分类。 他们很久以前就发挥了作用。 在让高级黑盒架构承担性能负担之前,太多的学习资源专注于基本数据集和基本架构。

我们想专注于 揭秘, 实际性, 理解, 直觉真实项目. 想学 形成一种 你可以有所作为? 我们将带您从大脑处理图像的方式到编写研究级的乳腺癌深度学习分类器,再到“产生幻觉”的深度学习网络,通过实际工作教您原理和理论,为您配备成为应用深度学习解决计算机视觉问题的专家的专业知识和工具。

里面是什么?

  • 视觉的首要原则以及如何教计算机“看”
  • 计算机视觉的不同任务和应用
  • 让您的工作更轻松的交易工具
  • 为计算机视觉寻找、创建和利用数据集
  • 卷积神经网络的理论与应用
  • 处理数据集中的域转移、共现和其他偏差
  • 迁移学习并利用他人的训练时间和计算资源为您谋取利益
  • 构建和训练最先进的乳腺癌分类器
  • 如何将健康的怀疑态度应用于主流思想并理解广泛采用的技术的含义
  • 使用 t-SNE 和 PCA 可视化 ConvNet 的“概念空间”
  • 公司如何使用计算机视觉技术取得更好结果的案例研究
  • 适当的模型评估、潜在空间可视化和识别模型的注意力
  • 执行领域研究,处理您自己的数据集并建立模型测试
  • 尖端架构、想法的发展、是什么让它们与众不同以及如何实现它们
  • KerasCV – 用于创建最先进的管道和模型的 WIP 库
  • 如何解析和阅读论文并自己实现它们
  • 根据您的应用选择型号
  • 创建端到端机器学习管道
  • 使用 Faster R-CNN、RetinaNets、SSD 和 YOLO 进行对象检测的景观和直觉
  • 实例和语义分割
  • 使用 YOLOv5 进行实时对象识别
  • 训练 YOLOv5 目标检测器
  • 使用 KerasNLP(行业强大的 WIP 库)使用 Transformers
  • 将 Transformers 与 ConvNet 集成以生成图像的标题
  • 深梦
  • 计算机视觉的深度学习模型优化

时间戳记:

更多来自 堆栈滥用