MTCNN-Tensorflow icon indicating copy to clipboard operation
MTCNN-Tensorflow copied to clipboard

固话成pb模型时出现的问题

Open LiYangDoYourself opened this issue 5 years ago • 8 comments

你好,我训练完模型之后,将元文件,固话成PB文件时,做C ++调用,在pnet模型由于固定了输入图片的BATCHSIZE和大小,导致不能输入任意其他大小的图片,我尝试将输入改为(None,None,None,3),但是出现计算分类损失时需要这个BATCHSIZE,所以我在定义的时候这个BATCHSIZE就不能为空,但我必须这样定义(None,None,None,3),我的后续pb模型才能输入一张任意大小的图片。

LiYangDoYourself avatar Mar 04 '19 09:03 LiYangDoYourself

batchsize设置为-1试试吧

zaidao2023 avatar Mar 11 '19 00:03 zaidao2023

您好,我尝试将pnet的ckpt文件固化成pb文件,但是一直失败,不知道是我的输入张量有问题,还是输出节点有问题? 输入张量为:image = tf.get_default_graph().get_tensor_by_name("input_image:0") 这个输入张量的格式是[256, 12, 12, 3],但是我的图片肯定是任意大小的,怎么改?

输出节点为:output_node_names='Squeeze,Squeeze_1'

dear-john avatar Mar 21 '19 15:03 dear-john

您好,我尝试将pnet的ckpt文件固化成pb文件,但是一直失败,不知道是我的输入张量有问题,还是输出节点有问题? 输入张量为:image = tf.get_default_graph().get_tensor_by_name("input_image:0") 这个输入张量的格式是[256, 12, 12, 3],但是我的图片肯定是任意大小的,怎么改?

输出节点为:output_node_names='Squeeze,Squeeze_1'

你把出现的问题给我看一下,你输入节点没有问题,我输出节点是 out_node_names = ['cls_fc/Softmax','bbox_fc/BiasAdd']

LiYangDoYourself avatar Mar 22 '19 02:03 LiYangDoYourself

您好,我尝试将pnet的ckpt文件固化成pb文件,但是一直失败,不知道是我的输入张量有问题,还是输出节点有问题? 输入张量为:image = tf.get_default_graph().get_tensor_by_name("input_image:0") 这个输入张量的格式是[256, 12, 12, 3],但是我的图片肯定是任意大小的,怎么改? 输出节点为:output_node_names='Squeeze,Squeeze_1'

你把出现的问题给我看一下,你输入节点没有问题,我输出节点是 out_node_names = ['cls_fc/Softmax','bbox_fc/BiasAdd']

我按照https://github.com/jiangxiluning/facenet_mtcnn_to_mobile/blob/master/mtcnn/src/mtcnn_model.py里面实现了固化,可以看到这两个repo的model文件不一样,所以输入和输出节点不一样。 另外,我固化PNet时,设置shape为[1,None,None,3],固化RNet时,shape为[None,24,24,3],同理,RNet的shape为[None,48,48,3],这样就可以自适应输入图片的大小和产生的box了。

dear-john avatar Mar 23 '19 01:03 dear-john

你好,我训练完模型之后,将元文件,固话成PB文件时,做C ++调用,在pnet模型由于固定了输入图片的BATCHSIZE和大小,导致不能输入任意其他大小的图片,我尝试将输入改为(None,None,None,3),但是出现计算分类损失时需要这个BATCHSIZE,所以我在定义的时候这个BATCHSIZE就不能为空,但我必须这样定义(None,None,None,3),我的后续pb模型才能输入一张任意大小的图片。

你好,我看了一下他的训练和使用代码. 他是这样定义的,训练的时候使用固定BATCH和大小的输入placeholder,训练完成后将模型保存为ckpt 调用的时候重新定义一个输入,运行PNET函数返回损失张量的名称,之后调用saver.restore()来将同名的参数覆盖. 也就是说他相当于训练的时候使用一个固定维度的输入,将训练好的卷积层的参数保留,使用的时候构建一个输入层不同但是卷积层名称相同的新模型后使用restore来覆盖中间的卷积核参数.

我认为你可以尝试一下这个思路,使用他的训练方法后,将固定输入维度的模型存为CKPT. 之后构建一个自己的输入尺度的新graph(其他所有的参数的命名空间与名称保持一致)后覆盖参数,之后再固化一次模型

chenkeyi2013 avatar Apr 22 '19 13:04 chenkeyi2013

您好,我尝试将pnet的ckpt文件固化成pb文件,但是一直失败,不知道是我的输入张量有问题,还是输出节点有问题? 输入张量为:image = tf.get_default_graph().get_tensor_by_name("input_image:0") 这个输入张量的格式是[256, 12, 12, 3],但是我的图片肯定是任意大小的,怎么改? 输出节点为:output_node_names='Squeeze,Squeeze_1'

你把出现的问题给我看一下,你输入节点没有问题,我输出节点是 out_node_names = ['cls_fc/Softmax','bbox_fc/BiasAdd']

我按照https://github.com/jiangxiluning/facenet_mtcnn_to_mobile/blob/master/mtcnn/src/mtcnn_model.py里面实现了固化,可以看到这两个repo的model文件不一样,所以输入和输出节点不一样。 另外,我固化PNet时,设置shape为[1,None,None,3],固化RNet时,shape为[None,24,24,3],同理,RNet的shape为[None,48,48,3],这样就可以自适应输入图片的大小和产生的box了。

请问你C++调用固化的模型时是怎么吧cv::Mat转化为tensor的呢,我用之前的方法转完发现run出来的结果和python的结果不一致,你的结果正常吗?

ZouDongj avatar Jun 24 '19 09:06 ZouDongj

您好,我尝试将pnet的ckpt文件固化成pb文件,但是一直失败,不知道是我的输入张量有问题,还是输出节点有问题? 输入张量为:image = tf.get_default_graph().get_tensor_by_name("input_image:0") 这个输入张量的格式是[256, 12, 12, 3],但是我的图片肯定是任意大小的,怎么改? 输出节点为:output_node_names='Squeeze,Squeeze_1'

你把出现的问题给我看一下,你输入节点没有问题,我输出节点是 out_node_names = ['cls_fc/Softmax','bbox_fc/BiasAdd']

我按照https://github.com/jiangxiluning/facenet_mtcnn_to_mobile/blob/master/mtcnn/src/mtcnn_model.py里面实现了固化,可以看到这两个repo的model文件不一样,所以输入和输出节点不一样。 另外,我固化PNet时,设置shape为[1,None,None,3],固化RNet时,shape为[None,24,24,3],同理,RNet的shape为[None,48,48,3],这样就可以自适应输入图片的大小和产生的box了。

请问你C++调用固化的模型时是怎么吧cv::Mat转化为tensor的呢,我用之前的方法转完发现run出来的结果和python的结果不一致,你的结果正常吗? 你看一下tensorlfow c++ 调用一张图片 https://blog.csdn.net/luoyexuge/article/details/82852023 这个模型并不能适用我检测的物体,检测遗漏太多 所以我放弃了

LiYangDoYourself avatar Jul 03 '19 08:07 LiYangDoYourself

有预训练好的模型吗?

ucasiggcas avatar Nov 14 '19 07:11 ucasiggcas