如何将yolo权重转换为tflite文件



我将在android中使用yolo权重,因此我计划将yolo权重文件转换为tflite文件。

我在anaconda提示符中使用了这段代码,因为我在env中下载了keras库。

activate env   
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

最后,它做到了。将Keras模型保存到model_data/yolo.h5

我将用这个代码将这个h5文件转换为jupyter笔记本中的tflite文件。

model = tf.keras.models.load_model("./yolo/yolo.h5", compile=False)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
open("keras_model.tflite", "wb").write(tflite_model)

但是这个错误发生了。


ValueError                                Traceback (most recent call last)
<ipython-input-3-964a59978091> in <module>()
1 model = tf.keras.models.load_model("./yolo/yolo.h5", compile=False)
2 converter = tf.lite.TFLiteConverter.from_keras_model(model)
----> 3 tflite_model = converter.convert()
4 open("keras_model.tflite", "wb").write(tflite_model)

~Anaconda3envstensorflowlibsite-packagestensorflow_corelitepythonlite.py in convert(self)
426         raise ValueError(
427             "None is only supported in the 1st dimension. Tensor '{0}' has "
--> 428             "invalid shape '{1}'.".format(_get_tensor_name(tensor), shape_list))
429       elif shape_list and shape_list[0] is None:
430         # Set the batch size to 1 if undefined.

ValueError: None is only supported in the 1st dimension. Tensor 'input_1' has invalid shape '[None, None, None, 3]'.

我该怎么修?


我们的模型摘要是

型号:"Model_1">


层(类型(输出形状参数#连接到

input_1(InputLayer([(无、无、无,0


conv2d_1(conv2d((无、无、无,3 864输入_1[0][0]


batch_normalization_1(BatchNor(无、无、无,3 128 conv2d_1[0][0]


leaky_re_lu_1(LeakyReLU((无、无、无,3 0 batch_normalization_1[0][0]


zero_padding2d_1(ZeroPadding2D(无、无、无,3 0 leaky_re_lu_1[0][0]


conv2d_2(conv2d((无、无、无,6 18432 zero_padding2d_1[0][0]


batch_normalization_2(BatchNor(无、无、无,6 256 conv2d_2[0][0]


leaky_re_lu_2(LeakyReLU((无、无、无,6 0 batch_normalization_2[0][0]


conv2d_3(conv2d((无、无、无,3 2048 leaky_re_lu_2[0][0]


。。。.


batch_normalization_65(批次号(无、无、无,5 2048 conv2d_66[0][0]


batch_normalization_72(批次号(无、无、无,2 1024 conv2d_74[0][0]


leaky_re_lu_58(LeakyReLU((无、无、无,10批次正常化_58[0][0]


leaky_re_lu_65(LeakyReLU((无、无、无,5 0批次正常化_65[0][0]


leaky_re_lu_72(LeakyReLU((无、无、无,2 0 batch_normalization_72[0][0]


conv2d_59(conv2d((无、无、无,261375 leaky_re_lu_58[0][0]


conv2d_67(conv2d((无、无、无,2 130815 leaky_re_lu_65[0][0]


conv2d_75(conv2d((无、无、无,2 65535 leaky_re_lu_72[0]

总参数:62001757可培训参数:61949149不可训练参数:52608


我看到您正在获得Keras YOLO模型的H5文件。对于TFLite模型,您需要一个具有明确输入形状的模型,如( 256 , 256 , 3 )。此外,对于H5模型,保存模型后不能修改输入形状。所以,你可以采取这些措施,

  • 转到实例化模型及其层的文件,在那里修改输入形状。使用固定的输入大小重试模型
  • 使用TFLite对象检测API。这也有一个Android示例应用程序
  • 使用此处提到的DarkNet训练模型
  • 如果您试图检测PASCAL中存在的20个类中的一个,请使用此模型

我建议这样做:

  1. 将暗网权重(.weights(转换为TensorFlow冻结图格式(.pb(
  2. 将此.pb文件转换为tflite

此过程更简单。我已经记录了一些3-4种将暗网转换为TensorFlow的方法。请在这里找到它们。

相关内容

  • 没有找到相关文章

最新更新