AWS SageMaker目标检测微调训练报错:找不到annotations.json文件
解决SageMaker Quick Start目标检测微调时的FileNotFoundError问题
针对你遇到的FileNotFoundError: [Errno 2] No such file or directory: '/opt/ml/input/data/training/annotations.json'错误,以下是排查和解决方向:
检查输入通道映射配置
SageMaker训练作业会将S3数据挂载到/opt/ml/input/data/<通道名>路径下。如果你的S3结构是images/和annotations/两个独立目录,需确认训练作业是否配置了对应通道:- 若脚本期望
annotations.json直接在training通道根目录,你需要将S3中annotations/下的文件直接放到训练通道指向的S3前缀(而非嵌套在annotations/子目录); - 若支持多通道输入,需分别创建
training(指向S3的images/)和annotations(指向S3的annotations/)通道,并在训练脚本中修改标注文件的读取路径为/opt/ml/input/data/annotations/abc.json。
- 若脚本期望
验证S3数据的路径与权限
- 确认S3 URI是否正确,比如标注文件的路径是否为
s3://你的桶名/xxx/annotations/abc.json,无多余层级; - 检查SageMaker执行角色是否拥有该S3路径的
s3:GetObject和s3:ListBucket权限。
- 确认S3 URI是否正确,比如标注文件的路径是否为
匹配模型的标注文件要求
部分SageMaker Quick Start目标检测模型要求:- 标注文件必须命名为
annotations.json(而非你的abc.json); - 标注文件与图片放置在同一目录下。
可查看该模型的官方说明,确认格式要求,必要时重命名标注文件或调整目录结构。
- 标注文件必须命名为
调试容器内的数据结构
可以创建一个调试训练作业,用简单脚本列出容器内数据挂载情况,确认文件位置是否符合预期:import os def walk_dir(path): for root, dirs, files in os.walk(path): rel_path = os.path.relpath(root, path) indent = ' ' * rel_path.count(os.sep) print(f'{indent}{os.path.basename(root)}/') for f in files: print(f' {indent}{f}') walk_dir('/opt/ml/input/data/')运行后查看日志,就能明确数据实际挂载的结构。
排查容器潜在Bug
若以上步骤都无问题,可换用同系列的其他Quick Start模型(如SSD Mobilenet V2)测试。若同样报错,大概率是容器的问题,可联系AWS技术支持,或改用自定义容器进行微调。
内容的提问来源于stack exchange,提问作者Dylan Pierce
相关产品推荐
相关产品推荐

