本記事は2019/10/10にABEJAさんの「機械学習モデルの負荷がやばすぎて、100倍高速にしつつ精度も上げた話」に参加したときのメモです。
機械学習を実業務に適用する際に現場で起こった障害・知見について聞ける貴重な機会でした。
うろ覚えの箇所がちょくちょくありますが、間違っていたらコメントにて教えてください!
発表スライド
slido.com
#abejaai_20191010
ABEJAのプロダクト:ABEJA Insight for Retail
Insight for Retailまわりのお話がメインでした。
機械学習の技術をビジネスへ適用する際に、以下が難しかったとのこと。
- 現実世界のデータ取得
- 研究で使うデータセットのように、綺麗なデータを入手できない。
- 例えば、店の天井にカメラを設置すると大抵斜め上からの顔画像しか取得できない。
- 不安定なIoTデバイス、モデルのハンドリング
- 業務適用には、システムの安定稼働が必要。
Retail Face Analysis Inside-Out
店に来た人について、以下の流れで年齢性別推定、リピーター分析を行うシステム。
1. Detection, Tracking
顔を検出し、同一人物を集約する。
Detectionはすべてのフレームにやる必要あるので、コンパクトさが求められる。
非生体の顔を除きたい。
2. Filtering
学習には顔画像の品質が大事なため、良い画像データを抽出したい。
カメラは天井についているので、例えば来店した人物がうつむいていると良い画像は得られない。また、逆光になると画像品質は落ちる。
品質を評価するために、Error Regression Networks(ERNs)を考案した。
ERNs
ある分布のへりにいる画像ほど品質悪い、と判定する。
- 異なる人物からの大量の顔画像が必要。
- 大きなモデルのほうが精度よいが、当然取り回しが悪いのでバランスが重要。
- 精度のよいデータセットを作るのが困難。
NNはEfficientNetを使う。Googleの出した、ハイパラが少ないモデル。
最初は小さい解像度、チャンネル、層の数の組み合わせで学習を初めて徐々にでスケールさせることで精度が上がった。
→小さい解像度だと、精度が出なかったが解像度を上げるにつれてResNet50以上の精度が出たとのこと。
分布はvon-Mises Fisher分布を使う。muの最尤推定が簡単なため。
分布の中心を算出する方法には、Sphere Embeddingを使った。
顔画像、人物ラベルを球面へ埋め込む。
コサイン内積をとるときに、正解ラベルのみウェイトが高い。
ArcFaceはこれを使っている。ただし、学習はDGX-1 GPU。
AdaCos: ArcFaceのハイパラ自動チューニングを使う。
その他
- 他のモデルも色々試したが、再現できないものが多かったらしい。
(中国系の論文は再現性低いものがよくある・・・) - 多クラス分類は、10万人程度のデータがないと論文クラス(State of the arts)の精度は出ない。
年齢推定
小売はプラスマイナス5才くらいで当てられないと厳しい。
- 実敵年齢、見た目年齢
- 見た目年齢のアノテーションは困難
- 実敵年齢付きデータの取得は困難
- 顔だけから推定する難しさ
- 研究として最近流行っていない
- Public Datasetは外国人が多い。
- カメラの位置によって、見え方が全然違うので学習が難しい
知見
20代半ばを境に、実年齢-見た目何例の入れ替わりが起こる。人間の認知バイアスによる。
Aggregating Multiple Predictions
集約。難しいらしい。
綺麗な顔と汚い顔の識別、という言い方は笑った
研究成果のプロダクション適用
Retail Task Force
各タスクはDAGとして実装。
マイクロサービスは負荷に合わせたオートスケールが可能。
MLにおけるAWSを用いたマイクロサービスアーキテクチャ
障害
(うろ覚えですみません)
2019年のGWに障害発生。Insight for Retailを導入したある小売店で、想定以上の来客数があったため来客画像の特徴量検索がスケール限界を迎えた。
リソースは基本的に無限にオートスケールするよう構築しているが、高負荷に耐えられるよう特徴量検索システムの作りを変える必要がある。
対応
ロジックとデータを分離することで、特徴量検索の処理速度改善を行った。
- データロード時間
- ロジック改修の影響減
データが増え続けると、特徴検索時間は増える。選択肢は2つ。
- 厳密探索にすると、9.8倍高速化可能。→採用
- 近似最近傍探索にすると、200倍高速化可能。ただし、updateが多いと、トータルで4倍にまで落ちるため不採用となった。
担当の方は一人で障害対応したとのこと。つらそう。。
自社プロダクトだから許されるのだろうか笑
小売業界の話など
小売業界の顧客はシステムにかけられるコストが(他業界と比べ)少ないので、システムの売価を下げることも必要。
今後の課題は原価削減になる。
ABEJAの顧客は全体の20%が全カメラの8割を契約しているらしい。
こうした「大口」顧客のために、ABEJAは個別のキューを用意している。
研究と開発のコミュニケーションはどうやっている?
適度な距離を保つ。
- 週イチ程度の打ち合わせ
- 開発後半で実装する機能を決める
レポジトリを分ける
- 研究・開発で大量のブランチ運用があったが、思い切ってリポジトリを分けてうまくいっている。
QA
- API、モデルは自作している。値段が高い、できないため。
- 業務の中で、論文調査に割く時間 人によって違う
- DAGのレイテンシーは翌日までに提供できればよい。
- データ取得環境の影響: 施工、
- ABEJAの人数構成はResearcher1, Engineer2とか
本日の格言
「モデルより施工が大事」
良いモデルは良いデータの上にのみ成り立つようだ。