gpt4 book ai didi

azure - 如何配置YOLOv8 yaml文件来访问Azure上的blob存储数据集?

转载 作者:行者123 更新时间:2023-12-02 05:55:37 25 4
gpt4 key购买 nike

上下文

我想使用 Yolo (v8) 训练自定义模型。我已经让它在我的本地计算机上运行,​​但速度非常慢,并且希望在 Azure 机器学习工作室上运行该作业以提高效率。我正在使用 Azure ML SDK v2

问题

当我在 Azure ML 上运行时,收到一条错误消息,指出 YOLO 无法找到我的训练图像。

Traceback (most recent call last):
File "/opt/conda/envs/ptca/lib/python3.8/site-packages/ultralytics/yolo/engine/trainer.py", line 125, in __init__
self.data = check_det_dataset(self.args.data)
File "/opt/conda/envs/ptca/lib/python3.8/site-packages/ultralytics/yolo/data/utils.py", line 243, in check_det_dataset
raise FileNotFoundError(msg)
FileNotFoundError:
Dataset 'custom.yaml' not found ⚠️, missing paths ['/mnt/azureml/cr/j/18bdc3371eca4975a0c4a7123f9adaec/exe/wd/valid/images']

代码/分析

这是我用来运行该作业的代码:

command_job = command(
display_name='Test Run 1',
code="./src/",
command="yolo detect train data=custom.yaml model=yolov8n.pt epochs=1 imgsz=1280 seed=42",
environment="my-custom-env:3",
compute=compute_target
)

在我的本地计算机(使用 Visual Studio Code)上,custom.yaml 文件位于 ./src/ 目录中。当我运行上面的作业时,custom.yaml 会上传并显示在作业的 Code 部分中(在 Azure ML Studio 中查看)。通过调查,我认为这是具有路径的计算工作目录:

'/mnt/azureml/cr/j/18bdc3371eca4975a0c4a7123f9adaec/exe/wd/'

我的 custom.yaml 如下所示:

path: ../
train: train/images
val: valid/images

nc: 1
names: ["bike"]

因此,YOLO 正在查看我的 custom.yaml,使用根目录作为路径,并尝试在其中查找 valid/images目录:

'/mnt/azureml/cr/j/18bdc3371eca4975a0c4a7123f9adaec/exe/wd/valid/images'

我的图像位于我的数据存储中,而不是该目录中,因此出现错误。

我尝试过的 - 更新 custom.yaml 路径

我的所有数据(trainvalid)都包含在 AzureBlobStorage 中。在 Azure ML Studio 中,我创建了一个数据存储,并将我的数据添加为数据集(引用我的 AzureBlobStorage 帐户)。我的文件结构是:

Dataset/
- Train/
- Images
- Labels
- Valid/
- Images
- Labels

在我的 custom.yaml 文件中,我尝试将 path 替换为以下内容:

 **Storage URI**: https://mystorageaccount.blob.core.windows.net/my-datasets
**Datastore URI**: azureml://subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/my-rg/workspaces/my_workspage/datastores/my_datastore/paths/Dataset/

如果我这样做,我会得到同样的错误。这次它将path附加到工作目录的末尾。示例:

    '/mnt/azureml/cr/j/18bdc3371eca4975a0c4a7123f9adaec/exe/wd/https://mystorageaccount.blob.core.windows.net/my-datasets/valid/images'

我尝试过的 - 安装/下载数据集

我已阅读 Microsoft 文档 -(例如 herehere ) - 它说:

For most scenarios, you'll use URIs (uri_folder and uri_file) - a location in storage that can be easily mapped to the filesystem of a compute node in a job by either mounting or downloading the storage to the node.

感觉我应该将我的数据(在我的数据存储中)映射到计算文件系统。然后我可以在我的 custom.yaml 中使用该路径。文件并不清楚我是如何做到这一点的。

简而言之:如何在 Azure ML 上设置数据,以便 custom.yaml 中的路径指向数据?

最佳答案

解决方案是create a folder data asset有路径 azureml://datastores/<data_store_name>/paths/<dataset-path>并将其作为输入传递给 AzureML 作业。 AzureML 作业在运行时解析 uri_folder 输入的路径,因此 custom.yaml可以通过编程方式更新以包含此路径。

以下是实现此解决方案的 AzureML 作业示例:

from azure.ai.ml import command
from azure.ai.ml import Input

command_job = command(
inputs=dict(
data=Input(
type="uri_folder",
path="azureml:your-data-asset:version-number",
)
),
command="""
echo "The data asset path is ${{ inputs.data }}" &&
# Update custom.yaml to contain the correct path
sed -i "s|path:.*$|path: ${{ inputs.data }}|" custom.yaml &&
# Now custom.yaml contains the correct path so we can run the training
yolo detect train data=custom.yaml model=yolov8n.pt epochs=1 imgsz=1280 seed=42 project=your-experiment name=experiment
""",
code="./src/",
environment="your-environment",
compute="your-compute-target",
experiment_name="your-experiment",
display_name="your-display-name",
)

请注意,您需要安装最新的 mlflow 和 azureml-mlflow 库,以确保使用 mlflow 记录您的模型、参数和指标:

ultralytics==8.0.133
azureml-mlflow==1.52.0
mlflow==2.4.2

编辑:请注意,我发布了教程,解释了使用 AzureML 运行 yolov8 训练的所有步骤:

在博文中,我从本地文件夹创建了 azureML 数据集。在您的情况下,数据集已存储在数据存储中,因此您需要指定路径 azureml://datastores/<data_store_name>/paths/<dataset-path>而不是本地路径,当您 create the azureml data asset .

关于azure - 如何配置YOLOv8 yaml文件来访问Azure上的blob存储数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75848981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com