🚗 1. CNN을 활용한 이미지 분류, 직접 구현해보기
앞선 글에서는 합성곱과 풀링 연산을 통해 CNN의 작동 원리를 살펴보았다.
오늘은 그 이론을 바탕으로 실제로 차량과 보행자를 구분하는 CNN 모델을 구현해본다.
이 실습은 자율주행의 핵심 기술 중 하나인 객체 인식(Object Recognition) 의 기초 단계다.
즉, 차량과 보행자를 정확히 분류할 수 있어야 안전한 주행 판단이 가능하다.

🧩 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. 간단한 코드 구조 (개념적 예시)
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의 원리 이해하기”
'자율주행' 카테고리의 다른 글
| Day 65: 보행자 행동 예측 모델 구현 (0) | 2025.10.31 |
|---|---|
| Day 64: RNN, LSTM 개념 학습 (0) | 2025.10.30 |
| Day 62: 합성곱, 풀링 연산 실습 (0) | 2025.10.28 |
| Day 61: CNN 기본 구조 이해 (0) | 2025.10.27 |
| Day 60: 논문 리뷰 + 학습 정리 (0) | 2025.10.26 |