[KT] AIVLE SCHOOL 10일차
컴퓨터 비전(Computer Vision) 이란?
- 사람이 사물을 인식하듯이, 컴퓨터가 이미지를 분석하고 이해하는 기술
- 카메라, 센서 등을 통해 입력된 이미지 데이터를 해석하여 의미 있는 정보를 추출
컴퓨터의 이미지 인식 과정
- 이미지 입력
- 카메라나 파일을 통해 픽셀(pixel) 단위로 이미지 수집
- 색상(RGB), 밝기(그레이 스케일) 등의 기본 정보로 변환
- 전처리
- 노이즈 제거 : 불필요한 데이터 제거
- 크기 조정 : 모델이 처리할 수 있도록 해상도 조절
- 정규화 : 색상, 밝기 값의 범위를 일정하게 조정
- 특징 추출
- 모서리, 패턴, 질감 등 사물의 특징을 추출
- 고전적 방법 : SIFT, HOG, SURF 같은 알고리즘 사용
- 딥러닝 방식 : CNN(합성곱 신경망)을 활용해 자동으로 특징 학습
- 분류 및 인식
- 딥러닝 기반의 모델(CNN, ResNet 등)로 사물을 분석하고 분류
- 예 : 개와 고양이를 구분하는 이미지 분류 모델
- 결과 출력
- 예측된 결과를 확률 값과 함께 출력 (예 : 고양이 95% 확률)
- 객체 인식(Object Detection) 또는 분할(Segmenttion)로도 활용 가능
CNN 컨셉
- 우리는 고양이 사진을 보고 귀, 눈, 코, 수염 등을 보고 고양이인지 알 수 있다.
- 이 모든 것은 특정 부분(영역)에서 얻어낸 특징(feature) 이다.
- 이러한 특징으로부터 고양이인지 알 수 있다.
- 귀를 잘 캐치해내는 필터
- 귀 부분을 찾으면 숫자가 커지고 없으면 숫자가 거의 0에 가까워 짐
- 왼쪽 위 끝에서부터 오른쪽으로 몇 칸씩 움직이며 '귀'를 찾음
- 오른쪽 끝까지 이동한 후에 왼쪽으로 돌아와 아래로 몇 칸 내려와서 다시 오른쪽으로 이동
- CCN 학습 : 고양이를 잘 맞추는 필터 여러 개를 만드는 것
- 위 설명은 이해를 돕기 위한 것이며 실제로는 귀나 눈 등 우리가 이해하는 특징이 아닌 우리가 이해할 순 없지만
- 고양이를 찾는데에 오차를 최소화하는 특징을 추출하는 필터를 만들어내게 됨 (학습)
- 필터 = 특징 추출기
- 예측
- 학습된 필터를 이용해 새로운 사진으로부터 특징을 추출하여 고양이인지 아닌지 판별
CNN 구조
- input_shape : 분석 단위인 이미지 한 장의 크기(픽셀 사이즈, 채널 * 세로 * 가로)
- 흑백 : 채널 = 1
- 칼라 : 채널 = 3
- Convolutional Layer : 필터로 지역적인 특성(feature)를 뽑는 과정
- Max pooling Layer : 뽑은 특징을 요약(압축)
- Flatten(펼쳐서) 후 Dense Layer에 연결
Conv2d
- Conv2d : 이미지 분석에 주로 사용
- 지역적(Local) 특징을 추출
- 필터(커널)
- 2차원으로 이동하며 Feature Map 구성
- 입력(채널) 수 : 1, 출력(커널) 수 : 32
- kernel_size = 3 : 세로 3, 가로 3
- stride : 몇 칸 씩 이동할 것인지 지정 / stride = 1 -> 가로, 세로 이동 칸 수
- padding : size 유지되도록 이미지 둘레에 0으로 덧대기 / padding =1 -> 1칸(픽셀) 덧대기
nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
- 합성곱(Convolution) 연산
MaxPooling
- 목적 : 강조할 데이터만 남기고 크기 축소
- kernel_size = 2 : 풀링 크기 2 X 2
- stride = 2 : 2칸 씩 이동
- 출력 크기 : Input Size // Pooling Size (나머지는 버림)
nn.MaxPool2d(kernel_size=2, stride=2)
데이터 크기 변화
nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1), # 1
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2), # 2
nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1), # 3
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2), # 4
Flatten과 Dense Layer
CNN + MaxPooling Layer로 특징을 추출한 후
최종 예측 결과로 뽑기 위해서는 값을 펼치고(Flatten)
nn.Linear로 연결해야 함 (입력 데이터 크기는 이전 레이어의 출력 크기)
'Data Science > 딥러닝' 카테고리의 다른 글
Object Detection (1) | 2025.04.09 |
---|---|
Early Stopping와 Dropout (0) | 2025.04.08 |
모델 성능 최적화 (0) | 2025.04.07 |
분류 모델링(Classification) (0) | 2025.04.07 |
회귀 모델링(Regression) (0) | 2025.04.04 |