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

【Nishika】プリント基板の電子部品検出

 【Nishika】プリント基板の電子部品検出

【Nishika】プリント基板の電子部品検出 コンペの参加録です。
https://competition.nishika.com/competitions/kiban/summary

Masafumi Abeta

June 13, 2023
Tweet

More Decks by Masafumi Abeta

Other Decks in Programming

Transcript

  1. © 2023 Masafumi Abeta 6 データセット • プリント基板の画像 • 解像度

    ⼀辺約1,000px~約8,000px • 学習⽤:122枚(ユニーク:43枚) • テスト⽤:28枚 • アノテーション • クラス数1 • インスタンス数 1~1,029 • インスタンスサイズ⼀辺 約5px 〜約4,000px • 学習⽤:18,853インスタンス • データの特徴 • インスタンス数が多い • インスタンスサイズのギャップが⼤きい • 数pxの⾮常に⼩さいインスタンスが含まれる University of Florida, “FICS PCB IMAGE COLLECTION (FPIC)” https://www.trust-hub.org/#/data/pcb-images
  2. © 2023 Masafumi Abeta 7 評価指標 • 評価指標 AP@IoU[.5: .95]

    • 制約 マスクのIntersectionは許されない • データ分割 Public : Private=1:1
  3. © 2023 Masafumi Abeta 9 ソリューション概要 • ソリューション概要 • 学習時に画像をCrop

    • Mask-RCNN + SAHI • ⽅針 • ⼩さいインスタンスが多いので、⼩さいインスタンスが⼤きく写った画像をモデルに⼊⼒したい • コンペに費やせる時間が少ないので積極的に既存のライブラリを活⽤し、シングルモデルで作りたい
  4. © 2023 Masafumi Abeta 10 前処理 • 事前に短辺を2000にリサイズ • オンザフライAugmentationは基本的に480〜800でランダムクロップ

    • ⼤きいインスタンスを検出するために⼀定の確率でリサイズを採⽤(後に述べるFull Inferenceのため)
  5. © 2023 Masafumi Abeta 11 モデル • Mask R-CNN(torchvision.models.detection.maskrcnn_resnet50_fpnのpretrained) •

    モデル⼊⼒時の幅と⾼さは640x640 • バッチサイズは8、学習率は0.01、Weight Decayは0.0005、300 epoch学習 https://arxiv.org/pdf/1703.06870.pdf
  6. © 2023 Masafumi Abeta 12 SAHI: Slicing Aided Hyper Inference

    • SAHIは画像をスライディングウィンドウで分割して推論、結合する⼿法 • MMDetection, Detectron2, Torchvision, HuggingFace対応 • ドローン画像や⾶⾏物体の検出コンペ等で使⽤されている https://arxiv.org/pdf/2202.06934.pdf
  7. © 2023 Masafumi Abeta 14 SAHIの結合処理 • SAHIの結合処理はNMS/NMM(Non-maximum Merge)が使⽤可能で、 基準はIoU/

    IoS(Intersection over Smaller area)を使⽤できる • 結合後処理はNMMでIoU=0.1を使⽤した • 結局、Full InferenceはFalseとした IoU= IoS=
  8. © 2023 Masafumi Abeta 15 キーポイント • ⼤きい部品のBBoxに⼩さい部品が含まれるケー スがあるので、NMMでIoUを選択 •

    SAHIで予測後、 SAHIの画像分割が原因で同⼀ 物体を検出するマスクが存在するため、 Mask IoSでNMSを実⾏
  9. © 2023 Masafumi Abeta 18 その他注意点 • torchvision.models.detection.maskrcnn_resnet50_fpnの予測マスクは[N, 1, H,

    W]。 SAHIは[N, H, W]を期待しているため、そのままだと動かない。 • Mask-RCNNはBboxはあるが、Maskがない(all 0の)予測があり、ハングする。 • SAHIインスタンスがパッチに対して予測したマスク画像をすべて保持するため、メモリを⼤量に消費する。
  10. © 2023 Masafumi Abeta 20 上位解法からの反省 • インスタンスサイズでモデルを分ける • Backboneに

    Swin Transformerを使⽤する • ブラー、HSVのAugmentationを使⽤する • Private約0.57程度までは⾼解像度2000~5000の学習、推論でも到達可能 • おまけの反省点 • AlbumentationsのCrop系がmaskに対して適切に機能せず改造が必要 • ログ⽤の画像はJPEGにする(ディスクを圧迫するため)