首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将yolo权重转换为tflite文件?

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

Stack Overflow用户
提问于 2020-05-04 04:21:10
回答 2查看 8.2K关注 0票数 2

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

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

代码语言:javascript
运行
复制
activate env   
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

最后,将did.Saved Keras模型转化为model_data/yolo.h5

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

代码语言:javascript
运行
复制
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)

但是这个错误发生了。

代码语言:javascript
运行
复制
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“

图层(类型)输出形状Param #连接到

input_1 (InputLayer) [(无,0)

conv2d_1 (Conv2D) (无,3864 input_1 )

batch_normalization_1 (BatchNor (无,3128 conv2d_1 ))

leaky_re_lu_1 (LeakyReLU) (无,3 0 batch_normalization_1 )

zero_padding2d_1 (ZeroPadding2D (无,3 0 leaky_re_lu_1 ))

conv2d_2 (Conv2D) (无,6 18432 zero_padding2d_1 )

batch_normalization_2 (BatchNor (无,6256 conv2d_2 )

leaky_re_lu_2 (LeakyReLU) (无,6 0 batch_normalization_2 )

conv2d_3 (Conv2D) (无,3 2048 leaky_re_lu_2 )

。。。。

batch_normalization_65 (BatchNo (无,5 2048 conv2d_66 ))

batch_normalization_72 (BatchNo )(无,2 1024 conv2d_74 )

leaky_re_lu_58 (LeakyReLU) (无,10 batch_normalization_58 )

leaky_re_lu_65 (LeakyReLU) (无,5 0 batch_normalization_65 )

leaky_re_lu_72 (LeakyReLU) (无,2 0 batch_normalization_72 )

conv2d_59 (Conv2D) (无,2 261375 leaky_re_lu_58 )

conv2d_67 (Conv2D) (无,2 130815 leaky_re_lu_65 )

conv2d_75 (Conv2D) (无,2 65535 leaky_re_lu_72 )

合共: 62,001,757名可培训助理: 61,949,149名不可培训的副手: 52,608

EN

回答 2

Stack Overflow用户

发布于 2020-05-04 05:54:48

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

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

Stack Overflow用户

发布于 2020-05-07 07:56:45

我建议这样做:

  1. 将黑暗权值(.weights)转换为TensorFlow冻结图形格式(.pb)。
  2. 将此.pb文件转换为tflite。

这个过程更简单。我已经记录了一些3-4种方法来将Darknet转换为TensorFlow。请找到他们这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61585139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档