Tensorflow 我的Keras yolov3-tiny.h5模型有一个输入张量,其维数为?,,,,3,而我预期的是?,,416416,3
使用netron检查Keras型号yolov3-tiny.h5时 我看到输入节点称为input_1,其类型为float32[?,?,?,3]。我希望浮动32[?,416416,3] 我怎样才能强制它浮动32[?,416416,3]? 这是下游处理所必需的。必须将Keras模型转换为Tensorflow中的冻结_model.pb,然后进一步处理以进行部署。 部署工具无法处理w、h大小未知的输入 下面是我如何生成Keras模型的。我下载了yolov3-tiny.cfg()和yolov3-tiny.weigths() 然后使用以下命令将模型转换为keras模型: python convert.py-p yolov3-tiny.cfg yolov3-tiny.weights model_data/yolov3-tiny.h5 (此代码通过克隆获得) 使用保存的Keras模型进行预测效果良好: python yolo_video.py--image--model model_data/yolov3-tiny.h5 但是,当使用netron检查Keras型号yolov3-tiny.h5时 我看到输入节点称为input_1,其类型为float32[?,?,?,3] 我希望浮动32[?,416416,3]Tensorflow 我的Keras yolov3-tiny.h5模型有一个输入张量,其维数为?,,,,3,而我预期的是?,,416416,3,tensorflow,keras,Tensorflow,Keras,使用netron检查Keras型号yolov3-tiny.h5时 我看到输入节点称为input_1,其类型为float32[?,?,?,3]。我希望浮动32[?,416416,3] 我怎样才能强制它浮动32[?,416416,3]? 这是下游处理所必需的。必须将Keras模型转换为Tensorflow中的冻结_model.pb,然后进一步处理以进行部署。 部署工具无法处理w、h大小未知的输入 下面是我如何生成Keras模型的。我下载了yolov3-tiny.cfg()和yolov3-tiny.w
如何将其强制为float32[?,416416,3]?您可以在将keras模型文件转换为tflite时执行此操作,方法是将输入形状作为字典传递,输入节点名称作为键,形状作为值。 查看TFLiteConverter类
那很有趣。我唯一能想到的是模型不知道输入形状应该是什么。您是否在keras模型中定义了输入形状?你能加载模型,然后打印摘要,看看结果如何吗
def _main_(args):
kmodel = args.kmodel
lmodel = args.lmodel
converter = tf.lite.TFLiteConverter.from_keras_model_file(kmodel, input_shapes={"input_1":[1,416,416,3]})
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
open("lmodel", "wb").write(tflite_model)
if __name__ == '__main__':
argparser = argparse.ArgumentParser(description='Quantize a trained yolo model')
argparser.add_argument('-k', '--kmodel', help='path to model weights file input')
argparser.add_argument('-l', '--lmodel', help='path to tensor flow lite output')
args = argparser.parse_args()
_main_(args)