#4 - Convolutional Neural Network (CNN)
이미지 학습은 어떻게 하는가?
- 상식적으로 컴퓨터는 숫자만 연산가능하고, 이미지는 연산 불가능하다.
- 그러나 컴퓨터에서 이미지는 숫자(RGB)로 구성된 픽셀 덩어리이다.
- 따라서 이미지를 숫자로 변환하여 딥러닝하면 많은 곳에 사용가능하다.
- 대표적으로 사물인식 시스템, 손글씨 인식 시스템, 암 진단 등에 사용됨
- 이런 이미지 학습은 주로 CNN 방법을 사용하여 딥러닝한다.
- 아래는 필자가 과거에 프로젝트에서 사용한 사물인식 시스템이다.(MobileNet_ssd_v2)
- 하나의 픽셀은 [ [R], [G], [B] ]의 값을 가진다. (범위 : 0 - 255)
Convolutional Neural Network (CNN)
- 합성곱신경망이라고 하는 딥러닝 알고리즘
- CNN의 핵심은 이미지 전체를 작게 분해해서 해석하고, 분석하는 것
- Convolutional Layer를 사용하여 특징을 분석하고 학습한다
Flatten Layer
- 이미지를 숫자로 바꾸면 2차원 행렬 형태의 데이터나 나온다.
- 그러나 우리가 실제로 학습한 결과로 원하는 데이터는 1차원 데이터이다. (확률을 원하기 때문)
- 따라서 2차원 데이터를 1차원으로 바꾸는 Flatten 레이어가 필요하게 된다.
Convolutional Layer
- Flatten Layer로 인하여 1차원으로 바뀐 데이터는 몇가지 문제점을 가지고 있다.
- 이미지의 원본 형상이 깨진다.
-> 원본이 어떻게 생겼는지 알기가 어렵다. - 예측 모델의 응용력이 사라진다.
-> 이전에 학습한 가중치들이 비슷하지만 다른 형상에서는 쓸모가 없어진다.
- 이미지의 원본 형상이 깨진다.
- 이것에 대한 해결책으로 Convolutional Layer로 특성추출(feature extraction)한다.
- 특성 추출(feature extraction)
- 이미지에서 중요한 정보를 추려서 복사본을 생성한다.
- 복사본에는 중요한 특징(feature), 특성을 반드시 포함하게 한다.
- 강조되는 특징은 세로선 강조, 가로선 강조, 특정색상 강조 등이 포함된다.
Feature map & kernel
- kernel을 거쳐서 새로운 Layer을 생성함
- kernel은 강조하고 싶은 feature에 따라 다양하게 존재한다.
- kernel을 통과하는 과정에서 각각의 멤버에 곱한값을 모두 더해서 넘어가게 된다.
- ex) 5 x 5 행렬이 3 x 3 크기의 kernel을 통해 3 x 3 크기의 행렬로 변하게 된다.
- Tensorflow에서는 16종의 커널을 모두 적용시켜준다. ( Conv2D( size, (x, y) ) )
단순 convolution의 문제점
- 단순한 convolution에서는 특성(feature)의 위치에 따라 다른 사진으로 구분해버린다.
- 응용력이 굉장히 낮다.
- 이를 해결하기 위해 Pooling Layer를 사용함
Pooling Layer(Down sampling)
- 이미지에 대한 응용력을 높이기 위하여 Polling Layer를 이용함
- 이미지의 특징만 추려서 학습하게 한다.
- Max Pooling : 최댓값만 추려서 학습
- Average Pooling : 평균값으로 추려서 학습
- Min Pooling : 최솟값만 추려서 학습
결론
- Convolutional Layer를 사용하여 이미지를 분석하는데 사용하자
- Convolutional Layer는 kernel를 통해 feature extraction 하게 한다.
- Convolutional Layerd와 Pooling Layer를 함께 사용하면 translation invariance 의 장점을 가진다.
- 일반적인 CNN구성법
- Image Input
- Filters
- Convolution Layers
- Pooling
- Flattening
- Output
- 다음 포스트에서는 실제로 Tensorflow를 사용하여 학습해보겠습니다.
😺 오타나 논리적 오류 지적은 언제든지 환영합니다!😺
항상 읽어주셔서 감사합니다~ 🙏
Leave a comment