Windows10下TensorFlow1.12目标检测训练报错NotFoundError求助
从你描述的错误信息和环境来看,训练过程本身已经正常生成了ckpt文件,问题出在训练结束时自动导出模型的环节,以下是具体的原因分析和解决方案:
核心原因分析
混合路径分隔符导致解析错误
Windows系统默认使用反斜杠\作为路径分隔符,但你的命令和错误日志里出现了training/export\Servo这种混合正斜杠和反斜杠的路径,TensorFlow 1.12.0在Windows下处理这种混合路径时容易出现解析异常,无法识别正确的目录位置。训练步骤配置不一致
你在启动命令里指定了--num_train_steps=10000,但在ssd_mobilenet_v1_coco.config的train_config块中设置的num_steps: 1000,这种配置不一致可能导致训练流程在收尾阶段触发导出逻辑时出现状态冲突。自动创建目录的权限或命名问题
Windows下如果当前用户没有training目录的写入权限,或者TensorFlow生成的临时目录名(比如带b'1576742954'的字节串格式)在Windows下无法被正确识别,都会导致无法创建目录的错误。
具体解决方案
1. 统一路径分隔符
把所有路径统一为Windows风格的反斜杠:
- 修改训练命令为:
cd E:\test\models-master\research\object_detection && python model_main.py --pipeline_config_path=training\ssd_mobilenet_v1_coco.config --model_dir=training\ --num_train_steps=10000 - 同时检查配置文件中的路径,将
train_input_reader和eval_input_reader里的路径也统一为反斜杠(注意配置文件中字符串需要转义):train_input_reader: { tf_record_input_reader { input_path:'data\\train.record' } label_map_path:'data\\side_vehicle.pbtxt' } eval_input_reader: { tf_record_input_reader { input_path: 'data\\test.record' } label_map_path: 'data\\side_vehicle.pbtxt' shuffle: false num_readers: 1 }
2. 同步训练步骤配置
修改ssd_mobilenet_v1_coco.config中train_config块的num_steps参数,和命令行保持一致:
train_config: { # 其他配置... num_steps: 10000 # 从1000修改为10000 # 其他配置... }
3. 手动创建导出目录
提前手动创建好模型导出所需的目录,绕过程序自动创建的环节:
打开命令提示符,执行:
mkdir E:\test\models-master\research\object_detection\training\export\Servo
4. 手动导出模型(跳过自动导出)
如果自动导出始终有问题,可以利用已生成的ckpt文件手动导出:
执行以下命令(注意替换model.ckpt-10000为你实际生成的最新ckpt前缀):
python export_inference_graph.py --input_type image_tensor --pipeline_config_path=training\ssd_mobilenet_v1_coco.config --trained_checkpoint_prefix=training\model.ckpt-10000 --output_directory=training\export\Servo
5. 检查目录权限
右键点击training目录,选择属性 -> 安全,确保当前登录用户拥有写入和修改权限,避免权限不足导致无法创建目录。
内容的提问来源于stack exchange,提问作者user9270170

