2021.08.31 - [Week 5] Day 2. 8월의 마지막 날
1. 대회 진행 상황
1.1. albumentations 적용
- albumentations 함수 중 21개 augmentation 기법 선택
- HorizontalFlip, GaussianBlur, GaussNoise, CoarseDropout, RandomRain, MotionBlur, OpticalDistortion, RandomFog, RandomGridShuffle, RandomShadow, RandomSunFlare, Sharpen, Superpixels, CLAHE, Cutout, CoarseDropout, Downscale, Emboss, GridDistortion, GridDropout, ImageCompression
- 지난 과정에서의 학습 방법을 똑같이 적용하여 생성한 21개 dataset으로 학습
- F1 score : 0.005, Accuracy : 5.079
- 결과를 하나도 맞추지 못해 over-fitting된 것으로 판단
1.2. albumentations의 augmentation 함수를 2개씩 적용해서 11개의 dataset으로 학습
- train loss와 train accuracy 그래프는 비슷한 양상
1.3. dataset 확인
- 학습은 정상적으로 된 것 같지만 결과가 이상하다고 생각되어 dataset 확인
- dataset은 내부에서 image를 tensor로 변환하여 return
- return 과정에서 byte tensor로 변환되어 forward 과정에서 model의 weight(float tensor)와 tensor type이 맞지 않아 에러가 발생
- return 전에 image.float()로 float tensor로 변환하여 return하도록 적용했지만 여기서 문제가 발생한 것 같다!
- float tensor로 변환된 이미지를 pyplot을 이용해 출력해보니 channel이 inversion된 것처럼 출력되는 것을 확인
- tensor.to(dtype=float), tensor.float(), tensor.type(torch.float) 모두 같은 결과
- image / 255.0으로 uint8 tensor를 float tensor로 channel inversion 없이 변환
- 수정 후 이미지 정상적으로 출력
1.4. git으로 파일 관리하는 법 공부
2. 피어세션
• confusion matrix 적용 : class 별로 정답, 오답 비율 확인
• class 별로 균등하게 dataset 만들고, augmentation 적용
• k-fold : 기본 모델의 성능이 좋지 않아 k-fold 적용 후 좋지 않은 성능
• ViT + self-supervised learning + CutMix
• self-supervised learning : 동일 인물인지 맞추는 pretext task
• face crop 여부
• model 앞,뒤로 layer 추가하는 방법
• train set과 validation set의 분포를 맞추는게 맞는지?
- 일반화 성능을 위해선 균등하게 하는게 맞는 것 같다.
- test set의 분포에 맞추는게 중요하지만 test set의 분포를 알 수 없는 것이 문제이다.
- 멘토님께 질문드리기
• data가 가장 적은 수의 class에 맞게 dataset 나누는 방법
• 각자 성능이 가장 좋은 code ensemble하는 방법 고민
• team report와 team code 작성 방법
- code 합치는 방법, 역할 등
- 멘토님께 질문드리기
3. 멘토링
• imbalanced data
- over sampling
· class 별 가장 많은 것 뽑도록 구현
· collate_fn : 모든 batch마다 label 들어가도록 구현
- GAN 사용해서 새로운 학습 data 생성
- under sampling
• 실험 별로 결과 정리
- 실험 별 method on, off에 따라 $2^n$가지 결과 정리
• cutmix
- 얼굴만 나이에 영향을 주는 것이 아니라 옷 색깔 등도 관련있을 수 있다.
- $\frac{1}{2}$ crop만 할 것이 아니라 $\frac{1}{4}$ crop도 추천
- random한 cutmix가 성능이 좋은 것으로 알려져 있다. -> random과 vertical 실험 후 비교
• code 병합
- baseline model 정해서 module 구현하여 추가
- 구현이 빨리 안되는 사람은 코드 읽는 것만 해도 많은 공부
- 지금부터는 code 병합하며 team으로 작업해보기
- coding style 통일, coding convention 참고
- 80점 목표
- pair programming 추천
• 참고자료
https://github.com/ufoym/imbalanced-dataset-sampler
교육받은 지 꼬박 한 달이 지났다.
나는 얼마나 성장했을까 돌아보면 좋겠지만 아직 기초도 많이 부족한 것 같다.
대회가 3주정도 기간으로 진행되었다면 복습을 하면서 이런 저런 실험도 많이 해볼 수 있었을 것 같은데
예상보다 팀을 빨리 합치게 되었다 보니 생각보다 더 짧게 느껴진다.
복습할 시간이 앞으로 얼마나 남았을 지는 모르겠지만 기초를 다지고 더 깊게 공부할 수 있었으면 좋겠다.