[AI] CNN(Convolutional Neural Network) - 합성곱 신경망
CNN
CNN?
- Deep learning 구조
- 주로 컴퓨터 비전(이미지, 동영상관련 처리) 에서 사용되는 딥러닝 모델로 Convolution 레이어를 이용해 데이터의 특징을 추출하는 전처리 작업을 포함시킨 신경망(Neural Network) 모델
Computer vision with CNN
Couputer Vision
- 이미지, 동영상 관련 등의 비정형 데이터를 이용한 딥러닝
- 어려운 이유
- 사람과 컴퓨터가 보는 이미지의 차이
- 컴퓨터가 보는 이미지는 0 ~ 255 사이의 숫자로 이뤄진 행렬
종류
Image Classification (이미지 분류)
- 입력된 이미지가 어떤 라벨에 대응되는지 이미지에 대한 분류(Classification)을 처리
Object Detection(물체 검출)
- 이미지 안의 Object(물체)들의 위치를 찾고 어떤 물체인지 분류하는 작업
- box 형태의 x,y 좌표를 찾음
- box 종류
- box 대각선 두 점
- box 중앙과 높이, 길이
- Localization : 이미지안에서 하나의 Object의 위치와 class를 분류
- Dection: 이미지 안의 여러개의 Object의 위치와 Class를 분류
Image Segmentation
- 픽셀 별로 분리
- Detection과의 차이점은 분리 유무
- Detection의 경우 box를 이용해 검출하는데 box가 겹치는 부분이 존재
- Segmentation의 경우 픽셀이 겹치지 않는다
Image Captioning
Super Resolution
Neural Style Transfer
- 입력 이미지와 스타일 이미지를 합쳐 합성된 새로운 이미지 생성
- 이미지 스타일 변경
Text Dectection & OCR
- Text Dectection: 이미지 내의 텍스트 영역을 Bounding Box로 찾아 표시
- OCR: Text Detection이 처리된 Bounding Box 안의 글자들이 어떤 글자인지 찾음
Human Pose Estimation
- 인간의 관절 포인트(Keypoint)를 점으로 추정해 자세예측
CV vs 전통적인 영상처리 방식
- Handcrafted Feature (전통적인 영상처리 방식)
- 분류하려고 하는 이미지의 특징들을 사람이 직접 찾아서 만든다
- 찾아낸 특징들을 기반으로 학습
- 특성 추출을 위해 Filter 행렬을 주로 이용
- 사람이 직접 찾기 때문에 특징을 놓친다면 학습 못해 성능 떨어짐
- 인적 자원의 한계
- End to End learning (딥러닝)
- 이미지의 특징 추출부터 추론까지 자동으로 학습
CNN 구성
- 이미지로부터 부분적 특성을 추출하는 Feature Extraction 부분과 분류를 위한 추론 부분
- Feature Extraction 부분에 이미지 특징 추출에 성능이 좋은 Convolution Layer를 사용
- Feature Exctraction : Convolution Layer
- 추론 : Dense Layer (Fully connected layer) 등
- 추론에 Convolution Layer 사용가능하며 이런 Network를 Fully Convolution Network(FCN)이라고 한다
- 입력에 Dense Layer를 사용한 경우
- 이미지의 공간적(spatial) 구조를 학습하는 것이 어렵다
- 이미지를 input으로 사용하면 weight의 양이 이 매우 큼
- 일반적으로 convolutional layer + pooling layer 구조를 여러 개 쌓는다
- 동일한 레이어들의 구조를 반복해서 쌓을 때 그 구조를 Layer block이라고 한다
- convolution과 pooling layer를 묶어서 반복한 것을 convolution block이라고 한다
- Bottom단의 Convolution block에서 Top 단의 convolution block으로 진행 될 수록 **feature map의 size(height, width)는 작아지고 channel(depth)는 증가
- Top단으로 갈수록 더 큰 영역에서 특성을 찾게 되므로(이미지 크기가 줄기 때문에 더 넓은 영역 파악)더 많은 특성을 찾도록 하기 위해
- Fully connected layer를 이용해 추론
Convolution(합성곱) 연산
- Convolution Layer는 이미지와 필터간의 Convolution(합성곱) 연산을 통해 이미지의 특징을 추출
- 합성곱 연산은 input data와 weight간의 가중합을 구할 때 한번에 구하지 않고 작은 크기의 Filter를 이동시키면서 가중합을 구한다
- filter와 부분 이미지의 conv(합성곱) 결과가 나온다는 것은 그 부분 이미지에 filter가 표현하는 이미지 특성이 존재한다는 것
- CNN의 filter는 데이터 학습에 의해 만듬
Filter
- Hand Craft 방식의 Filter
- 사람이 직접 연구를 통해 filter 개발했던 경우
- 필요한 특성이 N개 있다면 그것들을 찾기 위해서 Filter N개를 만들어 특성을 추출하고 추출한 특성들을 머신러닝 모델의 입력으로 넣어 학습시켰다
- 종류
- Sobel filter
- X-Direction Kernel : 이미지의 수직 윤곽선
- Y-Direction Kernel : 이미지의 수평 윤곽선
- Deep Learning(CNN)에서의 Filter
- 입력층(Bottom)과 가까운 Convolution 레이어일 수록 input image의 작은 영역에서의 특징들을 찾는다
- 작은 영역에서의 특징을 찾기 때문에 이미지의 엣지나 경계선 등 일반화가 쉬운 이미지의 기초적인 표현을 찾는다
- 비교적 간단하게 판단한 수 있는 특징들
- 출력층(Top)과 가까운 Convolution 레이어일 수록 input image의 넒은(큰) 영역에서의 특징들을 찾는다
- 넓은 영역에서의 특징을 찾기 때문에 일반화가 곤란한 구체적인 이미지의 표현을 찾는다
- 작은 범위의 특징들이 합쳐져 큰 범위의 특징이 된다 생각하면 된다
CNN in keras(parameter)
- hyperparameter
- filters
- Layer를 구성하는 filter(kernel)의 개수
- Feature map output의 깊이
- Feature map
- Filter를 거쳐 나온 결과물, 특성 개수
- Feature map의 개수는 Filter당 한개가 생성
- Feature map의 크기(shape)는 Filter의 크기(shape), Stride, Padding 설정에 따라 달라진다
- kernle_size
- 개별 Filter의 크기(height, width)
- 보통 홀수 크기로 잡는다(3, 5...)
- padding
- input tensor의 외곽에 특정 값(보통 0)을 둘러싼다
- stride
- Input shape
- (데이터 개수, height, width, channel)
- Height : 세로 길이
- Width : 가로 길이
- Channel : 하나의 Data를 구성하는 행렬의 개수
- Data의 경우 행렬 여러 개가 겹쳐져 있는 형태일 수도 있다
- 흑백(Gray scale) 이미지는 하나의 행렬로 구성
- 컬러의 경우 RGB의 각 이미지로 구성되어 3개의 행렬로 구성
- input과 filter 예
- input(6x6x3), filter(3x3x3) 1개인 경우
- filter 3개인 경우
Padding
- 이미지 가장자리의 픽셀은 convolution 계산에 상대적으로 적게 반영
- 이미지 가장자리를 0으로 둘러싸서 가장자리 픽셀에 대한 반영 횟수를 늘림
- => 이미지 외곽이 filter를 거치는 횟수가 적은데 더 많은 횟수를 거치기 위해 0으로 이미지를 늘린다
Strides
- Filter(Kernel)가 한번 Convolution 연산을 수행한 후 옆 혹은 아래로 얼마나 이동할 것인가를 설정
- (가로이동크기, 세로이동크기) 를 지정하는데 둘이 같을 경우 하나만 지정
- ex)
- stride=2: 한 번에 두 칸씩 이동 (feature map의 너비와 높이가 2배수로 다운샘플링 되었음을 의미)
- convolution layer에서는 일반적으로 1을 지정
Max Pooling Layer
- 해당 영역의 input 중 가장 큰 값을 출력
- 일반적으로 2x2 크기에 stride는 2를 사용 (겹치지 않게 한다)
- 강제적인 downsampling(이미지의 크기 줄임) 효과
- Input의 size를 줄여 계산속도를 높임
- 특징의 공간적 계층구조를 학습 => 부분적 특징을 묶어 전체적인 특징의 정보를 표현