LoginSignup
0
0

More than 3 years have passed since last update.

Cognitive Services Custom Vision を REST API のみで使いこなす (2)既存プロジェクトの作成済みモデルに追加学習

Last updated at Posted at 2020-07-20

Custom Vision を利用すると、最小で画像5枚から画像解析モデルを作成し、Web API や CoreML、TensorFlow、ONNX のフォーマットで Export して利用できるほか、そのままお手持ちの Docker 環境で Image Build して Web API サービスとして利用できる Dockerfile としても Export 可能です。

前回は Custom Vision Portal を使わず、REST API (Training API) を用いて、の新規プロジェクトの作成、学習データのアップロード、学習、モデル公開まで行う手順を紹介しました。
今回は同じくこの Training API を用いて、既存プロジェクトに、画像を追加アップロードしてタグ付け、モデルを再学習させて公開するまでのプロセスを行う手順を紹介します。

準備

Custom Vision の作成済みプロジェクト

Custom Vision の 作成済みプロジェクトを使います。
Custom Vision Portal から GUI で作成、または、Training API で作成 (手順は前回をご覧ください)、どちらで作成したプロジェクトでも構いません。

Training Key、Resource Id、Location の取得

前回の手順と同様に取得しておきます。

Project Id の取得

前回、Training API を用いてプロジェクトを作成した手順 で取得できた Project Id をこちらでも使用します。または下記の手順でも取得できます。

Custom Vision Portal から取得する場合

Custom Vision Portal にサインインして、追加学習を行うプロジェクトを選択して開きます。その後、プロジェクトの画面右上の ⚙ (設定アイコン)をクリックします。

Project Id に表示されている値を projectId としてローカルに保存しておきます。

Training Key, Location, Resource Id もこのページから値を確認、取得することができます。

20200720_01.png

Training API から取得する場合

Training API の GetProjects で Training Key に紐づいたプロジェクト一覧が取得できます。

GET https://YOUR_LOCATION.api.cognitive.microsoft.com/customvision/v3.3/Training/projects HTTP/1.1
Training-key: ••••••••••••••••••••••••••••••••

Result で以下のようにプロジェクト一覧が取得できます。ここから該当するプロジェクトを確認し、表示される id の値を projectId としてローカルに保存しておきます。

