목표
- Object Detection 개요
- 분류 vs 검출의 차이
- Bounding Box, IoU(Intersection over Union), NMS(Non-Max Suppression) 개념
- R-CNN 계열 (2-stage) vs YOLO/SSD (1-stage) 모델
- OpenCV 기초
- 이미지 입출력, 색공간 변환, 도형 그리기
- 실습
- 동전 이미지에서 원 검출 (Contour/Hough Circle)
- 동전 크기별 금액 계산 후 시각화
Object Detection
이미지 분류(Classification) vs Object Detection
- 이미지 분류: 이미지가 어떤 객체인가
- Object Detection: 어디에 어떤 객체가 있는가
Object Detection 특징
- 전처리 (Pre-processing)
- 특징 추출 (Feature Extraction)
- 분류 (Classifier)
R-CNN 계열 (2-stage) vs YOLO (1-stage) 비교
- R-CNN: 객체 탐지 (Object Detection) 분야에서 처음으로 CNN 적용한 모델
- R-CNN 계열 주요 아이디어
- 이미지를 영역 제안(Region Proposal)을 통해 여러 개의 작은 후보로 나눔
- 후보 각각을 CNN에 입력해 특징을 추출
- 추출된 특징 벡터를 분류기(SVM)에 입력해 객체 분류
- Bounding Box Regression을 통해 위치를 보정
- "Region Proposal + CNN = 객체 탐지"
YOLO (you only look once)
- one-shot 특징 분류기
- 이미지를 단 한번만 호출하고 동시에 각 영역에 가중치를 부여 (분류 + location 동시에 가능)
- 실시간 영상에 특화
- 주요 아이디어
- 이미지 입력 및 CNN 처리해 특징 추출 및 정보를 생성
- Bouding Box 및 클래스 예측을 통해 객체 위치 및 클래스를 예측
- Non-Maximum Supperession(NMS)을 통해 중복된 박스 제거 및 최종 객체를 결정
R-CNN vs YOLO
- YOLO에서 오버헤드가 크게 감소
- R-CNN 계열은 Region Proposal 후보를 수천개 제안
- YOLO는 총 7x7x2 = 98 개의 연산 후보를 제안
R-CNN | YOLO | |
구조 | Region Proposal 단계 + CNN 탐지 단계(2-stage) | 단일 CNN 구조(1-stage) |
Region Proposal | Selective Search 사용 ➡️ 매우 느림 | Region Proposal 단계 없음 |
복잡도 | Region Proposal 단계와 CNN 단계에서 연산 반복 ➡️ 연산량 증가 | CNN Forward Pass 한 번에 해결 |
속도 | 매우 느림 ➡️ 실시간 탐지 불가 | 매우 빠름 ➡️ 실시간 탐지 가능(FPS > 30) |
성능 | 높은 정확도 | 정확도는 조금 떨어짐 (하지만 속도 빠름) |
활용 분야 | 정밀한 객체 탐지 (의료) | 실시간 탐지 (영상) |
YOLO
등장 개념
- 바운딩 박스(bounding Box): 최종 객체 검출 영역
- 객체가 존재하는 위치 나타내는 직사각형 상자
- YOLO는 (x, y, w, h) 값으로 경계 상자 예측
- (x, y): 경계 상자의 중심 좌표
- (w, h): 경계 상자의 너비와 높이
- ROI (region on interest): 관심있는 지역
- 분석하고자 하는 특정 영역
- 이미지에서 전체가 아닌 특정 부분만 선택해 처리할 때 사용
- IOU (Intersection over Union): 예측한 Bounding Box와 실제 객체의 Bounding Box 간 겹치는 정도를 나타내는 지표
- IoU = (예측 영역 ∩ 실제 영역) / (예측 영역 ∪ 실제 영역)
- NMS: Non Maximum Suppression
- YOLO는 같은 객체에 대해 여러 개의 Bounding Box 출력 가능
- NMS는 겹치는 박스 중 신뢰도가 가장 높은 것만 선택하고 나머지는 제거
구조
- 입력 이미지 448 x 448 x 3 (RGB) 크기에 맞춰 변환한 뒤, CNN에 입력
- 이미지를 7 x 7 크기의 그리드 셀로 나눔 (총 49개)
- 각 그리드셀에서 다음 정보를 출력 ➡️ 총 30개:
- Bouding Box 2개 ➡️ 각 Box 당 5개 값 (x, y, w, h, c)
- 클래스 확률 (20개) ➡️ VOC 데이터셋에서 기준 클래스 수
빨간색 그리드셀 위치에서 예측한 노란색 바운딩 박스 2개
- 각 그리드 셀은 최대 두 개의 Bounding Box 예측
값 | 설명 |
x, y | 그리드 셀 내에서 Bouding Box의 중심 좌표 |
w, h | 전체 이미지 기준 Bounding Box의 너비 및 높이 |
c | Bouding Box의 신뢰도(confidence), 객체가 있을 확률 |
그리드 셀에서 존재하는 20개 클래스 예측 확률
- 각 그리드 셀은 20개의 클래스 확률을 출력
- 클래스 예측 예시:
- 개 (Dog) ➡️ 0.8
- 자전거 (Bike) ➡️ 0.1
- 자동차 (Car) ➡️ 0.05
NMS 단계
- 여러 개의 중복된 박스 중에서 가장 신뢰도가 높은 박스를 남기고 나머지는 제거
- 예를 들어 IoU(Intersection over Union)가 일정 값 이상이면 중복된 것으로 판단하고 제거
OpenCV
- 실시간 이미지 및 비디오 처리용 오픈소스 라이브러리 (C++, Python 지원)
- YOLO가 객체 탐지 시 이미지 불러오고, 전처리하고, 결과 시각화하는 작업에서 OpenCV 필요
활용 범위
- 이미지 및 영상 데이터 처리
- YOLO가 입력할 이미지나 영상을 OpenCV로 읽기
- YOLO가 탐지한 결과 이미지를 OpenCV로 표시
- 전처리 필수 도구
- YOLO가 정확히 탐지할 수 있도록 이미지 크기 조정
- 노이즈 제거, 색상 변환 등 전처리 작업 수행
- 결과 시각화
- YOLO가 탐지한 객체를 Bouding Box로 표시
- 탐지 결과에 텍스트 추가 및 저장
- 속도가 빠르고 효율적
- C++ 기반 ➡️ 연산 속도 빠름
- Python 지원 ➡️ 코드 작성이 간단
- 다양한 딥러닝 모델과 연동 가능
- YOLO, Faster R-CNN 등 객체 탐지 모델에서 사용 가능
'AI > 딥러닝' 카테고리의 다른 글
실무에 쓰는 머신러닝 기초 1주차 (딥러닝) (0) | 2025.03.26 |
---|---|
이미지 데이터와 불량 검출 4일차 (YOLOv8 & COCO) (0) | 2025.03.25 |
이미지 데이터와 불량 검출 2일차 (이미지 분류, 전이 학습, 데이터 증강) (0) | 2025.03.18 |
이미지 데이터와 불량 검출 1일차 (0) | 2025.03.13 |
시계열 다루기 3일차 (0) | 2025.02.28 |