Python 尝试开始培训时出现UnicodedeCodeer错误

Python 尝试开始培训时出现UnicodedeCodeer错误,python,tensorflow,machine-learning,utf-8,tfrecord,Python,Tensorflow,Machine Learning,Utf 8,Tfrecord,我的研究小组的任务是训练一个检测TensorFlow汽车的网络。我们找到了一个教程,我们认为这很容易: 我们得到了图像,创建了.csv文件和tfrecord文件,并尝试开始培训过程。这是我们得到的错误: UnicodeDecodeError:“utf-8”编解码器无法解码位置8中的字节0xbd:无效的开始字节 我们认为问题来自于我们如何创建tfrecord文件,但也许有人能给我们指出正确的方向。tfrecord文件的大小大约为300MB到1,4GB,因此至少我们知道在那里创建了一些东西 我们的

我的研究小组的任务是训练一个检测TensorFlow汽车的网络。我们找到了一个教程,我们认为这很容易:

我们得到了图像,创建了
.csv
文件和tfrecord文件,并尝试开始培训过程。这是我们得到的错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置8中的字节0xbd:无效的开始字节

我们认为问题来自于我们如何创建tfrecord文件,但也许有人能给我们指出正确的方向。tfrecord文件的大小大约为300MB到1,4GB,因此至少我们知道在那里创建了一些东西

我们的
.csv
文件的外观(我们有约3500张图像):

代码,我们希望如何创建tfrecord文件。(当然,我们只是从教程中复制了一些内容,并对其进行了一些修改,因为我们的图像有不同的标签)。我们试着在几个部分修改代码,但没有什么真正的改变。我们总是在训练开始时出错,我们真的不知道该怎么办

来自未来进口部的

来自未来导入打印功能
从未来导入绝对导入
导入操作系统
输入io
进口稀土
作为pd进口熊猫
将tensorflow.compat.v1导入为tf
从PIL导入图像
从object_detection.utils导入数据集_util
从集合导入名为tuple的OrderedDict
flags=tf.app.flags
标志。定义_字符串('csv_输入','','csv输入路径')
flags.DEFINE_字符串('output_path','','path to output-TFRecord')
flags.DEFINE_string('img_path','','path to images')
FLAGS=FLAGS.FLAGS
#要做的事用标签映射替换它
def class_text_至_int(行标签):
如果行_标签==‘汽车’:
返回1
elif row_标签==“行人”:
返回2
elif row_标签==‘自行车’:
返回3
其他:
没有一个
def拆分(df,组):
data=namedtuple('data',['filename','object']))
gb=df.groupby(组)
返回文件名的[data(filename,gb.get_group(x)),zip中的x(gb.groups.keys(),gb.groups)]
def create_tf_示例(组、路径):
将tf.gfile.gfile(os.path.join(path,{}.format(re.sub('\s+','',group.filename)),'rb')作为fid:
encoded_jpg=fid.read()
encoded_jpg_io=io.BytesIO(encoded_jpg)
image=image.open(编码的\u jpg\u io)
宽度,高度=image.size
filename=group.filename.encode('utf8')
图像格式=b'jpg'
#检查图像格式是否与您的图像匹配。
xmins=[]
xmaxs=[]
ymins=[]
ymaxs=[]
#类_text=[]
类别=[]
对于索引,group.object.iterrows()中的行:
追加(行['xmin']/width)
追加(行['xmax']/width)
追加(行['ymin']/高度)
附加(行['ymax']/height)
#class_text.append(行['label'].encode('utf8'))
class.append(class_text_to_int(行['label']))
示例=tf.train.example(特征=tf.train.features(特征={
“图像/高度”:数据集\u util.int64\u功能(高度),
“图像/宽度”:数据集\u util.int64\u功能(宽度),
“图像/文件名”:数据集\u util.bytes\u功能(文件名),
“图像/源\u id”:数据集\u util.bytes\u功能(文件名),
“图像/编码”:数据集\u util.bytes\u功能(编码的\u jpg),
“图像/格式”:数据集\u util.bytes\u功能(图像\u格式),
“image/object/bbox/xmin”:数据集\u util.float\u列表\u功能(xmins),
“image/object/bbox/xmax”:数据集\u util.float\u列表\u功能(xmaxs),
“image/object/bbox/ymin”:数据集\u util.float\u列表\u功能(ymins),
“image/object/bbox/ymax”:数据集_util.float_list_功能(ymax)
}))
返回tf_示例
def main(ux):
writer=tf.io.TFRecordWriter(FLAGS.output\u路径)
path=os.path.join(os.getcwd(),FLAGS.img_path)
示例=pd.read_csv(FLAGS.csv_输入,sep=',',engine='python')
分组=拆分(例如,“文件名”)
对于分组中的组:
tf_示例=创建_tf_示例(组、路径)
writer.write(tf_示例.SerializeToString())
writer.close()
output\u path=os.path.join(os.getcwd(),FLAGS.output\u path)
打印('已成功创建TFRecords:{}'。格式(输出路径))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
tf.app.run()
脚本的调用方式如下:
python generate\u tfrecord.py--csv\u input=images\train\u labels.csv--image\u dir=images\train--output\u path=train.record

我们如何解决这个错误?第一次TensorFlow太复杂了

编辑:

我取得了一些进展。我发现我的.tfrecords文件似乎是
'ansi'
编码的,而不是
'utf-8'
编码的。可能这就是抛出错误的原因,但我不知道如何更改现有的.tfrecord文件或使用另一种编码创建新文件。

遇到了相同的错误。问题出现在培训的配置文件中(例如更快的rcnn\u inception\u v2\u coco.config)。我在参数中错误地指定了路径:“label_map_path”和“input_path”。

一些工具报告“ANSI”,好像它是真实编码的名称,但它不是;它甚至没有很好的定义。在本文中,这可能意味着Windows代码页1252,但没有代表性的数据示例,这纯粹是猜测。也许还可以看到各种
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
导入看起来像是在使用Python2。现在是2021年;您可能应该忽略Python2,将时间花在当前推荐和支持的语言版本上,即Python3。
filename,label,xmin,ymin,xmax,ymax
SSDB00888.JPG,car,403.0,416.0,868.0,579.0
SSDB00889.JPG,car,46.0,419.0,303.0,539.0
SSDB00889.JPG,car,392.0,394.0,636.0,512.0
SSDB00889.JPG,car,819.0,367.0,1040.0,488.0
SSDB00890.JPG,car,553.0,419.0,1051.0,700.0