今回取り組んだプロジェクトは、
・CloudFrontで作ったフロント側から画像をPOST→lambda関数→sagemaker→推論→長さ測定→結果を表示する流れのMLops構築
の2つをメインにやったので、その概要まとめた。
目次
・長さ計測ロジック
・sagemaker MLopsの構築
・学んだ技術&メモ、まとめ
・sagemaker segmentation ガイド
長さ計測ロジック
sagemakerの組み込みアルゴリズムでセグメンテーションしたあと、物体の各A~E点を求め、「横と高さ」の「縦の長さ」を求めるロジックを実装した。機械学習モデルはセグメンテーションを使い、長さを測るのはロジックはpythonで実装。
ロジック構築には物体のA〜E点の各点を求めて計算式から長さを求めた。
下のように各点をどのように求めるか、点を引いたり線を引いたり、試行錯誤。
求めた各点から下の計算式とかで横の長さを求めた。
AB : [real AB](横の長さ) = CD : [real CD]
AE : [real AE](縦の長さ) = AB : [real AB]
そのあとAEからN(定数:あらかじめ決まった値)を引いて縦の長さを求めた
sagemaker MLopsの構築
前の記事でも書いたように、
CloudFrontからデータをPOST→lambda→sagemakerで推論→長さを受け取るMLopsを構築した。
MLops全体像
MLops全体の流れ
以下はMLops構築で重要だった部分。
CloudFrontのデータを送るWebUI部分
CloudFrontのWebUIはJavaScriptで実装。その時データはajaxでPOSTした。Fetch APIでもOK。
CloudFront側から送るjavascriptのajaxの部分。送るデータは画像なので、バイナリ形式の画像でPOST。
// ajaxの部分 $.ajax({ type:'POST', // 使用するHTTPメソッド (GET/ POST) url:APIurl, // 通信先のAURL data:JSON.stringify(jsons), // 送信するデータ contentType: "application/json"})
cssにはpx以外にもブラウザに合わせて長さを%で変更できるhw, vwという長さの単位があったり、画像を表示する「canvasタグ」を複数使い分けるのには、結構発想が必要だったりデザイン面でも苦労が多かった。
handler.py内部の動作
lambda内での動作はいちいちエラーをCloudwatchにみにいくのは、タイムロスがデカ過ぎるので、
sagemakerのjupyter notebookで動作確認してから、試行錯誤したりとなるべく効率化。
lambdaやAPI gateway構築は、ネット上に転がってるサイト通りには行かない場面も多く、エラー解決に手間取った
lambdaに外部モジュールを読み込ませるとき
handler.pyで使うライブラリをlambdaに読み込ませる必要がある。
s3やコンソールから読み込ませると面倒なので、requirement.txtを作りデプロイ時(sls deploy)時に同時にパケージをupload
参考サイト
・Serverless Frameworkのプラグインを利用した外部モジュールの管理
(サイト内のimport requirementは必要なかった)
lambda内でファイルを置ける/tmpファルダの活用
handler.pyないの内部処理で「~.jpg」が必要だったので、その時に「/tmp/~.jpg」と実装すれば、lambda内の/tmpファルダを利用できる
参考サイト
・AWS Lambda Python でtmpディレクトリにファイル作成してS3にアップロード
権限とかはエラーが出るたび付与して解決。
これで sagemakerを入れたMLopsが完成した。
serverless frameworkとかクラウドを使った、実用レベルのMLops構築ははじめてでかなり学ぶことが多かった。
このMLops作成に過程は前の2記事にまとめた。
・AWSでCloudFrontからlambdaとsagemakerを通り、推論結果を受け取るMLopsの構築【機械学習】 - アプリとサービスのすすめ
・CloudFrontからS3にuploadしたコンテンツ(サイト)にアクセスする手順まとめ【AWS】 - アプリとサービスのすすめ
学んだ技術&メモ、まとめ
システム全体像やコードの流れの理解
大規模なプログラムを構築するときは、全体像を把握しておくことはかなり便利だった。
システム全体像把握ツール
特にdraw.ioやフローチャート、シーケンス図で、システム全体の流れ、構成図そして全体像を把握しておくことで、細部までコードの動きをイメージできるので、コードが素早く書ける。
gitでのコード管理
gitを使ったコード管理も本格的にやった。とくにGit submoduleとか、いろんなgitコマンドでコード管理した。
今後学ぶべきことメモ
・基本情報技術者試験の基礎内容の勉強
・フローチャート、シーケンス図を使っての効率化
・もっと汎用的な他人のコードを学んで、積極的に使うこと
今回はモデル構築から、それを使うMLops構築まで全体を通してやったプロジェクトでかなり大変だったけどリターンのスキルはデカく、かなり勉強になった。
sagemaker segmentation ガイド
・Amazon SageMaker 開発者ガイド組み込みセマンティックセグメンテーションアルゴリズムルール
p410
train ディレクトリと validation ディレクトリ内のすべての JPG イメージには、train_annotation ディ レクトリと validation_annotation ディレクトリ内に同じ名前の対応する PNG ラベルイメージがあ ります。この命名規則は、トレーニング中にアルゴリズムがラベルをそれに対応するイメージに関連付け るのに役立ちます。