티스토리 뷰

728x90

롯데정보통신 Vision AI 경진대회

Public LB 2nd place Solution [Score : 95.150] + 최종 2위

 

 

* 모든 환경은 Colab에서 코드작성, 모델학습이 이루어졌습니다.

* Colab에 작성된 코드들과 Train Log들은 github.com/hunmin-hub/LotteVisionAI 에 업로드 하였습니다.

 

* 제출용 Train, Test log Link : drive.google.com/drive/folders/1kFeEv84gvcXznKaUq9VlGH-0y6qYTTw9?usp=sharing

* 학습된 각 Model의 Weight Link : drive.google.com/drive/folders/1YAOmYvJLALKJ2iUl-oTc8b_rodXMES4k?usp=sharing

 

1. 문제 정의

120,000개의 상품 이미지를 1000개의 상품 종류로 분류


2. 데이터셋

Train data Image : 48000개 (각 Class별 48장)

Test data Image : 72000개

 

Train data, Test data 모두 같은 종류의 단수, 복수 상품의 이미지가 혼합되어 있음.

Train data의 각 Class별 폴더에 파일명에 따라 1. 카메라 각도, 2. 단수, 복수 상품 이 규칙적으로 구분되어 있음.

-> 새로운 Label 부여 가능 (0도, 30도 or 단수 복수 상품)

 

그러나 Test data에는 카메라 60도에서 찍은 상품 Image도 포함되어 있음. (Train data에는 0도 30도밖에 없음)

 

-> 따라서, 카메라 각도가 다르게 찍힌 상품도 잘 분류할 수 있도록 강건한 모델을 만드는 것이 핵심이라고 생각함


3. 모델 학습 전략

Train data가 1000개의 Class에서 각 Class별 48장 밖에 주어지지 않았으므로, 데이터가 상당히 부족하다고 판단하였습니다.

따라서 기존 ImageNet Dataset에서 Pre-trained된 모델을 주어진 환경에 맞게 Fine-tuning 하는 것으로 계획을 세웠습니다.

Fine-tuning 전략은, ImageNet Dataset과 주어진 Train Dataset의 유사관계가 작고, Train Dataset의 Size도 작다고 판단하였으므로 Feature를 추출하는 앞단의 Layer를 Freeze시키고 미세조정 하는 것으로 최종 결정하였습니다.


4. 최종 Solution

최종 모델 구조

  • 모두 ImageNet Dataset에서 사전 학습된 ResNext50-32x4d, ResNext101-32x8d, EfficientNet-B04, ViT(Vision Transformer)을 사용하였습니다. (다양한 모델 아키텍쳐들의 앙상블 효과를 기대)
  • ResNext50,ResNext101,EfficientNet-B04는 4개의 Fold별 앙상블을 통해 각각 하나의 모델로 만들었습니다.
  • 4개의 Fold를 통해 만들어진 3개의 모델과 ViT를 다시 앙상블하여 최종 예측을 얻었습니다.
  • ViT를 제외한 나머지 3개의 모델들은 Straistratified K Fold = 4 (Fold 별 Epoch 30)을 사용하였습니다.
  • ViT는 1 Fold로 학습을 하여 CV=0.999에 수렴한 뒤 모든 Train dataset에서 40 epoch 학습 하였습니다.
  • Optimizer : Adam
  • Learning rate scheduler : ReduceLROnPlateau
  • Loss : Cross-Entropy Loss + Label Smoothing
  • Cutmix (50% 확률로 사용)
  • TTA는 최종 제출에는 사용하지 않았습니다. (마감 시간전 TTA : 5를 Inference 중이였으나, Colab이 끊겨 제출하지 못했습니다.)

* Data Augmentation

: 상품의 로고, 글자들이 있었으므로 뒤집기, 좌우반전은 사용하지 않았습니다.

