Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nishika AI×商標:イメージサーチコンペティション 2nd place solution

anyai
March 18, 2022
880

Nishika AI×商標:イメージサーチコンペティション 2nd place solution

Nishikaで開催された「AI×商標:イメージサーチコンペティション」https://www.nishika.com/competitions/22/summary の2nd place solutionです。

anyai

March 18, 2022
Tweet

Transcript

  1. / 14 2 目次 • 自己紹介 • コンペ概要 • 解法紹介

    • Appendix ※解法紹介中に登場する画像は実際の商標画像ではなく、 フリー素材を使用しています
  2. / 14 3 自己紹介 ・名前:穴井 晃太 ・所属:トヨタテクニカルディベロップメント(株) ・ :あにゃい (@rikunchu_28)

    ・一児のパパ ・参加理由:データ面白そう & 弊社の特許チームへ取組み還元
  3. / 14 4 コンペ概要 Task apply images cite images Query画像に類似した画像をDatabaseから20件抽出(Image

    Retrievalタスク) 約80万件 Data train.csv 約4000件 test.csv 類似判定の種類 2:酷似 3:部分一致 4:色彩相違 5:向きの相違 商標画像データセット 類似判定アノテーション情報 2311件 検索対象 1542件 apply id cite id category apply id cite_v2.csv cite image 情報 約80万件 cite id Evaluation Recall@20 ⇒ ・各Queryの予測20件に正解が含まれていれば 1 / 含まれていなければ 0 ・上記を全Queryで平均した数値 (Query) (Database)
  4. / 14 5 Result 0 0.1 0.2 0.3 0.4 0.5

    0.6 0.7 0.8 1 11 21 31 41 51 61 71 12月24日 初投稿 1月31日 コンペ終了 anyai’s PublicLB Score コンペ概要
  5. / 14 6 解法紹介 Preprocess ・画像の余白除去 チュートリアルを参考に、 OpenCVで実施。二値化処理の閾値を調整 (学習・推論時は周囲をpaddingして使用) ・Trainデータのグループ化

    cite idが重複しているapply idを同一グループ化 (Metric Learning時のPositive/Negativeサンプリングノイズ低減) apply id cite id category Group A B - 1 C D - 2 E B - 1 元画像 余白除去
  6. / 14 7 解法紹介 apply images Weak Augmentation Strong Augmentation

    ContrastiveLoss with CrossBatchMemory (1024) 512 embedding Image Encoder cite images train data Weak Aug apply images Strong Aug apply images Weak Aug cite images Strong Aug cite images or Training Swin Transformer (swin_large_patch4_ window12_384) ConvNext (convnext_base_ 22k_384) BatchNorm Normalize FC Normalize FC 1536 1024
  7. / 14 8 解法紹介 apply images Weak Augmentation Strong Augmentation

    ContrastiveLoss with CrossBatchMemory (1024) 512 embedding Image Encoder cite images train data Weak Aug apply images Strong Aug apply images Weak Aug cite images Strong Aug cite images or Training Swin Transformer (swin_large_patch4_ window12_384) ConvNext (convnext_base_ 22k_384) BatchNorm Normalize FC Normalize FC 1536 1024 Weak Augmenation ・RGB Shft ・Gray化 ・Horizontal Flip ・Random Resized Crop(0.7~) Strong Augmenation ・RGB Shft ・Gray化 ・Horizontal Flip ・Gaussian Blur ・Zoom Out(0.6~) ・Random Resized Crop(0.4~) or ・疑似ロゴ作成(Auglyを応用) 補足:Vertical Flip使用すると精度悪化 元画像 処理後
  8. / 14 9 解法紹介 apply images Weak Augmentation Strong Augmentation

    ContrastiveLoss with CrossBatchMemory (1024) 512 embedding Image Encoder cite images train data Weak Aug apply images Strong Aug apply images Weak Aug cite images Strong Aug cite images or Training Swin Transformer (swin_large_patch4_ window12_384) ConvNext (convnext_base_ 22k_384) BatchNorm Normalize FC Normalize FC 1536 1024 ContrastiveLoss: https://kevinmusgrave.github.io/pytorch-metric-learning/losses/#contrastiveloss CrossBatchMemory:https://kevinmusgrave.github.io/pytorch-metric-learning/losses/#crossbatchmemory ・Positive間はユークリッド距離 0 ・Negative間はユークリッド距離 1 に近づくよう学習 embedding結果を数batch分保持しておき、 pairwise lossの比較対象(Negativeサンプル)を増やす → batchサイズ小さくても学習安定 CrossBatchMemory ContrastiveLoss
  9. / 14 10 解法紹介 images Transform RAPIDS Nearest Neighbors Metric

    : Euclidean 512 embedding Swin Transformer (swin_large_patch4_ window12_384) ConvNext (convnext_base_ 22k_384) BatchNorm Normalize FC Normalize FC 1536 1024 Image Encoder 512 1024 concat Post Process Predict
  10. / 14 11 解法紹介 images Transform RAPIDS Nearest Neighbors Metric

    : Euclidean 512 embedding Swin Transformer (swin_large_patch4_ window12_384) ConvNext (convnext_base_ 22k_384) BatchNorm Normalize FC Normalize FC 1536 1024 Image Encoder 512 1024 concat Post Process Predict Trainデータで誤判定となるデータを確認した結果、 queryに対し 正解データより類似したciteが多数存在する 傾向が見られた queryの近傍探索のみではスコア改善が困難であり、 人間のアノテーション活用が重要と判断 ・通常の近傍探索を上位15件 採用 ・queryに似ているtrain apply画像を検索し、citeラベルを予測に追加 (+0.05~0.07 改善) ・ベクトルをAugmentation (query – apply + cite)して再検索し、 結果を予測に追加 (+0.002~0.006 改善) Post Process 検索結果 query label (誤判定イメージ)
  11. / 14 12 Appendix ・アノテーションされていないciteデータの活用 - 強めのAugmentationで類似画像作成 - 学習済みモデルでEmbedding作成し、類似データをグループ化(Pseudo Label)

    ・GeM Pooling なぜか使用すると学習がうまくいかず(おそらくP値をTrainableにしたため。今後は定数も試行する) ・OCRを使用した文字マスキング マスキング有無でロゴに着目した学習ができると期待したが、精度向上せず ・Google Landmarkコンペの優勝解法にあった DOLG ・Swin Transformer の学習率 Kaggleでは1e-5~1e-6が散見されるが 1e-4で大きめに設定すると学習良好 ・CrossBatchMemory 256, 512, 1024, 2048で試して1024が良好。大きいほうが良いが、trainデータ数とのバランスも大事 Training Tips Not Work
  12. / 14 13 Appendix Loss Function 類似度が ・max(Negative)+ε > Positive

    ・min (Positive) -ε < Negative を重みづけしてLoss計算 Late Subをした結果、 1位チーム解法の通り ContrastiveLoss よりも MultiSimilarityLoss が良好。 ・ContrastiveLoss :全サンプルで一様に作用 ・MultiSimilarityLoss:Hardサンプルを重視 ⇒ 類似データの多い本コンペに適していたと想定 MultiSimilarityLoss:https://kevinmusgrave.github.io/pytorch-metric-learning/losses/#multisimilarityloss MultiSimilarityLoss
  13. / 14 14 Appendix References Code DeNA Engineering『Facebook AI主催の画像のコピー検知のコンペで入賞した際の取り組み』 https://engineering.dena.com/blog/2021/12/fb-isc-1st/

    ⇒Trainingの流れやAugly応用など、めちゃくちゃ参考になりました https://github.com/anyai-28/nishika_jpo_2nd_solution