2022年9月14日水曜日

AWS Rekognition (5) : カスタムラベルの利用

物体抽出したい画像が集まったら、オリジナルの学習モデルをカスタムラベルで作成します。

(1) Custom Labelsのプロジェクトを作成

Amazon RekognitionからCustom Labels -> Use Custom Labels -> Get Started -> S3バケットの作成をしていきます。このS3バケットに画像を入れて学習をしていきます。



ProjectsからCreate Projectをして作成していきます。
プロジェクト名を指定して、プロジェクトを作成します。

(2) 学習用データセットを作成
プロジェクトが作成されると下の図のように、順番に何をするかが示されます。最初はデータセットを作成していきます。

1のcreate datasetをクリックします。
いくつかの選択肢がありますが、今回は
Start with a single dataset」:学習データ、テストデータには自動で分割
Import images from S3 bucket」:S3にアップロードしたデータを利用
の2つを選んで実施します。

いったんここでS3に移動して、画像をアップロードします。
今回は imageフォルダの中の3つのフォルダに入っている画像30枚を利用します。Custom Labelで強制的に作られたS3バケットの中にimageフォルダをアップロードしておきます。
アップロードが終わると、下記の画面が見えます。

右上にある「Copy S3 URI」でリンクをコピーします。
コピーしたら、もう一度Custom Labelsに戻ります。
S3 URIをコピーし、「Automatically assign image-level labels to images based on the folder name」にチェックを入れます。これでフォルダ名がラベル名となります。

ここまでできたら、Create Datasetをクリックします。画像が取り込まれると、ラベルのついた画像があることがわかります。

注意:AWS Academyで上記を実行すると、Network エラーになるかもしれません。なった場合は、S3からの同期ではなく、自分のPCからアップロードを選択して、一つひとつやってみて下さい。

(3) 学習の実行
「3. Train model」でボタンを押し実行します。

trainが始まり、進行中だと表示されます。数時間、学習に時間がかかります。
表示が変わり、精度など確認できれば学習完了です。


(4) 学習モデルの利用
作成した学習モデルを使っていきます。学習済みのプロジェクトから上のメニューで「Use Model」を選択します。下の API Code でPythonを選択すると、pythonコードが出てきます。

ソースコードには、Start Model、Analyze Image、Stop Modelがあります。Start、Stopはプロジェクトのボタンでもできます。Startは時間がかかります。Stopはすぐにできます。利用しないときはStopしましょう。ここではAnalyze Imageを見ていきます。PythonコードをSageMakerで実行していくので、SageMakerを開きます。
!pip install boto3
でライブラリをインストールしておきます。モデルをStartした後、以下を実行します。AWS Academyの場合はセッション情報も必要です。

図のように検出ができればOKです。

色々書きましたが、AWS RekognitionにあるTutorialの動画4本がわかりやすいので、そちらを参照して下さい。

2022年9月9日金曜日

AWS Rekognition (4) : 教師画像の収集

 自分がターゲットにしたい対象物を認識させるためには、その対象物の教師画像を用意して学習させなければなりません。今回はFlickrという画像収集サイトのAPIを使って、まとめて画像を取得してきます。どのようなpython環境(Google Colab)でもできますが、ここではSageMakerで実施していきます。

(1) Flickr APIの用意

Flickrでは様々な画像を取得できますが、一度に取得するためには、APIを使った方が便利です。詳しいページもたくさんあるので、下記を参考にしてFlickr APIキーを取得して下さい。

https://worktoolsmith.com/flickr-api-key/


http://kwski.net/api/807/

(2) ライブラリのインストール

最初にFlickr APIを使うためのライブラリをインストールしておきます。Jupyterファイルを用意して、ファイル名を付けて保存しておきます。そのファイルに下記2つのコマンドを書き、インストールします。

!pip install flickrapi

!pip install retry

(3) プログラムの実行

最初に画像を格納するフォルダを作成します。今回は「image」とします。これをjupyterファイルと同じ階層に用意します。imageの中にキーワードをフォルダ名として作成し、そのキーワードフォルダの中に画像を10枚程度保存していきます。以下のプログラムを実行します。


プログラムをキーワードを富士山として実行すると、./image/富士山/ フォルダができ、その中に画像が格納されます。

他のキーワードでも検索を行うと、フォルダが作成され画像が格納されます。

このような形で教師画像を取得することができました。

(4) 取得画像のダウンロード

S3にプログラムで転送してもいいのですが、ちょっと面倒なのでここでは、手元にダウンロードしてから、改めてS3にアップロードします。jupyterファイルに次を追加します。jupyterファイルと同じディレクトリにあるimageフォルダの中身を全てzip化します。

!zip -r image.zip ./image/*

zipファイルが作成されますので、ダウンロードして中身を確認して下さい。

これでS3にアップする準備ができました。