PeekingDuck

PeekingDuck_第1张图片

介绍

计算机视觉项目可能会非常令人望而生畏,涉及到各种工具和包,如OpenCV、TensorFlow和PyTorch等等。不仅需要熟悉所涉及的工具和API,还需要正确组合各个包,以使整个计算机视觉流水线正常工作。

例如,OpenCV以[H,W,C]格式处理带有BGR通道的图像,而TensorFlow以相同格式处理带有RGB通道的图像,PyTorch以[C,H,W]格式处理带有RGB通道的图像。由于这种不一致性,图像格式必须在图像在各个库之间传递时不断修改。这种问题(以及其他问题!)导致了大量样板代码,我们希望在一般情况下避免使用。

如果我们能够使用单一统一的流水线简化计算机视觉流程,该怎么办呢?这个流水线应具备以下特点:

  • 开源且没有像GPL-3.0这样的限制,以降低成本。

  • 模块化,适用于各种用例。

  • 最先进的,以获得最佳性能。

  • 最小化,以减少流水线的复杂性。

事实证明,PeekingDuck部分解决了所有这些问题 —— 这是新近由AI Singapore发布的计算机视觉包!

PeekingDuck

PeekingDuck是一个计算机视觉框架,具备以下特点:

  1. 开源(Apache 2.0) —— 没有成本或限制。

  2. 模块化 —— 可以混合匹配各种模块以解决不同的用例。

  3. 最先进的计算机视觉推理 —— 强大的深度学习模型。

  4. 最小化 —— 真正不需要Python代码!

通过使用像pip这样的软件包管理器安装PeekingDuck作为Python软件包后,可以直接从命令行/终端使用该软件包,轻松直接地与其他应用程序集成。

安装PeekingDuck

PeekingDuck作为Python软件包进行安装:

pip install peekingduck

节点 —— PeekingDuck的基本构建块

使用PeekingDuck,计算机视觉流程使用称为节点的基本构建块构建。每个节点处理不同的操作集,通过混合使用各种节点,可以创建不同的流水线。截至撰写本文,PeekingDuck有6种不同类型的节点:

  1. 输入节点 —— 从实时摄像头或视频/图像文件中将图像数据输入到流水线中。

  2. 增强 - 预处理图像数据。

  3. 模型 - 执行诸如目标检测或姿态估计等计算机视觉任务。

  4. 涂抹 - 后处理模型输出。

  5. 绘制 - 可视化模型输出,如边界框。

  6. 输出 - 将模型输出保存到磁盘。

人物追踪流程

使用PeekingDuck非常简单!在本节中,我们将演示如何使用PeekingDuck创建一个人物追踪流程!

初始化PeekingDuck

第一步是在指定的目录中初始化PeekingDuck(在本例中为person_tracking/)。

mkdir person_tracking

cd person_tracking

peekingduck init

这将在person_tracking/目录下创建一个名为pipeline_config.yml的配置文件,以及其他一些源代码文件。为了让PeekingDuck按照我们的意愿进行操作,我们需要修改pipeline_config.yml文件。

在我们的情况下,pipeline_config.yml应包含以下内容:

nodes:
- input.visual:
    source: venice-2-train.mp4
    
- model.jde

- dabble.statistics:
    maximum: obj_attrs["ids"]
    
- draw.bbox

- draw.tag:
    show: ["ids"]
    
- draw.legend:
    show: ["cum_max"]
    
- output.media_writer:               
    output_dir: output/

我们在这个任务中使用了以下节点:

  1. input.visual —— 指定要从中加载图像数据的文件。我们使用从MOT15数据集的Venice-2图像拼接而成的视频。

  2. model.jde —— 指定要使用的模型。对于人物追踪,我们使用Joint Detection and Embedding (JDE)模型。

  3. dabble.statistics —— 基于模型的输出进行统计计算。在这种情况下,我们计算每帧检测到的ID的最大数量。

  4. draw.bbox —— 在每帧上绘制检测到的边界框。

  5. draw.tag —— 为每个边界框绘制相应的标签。

  6. draw.legend —— 绘制累积最大检测数。

  7. output.media_writer —— 将模型的预测输出保存到磁盘上。 通过混合和匹配不同的节点,我们可以构建不同的流水线来解决不同的计算机视觉用例。PeekingDuck网站上提供了可用节点的详细列表。

https://peekingduck.readthedocs.io/en/stable/nodes/input.html

准备数据

接下来是准备数据。在我们的情况下,我们使用OpenCV将来自MOT15数据集的Venice-2图像拼接成一个名为venice-2-train.mp4的视频文件,帧率为30,分辨率为[1920, 1080]。

import cv2

import os

w = cv2.VideoWriter("venice-2-train.mp4", 
                    cv2.VideoWriter_fourcc(*"MP4V"), 
                    30, [1920, 1080])

files = sorted(os.listdir("MOT15/train/Venice-2/img1"))

for f in files:
    im = cv2.imread(os.path.join("MOT15/train/Venice-2/img1", f))
    w.write(im)

w.release()

运行PeekingDuck

在初始化PeekingDuck和数据之后,只需简单地从命令行运行流水线:

peekingduck run

流水线的输出将保存在output/目录下,如pipeline_config.yml中所指定的,可以将其可视化为视频或.gif图像,如下所示。

检测到的边界框已经叠加在每个被追踪的人物上,并显示了每个相应的追踪ID。累积最大追踪ID的数量也显示在每个帧的左下角。

请注意,除了准备数据外,在使用PeekingDuck进行人物追踪时,我们没有编写一行Python代码!

结论

计算机视觉已经取得了长足的进步,我们现在可以访问许多出色的软件包,如PeekingDuck。

PeekingDuck提供了开源、模块化的最先进的计算机视觉模型,只需要很少量的Python代码,任何人都可以相对轻松地进行计算机视觉项目!

参考引用

  1. https://peekingduck.readthedocs.io/en/stable/master.html

  2. https://motchallenge.net/data/MOT15/

  3. https://github.com/Zhongdao/Towards-Realtime-MOT

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

PeekingDuck_第2张图片

你可能感兴趣的:(计算机视觉,深度学习,python,人工智能,opencv)