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

    文章

    2111

    浏览量

    73703
  • pytorch
    +关注

    关注

    2

    文章

    808

    浏览量

    13249

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

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

收藏 人收藏

    评论

    相关推荐

    PyTorch GPU 加速训练模型方法

    深度学习领域,GPU加速训练模型已经成为提高训练效率和缩短训练时间的重要手段。PyTorch作为一个流行的深度学习框架,提供了丰富的工具和方法来利用GPU进行模型训练。 1. 了解G
    的头像 发表于 11-05 17:43 583次阅读

    PyTorch 数据加载与处理方法

    PyTorch 是一个流行的开源机器学习库,它提供了强大的工具来构建和训练深度学习模型构建模型之前,一个重要的步骤是加载和处理数据。 1. Py
    的头像 发表于 11-05 17:37 433次阅读

    如何在 PyTorch 中训练模型

    PyTorch 是一个流行的开源机器学习库,广泛用于计算机视觉和自然语言处理等领域。它提供了强大的计算图功能和动态图特性,使得模型的构建和调试变得更加灵活和直观。 数据准备 训练模型
    的头像 发表于 11-05 17:36 356次阅读

    使用PyTorch英特尔独立显卡训练模型

    PyTorch 2.5重磅更新:性能优化+新特性》中的一个新特性就是:正式支持英特尔独立显卡训练模型
    的头像 发表于 11-01 14:21 571次阅读
    使用<b class='flag-5'>PyTorch</b><b class='flag-5'>在</b>英特尔独立显卡<b class='flag-5'>上</b>训练<b class='flag-5'>模型</b>

    基于Pytorch训练并部署ONNX模型TDA4应用笔记

    电子发烧友网站提供《基于Pytorch训练并部署ONNX模型TDA4应用笔记.pdf》资料免费下载
    发表于 09-11 09:24 0次下载
    基于<b class='flag-5'>Pytorch</b>训练并部署ONNX<b class='flag-5'>模型</b><b class='flag-5'>在</b>TDA4应用笔记

    pytorch怎么pycharm中运行

    第一部分:PyTorch和PyCharm的安装 1.1 安装PyTorch PyTorch是一个开源的机器学习库,用于构建和训练神经网络。要在PyCharm中使用PyTorch,首先需
    的头像 发表于 08-01 16:22 1488次阅读

    PyTorch中搭建一个最简单的模型

    PyTorch中搭建一个最简单的模型通常涉及几个关键步骤:定义模型结构、加载数据、设置损失函数和优化器,以及进行模型训练和评估。
    的头像 发表于 07-16 18:09 2079次阅读

    pytorch如何训练自己的数据

    本文将详细介绍如何使用PyTorch框架来训练自己的数据。我们将从数据准备、模型构建、训练过程、评估和测试等方面进行讲解。 环境搭建 首先,我们需要安装PyTorch。可以通过访问
    的头像 发表于 07-11 10:04 556次阅读

    pytorch中有神经网络模型

    处理、语音识别等领域取得了显著的成果。PyTorch是一个开源的深度学习框架,由Facebook的AI研究团队开发。它以其易用性、灵活性和高效性而受到广泛欢迎。PyTorch中,有许多预训练的神经网络
    的头像 发表于 07-11 09:59 723次阅读

    PyTorch神经网络模型构建过程

    PyTorch,作为一个广泛使用的开源深度学习库,提供了丰富的工具和模块,帮助开发者构建、训练和部署神经网络模型神经网络模型中,输出层是尤为关键的部分,它负责将
    的头像 发表于 07-10 14:57 522次阅读

    解读PyTorch模型训练过程

    PyTorch作为一个开源的机器学习库,以其动态计算图、易于使用的API和强大的灵活性,深度学习领域得到了广泛的应用。本文将深入解读PyTorch模型训练的全过程,包括数据准备、
    的头像 发表于 07-03 16:07 1099次阅读

    PyTorch如何训练自己的数据集

    PyTorch是一个广泛使用的深度学习框架,它以其灵活性、易用性和强大的动态图特性而闻名。训练深度学习模型时,数据集是不可或缺的组成部分。然而,很多时候,我们可能需要使用自己的数据集
    的头像 发表于 07-02 14:09 1803次阅读

    如何使用PyTorch建立网络模型

    PyTorch是一个基于Python的开源机器学习库,因其易用性、灵活性和强大的动态图特性,深度学习领域得到了广泛应用。本文将从PyTorch的基本概念、网络模型构建、优化方法、实际
    的头像 发表于 07-02 14:08 431次阅读

    使用PyTorch搭建Transformer模型

    Transformer模型自其问世以来,自然语言处理(NLP)领域取得了巨大的成功,并成为了许多先进模型(如BERT、GPT等)的基础。本文将深入解读如何使用PyTorch框架搭建T
    的头像 发表于 07-02 11:41 1689次阅读

    请问电脑端Pytorch训练的模型如何转化为能在ESP32S3平台运行的模型

    由题目, 电脑端Pytorch训练的模型如何转化为能在ESP32S3平台运行的模型? 如何把这个Pytorch模型烧录到ESP32S3上去?
    发表于 06-27 06:06