Toybrick

标题: [求助] 使用RKNN_API运行mtcnn模型的pnet结果不正确 [打印本页]

作者: nevin007    时间: 2019-3-1 15:56
标题: [求助] 使用RKNN_API运行mtcnn模型的pnet结果不正确
问题:使用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比较少,而且都偏离人脸,请教是哪里出了问题?非常感谢!




作者: jefferyzhang    时间: 2019-3-1 16:14
只有pnet?
在pc上运行结果呢?
大小尺寸缩放比率有作用在bounding box上么?
作者: nevin007    时间: 2019-3-1 16:20
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上原有代码跑出的结果基本一致。但量化以后目前还得不到正确结果。
作者: jefferyzhang    时间: 2019-3-1 17:11
nevin007 发表于 2019-3-1 16:20
是的,我正在做mtcnn的移植,先从pnet调起...我发现如果在模型转换的时候do_quantization设置为False,代 ...

我觉得是因为量化给的样本不够多,你可以试着多弄几张你当前摄像头拍摄出来的图片作为量化使用。
然后再试试精度。
作者: nevin007    时间: 2019-3-2 15:13
本帖最后由 nevin007 于 2019-3-2 15:51 编辑
jefferyzhang 发表于 2019-3-1 17:11
我觉得是因为量化给的样本不够多,你可以试着多弄几张你当前摄像头拍摄出来的图片作为量化使用。
然后再 ...

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

作者: jefferyzhang    时间: 2019-3-3 19:35
nevin007 发表于 2019-3-2 15:13
问题已解决,非常感谢!
还有个小问题希望确认一下,模型转换的时候如果设置do_quantization=False,得到 ...

我仔细看了下文档,好像是的。。。
作者: jefferyzhang    时间: 2019-3-4 09:16
nevin007 发表于 2019-3-2 15:13
问题已解决,非常感谢!
还有个小问题希望确认一下,模型转换的时候如果设置do_quantization=False,得到 ...

我问过相关同事了,fp32是支持的。
作者: nevin007    时间: 2019-3-4 09:34
jefferyzhang 发表于 2019-3-4 09:16
我问过相关同事了,fp32是支持的。

上面说到的rknn模型格式应该只有fp16和uint8,那是怎么支持fp32的啊
作者: 771488533    时间: 2019-3-4 09:39
nevin007 发表于 2019-3-4 09:34
上面说到的rknn模型格式应该只有fp16和uint8,那是怎么支持fp32的啊

能否分享一下移植好的mtcnn代码?@nevin007
作者: zhangzj    时间: 2019-3-4 16:31
nevin007 发表于 2019-3-4 09:34
上面说到的rknn模型格式应该只有fp16和uint8,那是怎么支持fp32的啊

有些层精度要求比较高的时候会使用fp32
作者: kkll    时间: 2019-3-12 15:15
你好 问下,你刚开始的问题是怎么解决的?
作者: nevin007    时间: 2019-3-12 16:00
kkll 发表于 2019-3-12 15:15
你好 问下,你刚开始的问题是怎么解决的?

注意一下输入数据的预处理要和模型保持一致
作者: kkll    时间: 2019-3-12 16:37
输入数据的预处理要和模型保持一致? 就是指pnet    prototxt中固定多个尺寸?
作者: nevin007    时间: 2019-3-12 17:09
kkll 发表于 2019-3-12 16:37
输入数据的预处理要和模型保持一致? 就是指pnet    prototxt中固定多个尺寸? ...

对,这也是一方面。推理阶段送入图片的时候预处理也要和模型一致,比如模型里做了归一化,那么送入的图片就不用再做归一化了。
作者: kkll    时间: 2019-3-12 17:11
方便加个qq不,一起交流下?
作者: kkll    时间: 2019-3-12 17:13
我在github上看到的代码,pnet阶段是要做好几次reshape,这样我要事先配置 prototxt,生成几个pnet.rknn?因为我看rk平台上不支持PNet.blobs['data'].reshape。
作者: nevin007    时间: 2019-3-12 19:02
kkll 发表于 2019-3-12 17:13
我在github上看到的代码,pnet阶段是要做好几次reshape,这样我要事先配置 prototxt,生成几个pnet.rknn?因 ...

是的,是要生成多个rknn
作者: kkll    时间: 2019-3-19 17:22
你好,问下,最后mtcnn效果怎么样?准确吗?
作者: tof3d    时间: 2019-3-20 10:39
771488533 发表于 2019-3-4 09:39
能否分享一下移植好的mtcnn代码?@nevin007

求共享,或者转换的细节呢
作者: tof3d    时间: 2019-3-20 11:02
kkll 发表于 2019-3-19 17:22
你好,问下,最后mtcnn效果怎么样?准确吗?

同问同问 准确性与速度
作者: tof3d    时间: 2019-3-21 11:21
本帖最后由 tof3d 于 2019-3-21 11:25 编辑
nevin007 发表于 2019-3-12 19:02
是的,是要生成多个rknn

请问一下,你复现的mtcnn 是caffe的版本的吗,是张凯鹏作者的模型吗,还是你自己训练的,方便将一下RKconfig的设置告知一下吗,输入图像时NHWC吗
,还有这里有RK同学吗,你们不是mtcnn 做好了,可以透露一下上面的几个细节吗,非常感谢
作者: nevin007    时间: 2019-4-1 14:39
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
作者: mshiyu    时间: 2019-4-16 11:38
nevin007 发表于 2019-3-2 15:13
问题已解决,非常感谢!
还有个小问题希望确认一下,模型转换的时候如果设置do_quantization=False,得到 ...

请问问题是如何解决的呀?有可以参考的吗?
非常感谢!!

作者: mshiyu    时间: 2019-4-25 09:09
nevin007 发表于 2019-3-2 15:13
问题已解决,非常感谢!
还有个小问题希望确认一下,模型转换的时候如果设置do_quantization=False,得到 ...

问题是怎么解决的呀? 我现在碰到的是跟你一样的问题,也都按照rknn模型生成一样的预处理,但是pnet的输出就是不对,目标框非常少,而且都不准。
作者: mshiyu    时间: 2019-4-25 11:08
jefferyzhang 发表于 2019-3-1 16:14
只有pnet?
在pc上运行结果呢?
大小尺寸缩放比率有作用在bounding box上么?

同问下版主,在export pnet模型的时候,也是如此输出      
rknn.config(channel_mean_value='127.5 127.5 127.5 128', reorder_channel='2 1 0')
在c代码里,input定义如下:
Mat im  = imread(image_name.c_str(),1);  
cvtColor(im, im, cv::COLOR_BGR2RGB);

nputs[0].index = 0;
inputs[0].buf =resize_im.data; (输入mat图像)
inputs[0].size = pnet_input_size[2*ii]* pnet_input_size[2*ii + 1] * channels; (多个尺度定义的pnet宽高)
inputs[0].pass_through =false;
inputs[0].type = RKNN_TENSOR_UINT8;//RKNN_TENSOR_FLOAT16;//
inputs[0].fmt =  RKNN_TENSOR_NHWC;

但是输出框很少,并且得分都很低,但是python版本跑同一张图片,pnet输出很多框并且得分值都接近于1.
不知道问题出在哪里。。
作者: zengwubin    时间: 2020-5-9 09:57
你好, 最近也在移植mtcnn,Pnet输出不对,请问能共享一下你的mtcnn.cpp吗,或者分享一下你的模型输入输出细节,谢谢!




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3