Deepstream实战经验分享

最近花了几个月的时间终于把一个deepstream的项目做完了,大概记录一下在这个过程中比较难过的地方,写的不会很详细,欢迎私信我讨论细节。

1.如何部署deepstream项目?

首先需要用到deepstream的官方start guide 并按照指示一步一步的来。还需要deepstream 6.0的官方说明文档以供查阅。另外,运行过程中大部分的问题在nvidia的官网上都可以找到答案。在正式开始前,最好跑一下deepstream-test1和test2,了解一下运行过程。startguide里面写的那个示例程序不用跑。

2.关于运行deepstream-test1

首先这个示例程序有一个问题,那就是首次运行时会报错说没有加载好engine,这个问题不用管,等一段时间它就自己加载好了 重新运行就可以了。

然后,目前test1有一个bug,就是可视化的那个插件会报错,我的解决方案是放弃可视化的展示,直接保存成mp4文件。这个解决方案可以在csdn里找到。

3.添加插件和回调函数。添加插件要注意修改代码中的四个地方,一个是生成插件;一个是设置插件参数;一个是在管道中放置插件;最后就是连接插件。缺一不可。添加回调函数也需要两个部分。事实上deepstream-app1里面已经示范了一个回调函数,照着葫芦画瓢即可,注意这个回调函数部署的位置要设定好,尤其是注意是放在插件的入口还是出口。

4.使用自定义插件。

编写自定义插件是最难也是最核心的一个任务。这里需要使用官方的dsexample插件,这个插件里面默认使用了opencv,并且预留了处理数据的位置和返回元数据的函数,非常好用。

这里的一个难点是引入第三方库。把第三方库的头文件加入后,还需要在make文件里加入这个库,这里需要学习一下make文件的语法。

另外一个难点是我们通常做的是深度学习任务,如何将深度学习网络部署到插件里?我的方案是用pytorch进行训练,并利用c++的libtorch库在插件中对模型的torchscript进行读取。

注意:当自定义插件写完make成.so文件后,需要将这个文件复制替换到deepstream目录的lib文件夹的gst-plugin文件夹里。然后再重新make test-app。

5.出现不明所以的问题时,可能的解决方案:

(1)需要删除test-app的缓存。是一个bin文件,在主目录的gstreamer-1.0文件夹里可以找到。

(2)检查nvidia-smi的运行情况。保证显存够用,以及没有还没有释放的进程。

(3)如果元数据没有正常生成,仔细阅读元数据的结构以及使用方法,很多都需要使用指针。

暂时想到这么多,其他问题想起来再来补充吧

        

你可能感兴趣的:(c++,深度学习,nvidia)