Title | Task | Date | Team |
---|---|---|---|
์ฌํ์ฉ ์ฐ๋ ๊ธฐ ์ด๋ฏธ์ง ๊ฐ์ฒด ์์ญ ๊ตฌ๋ถ & ๊ฐ์ฒด ํ์ง | Semantic Segmentation & Object Detection | 2021.04.26 ~ 2021.05.21 | 5์กฐ ConnectNet |
P stage 3 ๋ํ ์งํ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ Team Git repo ์ ๋๋ค. ๋ํ ํน์ฑ์ ์์ ํน์ ์ญ์ ๋ ๋ถ๋ถ์ด ์กด์ฌ ํฉ๋๋ค
- Rank: 17
- LB: 0.6205
- Rank : 5
- LB: 0.4789
1. Segmentation
1.1 ๋ํ ์ ๋ต
1.2 Model
1.3 Loss
1.4 Augmentation
1.5 ์คํจํ ๋ถ๋ถ
1.6 ํ๊ณ & ๊ณผ์
2.1 ๋ํ ์ ๋ต
2.2 Model
2.3 Augmentation
2.4 ์ฌ์ฉํ ๊ธฐ์
2.5 Ensemble
2.6 ์คํจํ ๋ถ๋ถ
-
๊ณต์ ์ฝ๋ ์์ฑ ์
์์ฑ์ ํ์
ํจ์
๋จ์ ์์ฑmerge
์ .py ํ์ ์ฌ์ฉ
-
๋ชจ๋ธ ๋ก๊ทธ ๊ธฐ๋ก
Wandb
์ฌ์ฉ
-
ํ์ ๊ธฐ๋ก ์์ฑ
-
์๋ฃ ๊ณต์ ๋ฐ ์ฐ๋ฝ - Slack
-
Code review
- Git์ code review ์์ฒญ,
- Peer session ํ์ฉ
-
๊ฒฐ๊ณผ ์ ์ถ ์
- ์คํ ๋ด์ฉ ๊ฒฐ๊ณผ ๊ณต์ ๋ฐ ๊ธฐ๋ก
- Daily Mission ์ํ
- Augmentation & Loss ์กฐํฉ ์คํ
- Model ์ ์
- Skill
-
TTA
-
SWA
-
Pseudo Labeling
-
Image ์์ฑ - ๊นํ์ฐT1045 ์งํ
-
- efficientb3-noisy-student , FPN
- LB ์ ์ : 0.6248
- ๋ชจ๋ธ : decoder : FPN, backbone : efficientb3-noisy-student
- loss : Jaccard + SoftCE
- optimizer : AdamP (learning_rate = 0.0001), LookAhead
- hyperparameters : Batch size 4, Epochs : 40
- augmentation
- HorizontalFlip
- ShiftScaleRotate
- RandomBrightnessContrast
- VerticalFlip
- OneOf
- A.RandomResizedCrop(512,512,scale = (0.5,0.8),p=0.8)
- A.CropNonEmptyMaskIfExists(height=300, width=300, p=0.2),], p=0.5)
- A.Resize(256, 256)
- SWA
- se_resnext101_32x4d, FPN
- LB ์ ์: 0.6228 (public)
- ๋ชจ๋ธ : decoder : FPN, backbone : se_resnext101_32x4d
- loss : Jacarrd
- optimizer : Adam (learning_rate = 0.00001)
- hyperparameters : Batch size 16, Epochs : 15
- augmentation
- HorizontalFlip
- VerticalFlip
- ShiftScaleRotate
- RandomBrightnessContrast(brightness_limit=0.15, contrast_limit=0.2, p=0.5)
- RandomResizedCrop(512,512,scale = (0.5,0.8))
- efficient-b3 , FPN
- LB ์ ์: 0.5897 (public)
- ๋ชจ๋ธ : decoder : FPN, backbone : efficient-b3
- loss : Cross Entropy
- optimizer : AdamW (learning_rate = 0.00001)
- augmentation
- HorizontalFlip
- ShiftScaleRotate
- RandomBrightnessContrast
- RandomResizedCrop
- OpticalDistortion
- VerticalFlip
- pseudo hyperparameters : batch 8, epochs 20
- pseudo ํ์ต: Fold๋ก ๋๋ ๋ชจ๋ธ, ๊ฐ๊ฐ psudo labeling ํ์ต ์งํ
๋์ผํ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ, Loss ๊ฐ์ ๋ฐ๋ฅธ Score ์คํ
- Decoder : deeplabV3+
- Backbone : efficientb3-noisy-student
- Optimizer : AdamW
- ๋ฐ์ดํฐ์ ์ ์ฉ ๊ฐ๋ฅํ Augmentation ์์ธํ ๋ด์ฉ
- ์ฌ์ง์ ์ด๋ป๊ฒ ์๋ฅผ ๊ฒ์ธ๊ฐ? ์์ธํ ๋ด์ฉ
Scale58 = RandomResizedCrop(512,512,scale = (0.5,0.8))
Scale68 =RandomResizedCrop(512,512,scale = (0.6,0.8))
Scale46 = RandomResizedCrop(512,512,scale = (0.4,0.6))
Scale24 = RandomResizedCrop(512,512,scale = (0.2,0.4))
-
Unet, Unet ++, Unet3+์ ์ ์ฉํ๋ ค๊ณ ํ์ผ๋ ์ฑ๋ฅ์ด ๋์ค์ง ์์๋ค.
-
pseudo labeling
- ํ์ต ๋ฐฉ๋ฒ
- label์ด ์๋ ๋ฐ์ดํฐ์ (test์ )์ ๋ํด ๋งค ๋ฐฐ์น๋ง๋ค ์์ฑ ๋ฐ ํ์ต
- 50batch๋ง๋ค ๊ธฐ์กด train์ ์ 1epochํ์ต ์งํ
for each_test_image in test_loader: model.eval() output = output of model with each_test_image oms = output label model.train() unlabled_loss = alpha_wight * CE(output,oms) if batch % 50 == 0: for each_train_image in train_loader: train_output = output of model with each_train_image
โ ๊ทธ๋ฌ๋, CE(output, mos)๋ ์ฌ์ค์ ๊ฐ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ด 0์ ์๋ ดํ์ฌ ์๋ฏธ๊ฐ ์๋ค. ๋ฐ๋ผ์, ์ pseudo code๋ ์๋์ pseudo-labeling์ ์๋์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ ์ฉํ์ง ์์์ ๋ ๋ณด๋ค 0.06์ด ์์นํ๋ ํจ๊ณผ๊ฐ ์์๋๋ฐ, ์ด๋ ๋จ์ํ ๋ด๋ถ for๋ฌธ์ ์ํด train์ด ์ถ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฒฐ๊ณผ์ ๊ธฐ์ธํ๋ค๊ณ ์๊ฐํ๋ค.
- ํ์ต ๋ฐฉ๋ฒ
- Library ๋ฒ์ ํต์ผํ๊ธฐ
- EDA๋ฅผ ํตํด์ ์ด๋ฏธ์ง ํน์ฑ์ ๋ฐ๋ผ ์คํํ๊ธฐ
- ์๊ฐํ ์ฝ๋๋ ํ๋ฒ ์ง๋ณด๊ธฐ
- ํ์ต ์งํ ์ ,๋ค๋ฅธ ์์ ์ ๋ชปํ ๋๋ SOTA ๋ชจ๋ธ TTA๋ CRF ๊ฐ์ด ํ ํฌ๋ ํ์
- loss๋ฅผ ์กฐํฉ ์, ํน์ ๋ชจ๋ธ์์๋ง ์ข์๋ ๊ฒ์ผ ์๋ ์์ผ๋ ์ฐธ๊ณ ํ๊ธฐ
- ์ต๋ํ ์์ ๋ชจ๋ธ๋ก ์คํ ํ๊ธฐ -> ๊ธฐ๋ณธ์ ์กฐํฉ (loss, optim, augmentation, batch_size, lr, epoch)
- ๊ธฐ์ค ์ ์ (ex. ํ์ฌ single SOTA ์ ์์ +- 15%)๋ฅผ ์ถฉ์กฑํ์ง ๋ชปํ๋ฉด ๊ณผ๊ฐํ๊ฒ ๋๋ํ๊ธฐ
- csv ํ์ผ๋ก soft voting, hard voting ์์๋ธ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ๊ตฌํ
- ๊ฐ์ธ๋ณ ์์๋ธ ๋ฏธ๋ฆฌ ์คํ
- ๋ฎ์๋ ์์ ๋ชจ๋ธ๋ก ๊ธฐ๋ฅ ํ ์คํธ๋ฅผ ์งํํ๊ณ , ๋ฐค์๋ ์ฑ๋ฅ์ด ์ข์ ๋ชจ๋ธ๋ก ์คํ์ ์งํํจ -> ์ฑ๋ฅ์ด ์ข์ ๋ชจ๋ธ์ ๋ชจ๋ ๋ค๋ฅธ ์กฐํฉ์ผ๋ก ์งํํจ
- pseudo labeling ๋ค๋ฅธํ๊ณผ ๋น๊ตํด์ ๊ฒ์ฆ ๋ฐ ์ฌ์ฌ์ฉ
- ๋ชฉํ๋ฅผ ์ธ๋ถํํด์ ๊ฐ๊ฐ ๋ฐ๋๋ผ์ธ์ ์ง์
- ์๊ฐ์ด ๋ถ์กฑํ๋ฉด validation score ์ธก์ ๋นผ๊ณ ์คํ
- GPU 20 ์๊ฐ ๋๋ฆฌ๊ธฐ!!!
- ํญ์ ๋ชจ๋ธ pt ์ ์ฅํด์ ํ์ํ ๋ ์ฌ์ฉํ๊ธฐ
- ์๊ฐํ ์ฝ๋๋ ํ๋ฒ ์ง๋ณด๊ธฐ
-
Global wheat detection ๋ถ์์ ํตํด ์ฌ์ ์คํ์ ๋ฐฉํฅ์ฑ์ ์๋ฆฝ
-
๋ชจ๋ธ ์ค์
-
augmentation & loss ์กฐํฉ ์คํ
-
Multi Scale Train
-
TTA
-
WBF
-
Pseudo Labeling
-
hyper parameter ํ๋
-
Cascade R-CNN ๊ณ์ด
-
ResNext101 / FPN / Cascade R-CNN
- LB: 0.4781
- optimizer : SGD (learning_rate = 0.02)
- loss: CrossEntropyLoss (Class loss), SmoothL1Loss (Bbox loss)
- hyperparameters : batch : 16, epochs : 50
-
ResNet50 / RFN + SAC / Cascade R-CNN (DetectoRS)
- LB : 0.5121
- optimizer : SGD (learning_rate = 0.01)
- loss: SoftCrossEntropyLoss (Class loss), SmoothL1Loss (Bbox loss)
- hyperparameters : batch : 4, epochs : 48 or 60
- 5 fold cross-validation
- TTA
-
ResNext101 / RFN + SAC / Cascade R-CNN (DetectoRS)
- LB: 0.5247
- optimizer : SGD (learning_rate = 0.01)
- loss: SoftCrossEntropyLoss (Class loss), SmoothL1Loss (Bbox loss)
- hyperparameters : batch : 4, epochs : 48 or 60
- TTA : vertical, horizontal flip, 512, 768 resize
-
-
YOLO ๊ณ์ด
- DarkNet / SPP / YOLO v5
- LB : 0.4916
- loss : CrossEntropy (150 epoch models), Focal Loss (240 epoch models)
- optimizer : SGD (learning_rate = 0.01)
- hyperparameters : batch : 32, epochs : 150 or 240
- TTA
- ์๋ณธ ์ฌ์ด์ฆ์ ์ ๋ฐ์ผ๋ก Multi-scale train ์งํ
- DarkNet / SPP / YOLO v5
-
Swin ๊ณ์ด
- SwinTransformer / FPN / Mask R-CNN
- LB: 0.5486
- cls_loss: LabelSmooth + CE + Focal (๊ฐ box_head ๋ณ)
- bbox_loss: SmoothL1Loss
- optimizer: AdamW (learning_rate = 0.0001)
- ์ฌํ์ต
- loss ๋ณ๊ฒฝ
- augmentation ์ถ๊ฐ
- TTA
- SwinTransformer / FPN / Mask R-CNN
-
Mosaic
-
์ด๋ฏธ์ง 4์ฅ์ ๊ฐ๊ฐ ๋ฌด์์๋ก ์๋ผ์ ํ๋์ ์ฌ์ง์ผ๋ก ๋ง๋๋ augmentation
-
cutmix์ ์ฐจ์ด์ : cutmix๋ ์๋ฅธ ์ฌ์ง์ด ๋ค๋ฅธ ์ฌ์ง์ ๊ฐ๋ฆฌ๋ ๊ตฌ์กฐ, Mosaic์ 4์ฅ์ ๋๋คํ๊ฒ ์๋ฅธ ์ฌ์ง์ ํ๋๋ก ํฉ์น๋ ๊ตฌ์กฐ
-
Mixup
-
RandomRotate90
-
HueSaturationValue
-
CLAHE
-
RandomBrightnessContrast
-
RGBShift
-
Blur
-
MotionBlur
-
GaussNoise
-
ShiftScaleRotate
-
Multi-scale
-
-
Add Data
- ์ธ๋ถ ๋ฐ์ดํฐ ์ด์ฉ์ ๋ํ ๊ท์น ์ ๊ธ์ง
- ๋ง์คํฌ์ BBOX๋ฅผ ์ด์ฉํด์ ์ํ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๋ค๋ฅธ ์ด๋ฏธ์ง์ ๋ถ์ผ์ ์์๊ฒ์ด๋ผ๊ณ ์๊ฐ.
- ๋ฐ์ดํฐ์์์ Battery, Clothes, Metal, PaperPack, Glass ์ค๋ธ์ ํธ๊ฐ ๋ถ์กฑํ๊ฒ์ผ๋ก ๋ฐ์ ํด์ ํด๋น ์ค๋ธ์ ํธ๋ฅผ ๊ธฐ์กด ์ด๋ฏธ์ง์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ.
- ๋ถ์กฑํ๋ค๊ณ ํ๋จ๋ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ 500๊ฐ์ฉ ์ฆ๊ฐ
- ๋ฐ์ดํฐ ์ถ๊ฐ ํ ๊ธฐ๋ณธ ๋ฒ ์ด์ค ๋ผ์ธ ์ฝ๋๋ก ํ ์คํธ ๊ฒฐ๊ณผ 0.05์ ๋ ์ ์ ์์นํด์ ํด๋๋ณ๋ก ๋ฐ์ดํฐ ์ถ๊ฐ
- SWIN_T์์๋ ๋ง์คํฌ ๋ถ๋ถ์ด ์๋ก ์์ฑ๋ ์ด๋ฏธ์ง์ ์กด์ฌํ์ง ์์ ์ ์ฉํ์ง ๋ชปํจ.
-
WBF
- ์ฌ๋ฌ๊ฐ์ bounding box๋ฅผ ๊ฐ๊ฐ์ ํ๋ฅ ์ ๊ฐ์คํ๊ท ์ผ๋ก ํ์ฌ ํ๋์ bounding box๋ก ๋ํ๋ด๋ ๋ฐฉ์
-
Pseudo-Labeling
- ๊ธฐ๋ณธ๋ชจ๋ธ : Fold = 2 / size = 640 / EfficientDetD6
-
๊ธฐ๋ณธ๋ชจ๋ธ์ 10 epoch ํ์ต
- ํ์ต ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ train data + Pseudo-Labeling test data mixup
-
1์์ ํ์ตํ ๋ชจ๋ธ์ ๋ค์ 6์ํญ๋์ ํ์ต
- ํ์ต ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ train data + 1๋จ๊ณ ๋ชจ๋ธ Pseudo-Labeling test data mixup
-
WBF hyperparameter
- IOU threshold ์ Skip box threshold ์กฐ์
- IOU threshold๋ ํน์ ์๊ณ๊ฐ ์ดํ๋ก ๋ด๋ฆฌ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ํ๋ฝ
- Skip box threshold๋ ๋ฎ์ ๊ฐ์ธ ๊ฒฝ์ฐ, test data visualization ์ ์ง๋์น๊ฒ ๋ง์ ๋ฐ์ค๊ฐ ์กด์ฌํ์ฌ ์ง๊ด์ ์ผ๋ก๋ ๋ฉ๋ํ๊ธฐ ์ด๋ ค์
- ์ต์ข ๊ฐ
- IOU threshold : 0.4, Skip box threshold : 0.01
- ์ด 26๊ฐ ๋ชจ๋ธ์ WBF์ threshold ์ต์ ํ๋ฅผ ์ด์ฉํ์ฌ ์์๋ธ
- stratified kfold๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ์ ์ 5๊ฐ(fold0,fold1,fold2,fold3,fold4)๋ก ๋๋์ด ํ์ตํ์ฌ ์์๋ธ
- ๊ธฐ์ค(0.5์ด์)์ ๋๊ธด ๋ชจ๋ธ ์์๋ธ ๋ชฉ๋ก
- YOLO v5
- fold0, fold1, fold2, fold3, fold4
- augment์ ์ฉ fold0 ,fold1, fold2, fold3
- fold4(img size 256)
- Swin T
- fold0, fold1, fold2, fold3
- fold4(img size 768)
- Cascade R-CNN
- ResNet50
- fold0, fold1, fold2, fold3
- trainall data
- ResNet101
- fold0, fold1, fold2, fold3, fold4
- train all data
- ResNet50
- YOLO v5
- pseudo labeling
- ํ ์คํธ ๋ฐ์ดํฐ์ ์ inference ํ๋ฉด csv ํ์ผ์ด ์์ฑ๋๋ค. LB ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ๊ฒฐ๊ณผ ํ์ผ์ csv ํ์ผ์ ๊ธฐ์ค์ผ๋ก pseudo labeling ์ ์์ฑํ๋ค.
- BBox ์ฑ๋ฅ์ด 0.75 ์ด์์ ๊ฐ๋ง ์ฝ์ด COCO dataset ์ ํ์ผ์ธ pseudo.json ํ์ผ์ ์์ฑํ๋ค.
- pseudo.json ํ์ผ๋ก ๋ชจ๋ธ์ ์ฌํ์ต์ํจ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ฌ๋ฆฐ๋ค.
- Segmentation loss
- Segmentation Models
- Lookahead optimizer
- Weighted Boxes Fusion
- Swin Transformer Object Detection