Serverless Inferenceを活用したAI Botの実装紹介
システム概要
これまで解説してきた、Amazon SageMaker Serverless InferenceとAWS Lambdaを利用して物体検知を行うAIシステムを実装しましたので中身を見ていきます。
題して「ナンバープレート加工Bot」。
具体的な構成としては、LINE Botをフロントエンドとし、LINE上で画像を送信すると、その画像内にある車のナンバープレートをAIが検出し、検出された部分を黒塗りにした画像をユーザーに返すというものです。
プライバシーの観点から、Botに送信している画像内のナンバープレートはぼかしていますが、実際にはぼかし処理は行わず、そのまま送信されます。
モデルの学習
先ほど述べたように、コスト削減のために学習はSageMakerではなくColabolatory上で行いますが、いくつかの注意点があります。Colabolatoryの無料枠では利用できるメモリ上限が12GBまでであることや、長時間実行しているとランタイム接続が切れて学習が途中で止まることがあるため、バッチサイズや入力画像サイズに制限がかかったり、エポック数を増やして一気に長時間学習させることが難しかったりする点には注意しておきましょう。
今回使用するモデルはYOLOv5で、これを学習させて車のナンバープレートを検出できるようにします。以下はそのリポジトリのリンクです。
まず、ナンバープレートの箇所をラベリングした教師データを以下のように用意しました。
これには画像の拡大縮小や水平移動などのオーグメンテーションも含め、合計648枚のデータがあります。これらのデータはGoogle Drive上に配置し、学習を行うためにGoogle Colabolatoryを活用しました。
!git clone https://github.com/ultralytics/yolov5 # clone %cd yolov5 %pip install -qr requirements.txt comet_ml # install import torch from google.colab import drive drive.mount('/content/drive') python train.py --data <教師データへのパス> --epochs <エポック数> --weights <転移学習元の重み> --batch-size <バッチサイズ>
学習プロセスはYOLOv5のリポジトリをクローンし、train.pyを実行することで行いました。バッチサイズは32に設定し、総計70エポックの学習を実施しました。その結果、以下の写真のようにナンバープレートを検知することができました。