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

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 を選択します。

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

img_hajimete-sagemaker_02

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

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

img_hajimete-sagemaker_03

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

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

img_hajimete-sagemaker_04

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

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

img_hajimete-sagemaker_05

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

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

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

img_hajimete-sagemaker_06

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

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

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

img_hajimete-sagemaker_07

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

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

img_hajimete-sagemaker_08

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

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

img_hajimete-sagemaker_09

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


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

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

img_hajimete-sagemaker_10

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

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

img_hajimete-sagemaker_11

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

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

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

img_hajimete-sagemaker_12

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

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

img_hajimete-sagemaker_13

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

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

img_hajimete-sagemaker_14

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

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

img_hajimete-sagemaker_15

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

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

img_hajimete-sagemaker_16

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

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

img_hajimete-sagemaker_17

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

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()

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

img_hajimete-sagemaker_18

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

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

img_hajimete-sagemaker_19

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

今度は再度 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 ファイルが含まれています。

img_hajimete-sagemaker_20

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

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

img_hajimete-sagemaker_21

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

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

img_hajimete-sagemaker_22

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

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

img_hajimete-sagemaker_23

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

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

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

img_hajimete-sagemaker_24

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

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

img_hajimete-sagemaker_25

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

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 を選びます。

img_hajimete-sagemaker_26

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

先ほどと同じ手順でモデルを起動し、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 のベストプラクティスを毎月無料でお試しいただけます

プロフィール

photo_kameda_harunobu_2

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

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

AWS のベストプラクティスを毎月無料でお試しいただけます

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
絞り込みを解除 ≫
フィルタ
フィルタ
1

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

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