0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在DeepStream上使用自己的Pytorch模型

jf_cVC5iyAO 来源:易心Microbit编程 作者:易心Microbit编程 2022-11-25 16:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

DeepStream是NVIDIA专为处理多个串流影像,并进行智能辨识而整合出的强大工具。开发语言除了原先的C++,从DeepStream SDK 5.1也支持基于原先安装,再挂上Python套件的方式,让较熟悉Python程序语言的使用者也能使用DeepStream。

本文主要将其应用在Jetson Nano上,并于DeepStream导入自己的模型执行辨识。

c8987b76-6c97-11ed-8abf-dac502259ad0.png

在Jetson Nano上面安装DeepStream

笔者使用的硬件为Jetson Nano 2GB/4GB,参照官方提供的步骤与对应的版本,几乎可以说是无痛安装。对比同样采用干净映像档,使用源码或是Docker安装的JetBot与Jetson Inference要快上许多。

c8b97b00-6c97-11ed-8abf-dac502259ad0.png

执行官方范例

DeepStream有提供不少范例,不论是从CSIUSB接口的摄影机取得画面,或是多影像辨识结果显示,都能经由查看这些范例,学习如何设定。

c8e2d50e-6c97-11ed-8abf-dac502259ad0.png

透过下列指令执行一个配置文件,查看DeepStream是否安装成功,这个配置文件会开启一部mp4影片,并模拟产生8个输入来源,经模型推论处理过后于同一个画面显示,点击单一个区块可以显示该来源的详细信息。实际应用上可以将各部摄影机的画面同时输出并进行处理。

deepstream-app -c source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

c917e2bc-6c97-11ed-8abf-dac502259ad0.png

使用自己的模型

如果您与笔者一样是NVIDIA官方课程小粉丝,从拥有Jetson Nano开始,就按部就班的跟着课程学习,那您一定看过下列三种不同主题的课程。

c94d3020-6c97-11ed-8abf-dac502259ad0.png

从入门的Section 1开始,到执行Section 2的JetBot自驾车项目,最后Section 3 Hello AI World。经过三个Section,您应该稍微熟悉Pytorch,并且也训练了不少自己的模型,特别是在Hello AI World有训练了Object Detection模型。既然都有自己的模型,何不放到DeepStream上面制作专属的串流辨识项目,针对想要辨识的项目导入适合的模型。

在Hello AI World项目训练Object Detection模型的时候,我们使用的是SSD-Mobilenet,在DeepStream的对象辨识范例中有提供使用自己的SSD模型方法,可在下列路径找到参考文件,文件中使用的例子是使用coco数据集预训练的SSD-Inception。

/opt/nvidia/deepstream/deepstream-5.1/sources/objectDetector_SSD

可惜的是文件中使用的是从Tensorflow训练的模型,经由转换.uff再喂给DeepStream,与官方课程使用的Pytorch是不同路线。笔者在网上寻找解决方法,看是否有DeepStream使用Pytorch模型的方案,也于NVIDIA开发者论坛找到几个同样的提问,但最终都是导到上述提到的参考文件。

从Hello AI World训练的Object Detection模型,经过执行推论的步骤,您应该会有三个与模型有关的档案,分别是用Pytorch训练好的.pth,以及为了使用TensorRT加速而将.pth转换的.onnx,最后是执行过程中产生的.engine。既然Pytorch模型找不到解决方案,那就从ONNX模型下手吧,所幸经过一番折腾,终于让笔者找到方法。

https://github.com/neilyoung/nvdsinfer_custom_impl_onnx

neilyoung提供的方法主要是能产生动态函式库,以便我们能在DeepStream使用ONNX模型,除了准备好自己训练的ONNX模型档案与Labels档案,只要再新增设定模型路径与类型的config档案,与deepstream配置文件就能实现使用自己的模型进行推论啰!

STEP 1:

首先于以下路径底下新增执行ONNX项目的文件夹,笔者命名为objectDetector_ONNX。

