• 发文
  • 评论
  • 微博
  • 空间
  • 微信

PeekingDuck

磐创AI 2023-06-08 13:42 发文

介绍

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

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

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

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

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

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

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

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

PeekingDuck

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

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

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

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

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

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

安装PeekingDuck

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

pip install peekingduck 

节点 —— PeekingDuck的基本构建块

使用PeekingDuck,计算机视觉流程使用称为节点的基本构建块构建。每个节点处理不同的操作集,通过混合使用各种节点,可以创建不同的流水线。截至撰写本文,PeekingDuck有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/

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

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

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

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

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

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

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

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代码,任何人都可以相对轻松地进行计算机视觉项目!

参考引用

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

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

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

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码