はじめに
株式会社マイスター・ギルド新規事業部のウサギーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成を行っています。
今回は、face-api.jsの小ネタです。
顔モデルの読み込みが遅い…
face-api.jsを気に入ってよく使っています。
使って作ったサービス👇
なのですが、
よく指摘されるのが「表示されるまでが遅い」ということ‥
1度読み込みした端末ではそこそこ早いのですが、
「トラニナル」のようなAR年賀状サービスは何度も継続的に起動するものではないですし、
はじめて起動したその時使う用途がメイン。表示が早くなる工夫はしなくてはなりません。
以前の記事になりますが、
face-apis.jsの顔モデルには
SSD Mobilenet V1
画像内の各顔の位置を計算し、
各顔の確率とともにバウンディングボックスを返します。face-api.js内で一番標準的な(?)顔検出のモデルだと思われます。
よく見かけるコードではこちらが使われていることが多いので、
私も「トラニナル」では思考停止状態でこちらを使用しました。Tiny Face Detector
パフォーマンスの高いリアルタイムの顔検出器。
SSD Mobilenet V1顔検出器と比較して、高速・小型・リソース消費が少なく、
パフォーマンスはわずかに低下します。
モバイルデバイスやクライアントのリソースが限られているときはこちらを使用すべき。「トラニナル」は使用者から「重い」という声を聞きました。
というか、自分でもテストして「重いなぁ」と思ったんですが
その時点で12/27だったので諦めました。
そんな問題を解決してくれそうな話がさっそく書いてあります!
これは使ってみたい。MTCNN
MTCNN:マルチタスクカスケード畳み込みニューラルネットワーク。
(Google翻訳頼みですが合ってるのかな?)
一般に、他の顔検出器の方がパフォーマンスが優れている。実験のためにリポジトリに入っている顔検出器のようです。
試すのはもちろんOK。
この3種類があると。
速度はどのくらい違うのか?
ちょっと試してみようと思います。
結果
早速結果です。(小ネタなので)
全ての顔検出器+68点顔ランドマークの読み込みまでの時間を計測しています。
各検出器を読み込みなおす前にブラウザのキャッシュを削除しています。
正確なテストというより「体感どれくらいかな~」を知りたかったので厳密なテストではないことはご了承ください。
local・PCでテスト
SSD Mobilenet V1+ 68 Point Face Landmark Detection Models
9284.5 ms
Tiny Face Detector+ 68 Point Face Landmark Detection Models
3788 ms
MTCNN+ 68 Point Face Landmark Detection Models
11909.7 ms
テストサーバに置いてPCでテスト
(回線速度調べるの忘れた‥お許しください)
SSD Mobilenet V1+ 68 Point Face Landmark Detection Models
7661 ms
Tiny Face Detector+ 68 Point Face Landmark Detection Models
3530.09 ms
MTCNN+ 68 Point Face Landmark Detection Models
11917.19 ms
テストサーバに置いてスマホでテスト
4G回線 iPhone12mini
SSD Mobilenet V1+ 68 Point Face Landmark Detection Models
5279 ms
Tiny Face Detector+ 68 Point Face Landmark Detection Models
3751 ms
MTCNN+ 68 Point Face Landmark Detection Models
10354 ms
表にまとめてみました
環境\検出器 |
SSD Mobilenet V1(標準) |
Tiny Face Detector(パフォーマンス高) |
MTCNN(パフォーマンス低) |
---|---|---|---|
PC(ローカル) | 9284.5(ms) | 3788(ms) | 11909.7(ms) |
PC(Wi-Fi) | 7661(ms) | 3530.09(ms) | 11917.19(ms) |
スマホ(4G) | 5279(ms) | 3751(ms) | 10354(ms) |
おわりに
SSD Mobilenet ⇒ Tiny Face Detectorで思った以上に速度差が出たなと思いました。
体感としても「ちょっと早くなった!」と感じられるかな?
環境(ネット通信速度とデバイス)の影響が大きいと思うので
他にもいろいろ試せるといいのですが、ちょっと気になる~程度だったので、
今回はここまでで、小ネタとして記録してみました。