{"id":15159394,"url":"https://github.com/ibm/tensorflow-kubernetes-art-classification","last_synced_at":"2025-09-30T09:30:58.024Z","repository":{"id":66065449,"uuid":"102640622","full_name":"IBM/tensorflow-kubernetes-art-classification","owner":"IBM","description":"Train a TensorFlow model on Kubernetes to recognize art culture based on the collection from the Metropolitan Museum of Art","archived":true,"fork":false,"pushed_at":"2019-04-20T01:54:53.000Z","size":103456,"stargazers_count":60,"open_issues_count":0,"forks_count":31,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-12-20T23:34:59.816Z","etag":null,"topics":["deep-learning","ibm-bluemix","ibmcode","image-classification","kubernetes-cluster","tensorflow-models"],"latest_commit_sha":null,"homepage":"https://developer.ibm.com/code/patterns/classify-art-using-tensorflow-model","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IBM.png","metadata":{"files":{"readme":"README-cn.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-06T17:53:44.000Z","updated_at":"2024-07-18T20:02:19.000Z","dependencies_parsed_at":"2023-02-21T02:15:24.110Z","dependency_job_id":null,"html_url":"https://github.com/IBM/tensorflow-kubernetes-art-classification","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Ftensorflow-kubernetes-art-classification","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Ftensorflow-kubernetes-art-classification/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Ftensorflow-kubernetes-art-classification/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Ftensorflow-kubernetes-art-classification/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IBM","download_url":"https://codeload.github.com/IBM/tensorflow-kubernetes-art-classification/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234722055,"owners_count":18876896,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-learning","ibm-bluemix","ibmcode","image-classification","kubernetes-cluster","tensorflow-models"],"created_at":"2024-09-26T21:20:52.307Z","updated_at":"2025-09-30T09:30:50.373Z","avatar_url":"https://github.com/IBM.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 利用大都会艺术博物馆的藏品作为数据集，在 Kubernetes 上训练 TensorFlow 模型来识别艺术品\r\n*阅读本文的其他语言版本：[English](README.md)。*\r\n\r\n在此 Code Pattern 中，我们将使用深度学习来训练图像分类模型。\r\n数据来自纽约大都会艺术博物馆的艺术藏品和 Google BigQuery 的元数据。\r\n我们将使用 TensorFlow 中实现的 Inception 模型，并且将在 Kubernetes 集群上进行训练。\r\n我们将保存训练的模型，之后加载该模型进行推理。\r\n为使用此模型，我们提供油画图片作为输入，模型将返回可能的文化信息，例如，“Italian, Florence”艺术。\r\n用户可以选择使用其他属性对艺术藏品进行分类，例如，按作者、时期等。\r\n根据可用计算资源，用户可以选择要用于训练的图片数量、要使用的类别数量等。\r\n在此 Code Pattern 中，我们将选择少量图像和少量类别，以便训练在合理的时间段内完成。\r\n对于较大的数据集，训练可能需要耗时数日甚至数周时间才能完成。\r\n\r\n读者完成此 Code Pattern 后，将会掌握如何：\r\n\r\n* 在 TensorFlow 中收集和处理用于深度学习的数据\r\n* 配置分布式 TensorFlow 以在服务器集群上运行\r\n* 配置和部署 TensorFlow 以在 Kubernetes 集群上运行\r\n* 训练高级图像分类神经网络\r\n* 使用 TensorBoard 来可视化并理解训练流程\r\n\r\n![](doc/source/images/architecture.png)\r\n\r\n\r\n## 操作流程\r\n\r\n1.检查 Google BigQuery 数据库中可供大都会艺术博物馆的艺术藏品使用的属性。\r\n\r\n2.使用所选属性创建带标签的数据集\r\n\r\n3.从一组可用公共模型中选择图像分类模型，并部署至 IBM Cloud\r\n\r\n4.在 Kubernetes 上运行训练过程，如果 GPU 可用，可选择使用\r\n\r\n5.保存训练的模型和日志\r\n\r\n6.通过 TensorBoard 来可视化训练情况\r\n\r\n7.在 Kubernetes 中加载训练模型，对新艺术画作运行推理以查看分类\r\n\r\n\r\n## 包含的组件\r\n\r\n* [TensorFlow](http://www.tensorflow.org)：用于实现深度学习模型的开源库\r\n* [图像分类模型](https://github.com/tensorflow/models/tree/master/research/slim)：使用 TensorFlow Slim 高级 API 实现的一组图像分类模型。\r\n* [用于大都会艺术博物馆藏品的 Google 元数据](https://bigquery.cloud.google.com/dataset/bigquery-public-data:the_met?pli=1)：包含纽约大都会艺术博物馆超过 200,000 件艺术藏品的元数据的数据库\r\n* [大都会艺术博物馆藏品](https://metmuseum.org)：该博物馆收藏有超过 450,000 件公共艺术品，包括油画、书籍等。\r\n* [Kubernetes 集群](https://kubernetes.io)：用于在服务器集群上编排容器的开源系统\r\n* [IBM Cloud Container Service](https://cloud.ibm.com/docs/containers/container_index.html?cm_sp=dw-bluemix-_-code-_-devcenter)：来自 IBM 的公共服务，可在 Docker 和 Kubernetes 上托管用户应用程序\r\n\r\n\r\n## 特色技术\r\n\r\n* [TensorFlow](https://www.tensorflow.org)：深度学习库\r\n* [TensorFlow 模型](https://github.com/tensorflow/models/tree/master/research/slim)：用于深度学习的公共模型\r\n* [Kubernetes](https://kubernetes.io)：容器编排\r\n\r\n\r\n# 观看视频\r\n[![](http://img.youtube.com/vi/I-8xmMxo-RQ/0.jpg)](https://www.youtube.com/watch?v=I-8xmMxo-RQ)\r\n\r\n\r\n# 前提条件\r\n\r\n在工作站上安装 [TensorFlow](https://www.tensorflow.org/install)。\r\n\r\n通过以下一种方法创建 Kubernetes 集群：\r\n* [Minikube](https://kubernetes.io/docs/getting-started-guides/minikube)：用于使用您自己的服务器进行本地测试。\r\n* [IBM Cloud Container Service](https://github.com/IBM/container-journey-template)：用于在云端部署。\r\n* [IBM Cloud Private](https://www.ibm.com/cloud-computing/products/ibm-cloud-private/)：用于以上任一场景。\r\n\r\n这里的代码针对 [来自 IBM Cloud Container Service 的 Kubernetes 集群](https://cloud.ibm.com/docs/containers/cs_ov.html#cs_ov) 进行了测试。\r\n\r\n\r\n# 步骤\r\n1.[注册 Google BigQuery 并设置环境](#1-set-up-environment)\r\n\r\n2.[为数据集创建标签](#2-create-label)\r\n\r\n3.[下载数据](#3-download-data)\r\n\r\n4.[将数据转换为 TFRecord 格式](#4-convert-data)\r\n\r\n5.[创建 TensorFlow 容器图像](#5-create-image)\r\n\r\n6.[部署 TensorFlow pod 以在 Kubernetes 上运行训练过程](#6-deploy-training)\r\n\r\n7.[评估训练模型的准确性](#7-evaluate-model)\r\n\r\n8.[保存训练的模型和日志](#8-save-trained-model)\r\n\r\n9.[通过 TensorBoard 来可视化训练情况](#9-visualize)\r\n\r\n10.[在 Kubernetes 中加载训练模型，对新艺术画作运行推理](#10-run-inference)\r\n\r\n\r\n### 1.设置环境\r\n\r\n请参阅[指示信息](https://cloud.google.com/bigquery/docs/reference/libraries)，在您的笔记本电脑上安装\r\n客户端，以便与 Google BigQuery 进行交互：\r\n\r\n```\r\n$ pip install --upgrade google-cloud-bigquery\r\n```\r\n\r\n在您的笔记本电脑上安装 [Google Cloud SDK](https://cloud.google.com/sdk/docs/)。\r\n\r\n\u003e 例如，在 Mac 上，下载并解压缩 ` google-cloud-sdk-168.0.0-darwin-x86_64.tar.gz`。\r\n\r\n运行命令：\r\n\r\n```\r\n$ ./google-cloud-sdk/bin/gcloud init\r\n```\r\n\r\n这将启动浏览器并要求您登录 Gmail 帐户，然后会要求您在 Google Cloud 中\r\n选择一个项目。  请记录此步骤中的项目 ID，以供稍后在查询脚本中使用。\r\n\r\n在笔记本电脑上使用以下命令对客户端进行认证：\r\n\r\n```\r\n$ ./google-cloud-sdk/bin/gcloud auth application-default login\r\n```\r\n\r\n您的笔记本电脑应已准备好与 Google BigQuery 进行连接。\r\n\r\n\r\n### 2.创建标签\r\n\r\n带标签的数据集是对模型进行训练的首要要求。  通常情况下，收集数据并将标签与数据关联\r\n需要大量的资源和工作量。\r\n\r\nGoogle BigQuery 包含适合各种用途的公共数据库集合。  对于我们的案例，我们对\r\n[大都会艺术博物馆的艺术藏品](https://bigquery.cloud.google.com/table/bigquery-public-data:the_met.objects?pli=1) 的相关数据感兴趣\r\n请查看此[博客](https://cloud.google.com/blog/big-data/2017/08/when-art-meets-big-data-analyzing-200000-items-from-the-met-collection-in-bigquery)\r\n获取更多详细信息。  通过查看表格，我们看到很多可用于作为艺术品数据标签的属性。\r\n对于此 Code Pattern，我们将选择“culture”属性，它描述了艺术品来源的文化名称，\r\n例如，“Italian, Florence”。  根据此 Code Pattern 的示例，您可以选择任何其他\r\n属性作为艺术图像的标签。\r\n\r\nbigquery.py 文件提供了一个简单的 Python 脚本，用于查询 Google BigQuery 数据库。\r\n为获取不重复的文化列表，SQL 字符串为：\r\n\r\n```sql\r\nSELECT culture, COUNT(*) c\r\n        FROM `bigquery-public-data.the_met.objects`\r\n        GROUP BY 1\r\n        ORDER BY c DESC\r\n```\r\n\r\n为获取以此文化作为标签的所有艺术品的列表，SQL 字符串为：\r\n\r\n```sql\r\nSELECT department, culture, link_resource\r\n\tFROM `bigquery-public-data.the_met.objects`\r\n\tWHERE culture IS NOT NULL\r\n\tLIMIT 200\r\n```\r\n\r\n您可以在 Google BigQuery 控制台上输入这些字符串以查看数据。该 Code Pattern 还提供了便利的脚本\r\n以查询属性。首先，克隆以下 Git 存储库：\r\n\r\n```\r\n$ cd /your_home_directory\r\n$ git clone https://github.com/IBM/tensorflow-kubernetes-art-classification.git\r\n```\r\n\r\n用于查询 Google BigQuery 的脚本为 bigquery.py。编辑此脚本来插入上述合适的 SQL 字符串。  使用来自先前步骤的 ID 更新此项目。\r\n\r\n```\r\nclient = bigquery.Client(project=\"change-to-your-project-id\")\r\n```\r\n\r\n运行该脚本：\r\n\r\n```\r\n$ cd tensorflow-kubernetes-art-classification\r\n$ python bigquery.py\r\n```\r\n\r\n您可以重定向输出以将其保存至文件。  作为参考，以下文件中提供了\r\n以上两项查询的输出：\r\n\r\n* cultures-all.list\r\n* arts-all.list\r\n\r\n\r\n### 3.下载数据\r\n\r\n虽然 Google BigQuery 存有艺术藏品的属性，但藏品的照片实际上保存在\r\n大都会艺术博物馆的站点上。因此，要构建带标签的数据集，我们就需要下载照片，\r\n并将其与标签关联。  查看艺术品列表，其中有约 114,627 件艺术品带有标签，\r\n可供我们使用。  这些艺术品共有 4,259 个唯一标签，但仅 540 个标签含 10 张以上的照片，并且\r\n可用于训练模型。  如果某个特定文化只有少量艺术图像，可能不足以\r\n用来训练模型。\r\n\r\n提供的脚本 download.py 用于构建原始带标签的数据。  它将从 arts-select.list 文件读取，\r\n下载每行中找到的图像源，并将其置于以该标签命名的目录中。\r\n您可以将 `arts-all.list` 文件中的行复制到 `arts-select.list` 文件中，并根据需要进行编辑，\r\n以创建要下载的图像列表。\r\n\r\n```\r\n$ python download.py\r\n```\r\n\r\n\u003e 备注：如果磁盘空间可能不足，或者您要使用 IBM Cloud Kubernetes Service(Lite)，\r\n只需解压 sample-dataset.tar.gz 并将其用作为下载的数据即可。\r\n\r\n\r\n### 4.转换数据\r\n\r\n此时，我们将开始使用 TensorFlow 代码来处理数据。\r\n遵循 [TensorFlow 的指示信息](https://www.tensorflow.org/install/)，在您的环境上安装 TensorFlow。\r\n\r\n克隆包含公共模型集合的 TensorFlow Git 存储库：\r\n\r\n```\r\n$ cd /your_home_directory\r\n$ git clone https://github.com/tensorflow/models.git\r\n```\r\n\r\n我们将使用并扩展 `models/slim` 目录中的图像分类模型的集合。\r\n此目录中提供的代码将支持您处理多个不同的图像数据集\r\n（CIFAR、Flowers、ImageNet），并且您可以从几个高级模型中选择要训练的模型。\r\n要扩展此代码库以处理新的艺术图像数据集，请将以下文件复制到\r\n目录中：\r\n\r\n```\r\n$ cp tensorflow-kubernetes-art-classification/dataset_factory.py models/research/slim/datasets/dataset_factory.py\r\n$ cp tensorflow-kubernetes-art-classification/arts.py models/research/slim/datasets/arts.py\r\n```\r\n\r\n我们要将原始图像转换为 TensorFlow 代码将使用的 TFRecord 格式。\r\n要转换艺术品数据集，请将下载图片的目录放置在名为 `met_art` 的目录中，\r\n例如，`/your_home_directory/data/met_art`。\r\n运行该脚本：\r\n\r\n```\r\n$ cp tensorflow-kubernetes-art-classification/convert.py models/research/slim/convert.py\r\n$ cd models/research/slim\r\n$ python convert.py --dataset_dir=\"/your_home_directory/data\"\r\n```\r\n\r\n输出将位于目录 `/your_home_directory/data` 中：\r\n\r\n```\r\narts_train_00000-of-00005.tfrecord\r\narts_train_00001-of-00005.tfrecord\r\narts_train_00002-of-00005.tfrecord\r\narts_train_00003-of-00005.tfrecord\r\narts_train_00004-of-00005.tfrecord\r\narts_validation_00000-of-00005.tfrecord\r\narts_validation_00001-of-00005.tfrecord\r\narts_validation_00002-of-00005.tfrecord\r\narts_validation_00003-of-00005.tfrecord\r\narts_validation_00004-of-00005.tfrecord\r\nlabels.txt\r\n```\r\n\r\n请注意，此数据已被分为两个数据集：  一个用于训练，另一个用于验证。  为验证留出\r\n的数据集部分为 25%，这可在 convert.py 脚本中进行更改。  `labels.txt` 文件\r\n列出了图像目录中找到的所有文化标签。\r\n\r\n有时，图像文件损坏，导致转换中的图像处理步骤失败。\r\n您可以首先运行以下命令来扫描图像集合，找出损坏的文件：\r\n\r\n```sh\r\n$ python convert.py --dataset_dir=\"/your_home_directory/data\" --check_image=True\r\n```\r\n\r\n然后，可从数据集中移除损坏的图像。\r\n\r\n\r\n### 5.创建图像\r\n\r\n要部署 pod，您将需要运行以下命令来创建包含 TensorFlow 代码的图像：\r\n\r\n```\r\n$ cd /your_home_directory/tensorflow-kubernetes-art-classification\r\n$ mkdir data\r\n$ cp /your_home_directory/data/*.tfrecord data/.\r\n$ cp /your_home_directory/data/labels.txt data/.\r\n$ docker build -t your_image_name:v1 -f Dockerfile .\r\n```\r\n\r\n请注意，此图像中包含一个小型数据集样本副本。  原因有两方面。首先，\r\n免费的 IBM Cloud 帐户不可使用共享文件系统。  在正常做法中，数据集太大，以致于无法复制\r\n到图像中，您会将数据集保留在共享文件系统中，例如，SoftLayer NFS。启动 pod 后，\r\n将安装此共享文件系统，以便该数据集可供所有 pod 使用。其次，\r\n随免费 IBM Cloud 帐户提供的计算资源不足以在合理的时间内\r\n运行训练过程。在实际操作中，您将使用更大的数据集，并分配足够的资源，例如，多个 CPU 核心和\r\nGPU。根据计算资源的数量，训练过程可能会运行几天，甚至会超过一周时间。\r\n\r\n接下来，遵循这些[指示信息](https://cloud.ibm.com/docs/containers/cs_cluster.html#bx_registry_other) 来完成以下操作：\r\n\r\n\t1.在 IBM Cloud Container Registry 中创建一个名字空间，并将图像上传至此名称空间\r\n  \r\n\t2.创建不会过期的注册表令牌\r\n\t\r\n\t3.创建 Kubernetes 密钥来存储 IBM Cloud 令牌信息\r\n\t\r\n\r\n\r\n### 6.部署训练过程\r\n\r\n使用您的图像名称和密钥名称来更新 `train-model.yaml` 文件：\r\n\r\n```yaml\r\napiVersion: v1\r\nkind: Pod\r\nmetadata:\r\n  name: met-art\r\nspec:\r\n  containers:\r\n  - name: tensorflow\r\n    image: registry.ng.bluemix.net/tf_ns/met-art:v1\r\n    volumeMounts:\r\n    - name: model-logs\r\n      mountPath: /logs\r\n    ports:\r\n    - containerPort: 5000\r\n    command:\r\n    - \"/usr/bin/python\"\r\n    - \"/model/train_image_classifier.py\"\r\n    args:\r\n    - \"--train_dir=/logs\"\r\n    - \"--dataset_name=arts\"\r\n    - \"--dataset_split_name=train\"\r\n    - \"--dataset_dir=/data\"\r\n    - \"--model_name=inception_v3\"\r\n    - \"--clone_on_cpu=True\"\r\n    - \"--max_number_of_steps=100\"\r\n  volumes:\r\n  - name: model-logs\r\n    persistentVolumeClaim:\r\n      claimName: met-art-logs\r\n  imagePullSecrets:\r\n  - name: bluemix-secret\r\n  restartPolicy: Never\r\n```\r\n\r\n```sh\r\n# 对于 Mac OS\r\n$ sed -i '.original' 's/registry.ng.bluemix.net\\/tf_ns\\/met-art:v1/registry.\u003cregion\u003e.bluemix.net\\/\u003cyour_namespace\u003e\\/\u003cyour_image\u003e:\u003ctag\u003e/' train-model.yaml\r\n$ sed -i '.original' 's/bluemix-secret/\u003cyour_token\u003e/' train-model.yaml\r\n\r\n# 对于所有其他 Linux 平台\r\n$ sed -i 's/registry.ng.bluemix.net\\/tf_ns\\/met-art:v1/registry.\u003cregion\u003e.bluemix.net\\/\u003cyour_namespace\u003e\\/\u003cyour_image\u003e:\u003ctag\u003e/' train-model.yaml\r\n$ sed -i 's/bluemix-secret/\u003cyour_token\u003e/' train-model.yaml\r\n```\r\n\r\n使用以下命令部署 pod：\r\n\r\n```\r\n$ kubectl create -f train-model.yaml\r\n```\r\n\r\n使用以下命令检查训练状态：\r\n\r\n```\r\n$ kubectl logs train-met-art-model\r\n```\r\n\r\n随 pod 一起将创建一个本地卷，并将该卷安装到 pod 上，用于保存训练输出。\r\n这包括用于在崩溃后复原和保存训练模型的检查点，以及\r\n用于实现可视化的事件文件。此外，将 pod 的重新启动策略设置为“Never”，因为\r\n一旦训练完成，就无需再重新启动 pod。\r\n\r\n\r\n### 7.评估模型\r\n\r\n对以上训练步骤中最后一个检查点中的模型进行评估：\r\n\r\n```yaml\r\napiVersion: v1\r\nkind: Pod\r\nmetadata:\r\n  name: eval-met-art-model\r\nspec:\r\n  containers:\r\n  - name: tensorflow\r\n    image: registry.ng.bluemix.net/tf_ns/met-art:v1\r\n    volumeMounts:\r\n    - name: model-logs\r\n      mountPath: /logs\r\n    ports:\r\n    - containerPort: 5000\r\n    command:\r\n    - \"/usr/bin/python\"\r\n    - \"/model/eval_image_classifier.py\"\r\n    args:\r\n    - \"--alsologtostderr\"\r\n    - \"--checkpoint_path=/logs/model.ckpt-100\"\r\n    - \"--eval_dir=/logs\"\r\n    - \"--dataset_dir=/data\"\r\n    - \"--dataset_name=arts\"\r\n    - \"--dataset_split_name=validation\"\r\n    - \"--model_name=inception_v3\"\r\n    - \"--clone_on_cpu=True\"\r\n    - \"--batch_size=10\"\r\n  volumes:\r\n  - name: model-logs\r\n    persistentVolumeClaim:\r\n      claimName: met-art-logs\r\n  imagePullSecrets:\r\n  - name: bluemix-secret\r\n  restartPolicy: Never\r\n```\r\n效仿步骤 6 中的操作，使用您的图像名称和密钥名称来更新 `eval-model.yaml` 文件。\r\n\r\n使用以下命令部署 pod：\r\n\r\n```\r\n$ kubectl create -f eval-model.yaml\r\n```\r\n\r\n使用以下命令检查评估状态：\r\n\r\n```\r\n$ kubectl logs eval-met-art-model\r\n```\r\n\r\n\r\n### 8.保存训练的模型\r\n\r\n将 Kubernetes 持久卷上的所有日志文件都复制到本地主机。\r\n\r\n```\r\n$ kubectl create -f access-model-logs.yaml\r\n$ kubectl cp access-model-logs:/logs \u003cpath_to_local_dir\u003e\r\n```\r\n\r\n如果磁盘空间可能不足，那么仅复制作为最后检查点文件的训练模型。\r\n此外，复制事件文件用于下面的“可视化”步骤。\r\n\r\n\r\n### 9.可视化\r\n\r\n从 Kubernetes 持久卷复制的事件文件包含 TensorBoard 的日志数据。\r\n启动 TensorBoard 并指向含事件文件的本地目录：\r\n\r\n```\r\n$ tensorboard --logdir=\u003cpath_to_dir\u003e\r\n```\r\n\r\n然后，使用浏览器打开命令行中显示的链接。\r\n\r\n\r\n### 10.运行推理\r\n\r\n现在，您完成按文化信息对艺术图像进行分类的模型的训练，您可以提供\r\n新的艺术图像来查看该模型将如何对其进行分类。\r\n\r\n```yaml\r\napiVersion: v1\r\nkind: Pod\r\nmetadata:\r\n  name: infer-met-art-model\r\nspec:\r\n  containers:\r\n  - name: tensorflow\r\n    image: registry.ng.bluemix.net/tf_ns/met-art:v1\r\n    volumeMounts:\r\n    - name: model-logs\r\n      mountPath: /logs\r\n    ports:\r\n    - containerPort: 5000\r\n    command:\r\n    - \"/usr/bin/python\"\r\n    - \"/model/model/classify.py\"\r\n    args:\r\n    - \"--alsologtostderr\"\r\n    - \"--checkpoint_path=/logs/model.ckpt-100\"\r\n    - \"--eval_dir=/logs\"\r\n    - \"--dataset_dir=/data\"\r\n    - \"--dataset_name=arts\"\r\n    - \"--dataset_split_name=validation\"\r\n    - \"--model_name=inception_v3\"\r\n    - \"--image_url=https://images.metmuseum.org/CRDImages/dp/original/DP800938.jpg\"\r\n  volumes:\r\n  - name: model-logs\r\n    persistentVolumeClaim:\r\n      claimName: met-art-logs\r\n  imagePullSecrets:\r\n  - name: bluemix-secret\r\n  restartPolicy: Never\r\n```\r\n\r\n效仿步骤 6 中的操作，使用您的 Docker 图像名称和密钥名称来更新 `infer-model.yaml` 文件。\r\n此外，将 image_url 替换为您所选的艺术图像。\r\n\r\n使用以下命令部署 pod：\r\n\r\n```\r\n$ kubectl create -f infer-model.yaml\r\n```\r\n\r\n使用以下命令检查推理状态：\r\n\r\n```\r\n$ kubectl logs infer-met-art-model\r\n```\r\n\r\n在以上运行的训练中，我们使用了很小的数据集来进行说明，因为\r\nKubernetes 集群的 Lite 版本提供的资源非常有限。因此，\r\n训练的模型仅涵盖了 5 个文化类别，准确性不高。对于此步骤，\r\n您可以使用我们先前训练的[检查点](https://ibm.box.com/s/wyzl1k2tz1nosrf44mj20cmlruy7gsut)，其中涵盖了\r\n600 个文化类别。该检查点的准确率为 66%。\r\n如果要使用我们的检查点来运行推理，请从以上链接下载该检查点，\r\n然后将其复制到 Kubernetes 持久卷：\r\n\r\n```sh\r\n$ kubectl delete -f access-model-logs.yaml # in case the access pod already exists\r\n$ kubectl create -f access-model-logs.yaml\r\n$ kubectl cp inception-v3-2k-metart-images.tar.gz access-model-logs:/logs/.\r\n$ kubectl exec access-model-logs -ti /bin/bash\r\n$ cd /logs\r\n$ tar xvfz inception-v3-2k-metart-images.tar.gz\r\n$ exit\r\n```\r\n\r\n接下来，使用该检查点更新 infer-model.yaml：\r\n\r\n```yaml\r\ncommand:\r\n- \"/usr/bin/python\"\r\n- \"/model/model/classify.py\"\r\nargs:\r\n- \"--alsologtostderr\"\r\n- \"--checkpoint_path=/logs/inception-v3-2k-metart-images/model.ckpt-15000\"\r\n- \"--eval_dir=/logs\"\r\n- \"--dataset_dir=/logs/inception-v3-2k-metart-images\"\r\n- \"--dataset_name=arts\"\r\n- \"--dataset_split_name=validation\"\r\n- \"--model_name=inception_v3\"\r\n- \"--image_url=https://images.metmuseum.org/CRDImages/dp/original/DP800938.jpg\"\r\n```\r\n\r\n最后，运行推理：\r\n\r\n```sh\r\n$ kubectl delete -f infer-model.yaml # in case the infer pod already exists\r\n$ kubectl create -f infer-model.yaml\r\n$ kubectl logs infer-met-art-model\r\n```\r\n# 了解更多信息\r\n\r\n* **人工智能 Code Pattern**：喜欢此 Code Pattern？了解我们的其他 [AI Code Pattern](https://developer.ibm.com/code/technologies/artificial-intelligence/)。\r\n* **关于 AI 和数据的 Code Pattern 播放清单**：收藏包含我们所有 Code Pattern 视频的[播放清单](https://www.youtube.com/playlist?list=PLzUbsvIyrNfknNewObx5N7uGZ5FKH0Fde)\r\n* **PowerAI**：通过一个在 Enterprise Platform for AI 上运行的用于机器学习的软件发行版，更快地开始开发或扩展：[IBM Power Systems](https://www.ibm.com/ms-en/marketplace/deep-learning-platform)\r\n* **IBM Cloud 上的 Kubernetes**：为您的应用程序带来 [IBM Cloud 上的 Kubernetes 和 Docker](https://www.ibm.com/cloud-computing/bluemix/containers) 的组合力量\r\n\r\n# 链接\r\n* [IBM Cloud Container Service](https://cloud.ibm.com/docs/containers/container_index.html?cm_sp=dw-bluemix-_-code-_-devcenter)：来自 IBM 的公共服务，可在 Docker 和 Kubernetes 上托管用户应用程序\r\n* [TensorFlow](http://www.tensorflow.org)：用于实现深度学习模型的开源库\r\n* [Kubernetes 集群](https://kubernetes.io)：用于在服务器集群上编排容器的开源系统\r\n* [纽约大都会艺术博物馆](https://metmuseum.org)：该博物馆收藏有超过 450,000 件公共艺术品，包括油画、书籍等。\r\n* [用于大都会艺术博物馆藏品的 Google 元数据](https://bigquery.cloud.google.com/dataset/bigquery-public-data:the_met?pli=1)：包含纽约大都会艺术博物馆超过 200,000 件艺术藏品的元数据的数据库\r\n* [Google BigQuery](https://bigquery.cloud.google.com)：提供大规模数据集的交互式分析的 Web 服务\r\n* [图像分类模型](https://github.com/tensorflow/models/tree/master/research/slim)：使用 TensorFlow Slim 高级 API 实现的一组图像分类模型。\r\n\r\n# 许可\r\n[Apache 2.0](LICENSE)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibm%2Ftensorflow-kubernetes-art-classification","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibm%2Ftensorflow-kubernetes-art-classification","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibm%2Ftensorflow-kubernetes-art-classification/lists"}