使用YOLOv3训练自己的数据集,完成后进行测试报错:
问题(1):ValueError: Dimension 0 in both shapes must be equal, but are 1 and 21. Shapes are [1,1,1024,54] and [21,1024,1,1]. for 'Assign_360' (op: 'Assign') with input shapes: [1,1,1024,54], [21,1024,1,1].
分析:据查是类别class维度不匹配,虽然我在训练前把voc_classes.txt和coco_classes.txt中的类别都删到只剩person了,但是我的换行符并没有停留在第一行,如下:
file:///home/fire/Pictures/Screenshot%20from%202020-06-19%2010-18-27.png
file:///home/fire/Pictures/Screenshot%20from%202020-06-19%2010-16-14.png
修改后先测试一下:
classes_path = 'voc_classes.txt'
def get_classes(classes_path):
with open(classes_path) as f:
class_names = f.readlines()
class_names = [c.strip() for c in class_names]
return class_names
class_names = get_classes(classes_path)
num_classes = len(class_names)
print(num_classes)
最终,只能重新训练,可惜我跑了一周的代码,无语。。。
问题(2):ValueError: Cannot create group in read only mode.Keras
分析:参考https://blog.csdn.net/qq_36387683/article/details/91957528 吧
model.save_weights()保存的模型结果,它只保存了模型的参数,但并没有保存模型的图结构。
model.save()保存的模型结果,它既保持了模型的图结构,又保存了模型的参数。
由save()保存下来的h5文件才可以直接通过load_model()打开!
save_weights()保存的模型不含有模型结构信息,所以我们需要把模型结构再描述一遍才可以加载.h5
那为什么要选择使用model.save_weights()呢,因为model.save()保存的东西太多了,占用内存吧,我说的不严谨,先就这样吧