TensorFlow 2目标检测生成.record文件时遇无法识别参数错误
解决generate_tfrecord.py参数不识别问题
问题根源
你遇到的错误来自两个核心原因:
- 你传入的
-l参数并未在脚本的参数定义中声明,脚本无法识别该参数 - 图片路径参数没有通过对应的选项(
-i)指定,被脚本判定为未知的位置参数
分步解决
1. 检查脚本的参数定义
打开generate_tfrecord.py,找到开头用argparse定义参数的代码块,通常类似这样:
parser = argparse.ArgumentParser(description='Generate TFRecord files from images and annotations.') parser.add_argument('-i', '--imagedir', help='Path to directory containing images', required=True) parser.add_argument('-o', '--outputdir', help='Path to output TFRecord files', required=True) parser.add_argument('-r', '--ratio', help='Train/test split ratio (default: 0.8)', default=0.8, type=float) parser.add_argument('-x', '--xml', help='Use XML annotations instead of CSV', action='store_true') args = parser.parse_args()
这里面没有-l相关的参数定义,所以你传入-l会触发错误。
2. 调整命令行参数(脚本无需显式传label map时)
如果脚本内部已经硬编码了label map的路径,或者通过其他逻辑自动读取,你只需要修正命令行的参数格式,用-i指定图片目录:
# 生成训练集TFRecord python generate_tfrecord.py -i /content/training_demo/images/train -o /content/training_demo/annotations/train.record # 生成测试集TFRecord python generate_tfrecord.py -i /content/training_demo/images/test -o /content/training_demo/annotations/test.record
3. 修改脚本添加label map参数(需要自定义label map路径时)
如果你的脚本需要读取自定义路径的label map,需修改generate_tfrecord.py添加-l参数:
- 在argparse参数定义部分新增一行:
parser.add_argument('-l', '--label_map', help='Path to label map file', required=True)
- 在脚本中读取label map的位置,替换为
args.label_map获取路径,示例代码:
# 读取并解析label map label_map = label_map_util.load_labelmap(args.label_map) categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True) category_index = label_map_util.create_category_index(categories)
- 用修正后的命令执行:
# 训练集 python generate_tfrecord.py -i /content/training_demo/images/train -o /content/training_demo/annotations/train.record -l /content/training_demo/annotations/label_map.pbtxt # 测试集 python generate_tfrecord.py -i /content/training_demo/images/test -o /content/training_demo/annotations/test.record -l /content/training_demo/annotations/label_map.pbtxt
4. 额外检查:确认脚本的标注依赖逻辑
部分版本的generate_tfrecord.py依赖CSV文件关联图片与标注,而非直接读取XML+label map。这种情况下你需要先将XML标注转换为CSV,再通过对应参数(比如-c)传入CSV路径,需仔细查看脚本开头的注释说明。
内容的提问来源于stack exchange,提问作者ibrahim 46
相关产品推荐
相关产品推荐

