日々精進

新しく学んだことを書き留めていきます

良いモデルの探し方

物体検出など特定のタスクを実行するモデルの探し方。

普通は「精度」「速度・メモリ使用量」がトレードオフになっているのでそのバランスが要件に近いものを探す。

基本方針は「自分で網羅的にモデルを探すのは難しいので、網羅的に調べている人の調査結果を探す」が良いと思う。

手順は以下。

遅くてもいいから精度最良のモデルが欲しい場合:

速いモデルが欲しい場合:

  • 自分が探しているタスクに関する論文のまとめを探す(顔認証系だとhttps://github.com/ChanChiChoi/awesome-Face_Recognition#face-alignment とか)
  • そのページをfast, lightweight, mobileなどのキーワードで検索する
  • 引っかかった論文の中で最新の論文を引用している論文を見る
  • 速さをウリにしているモデルは大抵速度比較表があるので、それを探し、その中で速度と精度のバランスが一番要件に近いものを使う

速いモデルが欲しい場合はちょっと面倒。。

TensorFlowが使うCPUコアの数を制限する

ユーザのPC上で推論する場合、CPUを使いすぎるとPC全体が重くなって ユーザビリティが下がるので、CPU使用率を制限したい。

CPU使用率の上限を指定することはできないが、TensorFlowが使う CPUコア数は指定出来るのでこれでPC全体が重くなることは避けられるかも?

参考:

stackoverflow.com

CPU版のTensorRTはOpenVINO

TensorRTを使って推論を高速化しようとしたところ、CPUでは使えないという情報が。。

forums.developer.nvidia.com

www.reddit.com

NVIDIAが作ってるからそりゃそうか。。

類似ソリューションを探したところ、OpenVINOというものをINTELが作っているらしい。

www.intel.co.jp

以下によると、CaffeのFP32のモデルと比較してINT8に量子化+OpenVINOで動かしたモデルは10~20倍速いらしい。ほんとかな。。

https://indico.cern.ch/event/813377/contributions/3525103/attachments/1913596/3162816/11.15-11.30_Iosif_Meyerov.pdf

軽い顔検出・顔認証モデルならMobileFaceNetとUltraLightFastGenericFaceDetectorがよさそう

顔検出をUltraLightFastGenericFaceDetectorでやり、顔認証をMobileFaceNetでやるという流れ。

公式実装は以下にある。

github.com

github.com

これらを使って顔検出・顔認証をした実装が以下にあるのでこれをパクればお手軽に顔検出・顔認証ができる。便利。

github.com

上記実装はTowards Data Scienceの記事が元になっている。やっぱTowards Data Scienceいいな。。これを見るためにMediumの有料会員になったようなもの。

Real time face recognition with CPU | by Yirui Feng | Towards Data Science