0

当我试图将我的 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)

我检查了我的标签.txt,没有空格或更多行。另外,我在 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
4

1 回答 1

0

简短的回答

您必须添加--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

长答案

你看,如果你将它设置为True(通过添加--tiny)它会load_weights()使用layer_size = 21 here而不是layer_size = 110 here

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

因此,当您创建大模型而不是小模型时。微小的权重文件在第 49 层用完了变量,而且有这么大的素数很有趣。

于 2021-06-06T14:03:58.323 回答