연구 목록

연구 02 · 컴퓨터 비전 · 이미지 분류

ResNet으로 의류 사진을 분류하는 모델

2021 · 학부연구생
공개 코드

K-Fashion 의류 사진을 드레스, 아우터, 바지, 상의로 나누도록 학습하고 클래스별 오류를 분석했습니다.

  1. 1의류 사진 4종

    가장 적은 클래스 수에 맞춰 샘플링

  2. 2ResNet50V2

    ImageNet 사전학습 가중치로 시작

  3. 3클래스별 오류 분석

    정밀도, 재현율, 혼동행렬

ImageNet 사전학습 ResNet50V2 활용

TensorFlowResNet50V2Class imbalanceError analysis

직접 맡은 역할과 결과

맡은 역할
사전학습된 ResNet50V2로 의류를 분류하는 학습 코드와 클래스별 샘플링, 평가 코드를 구현하고, 혼동행렬로 잘못 분류한 사례를 분석했습니다.
만들어낸 결과
K-Fashion 사진을 드레스, 아우터, 바지, 상의로 분류하도록 학습하고 결과를 분석하는 코드를 만들었습니다. 이후 공개 데이터인 Fashion-MNIST에서 설정을 하나씩 바꿔 가며, 데이터 증강과 숏컷 연결이 예측에 각각 어떤 영향을 주는지 확인했습니다.

직접 구현·분석한 것

  • ResNet50V2 분류 학습 코드
  • 학습, 검증 데이터를 클래스별로 다운샘플링
  • 클래스별 지표와 혼동행렬 검토
  • 드레스와 아우터 오류 사례 분석

바탕이 된 연구·공개 모델

  • ImageNet 사전학습 ResNet50V2 가중치
  • K-Fashion 데이터

원래 연구에서 분석한 데이터

공개 K-fashion 실험의 4개 클래스 혼동행렬. 여러 실제 클래스의 예측이 클래스 2로 몰려 있다.
원래 K-Fashion 실험의 혼동행렬입니다. 행은 실제, 열은 예측 클래스이며 0=드레스, 1=아우터, 2=바지, 3=상의입니다. 여러 실제 클래스가 바지(2)로 예측되는 쏠림을 확인했습니다. 아래 Fashion-MNIST 실험과는 다른 자료입니다.
K-Fashion 원연구의 클래스 0~3 학습·검증 이미지 수. 클래스별 표본 수의 차이를 보여주는 막대그래프
원래 K-Fashion 데이터의 클래스 분포입니다. 학습·검증 각각에서 가장 적은 클래스에 맞춰 샘플링한 이유를 보여줍니다.

실험 결과와 시행착오

예측 쏠림의 원인을 증강 설정과 숏컷 오류에서 찾았습니다

공개 데이터 Fashion-MNIST로 같은 코드를 돌려도 예측이 한쪽으로 쏠렸습니다. 원인은 증강 설정과 숏컷 연결 오류였습니다.

  • RTX A6000
  • TensorFlow 2.15
  • Fashion-MNIST 4클래스(드레스, 코트, 바지, 티셔츠)
  • 10 epoch
Fashion-MNIST 독립 테스트에서 원래 설정 48.9%, 숏컷 수정 78.7%, 증강 끔 94.4%, 여러 설정을 함께 수정한 경우 96.4%인 정확도 비교
Fashion-MNIST 4클래스의 독립 테스트 정확도(seed 0)입니다. 증강을 끄는 실험과 숏컷을 고치는 실험을 각각 비교했고, 마지막 막대는 숏컷·증강·L2 설정을 함께 바꾼 결과입니다.
  • 48.9% → 94.4%증강만 끈 비교 · Fashion-MNIST · seed 0
  • +29.8%p숏컷 연결만 수정 · 같은 seed 0
  • 0%원래 설정의 코트 재현율 · 같은 seed 0

문제와 해결

  1. 문제의류 종류별 사진 수가 달라 학습 표본이 일부 클래스에 치우칩니다.

    해결학습·검증 데이터에서 각각 가장 적은 클래스의 표본 수에 맞춰 다운샘플링했습니다.

  2. 문제전체 점수만으로는 어떤 옷을 서로 혼동하는지 알기 어렵습니다.

    해결클래스별 정밀도·재현율과 혼동행렬을 기록하고, 드레스·아우터 등 혼동 사례를 사진과 함께 분석했습니다.

  3. 문제예측이 한쪽으로 쏠려도 데이터 때문인지 코드 설정 때문인지 구분하기 어렵습니다.

    원인 분석Fashion-MNIST에서 증강·숏컷·정규화 설정을 하나씩 바꿔 비교해, 쏠림의 원인을 코드 설정에서 찾았습니다.

실험 비교와 세부 결과

Fashion-MNIST 테스트 사진 8장. 원래 설정의 두 코트 예측은 드레스·티셔츠였고, 증강을 끈 모델은 8장을 모두 맞힌 예시
Fashion-MNIST 사진 8장의 예측 예시입니다. 이 이미지를 만든 두 모델의 전체 정확도는 47.2%·94.2%로, 위 그래프의 seed 0과는 다른 실행입니다. 8장 중 맞힌 개수가 전체 정확도를 뜻하지는 않습니다.
독립 테스트 정확도 · 클래스당 1,000장 · 두 값은 seed 0 / 1
바꾼 설정 (한 가지씩)테스트 정확도가장 많이 예측된 클래스 비율
원래 설정48.9% / 39.1%36% / 49%
증강 끔94.4% / 94.3%26% / 26%
숏컷 연결 수정78.7% / 63.1%35% / 53%
L2 계수 0.01 → 0.000139.4%48%
혼합 정밀도 끔52.2%51%
모멘텀 0.1 → 0.924.9%99.9%
숏컷 수정 + 증강 끔 + L2 0.000196.4%25%

관찰한 원인과 남은 과제

  1. 증강이 의도보다 셌음

    약한 증강을 의도했지만 실제로는 ±72° 회전, 상하 뒤집기, 절반 크기 축소로 동작했고, 캐시 때문에 첫 epoch의 변형이 끝까지 고정됐습니다.

  2. 숏컷 연결 오류

    identity 숏컷이 원래 입력 대신 BN과 ReLU를 거친 값을 넘겼습니다. ImageNet 가중치는 오류 없이 들어가 겉으로는 드러나지 않았습니다.

  3. 평가 방식

    README의 recall은 0.5 임계값 기준이었고 평가에 검증 데이터를 다시 썼습니다. 여기 올린 정확도는 겹치지 않는 테스트 세트로 잰 값입니다.

결과를 읽는 기준

  • README의 평가는 검증 데이터를 다시 써서 독립 테스트가 아님
  • 오류 원인(불균형, 촬영 구도)까지는 검증하지 않음
  • 아래 수치는 Fashion-MNIST 4클래스로 10 epoch 학습한 결과
최근 프로젝트와 이어지는 점

클래스별 오류를 나눠 보고 평가 분할이 무엇을 뜻하는지 따져 본 경험은 지금도 이어집니다. CAD 가공 특징 모델에서도 클래스별 오류를 따로 보고, 형상 계열을 기준으로 데이터를 나눠 평가합니다.

3D 모델을 읽고 가공 전략까지 설계하는 AI