일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 삼성역량테스트
- 포스코 ai 교육
- 다이나믹프로그래밍
- 컴퓨팅사고
- sort
- tinyml
- dfs
- 코테
- 코테 문제
- DP
- 딥러닝
- 포스코 교육
- TensorFlow Lite
- MCU 딥러닝
- 임베디드 딥러닝
- BFS
- bfs문제
- 삼성코딩테스트
- dfs문제
- 영상처리
- 자료구조
- DP문제
- 코딩테스트
- 포스코 AI교육
- 그리디
- 초소형머신러닝
- 삼성역테
- tflite
- 알고리즘
- 삼성코테
- Today
- Total
코딩뚠뚠
롯데정보통신 Vision AI 채용연계 경진대회 후기 본문
주제 :
총 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시간이였다.
과정 및 풀이 :
내 코드는 아래 깃허브에 고이 모셔놨다. 다만 너무 날것이라서.. 보기 불편할 수도 있다. |
문제를 처음 보고 든 생각 :
- 1000 class를 분류하는 문제여서 Imagenet class와 같아서 pretrained 된 model을 쓰면 어느정도 나오겠구나 싶은 생각이 들었다.
- 1000 class 인데 train + validation 이미지 갯수가 고작 48000개? 4:1 로 나누면 train은 약 38000개 밖에 안되나? 싶은 생각이 들었다. (숫자 10개 분류하는 MNIST 이미지갯수가 5만갠데 ㅋㅋ)
- train DB는 물체를 정면, 30도 위 에서 본것과 다르게 test DB는 정면 30도 위 60도 위 에서 본 것이기 때문에 이에 맞는 augmentation 이 필요할 것으로 생각
처한 상황 :
- 학교를 졸업하고, 인턴을 마치고 집에 온 상태여서 집에는 local 환경이 구축되어있지 않아 어색하지만 colab을 사용해야 했다.
- 프레임워크는 Keras로 간단히 짜도 충분히 뽑아낼 수 있을거라고 생각했다.
풀이 :
- 모델은 크게 Efficientnet, Inception, Mobilenet 을 사용했다.
- 우선적으로 생각했던 augmentation 작업 전에 model 의 성능을 체크해보고자 했다.
- pretrained : Imagenet 으로 세 모델을 학습시켰을 때의 점수는
- MobileNet < Inceptionv3 < EfficientNetB2 였고 70~80 %가 도출되었다.
이에 아래 내용의 변경을 고려하였다.
- Transfer learning 을 통해 마지막 Dense layer 에 Dropout 수치를 조정
- Augmentation 방식의 조합
- Learning rate 의 조정 및 Decay
- Optimizer 변경
- batch size 변경
기본적인 Backbone은 가장 성능이 좋았던 EfficientnetB2 로 진행하였으며 추가적으로 Image 의 augmentation 에 따른 성능을 비교해보기 위해서는 parameter 수가 적어 학습이 빠른 mobilenet 으로 진행하였다.
- Dropout 수치는 0.5로 시작 -> 0.3 에서 높은 성능
- Augmentation 은 rotation, shear_range, zoom_range, shift를 조정해주었다. Keras ImageDataGenerator 에서는 기본적으로 이 이상의 Augmentation은 힘든데 다양한 Augmentation 방법을 더 생각해 보지 않은 것을 나중에 후회했다.
- lr은 기본 0.001로 설정되어있다. 하지만 학습이 너무 빠르게 진행되고 적절한 지점을 찾지못하는 것 같아 0.0001에 decay를 1e-6 으로 주었고 이후에는 0.00005 로 낮추어 진행했다.
- Optimizer 변경은 Adam에서.. 시간상 수행해주지 못했다. (colab 에서 런타임을 12시간 유지하기도 버거웠다)
- 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 |