AI/Deep learning

2. Computer Vision with Deep Neural Networks

Jinlib 2022. 1. 1. 23:02

서론

기존 프로그래밍은 문제가 있으면 답을 방식이였다. 그러나, 딥러닝은 문제를 풀기위해 데이터들의 '패턴'을 찾아내고 '식'을 만들어 답을 찾는 방식인 점에서 딥러닝을 이용한 문제해결은 매우 혁신적인것 같다.
Computer Vision쪽에서는 딥러닝이 어떠한식으로 쓰일까?

사람이 어떤 옷을 보았을때 뇌에서 받아들이는 과정을 생각해보자. '이건 흰셔츠고~ 검은 바지네~' 와 같이 생각할 수 있다. 반면,
이를 어떻게 프로그래밍 할까?
만약, '옷'을 본적도 없는 외계인이 지구에 왔을때, '신발'에 대해서 어떻게 설명할까? 매우 어렵지만, 불가능하지 않다는 것을 알 수 있다.

이를 해결하는 방법 중 하나는, 컴퓨터에게 신발, 셔츠, 핸드백, 코트를 학습시키는것이다.

대표적인 예시 데이터셋으로 Fashion MNIST라고 불리는 데이터 셋이 있다. 이를 이용해서 실습을 진행해보자.

본론

https://github.com/zalandoresearch/fashion-mnist

데이터는 위에서 쉽게 확인할 수 있다.

Fashion-MNIST는 약 60,000개의 훈련데이터(training set)와 10,000개의 테스트데이터(test set)으로 구성된 이미지 데이터 집합이다. 각 이미지 데이터는 10개 클래스와 1:1 매칭된 28x28 그레이스케일 이미지로 구성되어 있다.

각 이미지는 높이 28픽셀, 너비 28픽셀로 총 784픽셀이다. 각 픽셀은 밝기를 나타내는 0에서 255 사이의 단일 픽셀 값을 가지며 숫자가 높을수록 어둡다는 것을 의미하며 데이터 집합에는 785개의 열이 있다.
첫 번째 열은 클래스 레이블로 구성되며 의류 품목을 나타냅니다. 나머지 열에는 연결된 영상의 픽셀 값이 포함됩니다.

자 이제 코드로 표현해보자

model = keras.Sequential([
    keras.layer.Flatten(input_shape=(28, 28)),
    keras.layer.Dense(128, activation=tf.nn.relu),
    keras.layer.Dense(10, activation=tf.nn.softmax)
])
  1. 첫번째 layer: keras.layer.Flatten(input_shape=(28, 28))
    입력값이 28x28이다. 입력값이 직사각형으로 들어갈 수 없기에 이를 펴서(Flatten) 넣어준다.

  1. 두번째 layer: keras.layer.Dense(128, activation=tf.nn.relu)
    784(28x28)개의 입력값은 DNN(Deep Neural Net)을 거친다. 여기서 128은 노드의 갯수를 의미하는데,
    일반적으로 $2^n$으로 구성하는 편이다.


  2. 세번째 layer: keras.layer.Dense(10, activation=tf.nn.softmax)
    마지막은 10개로 끝난다 왜냐하면 우리의 데이터가 10개 클래스가 있고 분류할때 10개이기 때문이다.

마무리

현재 대략적인것만 다루기 때문에 activation function과 관련된 이야기는 추후 다루도록 하겠다.

[Question & Answer]

1. 왜 'T-shirt'로 학습 안시키고 0으로 변환시켜서 학습시킬까?
=> 티셔츠를 표현하는 방법에는 티셔츠, T-shirt, Tシャツ 다양하다. 이를 컴퓨터가 이해할 수 있게 숫자로 표준화시켜 학습시킨다.

2. TypeError: can only concatenate list (not “type”) to list 에러 발생
=> model fit할떄 callbacks에 들어가는 인자에 [ ]로 list를 씌워줘야한다.

3. TypeError: '>' not supported between instances of 'NoneType' and 'float' 에러 발생
=> Tensorflow 1.x 에서 발생하는 에러이다. 과제 제출시에 'accuracy'를 모두 'acc'로 바꿔서 실행시켜보자