Toybrick

楼主: nevin007

[求助] 使用RKNN_API运行mtcnn模型的pnet结果不正确

nevin007

注册会员

积分
127
楼主
发表于 2019-3-1 15:56:44    查看: 26728|回复: 25 | [复制链接]    打印 | 显示全部楼层
问题:使用RKNN_API运行mtcnn模型的pnet结果不正确

1、使用python脚本将mtcnn中pnet的caffe模型转换为rknn模型
a. 模型转换脚本的配置:rknn.config(channel_mean_value='127.5 127.5 127.5 128', reorder_channel='0 1 2')
b. prototxt中,input的shape: {dim:1, dim:3, dim:72, dim: 96}
转换后得到det1.rknn

2、在开发板上运行编译好的测试例程
a. 输入图片w=480, h=640
b. 将图片转置为w=640, h=480,并转换为RGB格式
c. resize到wxh=96x72大小作为inputs[0]

模型的输入输出信息如下:
resized h:72, resized w:96, scale:0.1500
model_len:17352
input_output_num:
io_num.n_input:1
io_num.n_output:2
outputs_attr:
outputs_attr[0].dims:43,31,4,1
outputs_attr[0].n_elems:5332
outputs_attr[0].type:3
outputs_attr[0].fmt:0

outputs_attr[1].dims:43,31,2,1
outputs_attr[1].n_elems:2666
outputs_attr[1].type:1
outputs_attr[1].fmt:0

input_attr:
inputs_attr[0].index:0
inputs_attr[0].dims:96,72,3,1
inputs_attr[0].n_elems:20736
inputs_attr[0].type:3
inputs_attr[0].fmt:0

inputs[0].index:0
inputs[0].pass_through:0
inputs[0].type:3
inputs[0].fmt:0

pnet_boxes size :5
得到的proposals比较少,而且都偏离人脸,请教是哪里出了问题?非常感谢!



回复

使用道具 举报

nevin007

注册会员

积分
127
沙发
 楼主| 发表于 2019-3-1 16:20:57 | 显示全部楼层
jefferyzhang 发表于 2019-3-1 16:14
只有pnet?
在pc上运行结果呢?
大小尺寸缩放比率有作用在bounding box上么?

是的,我正在做mtcnn的移植,先从pnet调起...我发现如果在模型转换的时候do_quantization设置为False,代码中输入改为:
inputs[0].type = RKNN_TENSOR_FLOAT32;       
inputs[0].fmt = RKNN_TENSOR_NHWC;  
得到的输出结果与PC上原有代码跑出的结果基本一致。但量化以后目前还得不到正确结果。
回复

使用道具 举报

nevin007

注册会员

积分
127
板凳
 楼主| 发表于 2019-3-2 15:13:27 | 显示全部楼层
本帖最后由 nevin007 于 2019-3-2 15:51 编辑
jefferyzhang 发表于 2019-3-1 17:11
我觉得是因为量化给的样本不够多,你可以试着多弄几张你当前摄像头拍摄出来的图片作为量化使用。
然后再 ...

问题已解决,非常感谢!
还有个小问题希望确认一下,模型转换的时候如果设置do_quantization=False,得到的rknn模型是fp16吗?是不是rknn不支持fp32?
回复

使用道具 举报

nevin007

注册会员

积分
127
地板
 楼主| 发表于 2019-3-4 09:34:37 | 显示全部楼层
jefferyzhang 发表于 2019-3-4 09:16
我问过相关同事了,fp32是支持的。

上面说到的rknn模型格式应该只有fp16和uint8,那是怎么支持fp32的啊
回复

使用道具 举报

nevin007

注册会员

积分
127
5#
 楼主| 发表于 2019-3-12 16:00:36 | 显示全部楼层
kkll 发表于 2019-3-12 15:15
你好 问下,你刚开始的问题是怎么解决的?

注意一下输入数据的预处理要和模型保持一致
回复

使用道具 举报

nevin007

注册会员

积分
127
6#
 楼主| 发表于 2019-3-12 17:09:22 | 显示全部楼层
kkll 发表于 2019-3-12 16:37
输入数据的预处理要和模型保持一致? 就是指pnet    prototxt中固定多个尺寸? ...

对,这也是一方面。推理阶段送入图片的时候预处理也要和模型一致,比如模型里做了归一化,那么送入的图片就不用再做归一化了。
回复

使用道具 举报

nevin007

注册会员

积分
127
7#
 楼主| 发表于 2019-3-12 19:02:13 | 显示全部楼层
kkll 发表于 2019-3-12 17:13
我在github上看到的代码,pnet阶段是要做好几次reshape,这样我要事先配置 prototxt,生成几个pnet.rknn?因 ...

是的,是要生成多个rknn
回复

使用道具 举报

nevin007

注册会员

积分
127
8#
 楼主| 发表于 2019-4-1 14:39:29 | 显示全部楼层
tof3d 发表于 2019-3-21 11:21
请问一下,你复现的mtcnn 是caffe的版本的吗,是张凯鹏作者的模型吗,还是你自己训练的,方便将一下RKconf ...

用的是原版的caffe模型
rknn.config(channel_mean_value='127.5 127.5 127.5 128', reorder_channel='0 1 2')
输入图像NHWC
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表