AI 시각지능 & 멀티모달

이미지 처리 기초 개념과 CNN

수진97 2025. 11. 9. 16:27

안녕하세요!

오늘은 컴퓨터 비전(CV : Computer Vision) 관련 개념과 CNN에 대해 살펴보겠습니다.

 

1. 컴퓨터 비전(Computer Vision)

- 사람이 사물을 인식하듯이, 컴퓨터가 이미지를 분석하고 이해하는 기술로 시각지능이라고도 함.

- 카메라, 센서 등 디지털 신호를 통해 입력된 이미지 데이터를 해석하여 의미 있는 정보 추출

 

 

2. 컴퓨터 이미지 인식 과정

 

1) 이미지 입력

- 카메라나 파일 등을 통해 픽셀 단위로 이미지 수집 (CNN에서 픽셀들이 담긴 지역적 덩어리가 특징임)

- 여기서 픽셀은 0 ~ 255 숫자로 구성

- 색상(RGB), 밝기(그레이 스케일) 등의 기본 정보로 변환

 

 

2) 데이터 전처리

- 노이즈 제거 : 불필요한 데이터 제거

- 정형화(크기 조정) : 모델이 처리할 수 있는 해상도(Height X Width)로 조절

- 정규화(스케일링) : 색상, 밝기 값의 범위 조정

 

=> mnist 다중분류모델의 경우 load시 2차원(28 X 28)으로 구성 ---> 이미지는 3차원이므로 reshape를 통해 3차원으로 변환해 주어야 함.

 

- 반전(Black <-> White) : 255 - img

- 이미지 사이즈 resize

- 학습 시 구조로 reshape

 

 

 

3) 특징 추출

- 모서리, 패턴 등 사물의 특징 추출

- CNN(합성곱 신경망)을 활용해 자동으로 특징 학습 (필터가 여러 개 픽셀 덩어리를 하나의 특징으로 추출)

 

 

4) 분류 및 인식

- 딥러닝 기반의 모델(CNN 등)로 사물을 분석하고 분류함.

 

 

5) 결과 출력

- 예측된 결과를 확률 값과 함께 출력

- Object Detection(객체 인식) 혹은 Segmentation(분할) 로도 활용 가능

 

출처 : https://www.nvidia.com/ko-kr/glossary/computer-vision/

 

3. CNN 개념

- 특정 물체(Target)를 파악하기 위해서는 해당 물체의 부분적인 특징(Feature)으로부터 얻은 데이터를 보고 파악 가능

- 예를 들면, 고양이를 눈, 귀, 수염 등의 지역적인 부분 특성을 통해 알 수 있음.

=> 특정 부분(영역)을 잘 캐치하는 필터가 필요!

 

필터는 왼쪽 위 끝에서부터 오른쪽으로 이동하며 특징을 찾음.

오른쪽 끝까지 이동했다면 한 칸 내려와 왼쪽 끝에서부터 다시 반복하며 특징 추출

 

필터 내 가중치 존재

(객체의 특정 부분 발견 시 숫자값이 커지며, 발견되지 않으면 0에 가까운 값을 반환)

 

결론적으로 객체를 찾는 데 오차를 최소화하는 지역적 특징을 추출하는 필터를 만드는 과정을 컴퓨터 비전에서의 학습 과정으로 보면 됨. 

예측과정은 학습된 필터로 동일 객체가 담긴 새로운 사진을 보여주었을 때 특징을 추출해 객체를 판별해 내는지 예측.

 

 

 

 

4. CNN 구조

CNN 딥러닝 학습 과정에서 필터의 개수는 점점 늘어나고, 필터의 사이즈는 반대로 점점 줄어듦.

[예시] 28 X 28 X 1 -> 32 X 28 X 28 -> 32 X 14 X 14 -> 64 X 14 X 14 -> 64 X 7 X 7 -> 128 X 7 X 7 -> 128 X 3 X 3 -> 256 X 1 X 1(종료) => 결론 : 28 X 28 사이즈의 한 이미지는 256개의 특징으로 파악 가능

출처 : https://casa-de-feel.tistory.com/38

 

1) input_shape

- 분석(예측) 단위인 이미지 한 장의 크기 => 입력받는 이미지 사이즈

- 픽셀 사이즈, (Height X Weight XChannel)로 표기

- 채널값(흑백 = 1, 컬러 = 3)