train_transforms=transforms.Compose([
    transforms.RandomChoice([
        transforms.ColorJitter(brightness=(1,1.1)),
        transforms.ColorJitter(contrast=0.1), 
        transforms.ColorJitter(saturation=0.1),
    ]),
    transforms.RandomChoice([
        transforms.RandomAffine(degrees=15, translate=(0.2, 0.2), scale=(0.8, 1.2), shear=10, resample=Image.BILINEAR,fill=255),
        transforms.RandomCrop((224,224)),
    ]),
    transforms.ToTensor(),
    transforms.Resize((224, 224)),
    transforms.Normalize([0.485, 0.456, 0.406],
                         [0.229, 0.224, 0.225])
])

 


5. 앙상블 전략

https://www.kaggle.com/c/severstal-steel-defect-detection/discussion/107716

: 단순히 Softmax를 통해 나온 값들의 평균이 아닌 가상 Labeling에 사용되는 MixMatch 기법을 앙상블에 적용하였습니다.

 

* 단순 평균 앙상블에 비해 항상 Public LB가 약 0.01 향상 되었습니다.


6. 실패한 실험

1) 모델 아키텍쳐 부분 1 (폐기)

 

동일한 Backbone을 2개 사용하여, 하나는 모두 Freeze하여 ImageNet에서 학습된 기반으로 Feature를 추출하고, 하나는 Train dataset에 맞게 재 학습하여 Feature를 추출하여 두 개의 Feature들을 Concat하는 방식을 사용하였지만, 모델이 무거워지고 성능 향상폭도 미비하여 앙상블 모델 조건에 부합하지 못했습니다.

 

2) 모델 아키텍쳐 부분 2 (폐기)

Train dataset에서 얻을 수 있는 단수or복수 상품에 대한 Label을 얻을 수 있어, 하나의 Backbone에서 2개의 Head를 통해 단수, 복수 상품을 잘 구별하면서 Class도 더 잘 분류할 수 있는 강건한 모델을 기대하였으나, 단수 상품과 복수 상품의 구별을 1에폭부터 CV가 0.99에 가깝게 수렴하고 Train Loss가 0에 가까워 효과를 얻을 수 없었습니다.

 

3) 다양한 모델들

최종 솔루션에 사용된 모델들을 제외하고도 많은 모델들을 학습시켰었으나, ResNet50, ResNet101, Inception V3, Custom CNN Model 등 앙상블 모델 후보에 오를 만한 Single Model 퍼포먼스가 나오지 않아 폐기하였습니다.


7. 효과가 있었던 기법

1. Cutmix + Label Smoothing

2. MixMatch 기법 적용 앙상블

3. Fine-tuning 방법 (에폭 별 Freeze, UnFreeze)

4. ViT와의 앙상블 (ViT Single 모델 퍼포먼스가 다소 떨어져도 최종 솔루션 모델에 포함한 이유)


8. 아쉬웠거나 어려웠던 점 (해결하지 못한 과제)

- (*****) 주어진 Train dataset은 카메라의 각도가 0도, 30도에서 찍힌 사진 뿐이였는데, 이를 이용하여 다른 각도(60도)의 사진에 대응할 수 있도록 적용하는 기법 (데이터 증강 단계 혹은 전처리 단계에서)

 

- CV가 모두 0.999로 수렴하는 상황에서 모델을 검증할 수 있는 다른 지표나 대응 방법 (Train dataset과 Test dataset이 많이 다를 때 나오는 현상인 것 같음) : Public LB에 맞추기에는 인간 Overfitting이 일어날 것 같아서 굉장히 어려웠습니다.

 

- ArcFace Loss를 이론적으로 충분히 이해하지 못하여 사용하지 못했던 것이 아쉬웠습니다. (성능이 좋다고 하는데...)

 

- 대회 도중에 Colab 리소스를 많이 사용하게 되어 12시간 차단이 걸리거나, 학습 도중에 끊기고 Inference 도중에 끊겨 결국 TTA를 적용한 방법을 제출하지 못해 아쉬웠습니다. (개인 GPU 장비 구축의 필요성을 느끼게 되었음)

'Deep Learning > CV' 카테고리의 다른 글

U-net 구현  (0) 2021.03.07
[DACON] Mnist 숫자 사진 분류  (0) 2021.02.12
[DACON] Mnist Fashion 의류 사진 분류  (0) 2021.02.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함