Mtcnn的 tensorflow 模型转化错误

我尝试在detect_demo_uvc的基础上修改代码,在识别的同时实时检测人脸,但是检测的结果波动太大,我想用mtcnn来代替yolo做人脸识别。但是在转换mtcnn的pb文件时遇到了困难,我通过summarize_graph找到了输入输出的节点:
Found 3 possible inputs:

(name=pnet/input, type=float(1), shape=[?,?,?,3])
(name=rnet/input, type=float(1), shape=[?,24,24,3])
(name=onet/input, type=float(1), shape=[?,48,48,3])

No variables spotted.

Found 7 possible outputs:
(name=pnet/prob1, op=RealDiv)
(name=pnet/conv4-2/BiasAdd, op=BiasAdd)
(name=rnet/prob1, op=RealDiv)
(name=rnet/conv5-2/conv5-2, op=BiasAdd)
(name=onet/prob1, op=RealDiv)
(name=onet/conv6-2/conv6-2, op=BiasAdd)
(name=onet/conv6-3/conv6-3, op=BiasAdd)

但是修改0_import_model.sh 后执行 提示一下错误:

W Not match node pnet/PReLU3/Neg_1 Neg
Traceback (most recent call last):
File “convertensorflow.py”, line 62, in
File “convertensorflow.py”, line 58, in main
File “acuitylib/app/importer/import_tensorflow.py”, line 150, in run
File “acuitylib/converter/convert_tf.py”, line 584, in match_paragraph_and_param
File “acuitylib/converter/convert_tf.py”, line 483, in _tf_push_ready_node
TypeError: ‘NoneType’ object is not iterable
[12932] Failed to execute script convertensorflow

修改后的0_import_model.sh如下:

$convert_tf
–tf-pb ./model/mtcnn_frozen_model.pb
–inputs “pnet/input rnet/input onet/input”
–input-size-list “3#24,24,3#48,48,3”
–outputs “pnet/prob1 pnet/conv4-2/BiasAdd rnet/prob1 rnet/conv5-2/conv5-2 onet/prob1 onet/conv6-2/conv6-2 onet/conv6-3/conv6-3”
–net-output ${NAME}.json
–data-output ${NAME}.data

pb文件来自于
https://github.com/cyberfire/tensorflow-mtcnn/tree/master/cpp/standalone/models

@YQyws 我认为你的模型可能需要重新训练,并将输出节点设置为单节点输入,这种多节点的输入,主要还是用于Python解析的,在转换工具上未必可行,就算你转换过了,也无法替换进我们的demo里。另外,你的输出借点也是有同样的问题。你需要在模型基础上冻结一部分加上对一层做重新训练。如果你希望在检测物体的同时检测人脸,我认为你需要做的是设计线程同时运行两个模型,单模型要做到两个是不大现实的,如果你需要高精度的效果,模型是必须要专用的。

我也有同样的问题,TensorFlow模型输入 为3个数组,输出为1个长度为33 的数组。
执行 1_quantize_model.sh,Traceback出现错误,无法将计算成功的输出数组放入validation_tf.txt

@dinglian_tian 参照我上面的回答处理