メインコンテンツまでスキップ

結果と考察

前回の実験を総合すると、良好な結果を得たモデルが構築できました。このモデルは、私たちのテストセットで 90% 以上の精度を達成し、実際のアプリケーションでも良好なパフォーマンスを示しました。

ここでは、訓練過程で得られた洞察と経験についていくつか述べます。


  1. どの Margin loss を使用するかは、CosFace や ArcFace を検討するかもしれません。しかし、どちらを使うにしても、必ず PartialFC を併用してください。訓練速度が大幅に向上し、収束結果が安定し、性能が向上します。

  2. テキスト画像の種類については、初めに約 500 種類を使用し、その後 800 種類、10,000 種類に増やし、最終的に indoor データセットを基盤にし、全体の分類種類を約 40 万種類に増やしました。ここでの結論は、人顔認識タスクと同じです:モデルの性能は訓練データの多様性に大きく依存するため、大量のデータセットを使用して、モデルが十分な特徴を学習し、異なるカテゴリを効果的に区別できるようにする必要があります。

  3. 実験の結果、低精度訓練を採用することでモデルの汎化能力が向上することがわかりました。これは、モデルが過剰適合しやすいため、低精度訓練がこの問題を緩和するのに役立つと考えています。trainer に直接低精度訓練を設定することはできません。理由は、いくつかの演算子が CUDA ではこの設定をサポートしていないためです。したがって、torch.set_float32_matmul_precision('medium') メソッドを使用して低精度訓練を実現しました。

  4. 実験の結果、テキスト画像分類タスクでは、LayerNorm を使用する方が BatchNorm よりも効果的であることがわかりました。これは、テキスト画像(例えば、街路標識や文書画像など)が通常、高度な変異を伴う特徴(異なるフォント、サイズ、背景ノイズなど)を持っているためです。LayerNorm は各サンプルを独立して標準化することで、これらの変異に対処するのを助けます。一方、人顔認識では、BatchNorm を使用することで、非常に類似した顔画像から微細な差異を識別できるようになり、照明、角度、表情の変化など、さまざまな条件下で顔の特徴を効果的に識別できます。

  5. CosFace と ArcFace を単独で使用した際、ArcFace の方が効果が良いことがわかりましたが、PartialFC を組み合わせた後は状況が一変し、CosFace の方が効果的であることがわかりました。

  6. Pretrain は必須です。Pretrain を使わない場合、非常に悪い結果が得られました。その原因は、提供したデータセットの多様性が不十分であるため、Pretrain を使用してモデルがより多くの特徴を学習できるようにする必要があると考えています。再度、timm が提供したモデルには感謝しています。これらのモデルは、私たちの時間と労力を大幅に節約してくれました。

  7. Backbone と Head の接続部分では、nn.Flatten を使ってすべての情報を取得し、nn.Linear を使って特徴符号化層に統合する方法が最も効果的でした。しかし、欠点は大量のパラメータを占有することです —— 軽量モデルの場合、1MB のモデルサイズを増やすだけでも非常に大きな問題です。そこで、2 つのアプローチを試しました:1 つは、nn.GlobalAvgPool2d を使用してすべての情報を取得し、nn.Linear を使って特徴符号化層に統合する方法;もう 1 つは、nn.Conv2d を使ってチャネル数を元の 1/4 に減らす(これを Squeeze と呼びます)方法で、その後 nn.Flattennn.Linear を使って特徴符号化層に統合する方法です。実験の結果、Squeeze の戦略が効果的であることがわかりました。この戦略は、モデルのサイズを効果的に減らしながら、パフォーマンスを維持することができます。

  8. CLIP の特徴を導入することは非常に良い戦略です。この戦略は、モデルの性能を向上させるだけでなく、汎化能力も向上させます。この戦略の核心は、CLIP モデルを使って私たちのモデルに知識蒸留を行い、CLIP モデルの特徴を私たちのモデルに組み込むことです。この戦略は非常に効果的で、CLIP モデルは豊富な知識を持っており、私たちのモデルがより堅牢な特徴表現を学習するのを助けると考えています。

  9. LayerNorm の後に BatchNorm を追加することが、私たちのモデルが 90% の精度に到達するための鍵となりました。LayerNorm と BatchNorm の特性が補完的であるためだと考えています。LayerNorm はモデルがより安定した特徴を学習するのを助け、BatchNorm はモデルがサンプル間の特徴表現を学習するのを助けます。