컴퓨터 비전은 딥러닝에 의해 빠르게 발전해오는 분야중 하나이다. 컴퓨터 비전에 대한 딥러닝이 흥미로울 것이라고 생각하는 이유에는 두가지가 있다.
완전히 새로운 어플리케이션을 볼 수 있게 해 줄 것이다.
컴퓨터 비전의 연구과정에서 독창적이고 창의적인 신경망 구조와 알고리즘을 이용해 왔기 때문에, 다른 분야로도 이를 적용해 볼 수 있다.
컴퓨터 비전의 문제중 하나는 입력값이 매우 커질 수 있다는 것이다.
예를들어 1000 X 1000 크기의 RGB 채널을 가진 이미지를 입력받는경우,
입력 feature 는 1000 X 1000 X 3 으로 300백만이 된다.
거기에 1000개의 hidden unit 을 사용한 신경망을 구성한다면 (1000, 3M) 차원의 파라미터를 가지게 되고, 파라미터의 갯수는 30억개가 된다.
이렇게 파라미터가 많아지면 문제점이 생긴다.
신경망이 overfitting 을 피할만큼 충분한 데이터를 얻는 것이 어려워진다.
컴퓨터 리소스, 메모리 사용량을 고려했을 때, 이를 실행시킬 수 없다.
Edge Detection Example
6x6x1 의 이미지가 있을 때, vertical edge 를 감지하기 위해서 3x3 매트릭스를 사용할 것인데, 이러한 행렬을 filter 라고 부른다.
이미지와 필터를 convolution 연산을 해서 4x4 행렬의 결과를 얻을 수 있다. 행렬의 각 요소의 값은 이미지와 필터간의 요소간 곱셈결과를 전부 더한값을 넣는다.
더 직관적인 예제로 다음과 같이 왼쪽은 10, 오른쪽은 0 인 입력값이 있을 때, 필터와 convolution 한 결과 가운데에 edge 가 감지됨을 확인 할 수 있다.
More Edge Detection
filter 를 변경함으로써 다른 형태의 edge 도 찾을 수 있다.
위와 같이 vertical edge 를 찾는 필터를 90도 회전하는 경우, horizontal edge 를 찾는 필터로 사용할 수 있다.
이렇게 우리가 9개의 숫자를 선택할 수 있는데, 딥러닝에서는 직접 선택할 필요가 없으며, 학습을 통해서 이 값들을 얻게 된다. 그래서 어떤 방향의 edge 도 감지할 수 있게된다.
Padding
n x n 행렬과 f x f 행렬을 convolution 연산의 결과는 (n-f+1) x (n-f+1) 형태의 행렬이 될 것이다. 이는 두가지 단점을 가지고 있다.
convolution 연산을 할 때 마다, 이미지가 축소된다.
모서리에 있는 픽셀들이 다른 픽셀보다 현저히 적게 사용된다.
이럴 때, 이미지를 padding 하는것이 해결책이 될 수 있다.
valid convolution : 패딩을 하지 않는 convolution 연산
same convolution : 패딩을 해서 결과값의 크기가 입력값과 같게끔 하는 convolution 연산
필터의 사이즈는 주로 홀수로 작성한다.
패딩을 하는 경우 비대칭적으로 해야한다.
중앙 포지션을 가질 수 있다.
Strided Convolutions
stride 는 convolution 연산을 할 때, filter 와 요소간 곱셈을 하는 영역을 한칸씩 이동하는 것에서, stride 값 만큼씩 이동하는 것을 의미한다.
Convolutions Over Volume
실제 이미지는 RGB 채널을 가지고 있기 때문에, 2d 입력이 아니고 3d 입력이라고 할 수 있다.
edge 를 감지하길 원하는 채널에 해당하는 필터의 채널에 값을 채워서 edge 를 감지할 수 있다. edge 를 찾고 싶지 않은 채널은 값을 모두 0으로 한다.
여러개의 필터를 사용하고 싶다면, 여러개의 필터와 convolution 연산을 하고 결과를 여러개의 레이어로 쌓는다.
One Layer of a Convolutional Network
convolution 연산의 결과에 bias 를 추가하고 ReLu를 적용하는 것으로 CNN 의 한 레이어를 만들어 볼 수 있다.
z[1] = W[1]a[0]+b[1]
a[1] = g(z[1])
의 식으로 정리 한다면, a[0] 는 input x 이고, filter 들이 W[1] 의 역할을 한다고 볼 수 있다.
Simple Convolutional Network Example
convolutional network 예제이다. 다음과 같은 특성을 가지는 것을 확인 할 수 있다.
input의 nH, nW 가 점점 작아진다.
마지막 레이어에서 커다란 벡터로 만들어서 처리한다.
convolutional 신경망의 레이어에는 세가지 타입이 있다.
convolution
polling
fully connected
Pooling Layers
max pooling : 특정 영역의 최대값을 취하는 방법
average pooling : 특정 영역의 평균값을 취하는 방법
Why Convolutions?
convolution 을 사용했을때, 파라미터 갯수를 많이 줄일 수 있다.
convolution 이 이렇게 파라미터 갯수를 줄일 수 있는 이유는 다음과 같다.
parameter sharing : feature detector 가 특정한 파트에서 유용할 때, 다른 파트에서도 유용할 가능성이 높다.
sparsity of connections : 각 레이어의 각 결과값이 전체 입력에 작은 부분에 의존하기 떄문
Convolutional Neural Networks
Computer Vision
컴퓨터 비전은 딥러닝에 의해 빠르게 발전해오는 분야중 하나이다. 컴퓨터 비전에 대한 딥러닝이 흥미로울 것이라고 생각하는 이유에는 두가지가 있다.
컴퓨터 비전의 문제중 하나는 입력값이 매우 커질 수 있다는 것이다. 예를들어 1000 X 1000 크기의 RGB 채널을 가진 이미지를 입력받는경우,
이렇게 파라미터가 많아지면 문제점이 생긴다.
Edge Detection Example
More Edge Detection
filter 를 변경함으로써 다른 형태의 edge 도 찾을 수 있다.![스크린샷 2021-10-27 오후 7 05 54](https://user-images.githubusercontent.com/15242339/139045307-154fb4ff-4fae-47d7-ba7f-72bdbb3ce637.png)
위와 같이 vertical edge 를 찾는 필터를 90도 회전하는 경우, horizontal edge 를 찾는 필터로 사용할 수 있다.
이렇게 우리가 9개의 숫자를 선택할 수 있는데, 딥러닝에서는 직접 선택할 필요가 없으며, 학습을 통해서 이 값들을 얻게 된다. 그래서 어떤 방향의 edge 도 감지할 수 있게된다.
Padding
n x n 행렬과 f x f 행렬을 convolution 연산의 결과는 (n-f+1) x (n-f+1) 형태의 행렬이 될 것이다. 이는 두가지 단점을 가지고 있다.
이럴 때, 이미지를 padding 하는것이 해결책이 될 수 있다.
valid convolution : 패딩을 하지 않는 convolution 연산 same convolution : 패딩을 해서 결과값의 크기가 입력값과 같게끔 하는 convolution 연산
필터의 사이즈는 주로 홀수로 작성한다.
Strided Convolutions
stride 는 convolution 연산을 할 때, filter 와 요소간 곱셈을 하는 영역을 한칸씩 이동하는 것에서, stride 값 만큼씩 이동하는 것을 의미한다.
Convolutions Over Volume
실제 이미지는 RGB 채널을 가지고 있기 때문에, 2d 입력이 아니고 3d 입력이라고 할 수 있다. edge 를 감지하길 원하는 채널에 해당하는 필터의 채널에 값을 채워서 edge 를 감지할 수 있다. edge 를 찾고 싶지 않은 채널은 값을 모두 0으로 한다.
여러개의 필터를 사용하고 싶다면, 여러개의 필터와 convolution 연산을 하고 결과를 여러개의 레이어로 쌓는다.
One Layer of a Convolutional Network
Simple Convolutional Network Example
Pooling Layers
Why Convolutions?
convolution 을 사용했을때, 파라미터 갯수를 많이 줄일 수 있다.
convolution 이 이렇게 파라미터 갯수를 줄일 수 있는 이유는 다음과 같다.