SageMakerについて
機械学習のモデリングや、デプロイしてAWS上のアプリケーションで使うこともできるSageMaker(セージメーカー)。
いくつかビルトインでアルゴリズムが使用可能で、ハイパーパラメータの調整だけでもお手軽に試すことができるシロモノです。
#sage makerってつまり賢いやーつを生成するやーつってコトですね
SageMakerでセマンティックセグメンテーションを試してみる
今回はセマンティックセグメンテーション(semantic segmentation)を試してみます。画像のピクセル(画素)ごとにラベルづけをします。
下記のように、左が入力画像(学習データ)で、右がマスク画像(教師データ)となります。
入出力の画像を使って、物体切り抜きなんかできると面白いなあ!と思ったのでやってみます。
学習データの準備
こちらのサイトからデータを拝借。
学習データをS3に保存
解凍されたVOC2012フォルダのうち、「train」と「train_annotation」フォルダをS3に保存します。
aws cli使えば楽ちんです。--recursiveでフォルダごとコピーします。
下記は「your-bucket-name」というバケットの中の、「segmentation」というサブフォルダに保存する場合です。
aws s3 cp ~/train s3://your-bucket-name/segmentation --recursive
aws s3 cp ~/train_annotation s3://your-bucket-name/segmentation --recursive
SageMakerを立ち上げる
ノートブックインスタンス名を書いて(sagemaker-semanticsegmentationとか)、残りはデフォルトのままでインスタンス作成します。
notebookでコーディング
基本的にはこちらのサイトを参考にしています。英語なので自分なりに日本語でまとめてみます。
config
sagemakerをimportしてconfig設定します。
ここで[3]の部分で、semantic-segmentationと書いています。このほかビルトインの画像処理DLアルゴは、ResNetを用いた画像認識(image-classification)や、SSDベースの物体検出(object-detection)があるようです。
計算リソースとパラメータセッティング
さて、次は訓練に用いる計算リソースやハイパーパラメータをセッティングします。
[6] ml.p3.2xlargeというGPUの高速リソースを選びます。詳細はAWS公式ドキュメントに記載があります。これでGPU使えるのは良いですね。しっかりお金はかかります(東京リージョンで5.242USD/h)。
[7] ハイパーパラメータのセットです。semantic-segmentationモデルを行うにあたり、学習済みモデル(backbone)を何にするか、アルゴ(algorithm)を何にするかを指定できます。エポックや学習率、optimizerなどのおなじみのパラメータもここで指定することができます。
データ置き場を設定して、学習&デプロイ!
[8] データ置き場を設定します。
sagemaker.inputs.TrainingInputにS3のパスを設定します。
data_channelsは↑に記述している4つのキー(と対応するS3パス)が必須です。
このへんの詳細もAWS公式ドキュメントに記載があります。
[9] モデル学習!2時間ぐらいかかりました。1000円以上しました。メシ抜きです。
[11]学習したモデルを使って予測/推論できるようにするために、Sagemakerのエンドポイントにデプロイします!これでLambdaから呼び出したりできるってことですね。デプロイに使うインスタンスは学習時と同じである必要はなくて、推論の時はもっとローコストなインスタンスでも良いです。ということでここではml.m4.xlargeを選びました。
これでモデルの作成ができました!推論はせっかくなのでLambda上でやってみようと思います。
エンドポイントお片付け
デプロイされたエンドポイントはInServiceのあいだ課金され続けます。なので終わったらお片付けが必要です。
これはGUIで簡単にできます。
上記の画面で、「アクション▼」→「削除」で削除することができます。
「え、せっかくモデル作ったのに!!」という場合も、後から簡単にエンドポイント作成できます。
その場合は、「エンドポイント」→「エンドポイントの作成」で楽ちんです。
まとめ
今回はSagemakerを用いてセマンティックセグメンテーションのモデル学習を試してみました。
画像だけでなくseq2seqなどの自然言語処理のビルトインモデルもあったり、マーケットプレイスでモデル購入したりして簡単にモデル学習/使用を試すことができます。
AWS上のいろんなサービスと連携できるので、ひとまずLambdaで呼び出して試してみようと思います。