[Amazon SageMaker JumpStart] ResNet50でファインチューニングしてみました

[Amazon SageMaker JumpStart] ResNet50でファインチューニングしてみました

Clock Icon2020.12.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

CX事業本部の平内(SIN)です。

AWS re:Invent 2020で発表されたAmazon SageMaker JumpStart(以下、JumpStart)は、TensorFlow HubPyTorch Hub に公開されているモデルをGUIから簡単にデプロイして利用できてしまう凄い機能です。

ここDeveiopers.IOでも既に、データアナリティクス事業本部の貞松さんによって、ResNet18で画像分類をやってみたブログが公開されています。

そして、JumpStartでは、既存のモデルをデプロイするだけでなく、自前で用意したデータでファインチューニングもできてしまうとの事です。

という事で、私も試してみました。

Vision関連のモデルを眺めてみると、まだ、Object Detectionで、ファインチューニングに対応しているものが見つからなかったので、Image Classification(ResNet 50)を使用しました。

2 データセット

データは、以前、回転台に乗せて撮影した動画から切り出した、お菓子の画像を使用しました。

商品は、5種類で、各クラス200枚となっています。

画像は、クラスごとのフォルダに入っています。

そして、そのままの形でS3にアップロードしました。

3 Fine-tune Model

ResNet 50を開いて、下の方にあるFine-tune Modelを設定します。

Data Sourceは、先程、画像を置いたS3のバケットを指定し、その他は、全部デフォルトのままとしました。

開始すると、学習が始まります。データセットの形式の調整なども、全部自動でやってくれてるって事です。

しばらく待って、学習が終了すると、Statusは、Complateとなり、下に、Deployのメニューが表示されます。

4 Deploy

Deployをクリックすると、推論用のDockerへのデプロイが開始されます。Dockerイメージ選択、入力形式の指定など全く必要なく、全部自動です。

5 推論

デプロイが完了すると、エンドポイントのステータスは、In Serviceとなり、今度は、Open Notebookが選択可能になります。

Note Bookは、ResNet 50の確認ができるようになっています

このままでは、犬と猫の写真で確認することになってしまうので、検出したいお菓子の画像をいくつかアップロードし、推論にかけるデータを変更しました。また、ラベルの一覧(ProductLabels.txt)も書き換えています。

images = {}
with open("IMG_0114.jpg", 'rb') as file: images["IMG_0114.jpg"] = file.read()
with open("IMG_0115.jpg", 'rb') as file: images["IMG_0115.jpg"] = file.read()
with open("IMG_0117.jpg", 'rb') as file: images["IMG_0117.jpg"] = file.read()
with open("IMG_0119.jpg", 'rb') as file: images["IMG_0119.jpg"] = file.read()
with open("IMG_0120.jpg", 'rb') as file: images["IMG_0120.jpg"] = file.read()
with open("IMG_0122.jpg", 'rb') as file: images["IMG_0122.jpg"] = file.read()
with open("IMG_0123.jpg", 'rb') as file: images["IMG_0123.jpg"] = file.read()
with open("IMG_0124.jpg", 'rb') as file: images["IMG_0124.jpg"] = file.read()
with open("IMG_0125.jpg", 'rb') as file: images["IMG_0125.jpg"] = file.read()
with open("ProductLabels.txt", 'r') as file: class_id_to_label = file.read().splitlines()

ProductLabels.txt

ASPARA
CRATZ
NOIR
OREO
PRETZEL

6 結果

推論結果です。結構、いい感じだと思います。

7 最後に

今は、まだ限定的かも知れませんが、今後、対応するモデルがどんどん増えて、データを用意するだけでできるファインチューニングも各種対応していくことが予想されます。

JumpStar、ホント、恐ろしいツールです。

※モデルのエンドポイントの削除を忘れないように!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.