영상과 MNIST

yoon·2021년 10월 10일
0

(*이 시리즈의 내용은 모두 '인공지능 100점을 위한 파이썬 수학' 서적의 내용을 정리한 것입니다. 사진과 같은 자료들 또한 출처가 위 책임을 밝힙니다.)

1. 영상의 이해

  • 모든 영상은 가로와 세로 크기를 가진다.

2. 디지털과 아날로그 신호

  • 과거 디지털 센서는 필름의 해상도를 따라가지 못했으나, 현재는 그렇지 않고, 이는 어마어마한 결과를 낳았다고 한다.
    - 필름과 달리 장기간 저장이 가능하다.
    - 색에 대한 구체적인 수치를 가진다.
    - 원래 찍혔던 것을 완벽하게 복원할 수 있다.
    - 이전엔 인화하거나 복사하면 노이즈가 생겼지만 언제든 똑같이 저장할 수 있다.
    - 아무리 많이 저장하더라도 수치는 변하지 않는다.

3. 샘플링과 양자화

  • 양자화는 그림의 색을 저장할 때 어느 정도의 정밀도를 가지게 저장할 것인지를 결정한다.
    한 점의 색이 흑백이면서 검고 흰 정도를 2단계로 표현할 수 있다.(이 때 정보는 0(검다) 또는 1(하얗다)을 의미한다)

  • 이미지에서 양자화는 색의 정보를 저장하기 위한 이론이다.

  • 2단계에서 4단계, 8단계로 색의 정보를 표현하는데, 단계가 높아질 수록 눈에 보이는 것과 유사하게 표현할 수 있다.

  • 2단계는 0과 1로 표현하기 때문에 1개의 비트, 4단계는 두개, 8단계는 3개의 비트가 필요하다.

  • 비트가 하나씩 늘어날 때마다 정밀도는 2배씩 증가한다.

  • 내가 저장하려는 정보의 정밀도를 위해 몇 개의 비트가 필요한지 알아야하고, 이를 위해 양자화를 사용한다.(양자화로 정밀도를 알 수 있는게 아니라, 정밀도를 알기 위해 양자화를 사용한다!)

  • 한 점을 흑백으로만 표현하면 윤곽선은 뚜렷해지지만 음영이나 여러 정보를 얻기 어려워진다.(p.154 사진 참고)

  • 최근 스마트폰으로 사진을 찍으면 24비트 양자화된 정보를 저장한다.
    일반적인 사진은 컬러 24비트 양자화 된 것이다.(즉, 빨(r), 초(g), 파(b)를 각각 24개의 비트로 나누어 저장)

  • 각각의 화소, 픽셀은 RGB값을 저장하고 각각의 정보에 사용되는 비트는 24비트이다.
    즉, 24(R)+24(G)+24(B)인 72비트에 하나의 점의 컬러값에 대한 정보를 저장한다.

  • 8비트를 1바이트(1byte = 8bit)로 계산하면 각각의 픽셀은 9바이트의 컬러값 정보를 가진다.

  • 압축되지 않은 영상 정보를 RAW 데이터라고 한다.

  • 샘플링은 모든 입력값을 다 저장하는 것이 아니라 일정 간격으로 샘플을 모으고, 모인 샘플을 사용하겠다는 것이다.
    즉, 원본 이미지의 크기를 그대로 사용하는 것이 아니라 그 중 일부를 떼어내서 사용하겠다는 뜻이다.

4. MNIST 특징

  • MNIST 데이터는 28x28 크기의 사진들 모음이다.
    즉, 784개의 점이 모여서 하나의 사진이 되고, 신경망에 이 784개 점의 값이 입력된다.

  • (신경망 그림은 p.161 참고) 중간 H층이 존재하나 내부 값이 무엇인지 알 수 없는 부분이다.
    이를 은닉층(Hidden Layer)라고 한다.
    은닉층 내부의 값은 가려져 있고, 종종 변한다.

4-1. MNIST에서 사진 가져오기

# MNIST에서 사진 가져오기

#그림 출력
import matplotlib.pyplot as plt

#keras에 있는 mnist datasets을 불러온다.
from keras.datasets import mnist

#load_data() 사용, train과 test 자료를 가져옴
(x_train, y_train), (x_test, y_test) = mnist.load_data()

#그림 16개를(가로4 세로4) 보여주기 위한 설정값
fig, axes = plt.subplots(nrows=4, ncols=4)
ax = axes.ravel()

#16개의 훈련자료 이미지 화면 출력
for i in range(16):
  image = x_train[1000+i]  #1000이라는 숫자는 임의로 변경할 수 있다.
  ax[i].imshow(image, cmap='Greys')

plt.show()

# 특정 이미지만 출력
image = x_train[9]
plt.imshow(image, cmap='Greys')
plt.show()

위 코드를 수행하면 결과는

profile
공부하자

0개의 댓글