부스트캠프 AI Tech 1기 [T1209 최보미]/P stage-1 (이미지분류) 10

Day10 학습정리 - Stage1 마무리

2주간의 이미지분류 프로젝트가 모두 마무리되었다. 나의 최종 점수와 순위는 다음과 같다. Public score: 0.7242, 108등 / Private score: 0.7059, 117등 Public 순위도 만족스럽지 않았는데 오늘 공개된 Private 순위는 더 내려가서 처음에는 실망했지만 순위에 연연하지 않기로 했다. 이번 프로젝트를 하면서 배운 것도 많았고 아쉬웠던 점도 많았는데 이를 토대로 다음 프로젝트는 더 잘 해봐야겠다. 아래 파일은 그동안 실험했던 것들을 정리한 엑셀파일과 Wrap-up Report이다.

Day9 학습정리

1. 오늘의 목표 지식증류법 학습데이터 나이 보정 앙상블 후 최종제출 2. 목표를 달성하기 위해 한 행동 오늘은 가장 먼저 지식증류법을 시도해봤다. teacher model은 efficientnet-b0을 사용했고 student model은 resnet50을 사용했다. 그리고 리더보드 상위권에 계신 Ustage 팀원분이 학습데이터의 나이를 보정하는 방법을 사용했다고 하셔서 나도 시도해봤다. 기존에 학습된 모델을 사용해 30세~60세로 라벨링된 train 이미지의 나이를 예측해서 60세 이상으로 나오면 이미지의 라벨을 바꿔주는 방식으로 했다. 일종의 noise labelling 제거라고 할 수 있을 것 같다. 이미지 사이즈는 300*224로 할 때 효과가 좋았다. 마지막으로 성능이 좋았던 5개의 모델을 앙..

Day8 학습정리

1. 오늘의 목표 랜덤시드 고정하기 피어세션에서 나왔던 여러가지 방법들 시도해보기 앙상블할 모델 정하기 2. 목표를 달성하기 위해 한 행동 어제 토론게시판에 랜덤시드 관련 글이 올라온 것을 보고 랜덤시드를 고정해주는 코드를 추가했다. 모델을 efficientnet-b0, resnext50_32x4d로 바꿔봤는데 resnet50이랑 비슷하게 나왔다. 이미지사이즈를 크게 하는것이 좋다는 말이 있어서 384*256으로 바꿔봤는데 오히려 성능이 떨어졌다. optimizer 중에서 AdamP가 좋다는 말이 있어서 사용해봤는데 이것도 오히려 더 안 좋게 나왔다. 3. 회고 지금까지 랜덤시드는 신경 안 쓰고 있었는데 어제 글을 보고 그동안 했던 실험들은 다 엉터리라는 것을 깨달았다. 이제라도 뒤늦게나마 시드를 고정해..

Day7 학습정리

1. 오늘의 목표 overfitting이 있는지 확인해보기 Tensorboard 사용해보기 2. 목표를 달성하기 위해 한 행동 overfitting이 있나 싶어서 5번째 epoch이 아닌 4번째 epoch을 제출해봤는데 결과가 더 안 좋았다. 그냥 원래대로 5 epoch까지 해야겠다. 그리고 tensorboard를 사용해보기 위해 예시코드를 복사해서 붙였는데 계속 cuda:0 device type tensor를 numpy로 변환할 수 없다고 에러가 나서 Tensor.cpu()를 사용해 해결했다. 하지만 그 이후로도 계속 에러가 나서 내일 다시 시도해봐야겠다. 3. 회고 오늘은 이것저것 시도를 많이 못 해봤는데 내일은 진짜 여러가지 시도를 해봐서 앙상블에 사용할 최종 모델을 정해야겠다.

Day6 학습정리

1. 오늘의 목표 앙상블에 사용할 모델 찾기 나이 분류 기준 바꿔보기 2. 목표를 달성하기 위해 한 행동 원래 사용하던 resnet50보다 무거운 resnet101을 사용해봤는데 오히려 더 안 좋게 나왔다. 모델이 복잡하고 무거울수록 overfitting되어서 잘 안 나오나 싶어서 resnext도 시도해보려다가 안 했다. 그리고 나이 분류 기준을 60세에서 58세로 바꾸면 성능이 더 좋아진다는 이야기를 들어서 해봤는데 나는 효과가 없었다. 3. 회고 resnet50 이외의 다른 모델들이 기대보다 성능이 떨어지는 이유는 overfitting 아니면 하이퍼파라미터가 최적화가 안 되어서 그런 것 같다. 그래서 토론게시판에 올라온 hyperparameter Optimization 라이브러리를 한 번 사용해볼 생..

Day5 학습정리

