Mac系统下TensorFlow生成.record文件无报错但未创建求助
问题
跟着TFODCourse教程在Jupyter Notebook(Mac OS环境)中进行TensorFlow目标检测,在生成.record文件的步骤(对应视频2:12位置)遇到问题:已完成图像收集与标注,运行代码后无任何报错,但目标.record文件未生成,已确认文件并非隐藏状态,怀疑存在语法或路径问题,求排查思路。
运行代码
import os CUSTOM_MODEL_NAME = 'my_ssd_mobnet' PRETRAINED_MODEL_NAME = 'ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8' PRETRAINED_MODEL_URL = 'http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8.tar.gz' TF_RECORD_SCRIPT_NAME = 'generate_tfrecord.py' LABEL_MAP_NAME = 'label_map.pbtxt' paths = { 'WORKSPACE_PATH': os.path.join('Tensorflow', 'workspace'), 'SCRIPTS_PATH': os.path.join('Tensorflow','scripts'), 'APIMODEL_PATH': os.path.join('Tensorflow','models'), 'ANNOTATION_PATH': os.path.join('Tensorflow', 'workspace','annotations'), 'IMAGE_PATH': os.path.join('Tensorflow', 'workspace','images'), 'MODEL_PATH': os.path.join('Tensorflow', 'workspace','models'), 'PRETRAINED_MODEL_PATH': os.path.join('Tensorflow', 'workspace','pre-trained-models'), 'CHECKPOINT_PATH': os.path.join('Tensorflow', 'workspace','models',CUSTOM_MODEL_NAME), 'OUTPUT_PATH': os.path.join('Tensorflow', 'workspace','models',CUSTOM_MODEL_NAME, 'export'), 'TFJS_PATH':os.path.join('Tensorflow', 'workspace','models',CUSTOM_MODEL_NAME, ' tfjsexport'), 'TFLITE_PATH':os.path.join('Tensorflow', 'workspace','models',CUSTOM_MODEL_NAME, 'tfliteexport'), 'PROTOC_PATH':os.path.join('Tensorflow','protoc') } files = { 'PIPELINE_CONFIG':os.path.join('Tensorflow', 'workspace','models', CUSTOM_MODEL_NAME, 'pipeline.config'), 'TF_RECORD_SCRIPT': os.path.join(paths['SCRIPTS_PATH'], TF_RECORD_SCRIPT_NAME), 'LABELMAP': os.path.join(paths['ANNOTATION_PATH'], LABEL_MAP_NAME) } for path in paths.values(): if not os.path.exists(path): if os.name == 'posix': !mkdir -p {path} if os.name == 'nt': !mkdir {path} if not os.path.exists(files['TF_RECORD_SCRIPT']): !git clone https://github.com/nicknochnack/GenerateTFRecord {paths['SCRIPTS_PATH']} !python {files['TF_RECORD_SCRIPT']} -x {os.path.join(paths['IMAGE_PATH'], 'train')} -l {files['LABELMAP']} -o {os.path.join(paths['ANNOTATION_PATH'], 'train.record')} !python {files['TF_RECORD_SCRIPT']} -x {os.path.join(paths['IMAGE_PATH'], 'test')} -l {files['LABELMAP']} -o {os.path.join(paths['ANNOTATION_PATH'], 'test.record')}
排查思路
验证路径有效性:在代码中添加print语句,输出关键路径确认文件/文件夹是否真实存在,比如:
print(f"TF Record Script Path: {files['TF_RECORD_SCRIPT']}") print(f"Train Image Directory: {os.path.join(paths['IMAGE_PATH'], 'train')}") print(f"Output Train Record Path: {os.path.join(paths['ANNOTATION_PATH'], 'train.record')}")若路径不存在,先手动创建缺失目录或修正路径拼接逻辑。
检查脚本完整性与依赖:确认
scripts目录下已成功克隆generate_tfrecord.py,且脚本无损坏。同时检查是否安装了tensorflow、pillow、lxml等依赖,可在终端单独运行脚本命令,查看是否有隐藏报错(Jupyter的!命令可能截断输出)。核对标注文件与Label Map:确保train/test文件夹中的XML标注文件与图像一一对应,无文件名错误。检查
label_map.pbtxt格式是否正确,示例格式如下:item { id: 1 name: 'your_label' }避免括号不匹配、引号缺失等语法错误。
排查权限问题:Mac OS下若目标目录(如
annotations)无写入权限,会导致文件无法生成。可通过ls -l命令查看目录权限,或尝试在命令前添加sudo提升权限(Jupyter中使用sudo需谨慎)。修正命令参数格式:代码中部分参数存在多余空格(如
-l {files['LABELMAP']}),虽Shell会自动忽略,但建议统一格式去掉多余空格,避免潜在解析问题。
内容的提问来源于stack exchange,提问作者coding_world

