本教程演示了如何使用 AutoML Vision 新建一个采用您自己的一组训练图片的模型、评估结果以及预测测试图片的分类。
本教程使用一个包含五种不同花卉(向日葵、郁金香、雏菊、玫瑰和蒲公英)图片的数据集,并介绍了如何训练自定义模型、评估模型性能以及使用自定义模型对新图片进行分类。
前提条件
配置项目环境
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 AutoML Vision API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 AutoML Vision API。
- 安装 Google Cloud CLI。
- 按照说明创建服务账号并下载密钥文件。
-
将
GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为如下路径:指向您在创建服务账号时所下载的服务账号密钥文件的路径。例如:export GOOGLE_APPLICATION_CREDENTIALS=KEY_FILE
-
使用以下命令将您的新服务账号添加到 IAM 角色 AutoML Editor。将 PROJECT_ID 替换为 Google Cloud 项目的名称,并将 SERVICE_ACCOUNT_NAME 替换为新服务账号的名称,例如
service-account1@myproject.iam.gserviceaccount.com
。gcloud auth login gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:YOUR_USERID@YOUR_DOMAIN" \ --role="roles/automl.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME \ --role="roles/automl.editor"
- 允许 AutoML Vision 服务账号访问您的 Google Cloud 项目资源:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:custom-vision@appspot.gserviceaccount.com" \ --role="roles/storage.admin"
- 安装客户端库。
-
设置
PROJECT_ID
和REGION_NAME
环境变量。
将 PROJECT_ID 替换为 Google Cloud 项目的 ID。AutoML Vision 目前要求将位置设为us-central1
。export PROJECT_ID="PROJECT_ID" export REGION_NAME="us-central1"
-
创建一个 Cloud Storage 存储桶,以存储您将用于训练自定义模型的文档。
存储桶名称必须采用以下格式:$PROJECT_ID-vcm
。 以下命令将在us-central1
地区中创建一个名为$PROJECT_ID-vcm
的存储桶。gsutil mb -p PROJECT_ID -c regional -l us-central1 gs://PROJECT_ID-vcm/
- 设置 BUCKET 变量。
export BUCKET=PROJECT_ID-vcm
-
将公开提供的花卉图片数据集从
gs://cloud-samples-data/img/flower_photos/
复制到您的 Google Cloud Storage 存储桶。
在 Cloud Shell 会话中,输入以下内容:gsutil -m cp -R gs://cloud-samples-data/ai-platform/flowers/ gs://BUCKET/img/
文件复制操作需要大约 20 分钟才能完成。
此命令还会复制
all_data.csv
文件,其中列出了原始文件名及其标签。 -
示例数据集包含一个 CSV 文件,其中包含每个图片的位置和标签(如需了解所需格式的详情,请参阅准备训练数据)。更新 CSV 文件,使其指向您自己的存储桶中的文件:
gsutil cat gs://BUCKET/img/flowers/all_data.csv | sed "s:cloud-ml-data/img/flower_photos/:BUCKET/img/flowers/:" > all_data.csv
然后将更新的 CSV 文件复制到您的存储桶中:gsutil cp all_data.csv gs://BUCKET/csv/
源代码文件位置
您可以从下面提供的位置下载源代码。下载后,您可以将源代码复制到 AutoML Vision 项目文件夹中。
Python
本教程包含以下 Python 文件:
vision_classification_create_dataset.py
- 包含创建数据集的功能import_dataset.py
- 包含导入数据集的功能vision_classification_create_model.py
- 包含创建模型的功能list_model_evaluations.py
- 包含列出模型评估的功能vision_classification_predict.py
- 包含与预测相关的功能delete_model.py
- 包含删除模型的功能
Java
本教程包含以下 Java 文件:
VisionClassificationCreateDataset.java
- 包含创建数据集的功能ImportDataset.java
- 包含导入数据集的功能VisionClassificationCreateModel.java
- 包含创建模型的功能ListModelEvaluations.java
- 包含列出模型评估的功能VisionClassificationPredict.java
- 包含与预测相关的功能DeleteModel.java
- 包含删除模型的功能
Node.js
本教程包含以下 Node.js 程序:
vision_classification_create_dataset.js
- 包含创建数据集的功能import_dataset.js
- 包含导入数据集的功能vision_classification_create_model.js
- 包含创建模型的功能list_model_evaluations.js
- 包含列出模型评估的功能vision_classification_predict.js
- 包含与预测相关的功能delete_model.js
- 包含删除模型的功能
运行应用
第 1 步:创建 Flowers 数据集
如要创建自定义模型,首先需要创建一个空数据集,该数据集最终用于保存模型的训练数据。创建数据集时,您可以指定希望自定义模型执行的分类类型:
- 多类别 (MULTICLASS) 分类为每个分类的图片分配一个标签
- 多标签 (MULTILABEL) 分类可以为每个图片分配多个标签
本教程会创建一个名为 flowers
的数据集并使用“多类别”(MULTICLASS) 分类。
复制代码
Python
Java
Node.js
如需了解详情,请参阅 AutoML Vision Node.js API 参考文档。
如需向 AutoML Vision 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请求
运行 create_dataset
函数以创建空数据集。您必须修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 为数据集 (
flowers
) 设置display_name
将
MULTILABEL
更改为 MULTICLASS
Python
python3 vision_classification_create_dataset.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationCreateDataset"
Node.js
node vision_classification_create_dataset.js
响应
响应中包含新创建的数据集的详细信息,其中包括数据集 ID(用于在以后的请求中引用该数据集)。建议将环境变量 DATASET_ID
设置为返回的数据集 ID 值。
Dataset name: projects/216065747626/locations/us-central1/datasets/ICN7372141011130533778 Dataset id: ICN7372141011130533778 Dataset display name: flowers Image classification dataset specification: classification_type: MULTICLASS Dataset example count: 0 Dataset create time: seconds: 1530251987 nanos: 216586000
第 2 步:将图片导入数据集
接下来使用带有目标标签的训练图片填充数据集。
import_data
函数接口接受 CSV 文件作为输入,该文件列出了所有训练图片的位置以及每个训练图片的正确标签。(如需详细了解所需格式,请参阅准备数据。)在本教程中,我们将使用您复制到 Cloud Storage 存储桶的加标签图片,这些图片列在 gs://$PROJECT_ID-vcm/csv/all_data.csv
中。
复制代码
Python
Java
Node.js
如需了解详情,请参阅 AutoML Vision Node.js API 参考文档。
如需向 AutoML Vision 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请求
运行 import_data
函数以导入训练内容。需要更改的第一部分代码是上一步中的数据集 ID,第二部分代码是 all_data.csv
的 URI。您必须修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 为数据集设置
dataset_id
(来自上一步的输出) 设置
path
,这是gs://YOUR_PROJECT_ID-vcm/csv/all_data.csv
的 URIpython3 import_dataset.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.ImportDataset" {Java}
node import_dataset.js {Node.js}
响应
Processing import... Dataset imported.
第 3 步:创建(训练)模型
拥有包含已加标签的训练图片的数据集后,您就可以训练新模型了。
复制代码
Python
Java
Node.js
如需了解详情,请参阅 AutoML Vision Node.js API 参考文档。
如需向 AutoML Vision 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请求
调用 create_model
函数以创建模型。数据集 ID 来自之前的步骤。您必须修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 为数据集设置
dataset_id
(来自上一步的输出) 为模型 (
flowers_model
) 设置display_name
python3 vision_classification_create_model.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationCreateModel" {Java}
node vision_classification_create_model.js {Node.js}
响应
create_model
函数开始训练操作并输出操作名称。训练是异步进行的,可能需要一段时间才能完成,因此您可以使用操作 ID 来检查训练状态。训练完成后,create_model
会返回模型 ID。与数据集 ID 一样,我们建议您将环境变量 MODEL_ID
设置为返回的模型 ID 值。
Training operation name: projects/216065747626/locations/us-central1/operations/ICN3007727620979824033 Training started... Model name: projects/216065747626/locations/us-central1/models/ICN7683346839371803263 Model id: ICN7683346839371803263 Model display name: flowers_model Image classification model metadata: Training budget: 1 Training cost: 1 Stop reason: Base model id: Model create time: seconds: 1529649600 nanos: 966000000 Model deployment state: deployed
第 4 步:评估模型
训练结束后,您可以通过查看模型的精确率、召回率和 F1 得分来评估其就绪情况。
display_evaluation
函数接受模型 ID 作为参数。
复制代码
Python
Java
Node.js
如需了解详情,请参阅 AutoML Vision Node.js API 参考文档。
如需向 AutoML Vision 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请求
执行以下请求,以发出显示模型整体评估性能的请求。您必须修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID 将
model_id
设置为您的模型 IDpython3 list_model_evaluations.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations" {Java}
node list_model_evaluations.js {Node.js}
响应
如果精确率和召回率分数过低,您可以强化训练数据集并重新训练模型。如需了解详情,请参阅评估模型。
Precision and recall are based on a score threshold of 0.5 Model Precision: 96.3% Model Recall: 95.7% Model F1 score: 96.0% Model Precision@1: 96.33% Model Recall@1: 95.74% Model F1 score@1: 96.04%
第 5 步:使用模型进行预测
如果自定义模型符合您的质量标准,您就可以使用该模型来对新的花卉图片进行分类了。
复制代码
Python
Java
Node.js
如需了解详情,请参阅 AutoML Vision Node.js API 参考文档。
如需向 AutoML Vision 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请求
对于 predict
函数,您必须修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 将
model_id
设置为您的模型 ID 将
file_path
设置为下载的文件(“resources/test.png”)python3 vision_classification_predict.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationPredict" {Java}
node vision_classification_predict.js {Node.js}
响应
该函数返回高于规定的置信度阈值 (0.7) 的分类得分(表示图片与各类别的匹配程度)。
Prediction results: Predicted class name: dandelion Predicted class score: 0.9702693223953247
第 6 步:删除模型
使用完此示例模型后,您可以永久删除该模型。但之后您将无法再使用该模型进行预测。
复制代码
Python
Java
Node.js
如需了解详情,请参阅 AutoML Vision Node.js API 参考文档。
如需向 AutoML Vision 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请求
使用操作类型 delete_model
发出删除所创建模型的请求。
您必须修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID 将
model_id
设置为您的模型 IDpython3 delete_model.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel" {Java}
node delete_model.js {Node.js}
响应
Model deleted.