关于yolov3,大家可以看这里:https://github.com/pjreddie/darknet
# 加载原始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)
说明:
在本机上编译yolov3 tiny的过程输出大概如下:
--> 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秒,主要时间消耗在编译模型上。
编译过程中可能会输出:
W The RKNN Model generated can not run on simulator when pre_compile is True.
这是一个警告信息,只是告诉我们开启了预编译之后,不能运行在模拟器上。
# 加载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])
运行结果大概如下:
-->loading model
loading model done: 0.016114904999994906
--> Init runtime environment
init done: 3.8086299819997294
rknn inference time {} 0.32720901699985916
单次运行的话,其实主要是初始化模型的时间消耗比较多,而单次推断的消耗时间大概327毫秒,也就是每秒大概处理3个图片,这个速度实际做不到对视频的实时分析,不过很多时候其实也不需要进行实时分析,实际中可能每秒采1到2帧分析即可。
--> 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
总耗时327秒,编译耗时255秒,模型大了,耗时也是大大的增加。
可能会出现以下警告: W extend add_13 to add will cause accuracy loss, do not extend. 这个告警信息并不是说这一层不支持,而是对于这类层,RKNN-Toolkit有个conv to add的优化,但RKNN发现使用这个规则会后导致精度下降,所以实际优化的时候不转成add。
-->loading model
loading model done: 0.10763447199997245
--> Init runtime environment
init done: 28.874706587999754
rknn inference time {} 5.291677103999973
模型初始化花了约29秒,单个图片推断约5.3秒,这个推断速度基本很难应用了。