신경망의 성능을 향상시키는 방법에는 상당히 많은 방법이 존재합니다. 도메인이나 모델에 따라서도 다양하게 존재합니다.

하지만 공통적으로 모델을 구성하기 전에 가장 중요한 방법이 있습니다.

바로 Data augmentation 작업입니다.

데이터 증식은 flip, shear, translation, rotation 등의 방법을 제공하여 train set을 부풀리게 해주고, 우리가 구성한 모델을 더욱 견고하게 만들어주는 역할을 합니다. (모델이 한번도 보지 않은 이미지를 계속해서 보게함으로써 최종적으로 general한 모델로 만들어지니까요)

car image augmentation - 이미지 출처 캐글 코리아 3차대회

이는 Train에서의 augmentation 방법이며, test에서의 augmentation 방법이 따로 있습니다. 그리고 이것을 Test Time Augmentation(TTA)라고 부릅니다.


TTA는 증강된 이미지를 여러번 보여준 다음 각각의 단계에 대해서 prediction을 평균하고 이 결과를 최종값으로 사용하는 것입니다.

이 방법을 사용하면 가장 좋은 점은 1번만 예측하여 결과를 도출했을 시에 해당 차량의 클래스가 아니라고 추측하는 반면, TTA를 통해 도출된 최종 결과값은 올바른 차량의 클래스라고 맞춘다는 것입니다. 

이미 앙상블을 경험해 보셨다면(Xgboost + RF + adaboost etc.), 이 말이 무슨 뜻인지 이해하기 쉽습니다.

가장 쉽게 말해서 prediction ensemble이라고 생각하면 편합니다. 

keras에서 사용하기는 더욱 쉽습니다. 단 몇줄의 코드로 끝나게 됩니다. 

tta_steps = 10
predictions = []

for i in tqdm(range(tta_steps)):
	# generator 초기화
    test_generator.reset()
    
    preds = model.predict_generator(generator = test_generator, steps = len(test_set) // batch_size, verbose = 1)
    predictions.append(preds)

# 평균을 통한 final prediction
pred = np.mean(predictions, axis=0)

# argmax for submission
np.mean(np.equal(np.argmax(y_val, axis=-1), np.argmax(pred, axis=-1)))

+ tqdm은 for-loop의 상태진행바를 나타내주는 library입니다(pip install tqdm)

Reference

https://towardsdatascience.com/test-time-augmentation-tta-and-how-to-perform-it-with-keras-4ac19b67fb4d
https://www.kaggle.com/c/2019-3rd-ml-month-with-kakr

'# Machine Learning > Keras Implementation' 카테고리의 다른 글

Keras Custom Activation 사용해보기  (0) 2019.10.27
keras Custom generator - 1  (1) 2019.07.29
Keras callback함수 쓰기  (0) 2018.12.23
Keras ImageDataGenerator flow 사용  (0) 2018.12.20
CNN visualization code (3)  (0) 2018.11.26