问题:
用save_mode.py将yolov4.weights转换成pb文件时正常 ,但转换用户自己训练的weights文件时,reshape处出现错误
conv_weights.shape 4693152
Traceback (most recent call last):
File "save_model.py", line 58, in <module>
app.run(main)
File "/home/ed/anaconda3/envs/yolov4-gpu/lib/python3.7/site-packages/absl/app.py", line 300, in run
_run_main(main, args)
File "/home/ed/anaconda3/envs/yolov4-gpu/lib/python3.7/site-packages/absl/app.py", line 251, in _run_main
sys.exit(main(argv))
File "save_model.py", line 54, in main
save_tf()
File "save_model.py", line 49, in save_tf
utils.load_weights(model, FLAGS.weights, FLAGS.model, FLAGS.tiny)
File "/home/ed/Project/yolov4-custom-functions/core/utils.py", line 152, in load_weights
conv_weights = conv_weights.reshape(conv_shape).transpose([2, 3, 1, 0])
ValueError: cannot reshape array of size 4693152 into shape (1024,512,3,3)
原因分析:
在第二次转换的时候只是将weight文件变换成新的weights文件,但是没有修改cfg中的内容。
此时,只需要用户自己训练的label文件名,复制到对应的目 录下,并且将cfg文件中作相应的修改即可。
解决方案:
作者从https://github.com/theAIGuysCode/yolov4-custom-functions地址下载了相关的软件后,并且下载到custom.weights文件,复制到./data目 录下,但是执行
python save_model.py --weights ./data/custom.weights --output ./checkpoints/custom-416 --input_size 416 --model yolov4
命令时,出现上以的问题。
于是:
(1)重新下载到custom.names文件,并保存在./data/classes目录下;
(2)在/core/config.py文件中第14行改成:__C.YOLO.CLASSES = “./data/classes/custom.names”
(3)然后重新执行save_model.py文件,成功