[{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
  "name": "CLASSIFICATION_PJ",
  "description": "",
  "settings": {
    "domainId": "0732100f-1a38-4e49-a514-c9b44c697ab5",
    "classificationType": "Multiclass",
     :
  },
  "created": "2020-07-10T01:19:18.073Z",
  "lastModified": "2020-07-16T03:11:35.141Z",
   :
  "status": "Succeeded"
}, 
:

手順

1. 最新 Iteration の取得

まずは再学習をさせるモデルの最新バージョン(Iteration)を取得します。GetIterations を利用します。

GET https://YOUR_LOCATION.api.cognitive.microsoft.com/customvision/v3.3/Training/projects/YOUR_PROJECT_ID/iterations
Training-key: ••••••••••••••••••••••••••••••••

Response 200 が戻り、保持している Iteration の情報が表示されます。一番上(=最新) の Iteration 情報に表示されている id の値を iterationId としてローカルに保存しておきます。

[{
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
    "name": "Iteration 3",
    "status": "Completed",
    "created": "2020-07-10T02:58:20.966Z",
    "lastModified": "2020-07-16T03:12:00.621Z",
    "trainedAt": "2020-07-16T03:12:00.621Z",
    "projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
    "exportable": true,
    "exportableTo": ["CoreML", "DockerFile", "ONNX", "OpenVino", "TensorFlow"],
     :

2. プロジェクトに設定されている Tag 情報を取得する

プロジェクトで作成されている Tag (分類)を取得します。GetTags を利用します。

GET https://YOUR_LOCATION.api.cognitive.microsoft.com/customvision/v3.3/Training/projects/YOUR_PROJECT_ID/tags?iterationId=YOUR_ITERATION_ID
Training-key: ••••••••••••••••••••••••••••••••

Response 200 が返り、設定されている Tag の一覧が取得できます。id に表示される値、および nametagId[n]、tagName[n] のようにセットにしてローカルに保存しておきます。

[
  {
    "id": "YOUR_TAG_ID_1",
    "name": "Eagle",
    "description": null,
    "type": "Regular",
    "imageCount": 5
  }, 
  {
    "id": "YOUR_TAG_ID_2",
    "name": "Swan",
    "description": null,
    "type": "Regular",
    "imageCount": 5
  }, 
   :

3. 画像データをアップロードする

前回の 画像アップロード&タグ付け の手順で画像をアップロードすることができます。

が、今回は一旦画像を現在のモデルで分析し、その結果を確認して学習データとして登録する方法をやってみます。

3.1 画像データを現在のモデルで分析する

前回の モデルのテスト の手順で、QucikTestImage または QuickTestImageUrl を使って、追加の学習データとなる画像をテスト分析します。
以下のように分析の結果が表示されます。

{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
  "project": "YOUR_PROJECT_ID",
  "iteration": "YOUR_ITERATION_ID",
  "created": "2020-07-20T07:40:18.830Z",
  "predictions": [
    {
      "probability": 0.999974132,
      "tagId": "YOUR_TAG_ID_2",
      "tagName": "Swan",
      "tagType": "Regular"
    }, 
    {
      "probability": 2.555639E-05,
      "tagId": "YOUR_TAG_ID_3",
      "tagName": "Penguin",
      "tagType": "Regular"
    },
     :

正しくタグ付けされているかを確認し、id に表示される値を imageId としてローカルに保存しておきます。(追加投入したい画像の数だけ繰り返し、imageId[n]、正しい TagId を tagId[n] としてセットで 保存しておくと効率的です。)

テストとして投入した画像がプロジェクトで保持されて imageId が発行されるため、この imageId を使って学習データとして投入できるようになります。
Object Detection モデルの場合は、画像におけるオブジェクトの位置も推測できるため、その値を利用することで学習データとしてのマークアップの手間が省けます。

3.2 分析済み画像を学習データとして投入する

CreateImagesFromPredictions を利用します。

POST https://YOUR_LOCATION.api.cognitive.microsoft.com/customvision/v3.3/Training/projects/YOUR_PROJECT_ID/images/predictions
Content-Type: application/json
Training-key: ••••••••••••••••••••••••••••••••

Request Body は、imageId とタグ付けしたい tagId を以下のように設定します。(YOUR_IMAGE_ID_x、YOUR_TAG_ID_x をローカルに保存しておいた適切な imageId[n]、tagId[n] と差し替えます。)

{
  "images": [
    {
      "id": "YOUR_IMAGE_ID_1",
      "tagIds": [
        "YOUR_TAG_ID_2"
      ],
    },
    {
      "id": "YOUR_IMAGE_ID_2",
      "tagIds": [
        "YOUR_TAG_ID_3"
      ],
    }
  ],
  "tagIds": [
    "YOUR_TAG_ID_2","YOUR_TAG_ID_3"
  ]
}

4. モデルの再学習

前回の モデルの学習 と同じ手順で TrainProjectGetIteration を使って、モデルを再学習させ、学習の終了を確認します。

5. モデルの再テスト、公開

前回の モデルのテスト と同じ手順で QuickTestImage | QuickTestImageUrl を使って、モデルの再テストを行います。

その後、前回の モデルの公開 と同じ手順で、PublishIteration を使って、画像分析モデルを利用できるように公開します。

この時、publishName のパラメーターで 旧モデルと同じ名前 または 異なる名前 のどちらでも設定できます。同じ名前を設定すると Prediction URL を変更することなく利用することができます。その時は overwrite パラメーターを True として忘れずに追加します。

POST https://YOUR_LOCATION.api.cognitive.microsoft.com/customvision/v3.3/Training/projects/YOUR_PROJECT_ID/iterations/YOUR_ITERAION_ID/publish?publishName=YOUR_PUBLISH_NAME&predictionId=YOUR_RESOURCE_ID&overwrite=True
Training-key: ••••••••••••••••••••••••••••••••

Response 200 が戻れば公開完了です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0