I. 프로젝트 개요

딥러닝 모델 학습에 있어서 클래스 불균형 문제는 아주 흔하게 접할 수 있는 문제다. 예를 들어, 신호등 상태 정보(Red, Yellow, Green, Red+Left, Green+Left)를 구분하기 위한 학습 데이터 셋을 구축하기 위해 도로에 나서서 신호등 영상을 촬영한다고 가정해보자. Red 신호와 Green 신호는 수십 초 이상 점등되는 반면 상대적으로 Yellow, Red+Left, Green+Left 신호는 그러지 아니하다. 특히 Yellow 신호는 단 3초밖에 점등되지 않기 때문에 전체 획득 데이터 중 Yellow 클래스의 라벨 수의 비율은 현저하게 낮을 수 밖에 없다. 이것을 클래스 불균형 문제라 하며, 클래스 불균형 상태에서 딥러닝 모델 학습 시 모델의 추론 결과가 예상대로 나타나지 않는 문제가 발생한다. 따라서 이번 프로젝트에서는 쉽게 구할 수 있는 학습 데이터셋으로부터 클래스 불균형 문제가 일어남을 확인하고, 그 문제가 모델의 성능에 미치는 영향, 학습 데잍터 셋의 클래스 분포를 균등 분포로 만들기 위해 총 4단계의 다운 샘플링을 수행하고 각 단계로부터 가장 균형있게학습하는 분포를 찾고 클래스 분포가 균등한 데이터 셋으로 학습 초반 오버피팅한 모델과 그러지 아니한 모델의 성능을 비교할 예정이다.

II. 프로젝트 환경

Platform Google Colab, GPU NVIDIA A100-SXM4-40GB, CUDA 11.3, Pytorch 1.12.1, Torchvision 0.13

III. 모델 선정 및 문제 확인

  1. 객체 탐지 모델

    실험에 사용할 객체 탐지 모델으로는 대중적인 동시에 Pytorch 기반인 YOLOv5 small을 사용하였고 Adam Optimizer, Cosine Learning Rate Schedule, Label Smoothing 0.1, Focal Loss 2.5, 배치 사이즈 64, 네트워크 사이즈는 480480으로 통일했다. 이 때, 본 프로젝트에서는 데이터 증강을 통한 성능 개선이 목적이 아니므로 기본 적용되어 있는 Random Crop, Random Flip 등의 증강은 작동하지 않도록 제거했다. 특히 학습 데이터 셋의 이미지 해상도가 2048px1536px인 반면 그 안의 신호등 객체는 Figure 1과 같이 주로 100px*50px이하의 작은 사이즈로 분포하는 것을 알 수 있는데 데이터 증강이 자칫 유의미한 정보를 손상시키기 쉬울 것을 염려했다.

    Figure 1. 트레이닝 셋 이미지 8,178장 내에서 신호등(라벨) 사이즈(width-height) 분포.

    Figure 1. 트레이닝 셋 이미지 8,178장 내에서 신호등(라벨) 사이즈(width-height) 분포.

  2. 테스트 셋 준비

    직접 취득한 테스트 셋 견본 16장. 이미지에 라벨을 그려 시각화 했다.

    직접 취득한 테스트 셋 견본 16장. 이미지에 라벨을 그려 시각화 했다.

    테스트 셋은 트레이닝 셋과는 다른 환경에서 직접 취득한 총 1234 장의 이미지 내에 Red, Yellow, Green, Red+Left, Green+Left 클래스가 500개 씩 고르게 분포되어있다.

  3. 학습 데이터셋으로부터 클래스 불균형 문제를 확인한다.

    ETRI 신호등 데이터 셋 견본 16장. 이미지에 라벨을 그려 시각화 했다.

    ETRI 신호등 데이터 셋 견본 16장. 이미지에 라벨을 그려 시각화 했다.

    실험에 사용할 학습 데이터 셋은 한국전자통신연구원 자율주행지능연구실(이하 ETRI)에서 제공하는 신호등 데이터 셋을 제공받아 사용한다. ETRI는 총 이미지 1만 장과 20개 클래스에 대한 라벨 정보가 제공하는데 본 프로젝트에서는 그 중 Red, Yellow, Green, Red+Left, Green+Left 총 5개의 클래스에 대한 라벨 정보만 이용할 수 있도록 파이썬 스크립트를 작성, 전처리하여 총 8,178장의 이미지만을 추출하여 사용하도록 한다. 전처리 후 데이터 셋 분석 결과표와 그 시각화는 각각 Table 1과 Figure 2과 같다.

    Table 1. 트레이닝 셋의 클래스 별 라벨 수 분석 표.

    Table 1. 트레이닝 셋의 클래스 별 라벨 수 분석 표.

    Figure 2. Table 1의 시각화.

    Figure 2. Table 1의 시각화.

    위와 같이 학습 데이터의 라벨 수가 균일하게 분포하지 않으면 동일한 Iteration만큼 학습하더라도 모델이 다수의 라벨 수를 갖는 클래스에 대해 편향되도록 학습하게 될 것임을 예상할 수 있다. 방법 1에서 설정한 모델과 위의 데이터셋을 바탕으로 동일한 21 Epochs(4500 Iteration)만큼 학습한 결과는 Table 2와 같다.

    Table 2. 클래스 별 Validation AP@50 분석 표.

    Table 2. 클래스 별 Validation AP@50 분석 표.

    Figure 3. 클래스 별 Epoch-Average Precision(이하 AP) Curve. Red(적색), Green(녹색), mAP(흑색), Green+Left(청색), Red+Left(자홍), Yellow(황색)으로 구분함.

    Figure 3. 클래스 별 Epoch-Average Precision(이하 AP) Curve. Red(적색), Green(녹색), mAP(흑색), Green+Left(청색), Red+Left(자홍), Yellow(황색)으로 구분함.

    예상했던대로 동일한 Epoch만큼 학습하더라도 Red와 Green가 이미 90% 이상의 Val AP를 보이는 반면 Yellow, Red+Left, Green+Left 클래스의 Val AP가 30% 미만으로 상대적으로 뒤쳐지는 것을 확인할 수 있다. 이는 Table 1에서 확인한 학습 데이터 셋의 분포와 유사한 양상임을 확인할 수 있다. 이 문제를 본 프로젝트에서 해결하고자 하는 문제로 설정하고자 한다.

