我会在 android 中使用 yolo 权重,所以我打算将 yolo 权重文件转换为 tflite 文件。
我在 anaconda prompt 中使用这段代码,因为我在环境中下载了 keras 库。
activate env
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
终于,它做到了。将 Keras 模型保存到
model_data/yolo.h5
我将使用这段代码将这个 h5 文件转换为 jupyter notebook 中的
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)
~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\lite\python\lite.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(输入层)[(无,无,无,0
conv2d_1 (Conv2D) (无, 无, 无, 3 864 input_1[0][0]
batch_normalization_1 (BatchNor (None, None, None, 3 128 conv2d_1[0][0]
leaky_re_lu_1 (LeakyReLU) (无, 无, 无, 3 0 batch_normalization_1[0][0]
zero_padding2d_1 (ZeroPadding2D (None, None, None, 3 0 leaky_re_lu_1[0][0]
conv2d_2 (Conv2D) (无, 无, 无, 6 18432 zero_padding2d_1[0][0]
batch_normalization_2 (BatchNor (None, None, None, 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 (BatchNo (None, None, None, 5 2048 conv2d_66[0][0]
batch_normalization_72 (BatchNo (None, None, None, 2 1024 conv2d_74[0][0]
leaky_re_lu_58 (LeakyReLU) (无, 无, 无, 1 0 batch_normalization_58[0][0]
leaky_re_lu_65 (LeakyReLU) (无, 无, 无, 5 0 batch_normalization_65[0][0]
leaky_re_lu_72 (LeakyReLU) (无, 无, 无, 2 0 batch_normalization_72[0][0]
conv2d_59 (Conv2D) (无, 无, 无, 2 261375 leaky_re_lu_58[0][0]
conv2d_67 (Conv2D) (无, 无, 无, 2 130815 leaky_re_lu_65[0][0]
总参数:62,001,757 可训练参数:61,949,149 不可训练的参数:52,608
我看到你正在获取 Keras YOLO 模型的 H5 文件。对于 TFLite 模型,您需要一个具有明确输入形状的模型,例如
( 256 , 256 , 3 )
。此外,对于 H5 模型,您无法在模型保存后修改输入形状。所以,你可以采取这些措施,
我建议这样做:
.weights
) 转换为 TensorFlow 冻结图格式 (.pb
)。.pb
文件转换为tflite.这个过程比较简单。我已经记录了一些将 Darknet 转换为 TensorFlow 的 3-4 种方法。请在这里.
找到他们