はじめての転移学習ハンズオン

2021-05-07
How to be a Developer

亀田 治伸

こんにちは、エバンジェリスト 亀田です。

Amazon SageMaker は AWS が開発しサービスとして提供している機械学習のマネージドサービスになります。機械学習には、データの前処理、開発や学習基盤の準備、生成された推論環境をホスティングする基盤や API 構築等多くの付随作業が発生し、データサイエンティスト等機械学習エンジニアの時間を消費します。

SageMaker をご利用いただくことで、これらの作業の多くが自動化され、より本質的なデータやモデルチューニングなどの作業に集中することができます。

Jump Start は 2020 年 12 月に、SageMaker の新しい機能としてリリースされました。機械学習のモデルを生成するためには、それなりの量のデータが必要となりますが、モデルが存在しない場合、ユーザーから効率的にデータを集めることができず、ある種のデッドロックが発生するケースがあります。Jump Start では 15 以上の利用シーンに対して、150 を超えるあらかじめ学習済のモデルを OSS ベースでご提供します。開発者は、データを準備することなくモデルを起動することができます。そして蓄積されたデータをもとに転移学習を行い、独自にカスタマイズされたモデルを少ないデータ量で実現させることが可能となります。

このワークショップでは、転移学習で花の画像を識別し花の名前を出力するモデルを生成します。

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

builders.flash メールメンバーへの登録・特典の入手はこちら »

*ハンズオン記事およびソースコードにおける免責事項 »

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. Amazon SageMaker JumpStartの起動

SageMaker のマネージメントコンソールにアクセスし、左のペインから SageMaker Studio を選択します。

実行ロール から 新しいロールの作成 を選びます。

クリックすると拡大します

全てデフォルトのまま ロールの作成 を押します。

クリックすると拡大します

IAM ロールが正しく作成されたことを確認します。その後 送信 を押します。

クリックすると拡大します

こちらのようなダイアログが出ますので、VPC を選びます。(VPC が 1 個の場合、ダイアログが出ない場合がありますが、その際はそのまま進みます)

クリックすると拡大します

ドロップダウンから Subnet を指定します。

起動が開始しますので、しばらく待ちます。

クリックすると拡大します

構築が完了したら Studio を開く を押します。

起動に少し時間がかかりますので、数分間まちます。

クリックすると拡大します

Jupyter Lab が起動したら、左のペインから JumpStart のボタンを押します。

クリックすると拡大します

Browse JumpStart のボタンを押します。
右側の画面にすぐ利用できるソリューションやモデル群がそろっています。

クリックすると拡大します


2. 画像解析モデル (Vision models) の起動

[ResNet 18] をクリックします。

クリックすると拡大します

デフォルトのまま Deploy ボタンを押します。

クリックすると拡大します

学習済モデルの起動中となります。

エラーが出る場合、AWS アカウントの開設直後など、起動しようとしているインスタンス ml.m5.large の利用が許可されていないことが考えられます。AWS サポートへ上限緩和申請を行う必要があります。

クリックすると拡大します

起動が完了すると In Service と表示されます。

クリックすると拡大します

Open Notebook を押して推論環境へアクセスを行うテスト環境を起動します。

クリックすると拡大します

ソースコード部分を選び、1個づつ上の▶ボタンを押して実行します。(必ず前の部分の実行が終わってから次を実行します)

クリックすると拡大します

犬と猫が正しく推論できていることがわかります。

クリックすると拡大します

適当な鳥の画像をダウンロードします。その画像を左のペインからアップロードしてください。bird.jpg としてください。

クリックすると拡大します

Open the downloaded images and load in memory. You can upload any image from your local computer in the directory and open them here. の部分を以下に書き換え実行します。

images = {}
with open("bird.jpg", 'rb') as file: images["bird.jpg"] = file.read()
with open("ImageNetLabels.txt", 'r') as file: class_id_to_label = file.read().splitlines()

こちらのように正しく推論が実行されます。

クリックすると拡大します

ImageNetLabels.txt を開き、鳥の推論時に出てきた文字列を検索し適当に書き換えて、Open the downloaded... の下の部分から再度実行します。パラメータが書き換わったことが確認できます。

クリックすると拡大します

