データのアノテーションからTensorflow Object Detection APIでの学習までをクラウドで簡単に行う方法

# はじめに
この記事では、Cloud AnnotationsとGoogle Colabを使うことでローカルに環境準備を行うことなくObject Detection APIを使って自前データで学習する手順を紹介します。
Object Detection APIを使って自前のデータで学習するには、環境のセットアップ、データの準備・変換など、学習するまでにやることがたくさんあり軽く試してみようという気持ちではなかなか始められないと思います。Object Detection APIを使った学習に必要なコード（セットアップを含む）が記述されているNotebookがCloud Annotationsから提供されており簡単に物体検出モデル作成が行えます。

物体検出モデル作成のためのNotebook
https://colab.research.google.com/github/cloud-annotations/google-colab-training/blob/master/object_detection.ipynb

以前の記事で、Cloud Annotationsを使ってコーディングすることなくアノテーションからカスタムの物体検出モデル作成までの手順を紹介しました。この記事の手順との違いはモデル作成部分をGoogle Colabを使って行う部分です。Google Colab上ではモデル作成のコードを編集可能なため学習時のパラメーターの調整が可能になります。

Cloud Annotationsを使って簡単にカスタム物体検出モデルを作成する
https://qiita.com/tsota/items/262e40855e6fb361994a


# 手順概要
アノテーションと学習の２つの手順になります。
1. Cloud Annotationsでアノテーション
2. Google Colabで学習

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/db96c90b-6a1d-c729-93b4-4ce292d5c6b6.png)

# 1. Cloud Annotationsでアノテーション

## 1-1. Object Storageインスタンスを作成
https://www.ibm.com/cloud にログインして、Object Storageインスタンスを作成します。
Lite（無料）プランのインスタンスで大丈夫です。


## 1-2. Cloud Annotationsにログイン
ブラウザーで https://cloud.annotations.ai/ を開いて、右上の「Log in」ボタンからCloud Annotationsにログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/4fe9e6b0-ba18-d41a-5d9d-5e612cb034f5.png)

ログイン後、以下の画面の右上のリストでデータを格納するObject Storageのインスタンスを選択します。
「Start a new project」ボタンを押してデータを格納するBucketを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/6e5e8a52-51c9-fd56-3b39-fca3eef8a508.png)


任意のバケット名をつけて「Confirm」ボタンを押します。ここでは「tsota-megane」としています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/5e452c18-7a36-022c-2a81-113a82d4545f.png)

Annotation typeの選択では、「Localization」（ペンギンが3匹いる方）を選択して、「Confirm」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/3df71991-8d71-3643-4d54-1b0374479dfd.png)

## 1-3. アノテーション
「File」→「Upload media」から準備したデータをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/bc1ece5b-fa6e-2980-ae2d-bb4c6d554429.png)

以下の画面でひたすらアノテーションをしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/1ba240ff-08d6-ea96-845a-5b1f48b59a82.png)

## 1-4. データをダウンロード
「File」->「Export as Create ML」でアノテーションしたデータをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/57e8fd3f-1b72-4550-3108-d45c5740e375.png)


# 2. Object Detection APIで学習

## 2-1. データをアップロード
先程ダウンロードしたzipファイルをローカルで解凍して、Google Driveで「My Drive」→「Upload Folder」から解凍してできたディレクトリを選択して、データをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/d206267c-84e1-8266-a91a-fea5de8ace27.png)

## 2-2. Google Colabを開く

以下のURLへブラウザーでアクセスしてGoogle ColabのNotebookを開きます。
https://colab.research.google.com/github/cloud-annotations/google-colab-training/blob/master/object_detection.ipynb

このNotebookにはObject Detection APIを使った学習に必要なコードが記述されています。
以下のようなステップがコメント付きで予め記述されています。

- Setup
- Install the TensorFlow Object Detection API
- Mount Google Drive
- Generate a Label Map
- Generate TFRecords
- Download a base model
- Model config
- Start training
- Export inference graph
- Testing the model
- Convert the model
- Download the model

「ドライブにコピー」を選択してGoogle Drive上にコピーを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/ed287368-6c28-1a36-a3ab-1e928a133603.png)

名前をクリックして、任意の名前に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/4224cff4-1aa0-2fe8-b8fc-6b2427c46033.png)

## 2-3. コードの編集
2箇所コードの編集を行います。

「Setup」のセルの3行目を先程Google Driveにアップロードしたフォルダー名に変更します。ここでは「tsota-megane」に変更しています。
「Setup」セルでは、NUM_TRAIN_STEPSやMODEL_TYPEの設定もありますので、慣れてくればこのあたりのパラメーターを変更して試してみるのもよいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/9d0c4558-39db-7cf5-a508-2ae0089ebfce.png)

「Model config」のセルの8行目をモデルタイプが直接記述されている箇所をCONFIG_TYPEの変数名に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/e37708b9-1a0b-507d-7731-77a16fc4d24f.png)

## 2-4. コードの実行
コードを上から実行して行きます。
「Mount Google Drive」のセルでは、Google Driveへのアクセスの承認を求められますので、指定のURLをブラウザーで開き、認証コードを取得して入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/834841b1-d3a8-e15e-22a7-77e334df59fa.png)

「Testing the model」のセルでは、学習したモデルを使って物体検出のテストができます。PCに接続されているカメラ画像を入力にしてテストが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/2471bd32-cd7d-cdf0-4dae-027a1aa0b8e1.png)

## モデルのダウンロード
学習済みのモデルは、/content/exportedディレクトリにあるので、Google Drive移動してダウンロードして利用することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/5f6b4033-44a9-f059-1316-18830013945e.png)

# まとめ
ローカルに環境準備を行うことなく、Object Detection APIを使って自前データで学習することができました。