본문 바로가기
일상

롯데정보통신 Vision AI 채용연계 경진대회 후기

by 로디네로 2021. 4. 4.
반응형

 

주제 : 

총 120000개의 이미지를 1000개 상품 종류로 분류

 

홈페이지 링크

megaproduct.lotte.net/competitionSummary/6

 

 


 

일정 : 

2021/3/15~2021/3/26

(늦게알아서 일주일밖에 참여를 못했다)

 

 


 

DB : 

train data : 1000클래스의 48000 장 (1클래스당 48장)

test data : 1000클래스의 72000 장 (1클래스당 72장인지는 확실치않음)

size : 256x256 jpg

 

 


 

환경 :

google colab T80 (RAM 12G)

런타임 제한이 12시간이여서 최대 학습시간은 12시간이였다.

 

 


 

과정 및 풀이 :

내 코드는 아래 깃허브에 고이 모셔놨다. 다만 너무 날것이라서.. 보기 불편할 수도 있다.

github.com/yunsujeon/Lotte_Classification_Contest


문제를 처음 보고 든 생각 :

  1. 1000 class를 분류하는 문제여서 Imagenet class와 같아서 pretrained 된 model을 쓰면 어느정도 나오겠구나 싶은 생각이 들었다.
  2. 1000 class 인데 train + validation 이미지 갯수가 고작 48000개? 4:1 로 나누면 train은 약 38000개 밖에 안되나? 싶은 생각이 들었다. (숫자 10개 분류하는 MNIST 이미지갯수가 5만갠데 ㅋㅋ)
  3. train DB는 물체를 정면, 30도 위 에서 본것과 다르게 test DB는 정면 30도 위 60도 위 에서 본 것이기 때문에 이에 맞는 augmentation 이 필요할 것으로 생각

처한 상황 : 

  • 학교를 졸업하고, 인턴을 마치고 집에 온 상태여서 집에는 local 환경이 구축되어있지 않아 어색하지만 colab을 사용해야 했다.
  • 프레임워크는 Keras로 간단히 짜도 충분히 뽑아낼 수 있을거라고 생각했다.

풀이 : 

 

  • 모델은 크게 Efficientnet, Inception, Mobilenet 을 사용했다.
  • 우선적으로 생각했던 augmentation 작업 전에 model 의 성능을 체크해보고자 했다.
  • pretrained : Imagenet 으로 세 모델을 학습시켰을 때의 점수는
  • MobileNet < Inceptionv3 < EfficientNetB2 였고 70~80 %가 도출되었다.

 

이에 아래 내용의 변경을 고려하였다.

  1. Transfer learning 을 통해 마지막 Dense layer 에 Dropout 수치를 조정
  2. Augmentation 방식의 조합
  3. Learning rate 의 조정 및 Decay
  4. Optimizer 변경
  5. batch size 변경

 

기본적인 Backbone은 가장 성능이 좋았던 EfficientnetB2 로 진행하였으며 추가적으로 Image 의 augmentation 에 따른 성능을 비교해보기 위해서는 parameter 수가 적어 학습이 빠른 mobilenet 으로 진행하였다.

 

  1. Dropout 수치는 0.5로 시작 -> 0.3 에서 높은 성능
  2. Augmentation 은 rotation, shear_range, zoom_range, shift를 조정해주었다. Keras ImageDataGenerator 에서는 기본적으로 이 이상의 Augmentation은 힘든데 다양한 Augmentation 방법을 더 생각해 보지 않은 것을 나중에 후회했다.
  3. lr은 기본 0.001로 설정되어있다. 하지만 학습이 너무 빠르게 진행되고 적절한 지점을 찾지못하는 것 같아 0.0001에 decay를 1e-6 으로 주었고 이후에는 0.00005 로 낮추어 진행했다.
  4. Optimizer 변경은 Adam에서.. 시간상 수행해주지 못했다. (colab 에서 런타임을 12시간 유지하기도 버거웠다)
  5. batch size는 Ram의 한계로 32가 한계였다. 128로 진행해보고 싶었으나 colab 환경에서는 버거웠다.

Augmentation

train_datagen = ImageDataGenerator(
    #rescale=1./255,
    rotation_range=20, 
    width_shift_range=0.4,
    height_shift_range=0.4,
    zoom_range=0.4,
    shear_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest',
    brightness_range=(0.9,1.1),
    validation_split=0.2) # set validation split
    }

 

이외에 실행해준 것

  • resize 시 조금이라도 성능을 좋게하기 위해 사용하던 bicubic 대신 lanczos로 바꾸어보았다. (대단한 성능차이X)

 

 

validation accuracy는 99%를 훌쩍넘을 정도로 성능이 좋았다.

 

하지만 test dataset 는 86% 언저리로 overfitting 이 의심됐다. Augmentation이 충분하지 않았 던 것 같다.

 

 


 

결과 :

최종 20명이 서류면제의 혜택을 받았다.

그렇다면 나는 몇등을 했을까...?

 

ㅎㅎ 실화다

 

 


 

 

고찰 및 배움

 

 

1,2,3위 한 분들의 블로그, 깃허브를 보고 보완할게 있는지 비교해보았다.

 


 

Augmentation :

albumentation library를 사용

  • SiftscaleRotate
  • GridDistortion
  • Blur
  • HorizontalFlip
  • Rotate

TTA(Test Time Augmentation)

 

mixup [깃허브링크](github.com/yu4u/mixup-generator)

cutmix [깃허브링크](github.com/clovaai/CutMix-PyTorch)

 

soft voting ensemble[블로그링크](devkor.tistory.com/entry/Soft-Voting-%EA%B3%BC-Hard-Voting)

MixMatch 기법 적용 앙상블

 

이미지 검색 (image retrieval) [설명링크영문](medium.com/sicara/keras-tutorial-content-based-image-retrieval-convolutional-denoising-autoencoder-dc91450cc511) [블로그링크](kmhana.tistory.com/14)

 

5-Fold cross validation

내가 validation set을 나눈것과는 다른 방식인데 train data자체가 random 이여서 상관없을 것 같았다. 다시 알아보기

(set을 나누는 것 이상으로 train에의 다른 의미가 있는 것 같다..)

 

ViT 모델 [블로그링크](engineer-mole.tistory.com/133)

 

딥러닝 모델 병렬처리

 

반응형

'일상' 카테고리의 다른 글

포항으로!  (0) 2021.05.02
포스코 AI Bigdata 아카데미 지원 및 합격후기  (5) 2021.04.13
첫 공기청정기 '미에어3H' 개봉기  (0) 2021.03.30
LIG넥스원 코딩테스트 후기  (2) 2021.03.24
ETRI 인턴 종료  (4) 2021.02.26

댓글