참고
https://www.youtube.com/watch?v=YRhxdVk_sIs
https://deeplizard.com/resource/pavq7noze2
정직하게 코딩하며 배우는 딥러닝 Do it!
index
computer vision & deep learning
convolution operation
convolution operation with edge detection
filter
learning to detect edges
padding
stride
summary of convolutions
convolutions over volumes
one layer of a convolutional network
CNN example
Pooling
CNN
대표적인 CNN - LeNet, AlexNet
computer vision & deep learning
컴퓨터 비전은 딥러닝 발전 영역에서 가장 두각을 나타내는 분야 중 하나다.
Image Classification
Object Detection
Object Tracking
Semantic Segmentation
Neural style Transfer
등등
computer vision 분야에서는
이미지의 윤곽 contours, 모서리 edge를 인식하기 위해 CNN을 활발하게 사용하는데,
CNN을 이해하기 위해서는 우선 Convolution operation을 이해해야 한다.
CNN에서 이미지를 인식할 수 있도록 하는 패턴을 'kernel', 'filter', 'feature detector'라고 한다.
convolution operation
1차원 배열에서의 convolution operation을 살펴보자.
최종 목적지는 x * w (x와 w의 합성곱)
x = [2,8,3,7,1,2,0,4,5]
w = [2,1,5,3]이라고 하자.
step 1. 배열 하나를 선택해 뒤집기
w = [2,1,5,3]
w_reverse = w_r = [3,5,1,2]
step 2. 첫번째 합성곱
뒤집은 배열을 x와 맞추어 놓는다.
그리고 배열 원소끼리 곱한 뒤에 더한다. (dot product)
x = [2,8,3,7,1,2,0,4,5]
w_r = [3,5,1,2]
x * w = 2*3 + 8 * 5 + 3 * 1 + 7 * 2 = 6 + 40 + 3 + 14 = 63
step 3. 두번째 합성곱
w_r을 오른쪽으로 한 칸 옮겨서 다시 dot product를 수행한다.
이를 반복한다.
x * w_r = 8 * 3 + 3 * 5 + 7 * 1 + 1 * 2 = 24 + 15 + 7 + 2 = 48
다시..
x * w_r = 3 * 3 + 7 * 5 + 1 * 1 + 2 * 2 = 49
x * w_r = 7 * 3 + 1 * 5 + 1 * 1 + 2 * 2 = 28
x * w_r = 1 * 3 + 2 * 5 + 0 * 1 + 4 * 2 = 21
x * w_r = 2 * 3 + 0 * 5 + 4 * 1 + 5 * 2 = 20
...
따라서 x * w = [63, 49, 28, 21, 20]이다.
실제 CNN에서는 convolution 연산 대신에 교차 상관을 사용한다.
교차 상관이란, Convolution 연산과 다른 조건은 똑같지만,
w_r처럼 배열을 뒤집지 않고, w으로 연산을 수행한다.
그 이유는.. 어차피 weight array 는 무작위 초기화되기 때문이다.
따라서 w_r로 하는 작업이 불필요하다.
Padding, Stride
패딩, 스트라이드는 합성곱 신경망을 위한 핵심 개념이다.
Padding은 원본 배열의 양 끝에 빈 원소를 추가하는 것을 말한다.
stride는 미끄러지는 배열의 간격을 조절하는 것을 말한다.
padding, stride에 따라서 valid padding, full padding, same padding으로 구분할 수 있다.
1) valid padding
padding은 원본 배열에다가 빈 원소를 추가하는 것이라고 앞서 언급하였다.
이때 valid padding은 다른 패딩 원소를 추가하지 않고, 합성곱(교차상관)을 수행한다.
이 경우에는, 배열의 원소마다 연산에 참여하는 횟수가 달라지게 된다.
x = [2,8,3,7,1,2,0,4,5]
w = [2,1,5,3]
이 사례로 살펴보면,
x_count = [(2,1), (8,2), (3,3), (7,4), ...]로 원소마다 참여 횟수가 다르다는 것을 알 수 있다.
2) full padding
원소의 모든 요소가 동일한 정도로 연산에 참여하게 만들기 위해
full padding 기법이 등장한다.
full padding에서는 원본 배열의 양 끝에 가상의 원소(0)를 추가한다.
0을 추가하기 때문에 zero padding이라고 하기도 한다.
x = [2,8,3,7,1,2,0,4,5]
-> x_full = [0, 0, 0, 2, 8, 3, 7,1, 2, 0, 4, 5, 0, 0, 0]
* 0 원소를 추가한 만큼 noise가 발생하므로 이를 trade-off 관계에 있다고 한다.
3) same padding
same padding은 출력 배열의 크기가 원본 배열의 길이와 같아지도록 zero padding을 추가한다.
예를 들면,
x = [2,8,3,7,1,2,0,4,5]
-> x_same = [0, 0, 2, 8, 3, 7,1, 2, 0, 4, 5, 0]
이렇게 배열을 구성하면, 출력 배열의 길이가 9개로 같아진다.
-> CNN에서는 주로 same 패딩을 사용한다고 한다.
이번에는 stride를 살펴보자.
1) stride
stride는 learning rate와 비슷한 개념 같다.
stride는 미끄러지는 배열의 간격을 말한다.
stride = 2라면,
2씩 뛰어가며 convolution operation을 수행하게 된다.
2차원 배열에서도 convolution operation을 똑같이 할 수 있다.
CNN은 일반적으로 4차원 배열이다. (너비 * 높이 * RGB)
filter
합성곱의 가중치를 의미한다.
filter, kernel이라고도 한다.
pooling operation
convolution을 거쳐서 나온 activation maps가 생겼을 때
이를 이루는 convolution layer에서 최댓값을 고르거나, 평균값을 계산하는 등
resizing 하여 새로운 layer를 얻는 것.
왜 pooling을 사용하냐고 묻는다면..
그건.. overfitting을 방지하기 위함이다.
CNN - Computer vision problem
CNN에서 학습이란 최적의 filter 행렬을 찾아가는 것이다.
steps
<low level> - <Mid level> - <high level>
- convolution 매커니즘 : vertical edges, horizontal edges
learning to detect edge
-> 모르겠는 부분 : vertical edge detection / horizontal..
https://brunch.co.kr/@coolmindory/36
https://brunch.co.kr/@coolmindory/36
컴퓨터는 filter 행렬을 통해 edge를 인식한다.
image가 주어졌을 때, 그 이미지에서 윤곽선을 검출하기 위해 filter를 직접 설정할 필요는 없다.
CNN에서는 filter의 원소를 parameter로 설정한 뒤에,
back propagation을 이용해 스스로 학습하게 해서 최적의 filter를 찾는다.
summary of convolutions
convolutions over volumes
convolutions on RGB images
multiple features
example of a layer
one layer of a convolutional network
CNN example
CNN
대표적인 CNN - LeNet, AlexNet
LeNet
Yann LeCun이 최초로 개발한 CNN구조이다.
step 1. convolutions, subsampling(pooling)을 반복적으로 거친다.
: 이미지 형상으로 분할/분석
step 2. FC fully connected NN
: 분류/설명
마지막에 FC fully connected multi-layer neural network로 연결하여
classification을 수행하게 된다.
* FC : 한 층의 모든 뉴런이 다음 층의 모든 뉴런과 연결된 상태
2차원의 배열 이미지를 1차원의 평탄화 작업을 통해
이미지를 분류하는 데 사용되는 계층이다.
(위 이미지에서 납작한 부분에 FC라고 적혀있다.)
AlexNet
ImageNet 화상 인식 대회에서 우승한 CNN 구조이다.
2개의 GPU를 기반으로 한 병렬 구조라는 점이 LeNet-5와 다른 점이다.
5개의 convolution layer, 3개의 fully-connected layer로 구성되어 있다.
마지막 FC layer는 1000개의 category로 분류하기 위해 activation function으로 softmax 함수를 사용한다.
'Data Science > AI' 카테고리의 다른 글
tweepy (0) | 2021.09.29 |
---|---|
RNN, LSTM에 대해 알아보자 | (0) | 2021.09.25 |
Deep Learning - DNN에 대해 알아보자 | ANN, DNN (0) | 2021.09.25 |
Deep learning 기초 정리 | 퍼셉트론, 신경망, 3차신경망 학습, 오차역전파법 등 (0) | 2021.09.24 |
NLP - attention (0) | 2021.09.24 |