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

Posted

技术标签:

【中文标题】无法将 yolov4 tiny 转换为 tf 模型不能 - 无法将大小为 607322 的数组重塑为形状 (256,384,3,3)【英文标题】:Cant convert yolov4 tiny to tf model cannot - cannot reshape array of size 607322 into shape (256,384,3,3) 【发布时间】:2021-12-22 07:20:36 【问题描述】:

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

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

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

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

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?

【问题讨论】:

【参考方案1】:

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

!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 conversion instructions here。

类似的问题,cannot reshape array of size 1665179 into shape (512,512,3,3)。

【讨论】:

以上是关于无法将 yolov4 tiny 转换为 tf 模型不能 - 无法将大小为 607322 的数组重塑为形状 (256,384,3,3)的主要内容,如果未能解决你的问题,请参考以下文章

YOLO-Darknet实战yolov4-tiny.cfg文件配置与解释

YOLO-Darknet实战yolov4-tiny.cfg文件配置与解释

YOLO-Darknet实战yolov4-tiny.cfg文件配置与解释

YOLO-Darknet实战:训练轻量级目标检测网络YOLOv4-Tiny

YOLO-Darknet实战:训练轻量级目标检测网络YOLOv4-Tiny

YOLO-Darknet实战:训练轻量级目标检测网络YOLOv4-Tiny