1. 오늘의 목표 Stratified K-fold 적용하기 2. 목표를 달성하기 위해 한 행동 stackoverflow.com/questions/60883696/k-fold-cross-validation-using-dataloaders-in-pytorch에 나와있는 코드를 가져와서 k-fold를 적용해봤다. 내 코드에 적용하는 과정에서 몇 번의 에러가 있었지만 해결하고 정상적으로 작동시키는데 성공했다. 하지만 결과는 그렇게 좋지는 않았다. 3. 회고 오늘은 왠지 의욕이 떨어져서 대회에 열심히 참가하지 않고 k-fold밖에 시도를 안 해봤다. k-fold가 효과가 없었던 이유는 여러번 학습을 돌리다 보니 overfitting이 발생해서 그런 것 아닐까 생각한다. 주말동안 다른 여러가지 기법들도 적용해보고 ..

Day4 학습정리 - Training & Inference

1. 오늘의 목표 각종 loss function과 optimizer 적용해보기 f1 스코어 계산하는 코드 추가하기 2. 목표를 달성하기 위해 한 행동 강의에서 언급된 Focal loss, label smoothing, f1 loss 코드를 검색해서 가져왔는데 Focal loss랑 f1 loss는 에러가 나서 못 했고 label smoothing만 성공했다. 첫 번째 시도할 때는 결과가 안 좋았는데 다른 코드를 가져와서 써봤더니 최고 점수를 갱신했다. optimizer는 Adam보다 SGD가 더 좋다는 말이 있어서 한번 바꿔봤는데 시간도 훨씬 오래 걸리고 결과도 처참해서 그냥 계속 Adam을 쓰기로 했다. 그리고 강의에서 언급된 lr scheduler 중에서 ReduceLROnPlateau가 가장 많이 쓰..

Day3 학습정리 - Model

1. 오늘의 목표 데이터 불균형 문제 해결하기 Daily Mission에 주어진 모델 구현해서 프로젝트에 적용해보기 2. 목표를 달성하기 위해 한 행동 데이터 불균형 문제를 해결하기 위해 WeightedRandomSampler를 사용해봤다. 클래스별 비율이 비슷하게 샘플을 추출하는 역할을 하는 것인데 기대와 달리 결과는 지금까지중에 가장 처참했다. 두 번째로는 CrossEntopyLoss에 weight 인자를 줘봤다. 정확도는 weight 안 줬을 때랑 유의미한 차이는 없었지만 f1스코어는 0.72%로 지금까지중에 가장 높았다. 3. 회고 여러가지 시도를 해 봤는데 계속 결과가 기대했던 것만큼 잘 안 나와서 의욕이 떨어졌다. 그래도 CrossEntopyLoss에 weight을 줬을 때 f1스코어가 높게 ..

Day2 학습정리 - Data Feeding

1. 오늘의 학습목표 Albumentation을 사용해서 augmentation 시간 줄이기 모델 정확도 개선하기 2. 목표를 달성하기 위해 한 행동 모델을 돌려보기 위해 경량화 과제 코드를 약간 수정해서 베이스라인 코드를 만들었다. 모델은 resnet50과 efficientnet-b1을 사용하였고 augmentation 시간을 줄이기 위해 torchvision.transform에서 Albumentation 라이브러리로 바꿨다. hoya012.github.io/blog/albumentation_tutorial/을 참고해서 시간을 비교해보니까 확실히 차이가 많이 나는 것을 확인할 수 있었다. 3. 회고 모델 성능을 높이기 위해 resnet50에서 efficientnet-b1로 바꿔보기도 하고 augment..

Day1 학습정리 - EDA

1. 오늘의 학습목표 대회 플랫폼 사용법 익히기 주어진 이미지 데이터 탐색 2. 목표를 달성하기 위해 한 행동 우선 train 폴더에 들어가서 폴더명과 파일명은 어떤 식으로 되어있는지, 어떤 이미지들이 있는지 대충 확인해보았다. 그다음 트레인 이미지 정보가 담겨있는 CSV 파일을 읽어서 데이터 분포를 확인했다. 분석 결과 성비는 여자:남자가 6:4 정도 되었고 나이 분포를 그래프로 그려 확인해보니 양 끝에 많이 분포해있는 것을 알 수 있었다. 그리고 각 이미지들의 클래스를 분류하여 라벨링했다. 클래스별 이미지 개수를 확인해보니까 불균형이 있었다. 그다음 각 클래스별로 이미지를 5장씩 뽑아 출력해보았다. 마스크 대신 천을 쓴 사람도 있었고 눈에 마스크를 한 사람도 있었다. 처음에는 이미지가 모두 jpg 형..