프로젝트 1 - 앙상블
- 앙상블
- 기타 팁
여러 모델이 각각 다른 특성을 가지고 있다는 가정 하에, 모델을 여러 개 만들어서 각 모델이 가진 에러를 다른 모델이 보완하도록 하는 방법
앙상블은 확실히 효과가 있지만, 그만큼 학습과 추론에 많은 시간이 든다. 성능과 효율의 trade-off인 셈인데 사용해야 할 때와 아닐 때를 잘 파악할 필요가 있다.
여러 모델의 결과를 취합할 때는 내놓은 결과를 바탕으로 다수결 방식으로 결정하는 hard voting과 다른 클래스의 점수(각 클래스별 확률 값)까지 고려하는 soft voting 방식이 있다. soft voting 방식을 사용하면 경계값을 더 살펴볼 수 있어서 일반적으로 결과가 좋다. (안 그럴 때도 있다)
모델을 gpu에 넘기려고 하면 illegal memory 오류가 발생했는데 멘토님께서 봐 주셨다. 모델이 복잡하거나 배치사이즈가 클 경우에 해당 문제가 발생할 수 있다고 하셨는데, 내 모델에서 입력으로 주어진 이미지(384*512)를 그대로 사용했기 때문에 결과적으로 모델이 복잡해지게 된 것 같다.
보통 vision 문제에서는 이미지를 정사각형 형태로 사용하고, 224/180/128 정도의 크기로 사용한다고 한다. ResNet이나 VGGNet 등이 224 크기의 이미지로 학습했기 때문에 암묵적으로 가장 먼저 사용해 보는 크기가 224픽셀이라고...
이미지를 정사각형으로 만드는 이유는 rotate 등의 augmentation을 적용했을 때 관리하기가 편하기 때문이다. 학습에 사용할 이미지 크기를 바꿨다면 테스트셋에도 같은 변형을 적용해 줘야 한다. train-validation-test의 distribution이 유사할수록 유리하기 때문이다.
감이 잘 오지 않았던 부분에 대한 정보를 좀 주웠다. pretrained 모델 중 EfficientNet을 사용하면 속도와 성능 둘 다 괜찮게 나온다고 한다. 또 60세 데이터가 구분이 잘 안 되는 경우가 많은데, 기준을 60세가 아닌 58세 정도로 낮출 경우 오히려 성능이 더 잘 나왔다고 한다.