首页 > 解决方案 > 无法将 yolov4 tiny 转换为 tf 模型不能 - 无法将大小为 607322 的数组重塑为形状 (256,384,3,3)

问题描述

我有一个使用以下命令训练的自定义 yolov4-tiny 模型

./darknet.exe detector train ./data/device.data ./cfg/yolov4-tiny-device.cfg ./yolov4-tiny.conv.29

但我无法使用以下 repo https://github.com/hunglc007/tensorflow-yolov4-tflite将模型转换为 tensorflow

出于某种原因,我尝试使用以下命令进行转换

py ./save_model.py --weights ./data/yolov4-tiny-device_last.weights --output ./checkpoint/yolov4-tiny-device-416 --input_size 416  --model yolov4 --tiny

我收到以下错误

Traceback (most recent call last):
  File ".\save_model.py", line 68, in <module>
    app.run(main)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python38\lib\site-packages\absl\app.py", line 312, in run
    _run_main(main, args)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python38\lib\site-packages\absl\app.py", line 258, in _run_main
    sys.exit(main(argv))
  File ".\save_model.py", line 64, in main
    save_tf()
  File ".\save_model.py", line 59, in save_tf
    utils.load_weights(model, FLAGS.weights, FLAGS.model, FLAGS.tiny)
  File "C:\Users\USER\Desktop\VSCProjects\tensorflow-yolov4-tflite\core\utils.py", line 64, in load_weights
    conv_weights = conv_weights.reshape(conv_shape).transpose([2, 3, 1, 0])
ValueError: cannot reshape array of size 607322 into shape (256,384,3,3)

我已将 __C.YOLO.CLASSES 更改为我的类文件,我的类文件只是一个类的一行。

我为普通的 yolov4 模型做了同样的过程,它工作得很好。

如何修复以下错误并将我的模型转换为 tensorflow?

标签: pythontensorflowtensorflow-liteyolov4

解决方案


您缺少用于转换为 tflite 的标志--framework tflitesave_model.py虽然我不确定这是不是这个原因。对我有用的转换示例命令,

!python save_model.py \
--weights "yolov4-tiny-obj_best.weights" \
--output "checkpoints/yolov4-tiny-416" \
--input_size 416 --model yolov4 --tiny --framework tflite

由于硬编码__C.YOLO.CLASSES到文件,我以前遇到过这个问题。该错误可能是由于文件路径错误或缺少标志。

我有一些基于类似问题的 YoloV4 tiny转换说明。

类似的问题,无法将大小为 1665179 的数组重塑为 (512,512,3,3)


推荐阅读