使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘

时间:2024-03-15 10:58:24

最近跟着b站up:Bubbliiiing的视频做YOLO V3
使用的版本是tensorflow1.13.1,keras是2.1.5

跟着前面的视频都没有问题,直到执行train.py文件的时候报错,报错是显示在加载预训练权重的时候有问题model_body.load_weights(weights_path, by_name=True, skip_mismatch=True)。
报错原因如下:str object has not attribute decode
解释一下,在python中,encode是编码的意思,decode是解码的意思,对字符串进行encode会把字符变成二进制,对二进制进行decode会变成字符串

使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘
上面报错的意思是不能对字符串进行decode操作,所以我们点开最下面报错的蓝色地址,他会进入到一个py文件,你就会看到以下代码
使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘
很容易就看到两个decode(“utf8”),将他们删除加载权重就没问题了。

你以为这就结束了?不不不,加载和训练的时候是没问题的,但是保存模型的时候就有问题了,你想想训练了很久才训练完,结果报错的时候出错了是什么感受(大哭)
上面的改好之后,可以进行训练,但是保存的时候会报错,可以自己试试,如果保存不报错可以不看下面的内容了。

在执行model.save_weights(log_dir + ‘trained_weights_stage_2.h5’)的时候,会报错,报错如下:
使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘
其实也是decode和encode的问题,点开报错的地方,会跳到另一个py文件,如下图所示,我们需要在图中画红线的地方进行修改
使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘
在name的后面加上一个.decode()就好了,修改的结果如下
使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘
这样子就可以进行模型保存了。