자율주행

Day 63: 차량/보행자 이미지 분류 CNN 구현

Tech Knowledge Note 2025. 10. 29. 21:00
반응형

🚗 1. CNN을 활용한 이미지 분류, 직접 구현해보기
앞선 글에서는 합성곱과 풀링 연산을 통해 CNN의 작동 원리를 살펴보았다.
오늘은 그 이론을 바탕으로 실제로 차량과 보행자를 구분하는 CNN 모델을 구현해본다.

이 실습은 자율주행의 핵심 기술 중 하나인 객체 인식(Object Recognition) 의 기초 단계다.
즉, 차량과 보행자를 정확히 분류할 수 있어야 안전한 주행 판단이 가능하다.

차량/보행자 이미지 분류 CNN 구현


🧩 2. 데이터 준비: 차량 vs 보행자 이미지
먼저 분류를 위해 두 가지 클래스의 이미지를 준비해야 한다.

  • 🚘 Class 1: Vehicle (차량)
    자동차, 버스, 트럭 등 도로 위 차량 이미지
  • 🚶 Class 2: Pedestrian (보행자)
    횡단보도를 건너거나 길을 걷는 사람 이미지

이 데이터는 Kaggle이나 OpenCV의 예제 데이터셋(예: INRIA Person Dataset)을 활용할 수 있다.

📦 데이터 전처리 과정
1️⃣ 모든 이미지를 64×64 크기로 리사이즈
2️⃣ 픽셀 값을 0~1 범위로 정규화 (Normalization)
3️⃣ 훈련(Training) / 검증(Validation) / 테스트(Test) 데이터 분리


💡 3. CNN 모델 설계 개요
간단한 CNN 모델은 다음과 같이 구성할 수 있다.

1️⃣ 입력층(Input Layer)

  • 크기: (64, 64, 3)
  • 컬러 이미지 입력

2️⃣ 합성곱층(Convolution Layer)

  • 필터: 32개, 커널 크기 3×3
  • 활성화 함수: ReLU

3️⃣ 풀링층(Pooling Layer)

  • Max Pooling, 크기 2×2

4️⃣ 드롭아웃(Dropout)

  • 일부 노드를 무작위로 비활성화해 과적합 방지

5️⃣ 완전연결층(Fully Connected Layer)

  • 128개 노드, 활성화 함수: ReLU

6️⃣ 출력층(Output Layer)

  • 2개 클래스 → Softmax 함수로 확률 출력

🧠 4. 간단한 코드 구조 (개념적 예시)

python
 
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

model = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(64,64,3)),
    MaxPooling2D(pool_size=(2,2)),
    Dropout(0.25),
    Conv2D(64, (3,3), activation='relu'),
    MaxPooling2D(pool_size=(2,2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(0.5),
    Dense(2, activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
 
📘 핵심 포인트
  • Conv2D와 MaxPooling2D가 CNN의 중심 연산
  • Dropout은 일반화 성능을 높여줌
  • Softmax는 두 클래스 중 확률이 높은 쪽을 선택

📈 5. 학습(Training)과 평가(Evaluation)
모델을 학습시킬 때는 다음과 같은 전략을 사용한다.

  • Epoch: 20~30
  • Batch Size: 32
  • Optimizer: Adam
  • 손실 함수: Categorical Crossentropy

훈련이 끝나면, 테스트 데이터로 정확도를 확인한다.
예를 들어,

  • 차량 정확도: 97%
  • 보행자 정확도: 94%
    정도의 성능을 얻을 수 있다면, 실습으로는 충분히 훌륭한 수준이다.

🔍 6. 예측 결과 시각화
테스트 이미지 몇 장을 모델에 입력해보자.

  • 모델이 0.95 확률로 ‘Vehicle’을 예측하면 자동차 이미지
  • 모델이 0.92 확률로 ‘Pedestrian’을 예측하면 사람 이미지

이 과정을 통해 CNN이 어떻게 “이미지를 보고 판단하는지” 직관적으로 확인할 수 있다.


🚀 7. 확장 아이디어

  • 데이터 증강(Data Augmentation):
    회전, 반전, 확대 등을 적용해 데이터 다양성 확보
  • 전이학습(Transfer Learning):
    기존 모델(VGG16, ResNet 등)을 활용해 더 높은 성능 달성
  • 실시간 감지(Real-Time Detection):
    CNN + OpenCV를 이용하면 웹캠을 통한 실시간 분류도 가능

8. 마무리 정리
오늘은 CNN을 이용해 차량과 보행자를 구분하는 이미지 분류 모델을 구현했다.
이 과정은 자율주행 인공지능의 기본 인지 단계(Perception Layer) 를 이해하는 첫걸음이다.

다음 글에서는 시퀀스(Sequence) 데이터를 처리하는 RNN과 LSTM 구조를 학습하며,
시간적 패턴을 이해하는 AI의 영역으로 확장해볼 것이다.

반응형

📅 다음 글 예고:
👉 [Day 64: RNN, LSTM 개념 학습]
“시간을 기억하는 인공지능 — 순환신경망(RNN)과 LSTM의 원리 이해하기”


반응형