前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >边缘计算:在rk1808上测试yolov3-tiny及spp模型

边缘计算:在rk1808上测试yolov3-tiny及spp模型

作者头像
明月AI
发布2021-10-28 09:56:51
1.4K0
发布2021-10-28 09:56:51
举报
文章被收录于专栏:野生AI架构师

特别说明:以下测试的时间性能可能是跟本机的配置性能有关,特别是编译过程。

关于yolov3,大家可以看这里:https://github.com/pjreddie/darknet

编译yolov3 tiny及导出成rknn模型


我们使用的模型是使用darknet训练的,需要编译成rknn模型。编译过程也比较简单,主要看文档《RKNN-Toolkit使用指南》:

代码语言:javascript
复制
# 加载原始yolo模型
ret = rknn.load_darknet(model=yolov3_model_cfg, weight=yolov3_weights)
if ret != 0:
    raise Exception('Load darknet yolov3 failed!')
    
# 编译模型
# pre_compile:预编译开关,如果设置成 True,可以减小模型大小,及模型在硬件设备上的首次启动速度。
ret = rknn.build(do_quantization=False, pre_compile=True)

# 导出成rknn模型
ret = rknn.export_rknn(rknn_model)

说明:

  • 每个操作的返回值ret是一个状态,如果异常,应该抛出。
  • 在编译模型的时候,最好进行预编译,否则后面使用模型进行预测推断的时候,加载会比较慢。

在本机上编译yolov3 tiny的过程输出大概如下:

代码语言:javascript
复制
--> config model
done
--> Loading model
done
--> Building model
W The RKNN Model generated can not run on simulator when pre_compile is True.
done, time: 3.69s
--> Export RKNN model
done: ./rknn_models/gf_yolov3_tiny.rknn, time: 4.22s

整个过程约为4.22秒,主要时间消耗在编译模型上。

编译过程中可能会输出:

代码语言:javascript
复制
W The RKNN Model generated can not run on simulator when pre_compile is True.

这是一个警告信息,只是告诉我们开启了预编译之后,不能运行在模拟器上。

模型推断


模型已经导出成rknn格式,现在就可以使用它来进行推断预测了,使用也比较简单:

代码语言:javascript
复制
# 加载rknn模型
rknn.load_rknn(rknn_model)

# 指定使用rk1808
ret = rknn.init_runtime(target='rk1808')

# 读取图片
# 注意需要将图片转成RGB格式
frame = cv2.imread("/path/to/test.jpg")
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (416, 416))

# 进行推断
result = rknn.inference(inputs=[image])
代码语言:javascript
复制

运行结果大概如下:

代码语言:javascript
复制
-->loading model
loading model done:  0.016114904999994906
--> Init runtime environment
init done:  3.8086299819997294
rknn inference time {} 0.32720901699985916
代码语言:javascript
复制

单次运行的话,其实主要是初始化模型的时间消耗比较多,而单次推断的消耗时间大概327毫秒,也就是每秒大概处理3个图片,这个速度实际做不到对视频的实时分析,不过很多时候其实也不需要进行实时分析,实际中可能每秒采1到2帧分析即可。

编译运行yolov3 spp模型


关于spp与tiny的区别,请查看:https://pjreddie.com/darknet/ ,这里不详述。相关代码也基本是一样的,也不再单独列出,主要对一些运行结果进行说明。

编译过程输出

代码语言:javascript
复制
--> config model
done
--> Loading model
done
--> Building model
W The RKNN Model generated can not run on simulator when pre_compile is True.
W extend add_13 to add will cause accuracy loss, do not extend.
# ......(省略类似的输出)
W extend add_179 to add will cause accuracy loss, do not extend.
done, time: 254.59s
--> Export RKNN model
done: ./rknn_models/gf_yolov3_spp.rknn, time: 327.27s
代码语言:javascript
复制

总耗时327秒,编译耗时255秒,模型大了,耗时也是大大的增加。

可能会出现以下警告: W extend add_13 to add will cause accuracy loss, do not extend. 这个告警信息并不是说这一层不支持,而是对于这类层,RKNN-Toolkit有个conv to add的优化,但RKNN发现使用这个规则会后导致精度下降,所以实际优化的时候不转成add。

推断过程

代码语言:javascript
复制
-->loading model

loading model done:  0.10763447199997245
--> Init runtime environment
init done:  28.874706587999754
rknn inference time {} 5.291677103999973

模型初始化花了约29秒,单个图片推断约5.3秒,这个推断速度基本很难应用了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特别说明:以下测试的时间性能可能是跟本机的配置性能有关,特别是编译过程。
    • 编译yolov3 tiny及导出成rknn模型
      • 我们使用的模型是使用darknet训练的,需要编译成rknn模型。编译过程也比较简单,主要看文档《RKNN-Toolkit使用指南》:
        • 模型推断
          • 模型已经导出成rknn格式,现在就可以使用它来进行推断预测了,使用也比较简单:
            • 编译运行yolov3 spp模型
              • 关于spp与tiny的区别,请查看:https://pjreddie.com/darknet/ ,这里不详述。相关代码也基本是一样的,也不再单独列出,主要对一些运行结果进行说明。
                • 编译过程输出
                • 推断过程
            相关产品与服务
            图像识别
            腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档