今度は再度 JumpStart のトップ画面から ResNet 50 の起動画面にいきます。
先ほど起動した Deploy Mode の下に Fine-tune Model のボタンがあります。こちらで、転移学習を行い追加の判断を行う画像を学習させることができます。

https://filesharingharunobukameda.s3-ap-northeast-1.amazonaws.com/flower_photos.zip から
ダウンロードした flower_photos をフォルダ毎 S3 バケットにアップロードします。

今までの作業の中で S3 バケットができていますので、sagemaker-studio-xxxxxxx となっているバケットを選んでフォルダをアップロードしてください。flower_photos の下に書く花の名前のフォルダがあり、その中に複数の jpg ファイルが含まれています。

アップロード前のフォルダ指定画面
クリックすると拡大します

flower_photos のフォルダをクリックして、S3 URI のコピー を押してください。

クリックすると拡大します

以下のようにコピーした URI を入力します。一番最後の「/」は削除してください。Train ボタンを押すと学習が開始します。

クリックすると拡大します

学習が完了すると Deploy ボタンが出てきますので、それをクリックします。

クリックすると拡大します

Endpoint の作成が完了すると Open Notebook のボタンが表示されますのでそちらをクリックします。

Notebook が起動したら先ほどと同じように順番にクリックして犬と猫が推論されることを確認します。

クリックすると拡大します

推論写真フォルダの jpg ファイルを 1 枚づつアップロードします。

クリックすると拡大します

Open the downloaded images... の下のプログラムを以下に書き換えます。

images = {}
with open("kameda.jpg", 'rb') as file: images["kameda.jpg"] = file.read()
with open("daisy.jpg", 'rb') as file: images["daisy.jpg"] = file.read()
with open("dandelion.jpg", 'rb') as file: images["dandelion.jpg"] = file.read()
with open("roses.jpg", 'rb') as file: images["roses.jpg"] = file.read()
with open("cat.jpg", 'rb') as file: images["cat.jpg"] = file.read()
with open("sunflowers.jpg", 'rb') as file: images["sunflowers.jpg"] = file.read()
with open("tulips.jpg", 'rb') as file: images["tulips.jpg"] = file.read()
with open("ImageNetLabels.txt", 'r') as file: class_id_to_label = file.read().splitlines()

推論を実行して結果を見ます。

この状態ではラベル用テキストが正しく設定されていないため、花の違いを正しく区別しているものの、表示が正しくされていません。label.txt をアップロードし上記プログラムの ImageNetLabels.txt を書き換えます。再度推論を実行すると花の違いやラベル出力が異なることがわかります。


3. 自然言語解析モデルの起動

BERT Base Multilingual Cased を選びます。

クリックすると拡大します

先ほどと同じ手順でモデルを起動し、notebook を開きます。その際 Endpoint Name を適当な短い名前に変更します。(testyyyymmdd 等) BERTは一般的にモデルが巨大であるため、先ほどよりは時間がかかります。

起動したら、上から 1 個づつ実行し、QA が動作することを確認します。

2 つ目のスクリプトの sentence_pair1 の 2 つの文字列を関連する日本語文字列に置き換えます。以下はその一例です。

sentence_pair1 = ["日本の首都は?", "日本には多くの街がありますが、首都は東京です"]

サイド上から順番に実行し、2 つの文に相関があると推論される場合、entailment、相関が無いと推論される場合 no-entailment と出力されます。


4. リソースの削除

以下を必ず削除してください。

  • EFS
  • S3 バケット (sagemakerから始まるもの)
  • SageMaker 推論エンドポイント
  • SageMaker Studio のアプリ
  • SageMaker Studio のユーザー
  • SageMaker Studio

おわりに

みなさん、いかがでしたでしょうか。
このハンズオンで転移学習を体験していただけたらうれしいです。
Jump Start は他にも多くのモデルが提供されていますので、いろいろ試してみてください。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

プロフィール

亀田 治伸
アマゾン ウェブ サービス ジャパン合同会社 エバンジェリスト

兵庫県伊丹市出身。米国州立南イリノイ大学卒業。
認証系独立 ASP 、動画・音楽配信システム構築、決済代行事業者を経て現職。ユーザー視点に立ったわかりやすい AWS のサービス解説を心掛ける。
AWS のどんなサービスでも 1 分づつ資料なしで説明することができる、という特技を持つ自称【AWSマニア】

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する