batchsize를 높이는 것에 초점을 맞춰서 resize를 (200, 200)까지 줬는데, 오히려 정보 손실로 오는 성능 하락이 더 컸던 것 같다.
Stratified split
층화추출을 사용해 validation set과 train set에 클래스별 비율을 어느 정도 맞췄더라면 더 성능이 향상되었을 것 같다.
더 무거운 모델 사용
일반화에 너무 치중해서 EfficientNet b0 부터 시작해 b4에서 모델 상향화를 멈췄는데, b8로 하신 분이 score가 잘 나온 걸 보니 실험을 더 진행해서 더 무거운 모델을 사용해봤으면 좋았을 것 같다.
Loss에 대한 다양한 실험
CrossEntropy 대신 data imbalance 문제에 도움이 될 수 있는 Focal loss를 사용해 성능향상을 보았지만, 막상 상위권 분들의 시도를 보니 여러 가지 loss를 더해서 새로 만들거나, (1 - f1 score) 등의 텀을 추가한다거나 등의 색다른 것들이 많았다.
Cutmix
마스크 정보를 잃어버리지 않도록 윗부분과 아랫부분을 잘라 붙이지 않고, 좌우로만 이미지를 갈라서 사용. 수가 매우 부족한 노인 데이터를 oversampling하는 효과를 동시에 낼 수 있도록 한쪽은 60세 이상 데이터만 삽입. 가장 인상적이었던 것은, 좌(사람1의 왼쪽 얼굴) + 우(사람2의 오른쪽 얼굴) 시 성능 향상이 별로 없었고, 좌(사람1의 왼쪽 얼굴) + 우(사람2의 왼쪽 얼굴) 시 성능 향상이 컸다는 사실. 역시 실험을 해보기 전에 판단하면 안 된다.
Ensemble
시간이 부족해서 시도하지 못했는데, 성능향상이 보장되는 방법. 각 모델의 확률벡터들을 가중합하는 Weighted ensemble도 있다는 것을 기억할 것.
Terminal 환경에서 실험-friendly 한 설계
하이퍼파라미터 값을 바꾸기 간편하고, 실험을 빠르고 한눈에 확인하기 쉽게 구성할 수 있음.
Learning rate를 backbone 부분과 classifier (final FC layer) 부분을 다르게 설정
backbone은 pretrained 사용 시 learning rate를 더 적게 (0.1배 등) 설정하면 freeze 효과를 부분적으로 볼 수 있음.