C语言应用到SSD,0#01 解析mobile_ssd样例代码

本文详细介绍了如何在C环境中使用Tengine运行mobile_ssd样例代码,包括预备知识(如使用CLion和安装Tengine)、样例程序介绍、在笔记本和RK3399上运行程序的步骤,以及如何在RK3399上使用GPU加速。在运行过程中,重点解决了头文件找不到的问题,并分析了Tengine的工作流程,展示了Tengine的初始化、模型导入、输入数据处理、运行和输出处理等关键步骤。
摘要由CSDN通过智能技术生成

1.预备知识

2.样例程序介绍

3.运行代码

3.1.能在笔记本上成功运行 mobilenet_ssd 样例代码。

3.2.理解 Tengine 的工作方式。

3.3.能在 RK3399 上运行该程序。

3.4.能在 RK3399 上运行该程序并使用 GPU 加速

1.预备知识

CLion:一款优秀的C语言开发工具。主要是有免费的社区版本,并且能支持cmake文件的编译。最大的福利就是支持Ubuntu安装。

环境安装:0#00 Tengine 的安装

2.样例程序介绍

样例程序位于tengine目录下," tengine安装路径/examples/mobilenet_ssd/"

我们使用 CLion 打开该项目。

1.选中mobilenet_ssd文件夹

2.右键->open with(打开方式)->Other Applications->View All Applications->CLion(使用CLion打开该文件夹。)

打开该文件的目的:

1.能在笔记本上成功运行 mobilenet_ssd 样例代码。

2.理解 Tengine 的工作方式。

3.能在 RK3399 上运行该程序。

4.能在 RK3399 上运行该程序并使用 GPU 加速

注:当前阶段并不去理解 SSD 的工作方式,因为官方已经为我们提供训练好的 caffe 模型( prototxt + caffemodel )

从百度云中下载 caffe 模型 Tengine model zoo (密码: 57vb)

找到:

MobileNetSSD_deploy.caffemodel

MobileNetSSD_deploy.prototxt

将其存放在 tengine路径下/models/

3.运行代码

TODO:1.能在笔记本上成功运行 mobilenet_ssd 样例代码。

如果直接使用 CLion 对该程序进行编译,会产生报错信息,类似缺少(找不到)头文件。

/usr/bin/cmake --build /home/lee/Documents/tengine/examples/mobilenet_ssd/cmake-build-debug --target MSSD -- -j4

......(省略)

/common.cpp:4:27: fatal error: tengine_c_api.h: 没有那个文件或目录

compilation terminated.

CMakeFiles/MSSD.dir/build.make:86: recipe for target 'CMakeFiles/MSSD.dir/home/lee/Documents/tengine/examples/common/common.cpp.o' failed

make[3]: *** [CMakeFiles/MSSD.dir/home/lee/Documents/tengine/examples/common/common.cpp.o] Error 1

make[3]: *** Waiting for unfinished jobs....

/home/lee/Documents/tengine/examples/mobilenet_ssd/mssd.cpp:32:27: fatal error: tengine_c_api.h: 没有那个文件或目录

compilation terminated.

CMakeFiles/MSSD.dir/build.make:62: recipe for target 'CMakeFiles/MSSD.dir/mssd.cpp.o' failed

......(省略)

cd example/mobilenet_ssd

cmake -DTENGINE_DIR=/home/firefly/tengine .

make

所以问题出在 -DTENGINE_DIR 指定 Tengine 的安装路径。

解决办法:

在 CMAKE 文件中加入该行。

cmake_minimum_required (VERSION 2.8)

project(MSSD)

add_definitions(-std=c++11)

# TODO:设置 TENGINE_DIR 的路径

set( TENGINE_DIR /home/lee/Documents/tengine )

set( INSTALL_DIR ${TENGINE_DIR}/install/)

set( TENGINE_LIBS tengine)

那为什么不使用官方的方法,在CMAKE中加入一个选项呢?

这是我的一些尝试得到的经验:

1.不方便,每次 CMAKE 加入该行,有时我们使用的 tengine 路径和官方不一样,CMAKE 不会报错,修改的时候,要删除一些 CAMKE 产生的内容,才能重新 CMAKE。

2.无法利用 CLion 提供的优势,CLion 每次 CMAKE 会产生一个类似 build 的文件夹,方便管理,不需要再手动删除了。

3.直接编写,能为后续报错信息提供一些思路,有时候使用 ”-DTENGINE_DIR“ 进行指定路径 启动的减号是有中/英文字符区别的,会产生莫名奇妙的错误。

再次编译cmake文件就会没有报错信息了,注意:使用的 Tengine 路径需要修改为适合自己环境特征的。

d2ed2c77efd3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

clion.png

运行该程序:

d2ed2c77efd3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

所以我们已经完全能够 运行 该 样例 了。

任务1:完成。

TODO:2.理解 Tengine 的工作方式。

任务1:只是单纯的运行程序,测试结果,和 example 差不多,类似于 我们安装的 Tengine 是否能够正常工作。

任务2:已知 MobileNet_SSD 能正常工作的前提下,进行代码的分析。

如果对于 Tengine 一无所知的话,可以利用 "MobileNet_SSD"进行理解,并且可以充分的利用 CLion 这个工具,进行函数查找,OAID 为 Tengine 编写的 "tengine_c_api.h" 文件提供了丰富的注释信息,我们可以将其改为中文,以便确认我们使用了哪些函数。

我的经历总结如下:

TODO:1. 调用 init_tengine() 对 tengine进行初始化

TODO:2. 调用 create_graph 将 训练好的模型 导入到 图(网络)中

TODO:3.1通过 get_graph_input_tensor 获取输入的 tensor

TODO:3.2用 set_tensor_shape 设置输入Tensor的shape

TODO: 4. 调用 prerun_graph 函数预启动图(类似 malloc,申请资源)

TODO: 5.1.向 input_data 写入输入的数据,

TODO: 5.2.并调用 set_tensor_buffer 把数据转移到输入Tensor上

TODO: 6. 调用 run_graph 运行图(做一次前向传播)

TODO: 7.1 向 input_data 写入输入的数据

TODO: 8. 调用 run_graph 运行图(做一次前向传播)

TODO: 9.1.调用 get_graph_output_tensor 获取输出Tensor

TODO: 9.2.并用 get_tensor_shape

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值