프로젝트/코드프레소 체험단

이미지 데이터 처리를 위한 CNN 완벽 가이드 - CNN 모델

KimCookieYa 2022. 3. 4. 19:12

CNN 구조

 - DNN(Deep Neural Network)와 같이 입력 계층, 출력 계층 그리고 두 계층 사이의 여러 개의 은닉 계층으로 구성

 - CNN의 은닉 계층은 특징 추출, 분류 분석 2가지로 구성

CNN의 구조

 

CNN의 은닉 계층에서 데이터를 분석하는 순서

1. 특징 추출 : 특징 및 위치 정보를 추출

2. 분류 분석 : 1에서 추출된 정보를 이용해 분류

CNN에서 데이터 분석 순서

 

Feature Extraction(특징 추출 계층)

 - 입력 데이터의 특징을 위치 정보와 함께 추출하기 위한 계층

 - 3D Tensor를 출력

 - Convolution : 특징 추출에 사용되는 연산

 - Relu : 활성화 함수

 - Pooling : 데이터의 사이즈를 줄이기 위한(압축) Sub Sampling 전략

 

 

Classification(분류 계층)

 - 특징 추출 계층에서 얻은 정보를 이용해 분류를 수행하는 계층

 - DNN에서 사용한 FCL(Fully Connected Layer)을 그대로 사용한다

 - 입력된 3D Tensor를 FCL에 넣을 수 있게 1D Tensor로 바꿔줘야 한다

 - Flatten : 특징 추출 계층의 정보를 FCL에서 처리할 수 있는 형태로 가공

 - FCL : 특징 추출 계층의 정보를 처리

 - Softmax : 분류 분석을 위한 활성화 함수

 

 

CNN의 주요 개념

 - 필터(Filter, Kernel)

 - 합성곱(Convolution)

 - 특성맵(Feature Map)

 - 스트라이드(Stride)

 - Padding

 - Pooling

 

 

Filter(필터)

 - 입력된 이미지의 특성을 추출하기 위한 일종의 도구(Kernel, mask라고도 불림)

 - 입력된 이미지에 Filter를 Convolution 연산을 통해 적용함으로써 패턴 추출

 

 

Convolution(합성곱)

 - 두 개의 matrix를 동일한 Position 해당 값끼리 곱한 후 더하는 연산

CNN 연산

1. Filter는 일반적으로 5*5, 11* 11 등과 같은 정사각 행렬로 정의
2. Filter가 이미지 데이터 행렬을 순회하며 Convolution을 수행
3. 연산 수행의 결과는 Feature Map이라는 새로운 행렬

 

 

이미지 분석과 Conv Layer

 - 고정된 사이즈의 필터가 input의 전체 영역을 필터의 사이즈만큼씩 sliding하면서 분석

 - 하나의 필터로 이미지 내 여러 위치에 존재하는 특성 검출 가능

 - 눈을 검출하는 필터로 사람의 얼굴 분석 시, 좌, 우 눈 검출 가능

Conv Layer

 

 

이미지 분석과 FC Layer

 - input 이미지 전체 픽셀에 연결되어 있는 퍼셉트론의 가중치를 이용하여 한번에 분석

 - 하나의 퍼셉트론으로는 특정 위치에 존재하는 특성만 검출 가능

 - 왼쪽 눈을 검출하는 퍼셉트론은 오른쪽 눈은 검출 불가

FC Layer

 

 

Conv Layer의 특성

 - Translation Invariance : 함수의 입력이 바뀌어도 출력은 그대로 유지되어 바뀌지 않음을 의미

 - ex) 왼쪽눈, 오른쪽눈 모두 눈을 검출하는 필터를 적용 시, 동일한 결과

 - Locality of pixel dependencies : 이미지에서 특징들은 좁은 영역에 있는 여러 픽셀들에 걸쳐 나타남을 의미

 - 하나의 픽셀 또는 전체 픽셀을 분석할 필요 없이, 3*3, 5*5처럼 작은 사이즈의 픽셀 묶음을 분석할 때 주요한 특징을 찾을 수 있다

 

 

Stride

 - 과거 하드웨어 성능이 부족해서 연산의 비효율을 줄이기위해 고안됨

 - Locality of pixel dependencies로 인해 필터 적용 연산의 비효율 발생

 - 입력 이미지의 근접한 영역에 필터 적용 시 유사한 결과 발생

 - Stride : Filter가 원본 이미지 데이터의 행렬을 순회할 때 지정하는 간격

Stride

 

 

Padding

 - Convolution 연산과 Stride 적용 시, Feature Map 행렬의 크기는 원본 행렬보다 작아진다

 - 행렬 연산은 행렬 간의 크기가 중요함(shape이 맞지 않는 행렬은 연산 불가 또는 누락되는 정보 발생)

 - 원활한 행렬 연산을 위해 Padding 기법으로 원본 행렬 크기로 맞춤

 - 주로 0으로 채워넣음 : Zero Padding

 

 

Pooling

 - Feature Map에서 크기를 축소(Sub sampling)

 - 고해상도 이미지를 저해상도로 바꾸는 작업과 유사

 - ex) Max Pooling, Average Pooling