/opt/nvidia/deepstream/deepstream-5.1/sources

c9758192-6c97-11ed-8abf-dac502259ad0.png

STEP 2:

新增专案文件夹后,请clone方才的nvdsinfer_custom_impl_onnx专案到文件夹内。

c9a19570-6c97-11ed-8abf-dac502259ad0.png

STEP 3:

打开Terminal进到nvdsinfer_custom_impl_onnx项目里面,透过sudo make指令产生动态函式库。

c9d524d0-6c97-11ed-8abf-dac502259ad0.png

STEP 4:

接着将自己从Hello AI World项目训练的Object Detection模型与卷标复制到objectDetector_ONNX项目文件夹。

ca257f5c-6c97-11ed-8abf-dac502259ad0.png

STEP 5:

从别的项目文件夹复制config档案与deepstream配置文件到我们的文件夹内,这边复制objectDetector_SSD,因为模型类型相近,只要稍微修改即可。

ca5449e0-6c97-11ed-8abf-dac502259ad0.png

STEP 6:

首先修改config档案,如下图所示,将模型路径与卷标路径,修正为自己的模型与卷标名称,engine档案的部份与Hello AI World项目一样,在执行ONNX档案进行TensorRT加速时会自动产生,只需给路径与名称即可。对于classes的部份,切记在Hello AI World项目训练的模型会加上BACKGROUND这一个类别,所以若是您辨识的对象有三种,就得在classes这边填上3+1。

下方三项的设定则依照nvdsinfer_custom_impl_onnx项目github上的说明,记得动态函式库的路径请改成自己的路径。

output-blob-names="boxes;scores"

parse-bbox-func-name="NvDsInferParseCustomONNX"

custom-lib-path="/path/to/lib/libnvdsinfer_custom_impl_onnx.so"

接着依照个人需求设定辨识的参数,例如希望信心指数达多少%才认定对象类别,可以修改threshold。

ca7cc0be-6c97-11ed-8abf-dac502259ad0.png

STEP 7:

接着修改deepstream配置文件,笔者在这边设定为USB Webcam输入,并输出单一窗口显示,除了正常调整输入与输出之外,请将config档案与Labels档案导引至自己的路径,engine的部份与config设定相同即可,如下图所示。

caaf0092-6c97-11ed-8abf-dac502259ad0.png

完成上述7步骤后,就能执行配置文件查看是否有正确执行我们的ONNX模型,第一次执行会较久,过程会产生engine档案,一旦有了engine档,之后执行就不会再重复产生。

cad82972-6c97-11ed-8abf-dac502259ad0.png

成功执行自定义模型的结果。

cb1ae4ec-6c97-11ed-8abf-dac502259ad0.png

结论

原官方范例大多执行车流检测,若是想执行别的应用就得自己研究。本篇透过将自己训练好的Pytorch模型转换为ONNX,经7步骤后让DeepStream可以使用我们自己的模型进行辨识,使其能应用在交通以外的场景,例如室内监控、多机台管控…等。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    22

    文章

    2127

    浏览量

    77357
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14921

原文标题:在DeepStream上使用自己的Pytorch模型

