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

[Nishika] Patent_tmsbir_1st Solution

Nishika-Inc
March 18, 2022
400

[Nishika] Patent_tmsbir_1st Solution

Nishika-Inc

March 18, 2022
Tweet

Transcript

  1. Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ©2022

    Yahoo Japan Corporation All rights reserved. 情報区分︓公開 Nishika AI×商標︓イメージサーチコンペティション ソリューション概要説明 tmsbirチーム (ヤフー株式会社) ⼟井 賢治、岩崎 雅⼆郎、⻄村 修平、他1名
  2. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 アジェンダ 1.

    メンバ紹介 2. ソリューション概要 3. その他 2
  3. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 今回4名のチームでコンペに参加しました。 ヤフーにおける画像検索等に関する業務を⾏っています。

    ⼟井 賢治: 類似画像検索、OCRの研究開発 岩崎 雅⼆郎: 類似画像検索、画像認識、ベクトル近傍検索(NGT)の研究開発 ⻄村 修平: 類似画像検索、特定物体認識の研究開発 他1名 1. メンバ紹介 3
  4. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 1. Preprocess

    (画像のグループ化) 2. Model (5modelx5foldの25モデル) 3. Loss 4. Batch Sampling 5. Validation 6. データ拡張 7. PCAによる特徴ベクトルの次元削減 8. NGTによる検索処理 9. 後処理 2. ソリューション概要 4
  5. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 まず、出願画像(train)および引⽤画像(cite)の全体に対し、画像のphash値を計算し、 似ている画像をグループ化します。

    さらに、trainの正解ラベルを元にtrain内、cite内のグループをマージし、このグループを学 習に利⽤するラベルとします。 (誤検出を減らすため、phashは通常の64bitではなく576bitの値を計算し、 ハミング距離が64未満になる画像をグループにします) ※ phash計算にはimgdupes(https://github.com/knjcode/imgdupes)を利⽤ 2.1. Preprocess (画像のグループ化) 5
  6. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 5つのモデルをDeep Metric

    Learningで学習し、アンサンブルしました。 timmを利⽤し、各モデルのpooling層とクラス分類層を外してbackboneとして利⽤しています。 モデル構造は下記の通り。 swin_large: backbone(1536次元) -> PReLU convnext_large: backbone -> GeM(p=3) -> FC(1024次元) -> LayerNorm -> PReLU eca_nfnet_l2: backbone -> GeM(p=3) -> FC(1024次元) -> BN -> PReLU resnet152d: backbone -> GeM(p=3) -> FC(1024次元) -> BN ->PReLU swin_base: backbone(1024次元) -> PReLU 2.2. Model (5modelx5foldの25モデル) 6 ※ SwinTransformerはbackboneの出⼒が1次元のためPooling層やFC層を追加せずPReLUのみとする
  7. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 各モデルの学習時のハイパーパラメータの設定は以下の通りです。 共通設定︓

    • horovodによる分散学習 (GPU数はモデルにより異なる) • 6000イテレーション学習 (100イテレーションを1epochとして60epoch) • LR調整: LinearWarmupCosineAnnealing (warmup=3, epoch=60) • Optimizer: FusedLAMB • CrossBatchMemory (2048) を利⽤ 2.2.1. モデル学習時のハイパーパラメータについて (1/2) 7
  8. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 モデル毎の設定値は以下の通りです。 2.2.1.

    モデル学習時のハイパーパラメータについて (2/2) 8 モデル batch size initial lr min lr weight decay 出⼒ 次元数 ⼊⼒画像 サイズ random seed GPU 種別 GPU 数 学習 時間(h) TXJO@MBSHF  F F F  Y  7   DPOWOFYU@MBSHF  F F F  Y  7   FDB@OGOFU@M  F F   Y  1   SFTOFUE  F F F  Y  7   TXJO@CBTF  F F F  Y  1   ※ resnet152d (batch_size=20, 12GPU)で6000iteration学習した場合にcite画像すべて(約70万枚)を学習に利⽤ 他のモデルはcite画像をすべて参照できていないため、学習iterationを増やすことでさらに精度が改善する可能性あり
  9. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 LossはすべてのモデルでMultiSimilarityLossを利⽤しています。 ContrastiveLossもパラメータを変えていくつか試しましたが、

    ⼀貫してMultiSimilarityLossのほうが良好な精度でした。 MultiSimilarityLossのパラメータは以下のとおりです。 alpha=2, beta=50, base=0.5 2.3. Loss 9 ※ ArcFace等のクラス分類ベースのLossは試していません
  10. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 データセットにおけるcite画像の割合が⾮常に多いため、ランダムサンプルで Deep

    Metric Learningすると、バッチ内のポジティブペアが極端に少なくなるため、 学習時のBatchの作り⽅を⼯夫しています。 事前に、データセット全体をtrain画像(trainとラベルが同じならcite画像もtrainに含める)と 残りのcite画像に分けておき、バッチ⽣成時には、バッチサイズにおけるtrain画像の割合および ラベル毎の画像枚数を指定可能なsamplerを実装しました。 いくつか設定を試したところ、train画像の割合をバッチサイズの50%とし、 train画像についてはラベル毎に2サンプル、 cite画像についてはラベル毎に1サンプルを 1つのバッチに⼊れる設定が良好な精度でした。 例えば、バッチサイズが64の場合には、 32枚のtrain画像(16ラベルでラベル毎に2枚の画像)と、 32枚のcite画像(32ラベルでラベル毎に1枚の画像)で構成されることになります。 2.4. Batch Sampling 10 計64枚 cite画像 32枚 (32ラベル) trainとcite画像のペア 32枚 (16ラベル) バッチのイメージ
  11. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 新たに⽣成したラベルをもとにGroupKFoldでデータ分割して5foldでモデルを学習します。 計6000iteration学習し、100iterationごとにcite画像から20%サンプリングした画像を

    indexとして類似画像を検索し、新たなラベルにおけるmAP@100を評価指標としてベスト モデルを選択します。 ※ mAP@100を評価指標とする理由としては、新たなラベルで正解データが1枚のみではな くなるため、正解データを上位に予測するほど評価が良くなる指標(mAPもその⼀つ)を採⽤ するほうが良いと考えたため。 2.5. Validation 11
  12. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 データ拡張の設定は以下のとおりです。 •

    train時 • 画像が正⽅形になるように⽩い余⽩をpadding • HorizontalFlip • ColorJitter • ShifScaleRotate • RandomResizedCrop • ImageCompression • Downscale • RandomGrayScale • ランダムに余⽩を除去した画像に⼊れ替え(50%) • test時 • 画像が正⽅形になるように⽩い余⽩をpadding (のみ) 2.6. データ拡張 12
  13. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 最終的に5foldx5モデルの計25モデルをアンサンブルする場合、特徴ベクトルをconcatすると 28160次元となり、コンペ実⾏環境のメモリに収まらない問題が発⽣するため、PCAによる

    特徴ベクトルの次元削減を⾏いました。 各モデルの特徴ベクトルをnormalize&concatし再度normalizeして28160次元になった特徴ベクトルを PCAで4096次元まで削減し、さらにNormalizeしたものを最終的な特徴ベクトルとし、この特徴ベクト ルのコサイン類似度を商標画像の類似度として類似商標の検索を⾏います。 28160次元のまま検索した場合と、PCAで4096次元まで削減後に検索した場合を⽐較しましたが、 PCAのほうが少しだけスコアが良い結果(計算過程における誤差等で偶然正解が増えた?)となり、 スコアへの影響は無さそうでした。 2.7. PCAによる特徴ベクトルの次元削減 13
  14. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 特徴ベクトルのコサイン類似度計算はGPU上であれば⾼速に処理可能ですが、 計25個のモデルをGPUに読み込んだ状態でTesla

    T4の16GBメモリのうち14GBを消費します。 検索対象のcite画像約70万枚分の特徴ベクトル(4096次元、float32の場合)は約12GBで、 GPUメモリ上に25個のモデルと⼀緒には載せられません。 残りの約2GBのGPUメモリを利⽤し、特徴ベクトルを分割しGPU上で検索することは可能ですが、 逐次GPUに転送するoverheadで規定の処理時間内に検索できませんでした。そのため、事前に NGTのindex(ONNG)を作成し、CPU上で検索処理を⾏う構成としました。 コンペのルールで定められている、8コア、32GBメモリ、Tesla T4環境で処理時間を計測した結果、 画像⼀枚あたりのトータルの処理時間は平均で2.13secでした。 2.8. NGTによる検索処理 14
  15. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 trainデータをクエリとして検索した結果を観察すると、正解のciteラベル以上に⾒た⽬が類 似している画像が多数あり、結果的に正解ラベルが上位20件から漏れてしまっていることが

    多くあり、また、モデルをアンサンブルすることで、結果的に不正解となる場合が多くなる 傾向が⾒られました。 そのため、クエリ画像に類似しているtrain画像のciteラベルを予測に追加する後処理を実施 しています。 具体的には、クエリ画像とのコサイン類似度が0.5以上のtrain画像のciteラベルを最⼤10件 まで予測に含めています。 postprocessのみで、最終スコアが 0.679636 から 0.734111 へ約5pt程度改善します。 2.9. 後処理 15 ※ 後処理を実施しないほうが、⾒た⽬には⾃然な検索結果になります。
  16. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 BatchNormalizationを利⽤しない場合の結果 BatchNormalizationを利⽤していないモデルのみのスコアも確認しています。

    モデルは資料で紹介した5モデルからeca_nfnet_l2とresnet152dを除き、 別途学習したconvnext_baseを追加した、4モデルのアンサンブルとしました。 5モデルとあわせて以下のスコアとなりました。 3. その他 (1/3) 16 model 暫定スコア 最終スコア 5model 0.735408 0.734111 4model nobn 0.717250 0.710765
  17. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 後処理の効き具合 後処理としてtest画像に似ているtrain画像を検索し、

    その正解画像も予測に含める処理を⾏っていますが、 どの程度似ているtrain画像を対象にするかで⼤きく スコアが変動します。 trainの検索結果を定性的にみると、正解データよりも 似ていると思わる引⽤画像が多数あり、これらの画像が 検索結果を占め、結果的に正解データの順位を下げて いると思わます。 右表が閾値毎のスコアをまとめたものです。 (最終モデルとは異なる組わせの5モデルアンサンブルの結果です) 3. その他 (2/3) 17 閾値 (コサイン類似度) 暫定 スコア 最終 スコア 0.90 0.702983 0.708171 0.85 0705577 0.712062 0.80 0.709468 0.715953 0.75 0.722438 0.721141 0.70 0.727626 0.725032 0.65 0.731517 0.732814 0.60 0.734111 0.738002 0.55 0.739299 0.734111 0.50 0.744487 0.732814 0.45 0.738002 0.726329
  18. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 シングルモデルの精度 モデルアンサンブルせず、swin_largeのみでsubmitした場合のスコアも確認しています。

    後処理の閾値が違うため直接⽐較はできませんが、ベストスコアに対して9割以上のスコア を出すことができます。 3. その他 (3/3) 18 model 暫定スコア 最終スコア 後処理の閾値 5model 0.735408 0.734111 0.50 4model nobn 0.717250 0.710765 0.50 single model (swin_large) 0.658884 0.680933 0.95
  19. ©2022 Yahoo Japan Corporation All rights reserved. 情報区分︓公開 timm: https://github.com/rwightman/pytorch-image-models

    Swin-Transformer: https://github.com/microsoft/Swin-Transformer ConvNeXt: https://github.com/facebookresearch/ConvNeXt Multi-Similarity Loss: https://arxiv.org/abs/1904.06627 References 19