@@@ 인공지능/수학·통계를 몰라도 이해할 수 있는 쉬운 딥러닝

2 - 1. 이미지 분류(Classification) 기법 활용하기(2)

HTG 2021. 7. 14. 19:00
728x90

2-1-2. AI는 사물을 구분할 수 있을까?

 

●데이터 살펴보기

이번 예제에서는 CIFAR10를 사용.

CIFAR10은 개구리, 트럭, 사슴, 자동차 등 현실 세계의 사물 10 종류 데이터가 포함.

트레이닝 데이터 5만장, 테스트 데이터 1만장 규모의 데이터

각 사진은 32 x 32 사이즈의 컬러 이미지. 데이터의 차원을 표현하면 (32,32,3). 컬러 이미지는 RGB 3가지 색상을 각각 표현해야 하므로 가로세로 외에 3개의 차원으로 추가.

이번 예제에서는 단순하게 이미지를 흑백으로 변환. 그래서 데이터의 차원은 (32,32)

 

어떤 인공지능 사용?

3층짜리 FNN

층수 종류 크기 활성화 함수
1층 Flatten 32 X 32 없음
2층 FNN 256 ReLu
3층 FNN 10 Softmax

이전의 예제에서 1층의 크기만 28 X 28에서 32 X 32로 변경 

1층에 'Flatten' - flat은 '납작한' 이라는 뜻이며 Flatten은 '납작하게 만들다' 라는 의미

                      말 그대로 입력받은 데이터를 납작하게 만들어 주는 것

2층은 크기 256에 렐루를 활성화 함수로 평범한 신경망

3층은 총 10종류의 숫자를 분류하기 때문에 크기는 10, 활성화 함수는 SoftMax 사용

 

●딥러닝 코딩

Flatten() 함수에 입력하는 것은 input_shape에 입력하려는 이미지 데이터의 크기를 입력.

MNIST 이미지는 32 X 32 사이즈이므로 (32,32)을 입력.

옵티마이저(optimizer) - Adam

메트릭(metrics) - accuracy

로스(loss) - sparse_categorical_crossentropy

 

●인공지능 학습

인공신경망 학습

 

학습 결과 출력

그래프로 출력

 

●인공지능 학습 결과 확인

인공지능 성능 확인하기

저자의 경우 38.49% 정도의 성능을 보임. 10개로 분류하므로 확률적으로 10%인거 보다는 잘 분류를 하나 아쉬운 수준.

나의 경우 38.81% 정도의 성능을 보임. 

 

학습 기록 확인하기

빨간 선이 train, 파란 선이 test

 

Loss

저자의 경우, 트레이닝의 경우 꾸준히 감소하지만 낮은 편이 아님. 

이전의 예제의 경우 로스가 거의 0에 가까웠지만 여기는 1.6이 넘는 수치. 테스트의 경우 오버피티의 조짐이 보임.

 

Accuracy

트레이닝, 테스트 모두 에포크가 지남에 따라 서서히 증가. 하지만 그 수치가 50% 미만.

뒤로 갈수록 트레이닝과 테스트의 간격이 벌어지는 것을 보니 오버피팅 발생.

 

나의 경우에도 비슷한 양상을 보인다 Loss의 경우도 1.6이 넘는 수치. Accuracy도 50% 미만. 

오버피팅도 발생하는 것으로 보임.

 

이전의 예제의 겨우에는 98%에 가까운 정확도를 보였던 FNN 딥러닝 모델이 CIFAR10 데이터를 학습하는 데 실패.

40%조차 되지 않는 정확도를 70%이상 끌어 올려 보자

 

 

CIFAR10 데이터셋

CIFAR10은 MNIST나 Fashion MNIST와 달리 컬러 이미지이고, 분류 난이도가 높은 편.

특히나 개구리 데이터가 몹시 악질. 사람이 봐도 자동차인지 개구리인지 구분이 힘든 개구리 그림이 섞여있음.

그림 해상도가 낮기 때문.

 

컬러 이미지인데다가 난이도까지 있으니 CIFAR10 데이터셋은 영상 AI의 성능을 평가하는 공정한 척도로 사용.

많은 연구진들이 이를 위해 노력하고있음.

100가지를 분류하는 CIFAR100이라는 데이터 셋도 존재.

 

https://paperswithcode.com/sota/image-classification-on-cifar-10 

 

Papers with Code - CIFAR-10 Benchmark (Image Classification)

The current state-of-the-art on CIFAR-10 is EffNet-L2 (SAM). See a full comparison of 174 papers with code.

paperswithcode.com

현재 CIFAR10 분류 문제를 해결하는 AI의 현시점 최고 성능이 어느 정도인지 확인가능.

 

하이퍼 파라미터 조정

파라미터 조정 및 드롭아웃을 적용하여 FNN모델 성능 향상.

 

- 드롭아웃 0.5를 했을 때 성능이 안좋아짐.

트레이닝 보다 테스트의 성능은 좋아졌으나 성능자체는 안 좋음.

 

- 감소하는 층을 늘렸을 때.

 

# 인공신경망을 제작합니다.
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(32, 32)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dropout(rate=0.5),
    keras.layers.Dense(10, activation='softmax')
])

 

역시나 트레이닝보다는 테스트가 좋지만 역시 성능 자체는 안좋아짐. Dropout만 하는 거 보다는 좋아짐.