티스토리 뷰
3. Convolutional Networks / L2. Convolutional Neural Networks - Applications of CNNs, How Computers Interpret Images
chrisysl 2018. 9. 3. 22:05Applications of CNNs
- CNN(Convolutional Neural Networks) 은 한국어로 합성곱 신경망 또는 콘볼루션 신경망 으로 불린다.
- 콘볼루션 신경망은 VUI(Voice User Interface), 자연어처리, 컴퓨터 비전 등 응용분야가 무긍무진하다.
- VUI의 사례로, 구글은 CNN을 사용하여 WaveNet 모델을 발매하였는데
- WaveNet은 텍스트를 input으로 받아 컴퓨터가 창출해낸 목소리로 그것을 읽어낸다.
- 진짜 개쩌는건 샘플을 제공해주면 가령, 내 목소리의 샘플을 제공해주면
- input으로 텍스트를 넣을때마다 output으로 내 목소리로 그 텍스트를 읽어낸다.
- 자연어처리에서는 RNN(Recurrent Neural Networks)가 CNN보다 더 많이 사용된다.
- 하지만 물론 자연어처리에서도 CNN이 사용될 수 있다.
- 앞으로 다뤄볼 내용은 CNN을 이용하여 컴퓨터비전 분야의 이미지분류 파트를 다뤄보도록 할 것이다.
- 이미지가 주어지면 CNN이 특정 lable을 추측 해 내는 구도이다.
- 광범위한 기술사용 예시중 몇가지를 뽑자면..
- WaveNet
How Computers Interpret Images
- 먼저 어떻게 딥러닝이 손으로 쓴 글씨체를 인지할 수 있는가에 대해 알아보도록 하자.
- MNIST 데이터베이스에서 데이터셋을 가져다 사용할 것인데,
- 손으로 쓴 70000개의 그레이스케일 이미지를 데이터로 한다.
- 각 데이터는 0~9까지의 숫자를 의미하고있다.
- 먼저, 케라스에서 데이터셋을 다운받고 필요로하는 파이썬 모듈을 import한다.
- 그다음, 학습시킬 이미지를 시각화 하게된다.
- 이 때 상대적으로 몇몇 숫자들이 더 인지하기 수월하다는 것을 알아차릴 수 있다.
- 알고리즘을 바탕으로 모델이 이미지를 인지하고 패턴을 발견하는 것이다.
- 이렇게 정립된 알고리즘은 학습했던 숫자가 아닌 새로운 숫자를 해독하는데에도 사용된다.
- 모든 그레이스케일 이미지는 컴퓨터에의해 배열로 해석된다.
- 각 배열엔 이미지 픽셀당 하나의 엔트리가 부여되는데, 이 엔트리 값은 0~255 값을 가진다.
- MNIST 데이터베이스에 있는 각 이미지들은 28x28 크기이다.
- 따라서 컴퓨터는 이를 28x28 배열의 데이터로 인지한다.
- 흰색 : 255 / 검은색 : 0 / 회색 : 0~255 사이의 값(예 : 114)
- 빠른 처리를 위해 0~255 사이의 값을 0과 1사이의 값으로 normalize 한다.
- 따라서 모든 픽셀의 값을 255로 나눠 줄 것임.
- Keras의 deep network에 값을 주기 전에 label을 미리 처리해 둬야한다.
- 현재 이미지들은 특정 정수를 나타내는 이미지이다.
- 이것을 one-hot encoding으로 변환해준다.
- one-hot encoding을 통해 위에서 확인할 수 있듯, 3의경우 0001000000과 같이 할당해준다.
- 이렇게까지 진행하면 데이터에 대한 전처리는 끝난다.
- 전에 다뤘던 숫자인식프로그램을 여기에 대입하면 더 수월할 것 같지만 불가능하다.
- 이전의 알고리즘에선 input으로 벡터만을 받았다.
- 따라서 이전 알고리즘을 사용하려면 현재 모든 이미지들을 벡터로 변환해야하는데 쉽지않다.
- 가령 4x4 이미지의 경우 16 엔트리를 가진 벡터로 변환할 수 있어서 가능하지만 번거롭다.
- 예를들어 4x4 크기의 이미지의 경우 위와같이 일렬로 나열하여 벡터로 집어넣는 방법인데
- 28x28 크기의 경우 784 엔트리를 받는 벡터로 받아와야한다.
- 이렇게 직렬화 과정을 거쳐 MLP의 input layer에 입력해주면 된다.