TensorFlow生成tfrecord时报错UnicodeDecodeError: 'utf-8'解码失败怎么解决
解决方案
错误根因
你遇到的UnicodeDecodeError错误不是CSV文件编码问题,核心是TensorFlow的文件IO接口在Windows系统下解析含非ASCII字符的路径时失败:报错信息里的0xe9是法语字符é的编码值,你的项目路径、图片文件名中大概率存在带重音的字符、中文字符等非ASCII内容,导致路径解析失败。
修复步骤
按优先级尝试以下方案即可解决:
- 替换文件读取接口(90%场景可直接解决)
找到generate_tfrecord.py中create_tf_example函数内的读取图片代码:
with tf.io.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:
替换为Python原生open接口,原生接口对Windows下的特殊字符路径适配更好:
with open(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:
修改完成后重新执行生成命令即可。
- 清理所有路径的非ASCII字符
如果方案1无效,逐一检查以下路径,确保所有内容仅包含英文、数字和下划线:
- 项目根目录的完整路径,不要存放在含中文、特殊字符的文件夹下
- 训练图片的文件名,排查是否有带重音的法语字符(如
é、è等),修改为纯英文命名,同时同步修改CSV文件内的filename列对应内容 - 补充执行命令的参数:你当前的执行命令没有指定
--image_dir参数,如果图片没有存放在项目根目录的images文件夹,需要明确指定路径,示例:
python generate_tfrecord.py --csv_input=data/train_labels.csv --output_path=data/train.record --image_dir=data/images
- 全局指定Python编码(备选方案)
如果以上方案都无效,在generate_tfrecord.py所有import代码之前添加以下内容,强制指定Python运行时编码为UTF-8:
import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
内容的提问来源于stack exchange,提问作者julgi
相关产品推荐
相关产品推荐

