🐶

【論文5分まとめ】PP-ShiTu: A Practical Lightweight Image Recognition System

3 min read

この記事は、論文の内容を5分くらいで読めるようにまとめた記事です。そのため、前提となる知識や関連研究に関する説明は大幅に省略しています。
基本的には筆者の備忘録ですが、面白そうと思ったら是非ご自身でも読んでみてください。

概要

タイトルからは少し分かりにくいが、画像分類、および検索の手法。クエリ画像から、類似しているまたは同じクラスの画像を出力する。3行目のキーボードは3つ目の結果が誤りだが、そもそもこのデータベースの中にはキーボード画像は2枚しかないので、間違いとは言えない。
本手法はPaddleClasとして公開されている。Intel®CoreTM i5-6300U上で0.44秒程度で実行できる軽量な手法である。

書誌情報

ポイント

クエリ画像のメインの部分を特定するためのMain Body Detection、そこから特徴量を抽出するFeature Extraction、特徴量を用いて検索を行うVector Searchの3部からなる。それぞれで軽量なモデルやPACT量子化、軽量な手法が使用されており、CPU環境でも十分実用的な高速処理を実現している。

Main Body Detection

画像検索を行うにあたり、背景がノイズになると良くないので、注目すべき前景領域を検出したい。そのため、画像中のメインの物体を検出する1クラス(=前景)検出器を構築している。アーキテクチャは、PP-PicoDetと呼ばれる、PaddleDetection上で実装されているモデルが使用されている。
PP-PicoDetは、PP-LCNetをバックボーンに持つ検出モデルで、CSP-NetとPAN FPNを組み合わせたCSP-PANが使用されている。
その他にも、SimOTAとG-Focal loss、Drop Block, Matrix NMS, IoU Lossといった細かいトリックも採用している。その他にも、例えば、FPNでは3x3ではなく5x5のカーネルサイズを用いることで精度を向上させるなど、細かい工夫をしているそうだ。

詳細はPaddleDetectionでの確認が必要。

Feature Extraction

注目すべき前傾領域が得られたら、そこから特徴量を得たい。本手法では、検出器と同様、PP-LCNetというネットワーク構造が使用されている。PP-LCNetは、mkldnnに最適化されたネットワークで、CPU上でも十分な実行速度を実現できる。以下がPP-LCNetの構造である。

PP-LCNetでは、以下のような工夫が施されている。詳細は元論文を読むべし。

  • ReLUではなくH-Swishが活性化関数として使用されている
  • SE(Squeeze and Excitation)モジュールはCPUでの推論が遅いので、ネットワークの最後らへんにのみ適用
  • ネットワークの最後らへんのConv層のカーネルサイズを3x3ではなく5x5にした
  • GAPレイヤーの後に大きい次元の1x1 conv層を導入

本研究では、メトリック学習と蒸留技術を用いて高精度かつ効率的に訓練を行っている。
メトリック学習の手法として、Additive Angular Margin Loss(ArcMargine Loss)を使用している。損失関数は以下の通り。

L=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s\left(\cos \left(\theta_{y_{i}}+m\right)\right)}}{e^{s\left(\cos \left(\theta_{y_{i}}+m\right)\right)}+\sum_{j=1, j \neq y_{i}}^{n} e^{s \cos \theta_{j}}} .

また、蒸留の手法として、Unified-Deep Mutual Learning(U-DML)という学習手法を提案している。一般に、蒸留は教師モデルと生徒モデルを用いて行うが、個別に初期化された生徒モデル同士で訓練できるDeep Mutual Learning(DML)という枠組みをベースとして採用しており、出力の確率分布のKL距離を損失とする。
ここに、バックボーンの出力する特徴マップも近づけるような損失(Feature Loss)を加えることを提案している。

メトリック学習、蒸留の損失は以下の図の位置で計算される。

Feature Extractionで得られた特徴量をDeepHashによってバイナリ化する。バイナリ化することによって、ハミング距離によって2つの特徴量を比較することができるようになる。
DeepHashにはいくつかの手法がある(DLBHC, LCDSH, DSHSD)が、実験による比較の結果、本手法ではDSHSDを採用している。
類似ベクトル検索には、Faissを使用。検索を実施するデバイスのメモリサイズによって適切なアルゴリズムが異なるので、いずれもFaissに実装されている、HNSW32, IVF, FLATから適宜選択することとした、としている。

その他

以上、本手法の3つのモジュールを見てたが、その他にも、Main Body DetectionとFeature Extractionに対しては、PACTによる量子化を施している。PACTによる量子化は、PP-Slimに搭載されているらしい。

実験結果

実験はAblation Study含めて色々やっているが、ここでは特に気になる実行速度について確認してみる。

比較対象は、検出と特徴抽出のバックボーンとしてResNet50を採用していた、かつてPaddleClsに実装されていたモデル(ServerModel)である。なお、本手法とServer Modelの精度は、共にF1-scoresが0.3306である。

Detectionの高速化が特に大きな影響を与えており、既存のモデルを大きく上回る速度を達成している。

Discussion

ログインするとコメントできます