Convert yolov4-tiny to transflow lite: ValueError: cannot reshape array of size 374698 into shape (256,256,3,3)

Convert yolov4-tiny to transflow lite: ValueError: cannot reshape array of size 374698 into shape (256,256,3,3)

当我尝试将我的 yolov4-tiny 自定义权重转换为 tftile 时,它​​总是发生。

这是我输入的:

python save_model.py --weights ./data/yolov4-tiny-obj-food_final.weights --output ./checkpoints/yolov4-tiny-416-tflite --input_size 416 --model yolov4 --framework tflite

然后出现错误信息。

conv_weights = conv_weights.reshape(conv_shape).transpose([2, 3, 1, 0])
ValueError: cannot reshape array of size 374698 into shape (256,256,3,3)

我检查了我的labels.txt没有space或更多lines.Also,我已经在config.py中更改了名字。

有什么办法可以解决这个问题吗?

感谢帮助!

附上我的部分代码,希望对你有帮助。

这里是github:https://github.com/piggychu0w0/food-image-detection

.cfg:

[convolutional]
size=1
stride=1
pad=1
filters=21
activation=linear

[yolo]
mask = 3,4,5
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=2
num=6
jitter=.3
scale_x_y = 1.05
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
ignore_thresh = .7
truth_thresh = 1
random=0
resize=1.5
nms_kind=greedynms
beta_nms=0.6

.姓名:

rice
toast

简答

您必须在命令中添加 --tiny。根据您在问题中给出的命令,它将是。

python save_model.py --weights ./data/yolov4-tiny-obj-food_final.weights --output ./checkpoints/yolov4-tiny-416-tflite --input_size 416 --model yolov4 --framework tflite --tiny

长答案

你看,有this line that if you set it to True (by adding --tiny) it will make the load_weights() uses layer_size = 21 here instead of layer_size = 110 here

这里的问题是你拥有的权重和 np.fromfile 命令实际上给你一大块一维数组,在这个特定文件中它的大小是 (5882629,),然后你有将这些变量一一分配给层。

因此,当您创建大模型而不是小模型时。微小的称重文件在第49层用完了变量,并且搞笑了这么大的质数。