Azure ML中使用Blob存储训练YOLO-NAS时数据路径找不到的问题
在Azure ML中解决YOLO-NAS加载Blob存储数据的路径问题
问题核心
YOLO-NAS的官方数据加载器(如coco_detection_yolo_format_train)仅支持本地文件系统路径,无法直接识别Azure ML的azureml://格式URI,这是导致路径找不到错误的根本原因。必须将Blob存储的数据映射到计算实例/集群的本地目录后,才能被YOLO-NAS加载。
解决方案
方法1:直接使用已挂载的本地路径
从你提供的挂载点截图来看,Blob存储已经挂载到计算实例的本地目录(通常格式为/mnt/azureml/<datastore-name>)。只需修改数据路径配置:
# 替换原有的azureml://路径为挂载后的本地路径 DATA_DIR = '/mnt/azureml/faucetpoc/' # 对应截图中的挂载点路径 TRAIN_IMAGES_DIR = 'train/images' TRAIN_LABELS_DIR = 'train/labels' VAL_IMAGES_DIR = 'valid/images' VAL_LABELS_DIR = 'valid/labels' TEST_IMAGES_DIR = 'test/images/' TEST_LABELS_DIR = 'test/labels' CLASSES = ['faucet','sink','toilet'] NUM_CLASSES = len(CLASSES) dataset_params = { 'data_dir': DATA_DIR, 'train_images_dir':TRAIN_IMAGES_DIR, 'train_labels_dir':TRAIN_LABELS_DIR, 'val_images_dir':VAL_IMAGES_DIR, 'val_labels_dir':VAL_LABELS_DIR, 'test_images_dir':TEST_IMAGES_DIR, 'test_labels_dir':TEST_LABELS_DIR, 'classes': CLASSES }
修改后重新运行数据加载代码即可,YOLO-NAS会自动从本地挂载路径读取数据,完成预处理和训练。
方法2:通过Azure ML Dataset加载(适合计算集群场景)
如果使用计算集群训练,推荐通过Azure ML Dataset管理数据,自动完成挂载:
# 1. 连接到Azure ML工作区 from azureml.core import Workspace, Dataset ws = Workspace.from_config() # 2. 获取已创建的Dataset(需提前在Azure ML工作室中从Blob存储创建) dataset = Dataset.get_by_name(ws, name='your-dataset-name') # 3. 将Dataset挂载到本地临时目录 mount_context = dataset.mount() mount_context.start() # 4. 使用挂载后的本地路径作为DATA_DIR DATA_DIR = mount_context.mount_point # 后续的dataset_params和数据加载代码保持不变 dataset_params = { 'data_dir': DATA_DIR, # ... 其他参数不变 } # 训练完成后可停止挂载 # mount_context.stop()
关键注意事项
- 确保计算实例/集群拥有Blob存储的访问权限:可通过系统分配托管标识、存储账户密钥或SAS令牌配置权限。
- 计算集群场景下,也可在运行配置中直接指定数据存储挂载,无需手动写挂载代码。
- YOLO-NAS不会自动拉取云端Blob数据,必须先将数据映射到本地文件系统,其数据加载器才能识别并处理。
内容的提问来源于stack exchange,提问作者ram_98
相关产品推荐
相关产品推荐