=> 흑백의 경우, 0이 검은색 / 1이 흰색

 

 

2) CNN Layer(= 합성곱 층)

- 필터로 데이터에 담겨 있는 지역적인 특성(Local feature)을 뽑는 과정

- Conv2D() 메서드를 통해 수행

 

Conv2D(32, kernel_size=(3,3), input_shape=(5,5,1), padding='same', strides=(1,1), activation='relu')

 

=> 위 코드 예시에서 필터(커널) 수는 32개

 

kernel_size=(3,3)은 세로 크기 3, 가로 크기 3인 커널 사이즈 지정을 의미

가로와 세로의 길이가 같을 시, kernel_size = 3으로도 표기 가능

 

 

 


=> 필터가 2차원으로 이동하며 합성곱 연산을 수행하여 Feature Map(특징 맵) 생성(필터 32개 = 특징맵 32개)

컬러 이미지 1장 (28,28,3) ----- 32개 필터(+padding) ----> 특징맵 32개  (32,28,28)  

 

- 이미지는 3차원 구조 -> 필터가 2차원이므로 필터를 거친 특징맵 또한 2차원 

- 컬러 이미지의 경우 채널 3개(R, G, B)에 필터를 동시에 적용

=> 채널(R, G, B) 각각에 대해 합성곱 연산을 한 후, 결과를 모두 더해 feature map을 생성

 

 

- padding = 'same' 옵션이 있기 때문에, 사이즈가 그대로 28 X 28. 만약 이 옵션이 빠져있다면 사이즈는 줄었을 것.

- 필터에는 각각 가중치가 담겨 있음.

- 합성곱 연산의 원리 : 찾고자 하는 값일 경우 숫자가 더 커지고, 찾지 않는 값일 경우가 결괏값이 더 작아지는 원리를 활용

출처 : https://casa-de-feel.tistory.com/38

 

 

 

* CNN Layer도 마찬가지로 은닉층(Hidden Layer)이기 때문에 Conv2D 메서드에서 활성화함수인 activation='relu'를 작성해주어야 함.

 

 

* strides = (1,1)

- strides = 1로도 표기 가능. (1이 기본값이라 생략 가능)

- 가로 1칸, 세로 1칸씩 이을 의미

- 필터 이동 시, 몇 칸 이동할 건지 이동 간격 결정

 

 

* padding = 'same'

- 합성곱 연산 수행 시, 가장 테두리에 있는 Input의 커널들의 경우, 연산에 1번밖에 참여를 못함.

- 만약 끝에 있는 커널들에 중요한 정보가 담겼다면 반드시 다른 커널들과 동일한 횟수로 연산에 참여해야 올바른 결괏값 도출 가능.

- 합성곱 수행 결과 Output(특징맵) 도 Input과 동일한 사이즈로 출력되도록 해주는 옵션

(Size 유지를 위해 이미지 둘레에 0으로 덧대기) 

- padding = 'same'을 해주지 않으면, 당연히 사이즈가 줄어듦.

 



 

 

 

 

3) Max Pooling Layer

- 뽑은 특징을 요약(압축) 

- MaxPooling2D() 메서드를 통해 수행

- MaxPooling의 경우 말 그대로 최댓값만 뽑아서 특징이 가장 크게 나타나는 데이터로 요약한 것을 의미.

* (32,28,28)   ----- MaxPooling ----> (32,14,14) 

출처 : https://casa-de-feel.tistory.com/38

 

- Conv2d와 쌍으로 묶어 다닌다고 생각하면 됨.

- 특징 개수는 유지하 되, 사이즈를 줄여서 중요 특징만 남기도록 압축시킴.

- MaxPooling의 경우, 단순히 요약 역할이지 은닉층이 아님.

- strides = 2 가 기본값.

 


MaxPooling2D(pool_size=(2,2), strides=(2,2))

 

- pool_size : 풀링 크기 행 X 열

- strides 옵션 : 생략 시 pool_size와 동일

- 출력 데이터 크기 : Input Size // Pooling Size (몫, 나머지 버림)



 

 

 

4) Flatten Layer

- 최종 예측 결과를 뽑기 위해서는 기본 층인 Dense Layer로 연결해야 함.

- 이때, Dense Layer로 연결하기 위해 1차원으로 펼침.

- Flatten() 메서드 수행

- Dense Layer의 경우, Fully Connected로 구성되어 있음.