You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow生成tf.record文件触发NotFoundError找不到文件错误如何解决

问题根本原因

generate_tfrecord.py 脚本的xml_to_csv函数是从每个XML标注文件内部的<filename>标签读取图片文件名,并不是通过XML文件本身的文件名匹配对应图片。你给图片和XML文件追加了唯一标识后缀,但XML内部的<filename>字段还是修改前的旧文件名DJI_0001_008.jpg,脚本按这个不存在的旧文件名查找图片,自然触发找不到文件的报错。

修复方案

你可以任选以下任意一种方法修复:

  • 方法1:批量更新XML内部的filename字段(推荐,无需修改官方脚本)
    运行以下小批量处理脚本,自动把所有XML内部的filename替换为对应图片的实际文件名,train和test目录分别执行一次即可:

    import os
    import xml.etree.ElementTree as ET
    
    # 替换为你自己的XML文件存放目录,train和test分别修改路径跑一次
    xml_dir = "/home/tensorflow_ihb/Custom-Object-Detector-Workspace/Project/images/test" 
    for xml_file in os.listdir(xml_dir):
        if not xml_file.endswith(".xml"):
            continue
        # 生成对应图片名:XML文件名去掉.xml后缀,替换为图片后缀
        img_name = xml_file.rsplit(".", 1)[0] + ".jpg"
        # 修改XML内部filename字段
        xml_path = os.path.join(xml_dir, xml_file)
        tree = ET.parse(xml_path)
        root = tree.getroot()
        root.find("filename").text = img_name
        tree.write(xml_path)
    
  • 方法2:修改generate_tfrecord.py的读取逻辑
    找到脚本xml_to_csv函数里读取filename的行,把原本读XML内部字段的逻辑,替换为直接用当前XML文件名推导图片名:

    # 原代码行
    value = (root.find('filename').text,
    # 替换为以下代码
    value = (os.path.basename(xml_file).rsplit('.',1)[0] + '.jpg',
    
  • 后缀大小写问题额外处理
    Ubuntu系统是大小写敏感的,.jpg和.JPG会被识别为不同的文件,你可以提前把所有图片后缀统一改为小写.jpg,避免后续触发同类报错。

相关疑问解答
  • 是否属于命名错误?
    属于标注数据和实际文件的一致性错误,不是文件本身的命名规则有问题。
  • 是否需要重命名文件移除文件名中的DJI_0001_008字符?
    完全不需要,只要保证XML内部的filename字段和实际图片文件名一致即可。
  • 大小写差异是否是触发本次错误的原因?
    本次报错不是这个原因,但如果存在后缀大小写不一致的情况,后续必然会触发同类NotFoundError,建议提前统一后缀格式。

内容的提问来源于stack exchange,提问作者sneeze_shiny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:09:04