Azure ML: 将 .jsonl 格式文件以及对应的图像数据上传至Azure Datastore,并且注册至Azure Datasets
解释如何将.jsonl
格式文件以及对应的图像数据上传至Azure Datastore,并且注册至Azure Datasets中(注:此场景主要发生在通过 Azure AutoML 训练/部署图像分类,物体识别任务时,需将训练图像集对应的标签文件转化为.jsonl
文件后,再将图像以及标签数据上传并注册,用以模型运行与验证使用)。
文章目录
1 Azure Datasets 和 Azure Datastore 概念
回忆一下,当我们新建一个Azure Machine Learning Workspace的时候,需要链接或者新建一个Azure Storage账户(用以保存数据),一个Azure Key Vault账户(用以保存密码),一个Azure Application insights账户(一些monitoring功能),以及一个Azure Container Registry账户(保存Container及其相关)。
1.1 Azure Datastore
在Azure Machine Learning中,Azure Datastore
是对Azure Storage的引用。每个Azure ML Workspace都有一个默认的数据存储区域,就是我们刚创建Workspace的时候链接的Azure Storage账户。
下面是我们通过workspace.get_default_datastore()
返回的datastore
实例:
{
"name": "XXX",
"container_name": "XXX",
"account_name": "XXX",
"protocol": "XXX",
"endpoint": "XXX"
}
注意,这里container_name
指的是Azure Storage Container Name。
所以说,我们可以通俗意义上把Azure Datastore
和Azure Storage划约等号。
1.2 Azure Datasets
上面提到的Azure Datastore
是我们这个Azure ML Workspace存储数据的引用,那么Azure Datasets
就是具体的数据集的引用了。需要注意的是,Azure Datasets
并不是指一个数据集,实际上它有两种类型:FileDataset
和 TabularDataset
,具体取决于用户在训练中使用它们的方式。 这两种类型均可用于涉及估算器、AutoML、hyperDrive 和管道的 Azure 机器学习训练工作流。
下面是我们通过Dataset.get_by_name
返回的dataset
实例:
TabularDataset
{
"source": [
"('workspaceblobstore', 'XXX')"
],
"definition": [
"GetDatastoreFiles",
"ReadParquetFile",
"DropColumns"
],
"registration": {
"id": "XXX",
"name": "XXX",
"version": 2,
"workspace": "XXX"
}
}
当我们进入Azure Machine Learning Studio,打开Datasets
这栏,我们就能看到注册成功的Azure Datasets
,比如下图:
2 .jsonl
格式标签文件
我们训练数据集的标签文件通常以VOC或COCO的格式,我们需要先把标签格式转化为.jsonl
。这里我们不描述转化的过程。.jsonl
格式的文件如下所示:
{
"image_url": "AmlDatastore://image_data/Image_01.png",
"image_details":
{
"format": "png",
"width": "2230px",
"height": "4356px"
},
"label":
{
"label": "cat",
"topX": "1",
"topY": "0",
"bottomX": "0",
"bottomY": "1",
"isCrowd": "true",
}
}
{
"image_url": "AmlDatastore://image_data/Image_02.png",
"image_details":
{
"format": "jpeg",
"width": "1230px",
"height": "2356px"
},
"label":
{
"label": "dog",
"topX": "0",
"topY": "1",
"bottomX": "0",
"bottomY": "1",
"isCrowd": "false",
}
}
3 jsonl文件的上传与注册
为了在图像分类/物体识别中使用AutoML,我们需要首先将图像数据集标签从其他格式转换为.jsonl
格式。然后上传并注册到Azure Datastore
以及Azure Datasets
。
首先,我们将所有图像和数据上传到Azure Datastore
:
# Retrieving default datastore that got automatically created when we setup a workspace
ds = ws.get_default_datastore()
ds.upload(src_dir="./[localFolderName]", target_path="[azureStorageFolderName]")
当我们运行上述代码后,我们会发现,在./[localFolderName]
路径下所有的文件都会保存到这个Workspace链接的Azure Storage账号,[azureStorageFolderName]
文件夹路径下。
然后,我们需要创建一个AzureML Tabular Dataset,从我们上传到Azure Datastore
的数据中。这里,我们上传一个训练数据集以及一个名为train_annotations.jsonl
的标签文件到Azure Datasets
,并命名为odTrainingDataset
。
from azureml.core import Dataset
from azureml.data import DataType
# get existing training dataset
training_dataset_name = "odTrainingDataset"
training_dataset = Dataset.Tabular.from_json_lines_files(
path=ds.path("odObjects/train_annotations.jsonl"),
set_column_types={"image_url": DataType.to_stream(ds.workspace)},
)
training_dataset = training_dataset.register(
workspace=ws, name=training_dataset_name
)
运行成功后,我们就能在Azure Machine Learning Studio里的Datasets中看到一个新建的数据集,名为odTrainingDataset
。