Google Cloud Healthcare API DICOM tutorials

Cloud Healthcare APIの[DICOM tutorials](https://cloud.google.com/healthcare/docs/tutorials/github?hl=ja)を試したので手順をまとめておきます。結構いったりきたりで漏れはあるかも。

DICOMチュートリアルは、いわゆる教師あり機械学習の学習から予測までの一連の作業をGoogle Cloud Platform上で行うものであり、Jupyterをベースとした[Cloud Datalab](https://cloud.google.com/datalab/?hl=ja)を用いて、

- [TCIA CBIS-DDSM](https://wiki.cancerimagingarchive.net/display/Public/CBIS-DDSM)からマンモグラフィー画像をDICOMデータとしてアップロードし、画像をMLモデルへ入力可能なJPEGへ変換する。([Preparing your images](https://cloud.google.com/vision/automl/docs/prepare))
- 出力（教師）データである乳腺濃度(breast density)を数値化した値もラベルとして取得し、画像URIとラベルを対とするCSVファイルを作成する。([Create a CSV file with image URIs and labels](https://cloud.google.com/vision/automl/docs/prepare))
- 入出力データをもとに学習をおこなう。
- 別途取得した検査データの予測をおこなう。

といった流れで作業を進めていきます。

学習フェーズには、
1. [Cloud AutoML](https://cloud.google.com/automl/) Visionを使ったお任せでいい塩梅にモデルをトレーニングする手順
2. [Cloud ML Engine](https://cloud.google.com/ml-engine/?hl=ja)(AI Platform)を使って細やかにトレーニングしていく手順
の２通りがあり、Notebookが別になっています。

説明はAutoMLを前提にしていますが、学習フェーズ以外の手順はほぼ同じです。

# 手順

## [TCIA REST API](https://wiki.cancerimagingarchive.net/display/Public/TCIA+Programmatic+Interface+%28REST+API%29+Usage+Guide)キー入手

TCIA CBIS-DDSMからデータセット取得のため、事前にAPI-KEYを取得しておきます。

文面は適当です。Request受付が即座に返され、半日後にはいただけました。人的作業もありそうなので、時間帯や平日・休日による前後はありそうです。gmailアカウントで自分が取得できたぐらいなので、おそらく誰でも入手できると思います。

## [Google Cloud Platform](https://cloud.google.com/?hl=ja)アカウント開設

ほぼ年中ですが、いまなら12ヶ月トライアル無料で\$300のクレジットがついてきます。~~その他、アナウンスされているか知りませんが、プロモーションでAutoML初回利用時にAutoML関連で使用できる約$900分のクレジットがついてきているようです。~~課金を有効にするため、少なくとも個人はクレジットカードを登録する必要があります。

>誤ってAutoML関連のクレジットが付けられていたようで、使う間も無く訂正されました。

ちなみに、チュートリアル実施にかかる費用は、トライアル期間ならほぼ\$0、そうでないならだいたい\$10前後かと思います。

## [Google Healthcare API](https://cloud.google.com/healthcare/docs/quickstart-gcloud?hl=ja)プロジェクト作成
Google Healthcare APIを有効にしたプロジェクトを作成または割り当てます。

途中gcloudコマンドを使用していますので、[Cloud SDK](https://cloud.google.com/sdk/docs/?hl=ja)もインストールしておきましょう。

## Datalabインスタンス作成

> Google Cloud Datalabは事実上Google Cloud AI Platform Notebooksにアップグレードされています。サイトの手順に従ってください。

GitHubチュートリアルの[ML Codelabs on Cloud Healthcare API](https://github.com/GoogleCloudPlatform/healthcare/tree/master/imaging/ml/ml_codelab)の手順に従い、Datalabインスタンスを作成します。

最初に、[Cloud Datalab API](https://cloud.google.com/datalab/docs/quickstart)を有効化しておくのを忘れないでください。

続いてサービスアカウントに権限を付与しておきます。

```
PROJECT_ID=<YOUR PROJECT_ID>

gcloud config set project ${PROJECT_ID}
PROJECT_NUMBER=`gcloud projects describe ${PROJECT_ID} | grep projectNumber | sed 's/[^0-9]//g'`
COMPUTE_ENGINE_SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member "serviceAccount:${COMPUTE_ENGINE_SERVICE_ACCOUNT}" --role roles/pubsub.admin
```

そうしましたらDatalabインスタンスを作成します。

```
ZONE="us-central1-c"

gcloud components install datalab
datalab create mydatalab --machine-type n1-standard-4 --zone ${ZONE}
```

初回インスタンス作成時は、そのまま作業用のローカルサーバーを立ててくれますが、次回からは自分で接続します。

```
datalab connect --zone us-central1-c --port 8081 mydatalab
```

サーバーが立ち上がってWEBページを開いたら、Notebookを追加して、このチュートリアルのリポジトリ自身をgit cloneでコンテンツに追加します。

```
!git clone https://github.com/GoogleCloudPlatform/healthcare.git
```

あとは、Notebookである
healthcare/imaging/ml_codelab/breast_density_auto_ml.ipynb
を開いて、説明を読みながらコードセルを上から順次実行していきます。

その際、

- @paramとコメントのある変数は適宜自分の環境に合わせて書き換えておきます。
- python3だと、ところどころつまづきます。

Googleのベータは、ベータであってベータでなかったりもしますが、チュートリアルは結構つまずきどころ満載でした。Forkして修正とコメントを入れておきましたので、手っ取り早く動かしたい場合は、[こちら](https://github.com/tatsu/healthcare.git)を使用するか、参考にしてください。

```
!git clone https://github.com/tatsu/healthcare.git -b try-tutorials
```

整理できたらプルリクしておきます。