bbonghag / LG_instance_segmentation_contest

입자 검출 정보 기반으로 입자들의 형태 변화를 계량적 지표로 산출 가능한 모델 개발

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LG_instance_segmentation_contest ✨

입자 검출 정보 기반으로 입자들의 형태 변화를 계량적 지표로 산출 가능한 모델 개발


Introduction

  • 주최 : LG 화학
  • 주관 : 인공지능팩토리 (AIFactory)
  • 대회 기간: 7/7 (목) 8:00 ~ 8/8 (월) 18:00
  • link: https://aifactory.space/competition/detail/2067
  • 주제: 유체상에 떠다니는 입자를 촬영한 화상을 바탕으로 각 입자와 그 형상을 최대한 잘 검출해내는 Instance Segmentation 모델을 만드는 것이 이번 대회 목표.
  • 참고) 입자들의 형상은 균일하지 않고 유체상에서 촬영된 결과물인 만큼 표면으로부터의 거리에 따라 선명도 또한 차이가 있으며, 서로 겹쳐져 있는 경우도 존재.


Dataset

  • train dataset: 520장
  • test dataset: 350장
  • coco dataset 형식의 annotation file(입자 labeling 형식에 따라 label_train.json, label(polygon)train.json)
  • 객체 category: 1개 (Normal)
  • image height, width = 1024, 1280

Workflow

1주차(7/13 ~ 7/17)


Model Backbone Score
Mask RCNN(base-line) resnet50 0.5761174985

2주차(7/18 ~ 7/24)

  • segmentation model list up
    → Mask R-CNN, Cascade Mask R-CNN, Mask Scoring R-CNN, Hybrid Task Cascade, YOLACT, SOLO, PointRend, DetectoRS, SOLOv2, SCNet, QueryInst
  • 조원들에게 model 분배 후 제출
    → ✔️ Model을 분배했던 이유: MMDetection엔 많은 Instance Segmentation model이 존재하는데 각 model을 공부한 다음 data와 맞다고 생각되는 model을 정하기엔 시간이 촉박하여 조원들에게 model 분배 후 performance를 보고 model을 선정하기로 함.
  • 점수가 높은 model 선정
    → SCNet, Mask Scoring R-CNN, Cascade Mask R-CNN, Mask R-CNN
    (0.57 이상의 점수가 나오는 model로 선정)

selected model score
SCNet_r50_fpn_1x_coco 0.5861291233
Cascade Mask R-CNN_r101_fpn_1x_coco 0.596460128
Mask Scoring R-CNN_r50_fpn_1x_coco 0.5752475505
Mask R-CNN_r101_fpn_1x_coco 0.5800140828


model epoch IoU threshold score
cascade_mask_rcnn_x101_32x4d_fpn_1x_coco 12e 0.3~0.6 0.6065363398
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py 12e 0.3~0.6 0.6079679485

3주차(7/25 ~ 7/31)

  • data 전처리 list up 후 분배, performance 확인 및 선정
    • Offline augmentation
      • flip, shear, rotate, rotation, bbox flip, bbox rotate, bbox rotation
      • offline augmentation시 performance는 더 떨어져서 사용하지 않았다. (cf. rotate vs rotation: rotate는 전체 이미지를 돌리는 것, rotation은 이미지 사이즈는 고정하되 이미지 자체가 회전되고 남는 부분은 padding 시킴.)
    • Online augmentation
      • shear, rotate, resize, flip, equalize, brightness, contrast, minIoUrandomcrop, Albumentation

model online aug score
cascade_mask_rcnn_x101_32x4d_fpn_1x_coco equalize, brightness, contrast 0.6044010023
cascade_mask_rcnn_x101_32x4d_fpn_1x_coco resize (1024, 1280) 0.6084128911
cascade_mask_rcnn_x101_32x4d_fpn_1x_coco minIoUrandomcrop 0.6023441395
cascade_mask_rcnn_x101_32x4d_fpn_1x_coco all augmentation 0.5452023496

기존의 모델과 비교했을때 performance가 증가하는 건 이미지 원본사이즈로 resize시키는 online augmentation 뿐이었다. (cf. about offline vs online augmentation: https://yoda-it-study.tistory.com/34 )

✔️model selection 후 data 전처리 순으로 workflow를 잡은 이유:
augmentation시 data의 복잡도가 증가하는데 model마다 복잡도도 다양하기 때문에
먼저 model을 고정시키고 augmentation을 다양하게 적용시켜 성능향상을 보는것이 좋을거라 판단해 model을 먼저 선택하였다.

  • Backbone 분배 후 성능 확인 및 선정
    • 최종 backbone: ResNeXt(default), ResNet strikes back
    • 가장 상위의 performance를 내는 2개의 backbone 선택

model online aug backbone score
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) ResNeXt(default) 0.6079679485
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back 0.6045638857

✔️data 전처리 후 backbone selection 순으로 workflow를 잡은 이유:
data augmentation에 따라 data의 complexity에 변화가 생기는데 backbone은 data로 부터 feature map을 뽑아주는 과정이기 때문에 augmentation을 정한 후 그에 맞는 backbone을 선택하는게 좋을거라 판단해 augmentation후 backbone selection을 하였다.

4주차(8/1 ~ 8/8)

  • Optimizer 분배 후 선정
    • SGD(default)에서 adadelta로 변경 후 0.61점대를 넘길 수 있었다.
    • adadelta를 최종 optimizer로 선정

model online aug backbone optimizer score
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) ResNeXt(default) adadelta 0.6104731677
cascade_mask_rcnn_x101_32x4d_fpn_1x_coco.py resize(1024, 1280) ResNeXt(default) adadelta 0.6110075826
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.6110104141

  • 2주차에서 선택했던 model들에도 동일한 조건으로 둬 performance 확인

model online aug backbone optimizer score
ms_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) ResNeXt(default) adadelta 0.613928616
ms_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.6134804408

cascade mask R-CNN외에도 Mask scoring R-CNN도 높은 성능을 보여주었다.

Discussion

  • Cascade mask R-CNN, Mask scoring R-CNN의 performance가 더 좋았던 이유?
  • 성능을 높이도록 hyperparameter 조정
    • IoU threshold 0.2~0.6으로 바꿔주면서 성능이 더 향상되는 것을 확인
    • 왜 performance가 더 향상이 되었을 이유?

model online aug backbone optimizer IoU threshold score
ms_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.3~0.6 0.6134804408
ms_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 0.6171016691

  • backbone을 ResNet strikes back을 사용함에 따른 performance 향상 이유?
  • Adadelta를 사용함에 따른 performance 향상 이유?
  • Overfitting?
    • epoch 수가 적어짐에 따라 성능이 향상되는 것을 확인

model online aug backbone optimizer IoU threshold epoch score
ms_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 14e 0.6171016691
ms_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 10e 0.6179983076
model online aug backbone optimizer IoU threshold epoch score
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 15e 0.616678574
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 12e 0.6174024875
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 10e 0.6209292892
cascade_mask_rcnn_x101_64x4d_fpn_1x_coco.py resize(1024, 1280) resnet strikes back adadelta 0.2~0.6 9e 0.623549387

* offline aug의 performance가 구렸던 이유?

About

입자 검출 정보 기반으로 입자들의 형태 변화를 계량적 지표로 산출 가능한 모델 개발


Languages

Language:Jupyter Notebook 98.4%Language:Python 1.6%