まえがき
R&Dチームの宮﨑です。CenterFaceをTensorRTで実装したところ、かなりの性能が出たので記事にしました。
日々様々なDNNを実装・計測しているオプティムですが、その中でアンカーフリーの顔検出としてピックされたCenterFaceが期待できる結果が出たのでご紹介させていただきます。この取り組みは実際には去年の年末に行われたものであり、かなり遅れたご紹介にはなってしまっていることをご了承ください😢
背景・動機🤩
オプティムが提供する製品の一つにAI Cameraがあります。このAI Cameraの機能として顔検出が必要になるので、オプティムでは性能の良い顔検出器がないか日々目を光らせています。CenterFaceという近年注目されているアンカーフリーな手法で性能が期待できそうなものが出てきたのでさっそく実装・計測してみた次第です。
CenterFaceとは?🤔
公開された論文・コード
論文はこちらです。 論文にGitHubのリンクがあり、こちらにはncnnを用いたPython実装やOpenCVのDNNモジュールを用いたC++実装などがあります。去年の年末の段階ではTensorRTの実装はなかったので私が実装したわけですが、現在*1はTensorRTの実装もありますね。ONNXモデルも用意してくれていたりとプロダクションに取り組むオプティムにとっては親切なリポジトリとなっております🤣
特徴
軽量なモデルで顔のボックスとランドマーク*2の位置を高速かつ高精度に予測できます。 製品として実用段階を想定した時、必ずしもメモリや計算スペックの高い機器で推論させてもらえるとは限りません。従ってCenterFaceは汎用性の高い顔検出器と言えそうです。 またランドマークも同時に予測できることも実用性が高めることに一役買っています。 物体検出でよく用いられるアンカーボックス*3を使わない設計、すなわちアンカーフリー設計を導入することで、顔検出を標準的なキーポイント推定問題に変換し、従来の検出器に比べてより大きな出力分解能だけで済ませています。より具体的には、顔のバウンディングボックスの中心点を用いて顔を表現し、顔のボックスサイズとランドマークを中心位置の画像特徴量に直接回帰させます。
CenterFace実装の流れ💨
オプティムでは恒例のTensorRTで動くように実装します。 TensorRTとは?という方は以下の記事をご参照ください。
といってもONNXモデルは元リポジトリに用意されていましたし、前処理後処理もC++での実装があったのでやることは多くないです。
- ONNXモデルをパースしてTensorRTの推論ネットワークを構築する
- CUDA環境での実行となるので前処理後処理をCUDA実装に直しました
顔検出ベンチマーク比較🙈
各顔検出器のFPSです。環境は以下の通りです。条件は完全に統一できてませんがGPU が共通で同じコードベースなのである程度の参考にはなると思います。
DSFD/RetinaFace | CenterFace | |
---|---|---|
Linuxディストリビューション | Arch Linux x86_64 | Ubuntu x86_64 |
GPU | GeForce GTX 1080 Ti | GeForce GTX 1080 Ti |
CUDAバージョン | CUDA 10.2.89 | CUDA 10.0.130 |
cuDNNバージョン | cuDNN 7.6.5.32 | cuDNN 7.5.0.56 |
TensorRTバージョン | TensorRT 6.0.1 | TensorRT 5.0.2 |
最後に🤖
今回はCenterFaceについての簡単な説明とベンチマークの結果を紹介しました。アンカーフリーの将来性を少しでも感じ取っていただけたら幸いです。
オプティムはSOTA*8を製品に組み込めるエンジニアを募集しています。