文章出处:【微信号:易心Microbit编程,微信公众号:易心Microbit编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    后量化模型 iMX93 NPU 运行,但输出不正确怎么解决

    我正在使用 MobileNet 的自定义实现,旨在对 spark 进行二进制分类。转换为 tflite 并将其量化为 int8 后,模型按预期 NPU 运行,但输出没有意义。该模型
    发表于 03-18 07:53

    NPU 运行了 eIQ TensorFlow Lite 示例模型报错

    我们已经 NPU 运行了 eIQ TensorFlow Lite 示例模型,但它们失败并出现以下错误: 信息:加载的模型 mobilenet_v1_1.0_224_quant.t
    发表于 03-18 06:52

    【瑞萨AI挑战赛】手写数字识别模型RA8P1 Titan Board的部署

    手写数字识别模型RA8P1 Titan Board的部署 手写数字识别是计算机视觉领域的经典入门任务,而瑞萨RA8P1 Titan Board开发板凭借其搭载的双内核架构与专用NPU算力,成为
    发表于 03-15 20:42

    PyTorch 中RuntimeError分析

    ? 错误原因 这个 RuntimeError 是因为 PyTorch 中,upsample_nearest2d_out_frame(最近邻2D采样)操作尚未对 BFloat16 数据类型提供
    发表于 03-06 06:02

    Pytorch 与 Visionfive2 兼容吗?

    Pytorch 与 Visionfive2 兼容吗? $ pip3 install torch torchvision torchaudio --index-url https
    发表于 02-06 08:28

    以下嵌入式软件设计模型中,属于数据流模型的是,哪里有设计模型的介绍?

    以下嵌入式软件设计模型中,属于数据流模型的是()。A. CCSB. CSPC. FSMD. Petri Net
    发表于 11-24 15:55

    如何自己设计一个基于RISC-V的SoC架构,最后可以FPGA跑起来?

    如何自己设计一个基于RISC-V的SoC架构,最后可以FPGA跑起来
    发表于 11-11 08:03

    Arm方案 基于Arm架构的边缘侧设备(树莓派或 NVIDIA Jetson Nano)上部署PyTorch模型

    本文将为你展示如何在树莓派或 NVIDIA Jetson Nano 等基于 Arm 架构的边缘侧设备上部署 PyTorch 模型
    的头像 发表于 07-28 11:50 3036次阅读

    无法NPU推理OpenVINO™优化的 TinyLlama 模型怎么解决?

    NPU 推断 OpenVINO™优化的 TinyLlama 模型。 遇到的错误: get_shape was called on a descriptor::Tensor with dynamic shape
    发表于 07-11 06:58

    请问如何在C++中使用NPU模型缓存?

    无法确定如何在 C++ 中的 NPU 使用模型缓存
    发表于 06-24 07:25

    为什么无法GPU使用INT8 和 INT4量化模型获得输出?

    安装OpenVINO™ 2024.0 版本。 使用 optimum-intel 程序包将 whisper-large-v3 模型转换为 int 4 和 int8,并在 GPU 使用 OpenVINO™ 运行推理。 没有可用的输出。
    发表于 06-23 07:11

    FA模型访问Stage模型DataShareExtensionAbility说明

    DataShareExtensionAbility提供数据库的读写服务。 服务端由FA模型升级到Stage模型后,会导致FA模型的客户端API 9(含)之后的版本
    发表于 06-04 07:53

    同样的代码官方开发板运行正常,自己板子就跑不起来,怎么办?

    同样的代码Nordic官方开发板可以运行正常,但在自己板子就跑不起来,如果你碰到了上述情况,建议按照如下步骤进行自检: 首先确认用户板元器件焊接良好,功能正常。如果你的板子有LE
    的头像 发表于 05-12 15:26 894次阅读
    同样的代码<b class='flag-5'>在</b>官方开发板<b class='flag-5'>上</b>运行正常,<b class='flag-5'>在</b><b class='flag-5'>自己</b>板子<b class='flag-5'>上</b>就跑不起来,怎么办?

    摩尔线程发布Torch-MUSA v2.0.0版本 支持原生FP8和PyTorch 2.5.0

    , 支持原生FP8数据类型,支持PyTorch 2.5.0 ,并通过多项针对MUSA计算平台的性能优化,进一步提升了对AI模型和大规模数据处理的支持能力。 FP8原生支持,国产GPU的技术突破 作为
    的头像 发表于 05-11 16:41 1860次阅读

    KaihongOS操作系统FA模型与Stage模型介绍

    (Feature Ability) FA模型是KaihongOS 从API 7开始支持的模型,已经不再被主推。FA模型中,每个应用组件独享一个ArkTS引擎实例,这意味着每个应用组
    发表于 04-24 07:27