概要
弊社では、製造現場で使用される画像を対象とした画像処理プログラムの構築や、深層学習モデルの構築を行っています。SageMakerを使用すると、TensorFlowやPyTorchなどのフレームワークを使ったことがない方でも、手軽に深層学習モデルの構築ができ、そのモデルを利用することができます。この記事では、SageMakerを使用したモデル構築の方法や特徴について、実際の動作を確かめながら解説します。
SageMakerとは
AWSが提供している、機械学習を効率的に進めるためのフルマネージドサービスです。深層学習モデルの構築、トレーニング、デプロイ等機械学習に関する様々な機能が備わっており、用途に応じて幅広く活用することが可能です。
- Amazon SageMaker Canvas
ノーコードでモデルを作成し、予測を得られるサービスです。深層学習に関する知識のない状態からでもデータセットからモデルを作成し、推論を行うことができます。
- Amazon SageMaker Studio
SageMaker Canvasよりもさらに柔軟な機能を持つ機械学習サービスです。Jupyter notebook等を用いてソースコードを記述しながら機械学習を行います。SageMaker JumpStartという機能を用いることでTensorFlowやPytorchを用いたサンプルノートブックや、トレーニング済みのモデルを利用することができます。今回はこちらのサービスを利用して画像分類の深層学習を行います。
データセットの準備
今回利用したデータセットは、六角ボルト、ナットなどの工業用部品の画像データです。各種200枚ずつ画像データを用意し、Amazon S3上に以下のように保存しました。
input_directory
|--manufacture
|--HexBolt
|--hexbolt_1.jpg
|--hexbolt_2.jpg
…
|--Nut
|--nut_1.jpg
|--nut_2.jpg
…
…
モデル構築
SageMakerのHome画面から"JumpStart"を選択します。
検索窓に「MobileNet」と入力すると検索結果が表示されるので、「MobileNet V3 Large 1.00 224」を選択します。
Train ModelセクションのTraining data set欄にS3に保存したデータセットのパスを入力します。
「Browse」から探索することが可能です。
パスの入力後、「Train」を選択すると、学習が開始されます。
今回は8分程度待つと、モデルが作成されたというメッセージが表示されました。
エンドポイントのデプロイ
この状態で「Deploy Model」セクションの「Deploy」を選択すると、エンドポイントの作成が開始されます。
約6分後、エンドポイントの状態が「In Service」となりました。これで画像分類を行うことができるようになります。
エンドポイントの利用(推論)
「Use Endpoint from Studio」セクションの「Open Notebook」を選択すると、ノートブックが作成され、新規タブが開きます。
開いた新規タブの上で右クリックし、「Show in File Browser」を選択します。
ノートブックが保存されているフォルダのファイルブラウザが表示されるので、ここに画像をドラッグアンドドロップすることで分類を行うことができます。
今回は「hex.jpg」(六角ボルトの画像)及び「nut.jpg」(ナットの画像)の2枚を使用します。一つ目のセルの内容を書き換えます。デフォルトではcat.jpg,dog.jpgについての推論を行うための内容が書かれているため、「cat」を「hex」に、「dog」を「nut」に書き換えます。
download_from_s3メソッドは今回は使用しないため、コメントアウトします。この状態でセルを実行すると分類したい2つの画像が表示されます。
二つ目のセルについても同様に、「cat」を「hex」に、「dog」を「nut」に書き換えます。
二つ目、三つ目のセルを実行すると、画像の分類が行われ、画像とともに結果が表示されます。
エンドポイントの削除
デプロイしたモデルは、左のツールバーの「SageMaker JumpStart」下の「Launched JumpStart assets」から確認できます。
「Delete」を押すことでエンドポイントを削除することができます。
おわりに
弊社ではこれまでAWS上で深層学習の処理を行う場合は、p系やg系のGPUインスタンスを立ち上げ行うことが多く、特にクラウドアプリケーションからの連携の場合はAWS Batchから学習ジョブを制御したりなど、メンテナンスの上でも大きな負担となっていました。
SageMaker Studioを使うことにより、アプリケーション化した際のエンドポイント構築の負荷を下げることができるとともに、ある程度のレベルのソフトウェアエンジニアであれば公開済みのテンプレートを使用することによって、手軽に深層学習処理ができるようになりますので、検討初期のリサーチでも手軽に利用できそうです。
もちろん深層学習の原理やTensorFlowなどのフレームワークを知らないソフトウェアエンジニアであれば、SageMakerやいい選択肢になるかと思いますが、飛躍的に使いやすくコストもお安くなってきた今であれば、専門のAIエンジニアでも工数削減のメリットは大きそうです。
SageMaker Studioではより細かい制御が必要な場合には、学習処理のハイパーパラメータチューニングや、前処理後処理のカスタマイズも可能なので、使い方によっては独自の技術開発にも力を発揮できます。
一方で、データセットの構造化ではやはり手作業でPythonコーディングを行う部分は残りますし、データ増幅ではデータの特性依存のノウハウや、ソースコード共有のノウハウは課題が残っているので、まだまだ使いこなしが必要と思いました。引き続き使い込んでいきたいと思います。