IV. 문제 해결 방법 고안

III에서 확인한 클래스 불균형 문제를 해소하고자 하는 방법으로 모델 학습 초반부에 불균형한 학습 데이터 셋을 Down Sampling(=Under Sampling)하여 그 균형을 맞춘 샘플을 바탕으로 초반 학습을 해 모델이 모든 클래스에 대해 공정한 비율로 업데이트 된 Weight를 가지도록 이끈 이후 다시 Sampling 전의 샘플(Base)으로 학습하여 모델이 새로운 데이터를 바탕으로 일반적으로 학습할 수 있도록 하는 방법을 고안했다. 마치 우리가 시험 공부를 처음 접할 때, 흔히 출제되는 문제(다수 존재)와 지엽적인 문제(소수 존재)를 비슷한 비율로 공부 해 시험에 나올만한 문제 유형을 충분히 익히고 시작하는 것과 유사하다고 볼 수 있다.

(a) Down Sampling 단계 1

(a) Down Sampling 단계 1

(b) Down Sampling 단계 2

(b) Down Sampling 단계 2

(c) Down Sampling 단계 3

(c) Down Sampling 단계 3

(d) Down Sampling 단계 4

(d) Down Sampling 단계 4

(a)~(d)와 같이 클래스의 카테고리가 5개고 전처리 한 ETRI 데이터 셋(Base)으로부터 총 4 단계의 Down Sampling을 설정하고 어느 단계의 Down Sampling이 학습에 가장 좋은 성능을 보이는지 확인한 결과는 Table 3과 같다. Base를 포함한 각 단계 별 성능 확인을 위해 동일한 Iteration 만큼 학습하여 동일한 수의 훈련 데이터를 학습하고, Weight가 동일한 횟수만큼 업데이트 되도록 변인을 통제했다. Down Sampling 단계가 늘어남에 따라 데이터 분포의 공정함을 나타내는 수치인 Shannon Entropy가 최대치(1.609)에 접근하는 것을 확인할 수 있고 단계 4에서 최대치가 나타났다. 가장 공정한 유형인 단계 4의 경우가 각 클래스를 동일한 비율로 학습할 것이므로 각 클래스 별 Validation AP를 확인했을 때 Figure 3과 같이 각 클래스 별 AP가 제각각 상이하게 나타나는 것이 아니라 각각이 비교적 비슷한 수치의 AP를 보이는 양상을 띨 것이라고 예상된다. 그것을 이후 분산을 통해 분석해보도록 하겠다.

Table 3. 각 Down Sampling 단계 별 분석 표. 단계가 늘어남에 따라 클래스 별 라벨 수의 분포가 균형있게된다.

Table 3. 각 Down Sampling 단계 별 분석 표. 단계가 늘어남에 따라 클래스 별 라벨 수의 분포가 균형있게된다.

Figure 4. 색상 별로 구분된 각 단계-클래스 별 Epoch-Validation AP@50 Curve. Base(흑색), 단계 1(적색), 단계 2(황색), 단계 3(녹색), 단계 4(청색)으로 구분함.

Figure 4. 색상 별로 구분된 각 단계-클래스 별 Epoch-Validation AP@50 Curve. Base(흑색), 단계 1(적색), 단계 2(황색), 단계 3(녹색), 단계 4(청색)으로 구분함.

Table 4. 각 단계 별 Validation AP의 분산.

Table 4. 각 단계 별 Validation AP의 분산.

Figure 4는 각 단계에서 동일한 Iteration 만큼 학습 했을 때 5개 클래스의 AP를 각각 나타내는 그래프이며 Table 4는 각 단계 별 Validation AP의 분산을 나타낸다. 앞서 가장 최대의 Shannon Entrophy를 보이는 단계 4가 가장 분산이 낮을 것으로 예상했던 것과는 다르게 단계 3의 분산이 가장 낮게 측정되었고, Base의 분산이 단계 1의 분산보다 낮게 측정되었다. (단계가 증가함에 따라 분산 변화의 양상이 대체적으로 감소하는 것은 맞지만 규칙적으로 나타나지는 않았는데 원인으로는 데이터 증강과 학습 시의 랜덤 요소 때문이라고 예상된다.) 그럼에도 불구하고 단계 3의 경우를 클래스 불균형 문제를 해소하는 최적의 경우라 보고 이후 실험에서 사용할 초반 학습용 데이터로 채택했다.

Figure 5. 단계 3의 Epoch-Train Class Loss.

Figure 5. 단계 3의 Epoch-Train Class Loss.

Figure 6. 단계 3의 Epoch-Validation Class Loss.

Figure 6. 단계 3의 Epoch-Validation Class Loss.