[프로젝트 1 - 이미지 처리] 5. 앙상블

Jade·2021년 4월 6일
0

부스트캠프 AI Tech

목록 보기
35/54

프로젝트 1 - 앙상블

  • 앙상블
  • 기타 팁

[앙상블]

여러 모델이 각각 다른 특성을 가지고 있다는 가정 하에, 모델을 여러 개 만들어서 각 모델이 가진 에러를 다른 모델이 보완하도록 하는 방법

앙상블은 확실히 효과가 있지만, 그만큼 학습과 추론에 많은 시간이 든다. 성능과 효율의 trade-off인 셈인데 사용해야 할 때와 아닐 때를 잘 파악할 필요가 있다.

여러 모델의 결과를 취합할 때는 내놓은 결과를 바탕으로 다수결 방식으로 결정하는 hard voting과 다른 클래스의 점수(각 클래스별 확률 값)까지 고려하는 soft voting 방식이 있다. soft voting 방식을 사용하면 경계값을 더 살펴볼 수 있어서 일반적으로 결과가 좋다. (안 그럴 때도 있다)


[기타 팁]

  • cross validation
    학습셋과 검증셋을 분리하되 검증셋을 학습에 활용할 수 있는 방법이다. 모델 여러 개를 만들어서 각 모델이 사용할 검증셋에 다른 데이터를 넣어 주면 데이터 유출을 막으면서도 학습셋의 모든 데이터를 활용할 수 있다.
  • stratified K-fold cross validation
    학습셋의 모든 데이터가 검증에 한번씩 사용될 수 있도록 학습셋의 비율이 전체의 1/K가 되도록 조정한다. 보통 K가 5부터 시작하는데, K값이 너무 적을 경우에는 하나의 모델에서 검증셋의 비율이 너무 커져서 학습이 제대로 되지 않기 때문이다. K값이 너무 커도 문제인데, 검증셋의 양이 적어지기도 하고 모델이 너무 많아져서 학습에 드는 시간이 오래 걸리기 때문이다.

[Illegal memory 문제]

모델을 gpu에 넘기려고 하면 illegal memory 오류가 발생했는데 멘토님께서 봐 주셨다. 모델이 복잡하거나 배치사이즈가 클 경우에 해당 문제가 발생할 수 있다고 하셨는데, 내 모델에서 입력으로 주어진 이미지(384*512)를 그대로 사용했기 때문에 결과적으로 모델이 복잡해지게 된 것 같다.

보통 vision 문제에서는 이미지를 정사각형 형태로 사용하고, 224/180/128 정도의 크기로 사용한다고 한다. ResNet이나 VGGNet 등이 224 크기의 이미지로 학습했기 때문에 암묵적으로 가장 먼저 사용해 보는 크기가 224픽셀이라고...

이미지를 정사각형으로 만드는 이유는 rotate 등의 augmentation을 적용했을 때 관리하기가 편하기 때문이다. 학습에 사용할 이미지 크기를 바꿨다면 테스트셋에도 같은 변형을 적용해 줘야 한다. train-validation-test의 distribution이 유사할수록 유리하기 때문이다.


[피어 세션]

감이 잘 오지 않았던 부분에 대한 정보를 좀 주웠다. pretrained 모델 중 EfficientNet을 사용하면 속도와 성능 둘 다 괜찮게 나온다고 한다. 또 60세 데이터가 구분이 잘 안 되는 경우가 많은데, 기준을 60세가 아닌 58세 정도로 낮출 경우 오히려 성능이 더 잘 나왔다고 한다.

profile
반가워용

0개의 댓글