프로젝트 및 실습/Pytorch (Computer Vision)

[Pytorch] 분류기 뉴럴 네트워크 개발 일기 (2) - 모델 성능 향상

jooona 2021. 7. 27. 11:55
반응형

지난 번 초기 모델들에서 외투를 상의와 제대로 구별 못하는 문제점이 나타났다. 이번 글에서는 이 문제점을 고치는 과정을 작성해보려고 한다.

 

1. 데이터 불균형 문제 개선을 위한 데이터 증폭

첫번째로 시도해 본 방법은 데이터 불균형 문제 개선. 훈련 집합에 외투의 데이터가 4984개, 상의의 데이터가 20218개로 크게 차이가 난다는 점을 개선하고자 한 것이다. 

 

가장 먼저 해 본 것은 훈련 집합의 모든 외투 사진에 대해 3개의 변형 이미지를 생성해 본 것. 이 방법을 통해 외투 사진을 19936개로 늘려서 상의의 데이터와 비슷한 수준으로 증폭시켰다.

 

결과는?

 

위의 사진은 VGG 11의 결과를 나타낸 것이다. 외투에 대해서는 정확도가 높아졌지만, 상의에 대한 정확도가 떨어지며, 전체적인 정확도는 유사하게 유지되었다.

 

심지어 ResNET 50의 경우는 더 심각했는데, 외투를 제외한 모든 클래스에 대해 정확도가 낮아진 것. 이유를 찾아보니...

 

학습과정에서 과적합(Overfitting)문제가 발생한 것 같다. 정상적으로 학습이 된다면 좌측의 VGG처럼 검증 집합의 loss가 훈련 집합의 loss와 함께 떨어져야 되는데 (물론 어느 순간 과적합으로 인해 올라가긴 하겠지만), 우측의 ResNET의 경우를 보면 시작부터 loss가 비상적인 것을 확인할 수 있다. 

 

이렇게 해결해야 할 문제가 하나 더 늘었다. ResNET의 과적합 문제도 고쳐야 한다.

 

 2. 문제점 파악

위의 실험에서 두 가지 문제점을 얻었다.

 

1. 이미지 변형을 이용한 이미지 증폭으로는 원하는 결과를 얻어내지 못했다.

2. 학습 이미지 수가 늘어나며 ResNET에 과적합 문제가 발생했다.

 

이제 이 두가지를 해결해보자.

 

 3. 이미지 증폭 방법 변경

위에서 이미지를 뒤틀고, 회전하고, 뒤집어서 이미지를 증폭시켰었는데, 생각해보니 테스트 집합에 뒤틀리거나 회전된 이미지가 없다는 점이 떠올랐다. 그래서 이번엔 두 가지 방법을 시도했는데

 

1. 외투 사진에 대해서 하나의 이미지를 원본 그대로 4개로 복제하여 훈련 집합의 개수만 늘리는 방법.

2. 외투 사진에 채도, 색조 변경을 통해 색상 변형 데이터 증폭을 이용하는 방법.

 

위 결과는 VGG를 이용해 분류를 한 결과이다. 결과적으로는 1 퍼센트 정도 향상을 보여줬지만, 조금 더 성능을 향상시키고 싶다.

 

4. 과적합 문제 해결

과적합 문제를 해결하는 첫번째 방법은 모델의 크기를 줄이는 것. 이에 따라서 ResNet의 층 수를 줄여보았다. 기존의 50층짜리 모델에서 34층, 18층짜리 모델로 축소해서 실험을 해보았고, 그 결과는...?

 

Loss 그래프만 봐도 알수 있듯이 보기 좋게 실패. 과적합 문제를 해결하지 못했다. 

 

5. 모든 훈련 집합에 대해 데이터 색상 변환 증폭

과적합 문제를 해결하기 위한 두 번째 방법은 훈련 집합의 데이터 수를 대폭 늘리는 것이다. 그리고 이 방법으로 모델의 성능 향상도 기대하며, 모든 훈련 집합 데이터들에 대해 색상을 변환하는 방법으로 훈련 집합 전체를 4배로 증폭시켜 보았다.

 

훈련 집합 전체의 데이터셋 개수를 4배로 늘렸더니 과적합 문제를 해결할 수 있었다.

 

6. 증폭 데이터 적용

마지막으로 이 4배로 늘린 데이터를 계속 ResNET보다 성능이 좋았던 VGG에 적용시키기로 했다. 

 

결과적으로 근소하게 정확도가 높아진 것을 확인할 수 있다.

 

정확도도 epoch가 진행되어도 97퍼센트 초반 대에서 더 이상 오르지 않는 것을 확인할 수 있다. 이 정도 성능에 만족하기로 하고 성능 향상을 마무리지었다.

 

코드는 https://github.com/JunhaLee/Pytorch_Practice에서 확인할 수 있다.

 

GitHub - JunhaLee/Pytorch_Practice

Contribute to JunhaLee/Pytorch_Practice development by creating an account on GitHub.

github.com

 

반응형