inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[라즈베리파이] IoT 딥러닝 Computer Vision 실전 프로젝트

직접 쓴 손글씨 딥러닝 모델 적용하기

안녕하세요 정확도에 대한 질문

431

Programmer of Lege

작성한 질문수 1

0

지금까지 에러 없이 잘 실행하였는데 정확도가 엄청 낮게 나와요

강의에서 753을 한 결과는

353으로 나오고

제가 1 7 을 적어서 찍어서 직접 돌린결과는

3 7이 나오네요..

정확도를 높일 수 없을까요??

tensorflow keras 컴퓨터-비전 Raspberry-Pi 딥러닝 iot

답변 1

1

노마드크리에이터

안녕하세요?

좋은 질문해주셨네요. 강의에서도 설명드렸지만 이 예제는 직접 쓴 손글씨를 인식하는 것을 실행을 해보기 위한 주제라 정확도면에서 아쉬운 점이 있습니다. 강의를 진행하면서 이 후에 정확도를 높이는 여러 가지 방법을 소개하지만 당장 MNIST모델의 정확도를 높이는 방법을 소개해 드리겠습니다. 물론 모델 말고도 상용서비스를 한다면 프로그램에도 다양한 필터, 기법, 예외처리 등 보완해서 인식률을 높이는 여러 방법이 필요하겠지만 일단 모델 자체도 실습을 위해서 간단하게 학습해서 만들었기 때문에 정확도에 한계가 있습니다.

이전 단원에서 저희가 MNIST모델을 만들었던 RBP_DL11_MNIST_model.ipynb파일을 보면 학습할 때 4개의 레이어만으로 모델을 만들었습니다.

model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(num_classes, activation='softmax')

])

텐서플로에서 제공하는 다른 예제를 보면 모델을 보다 정교한 레이어로 만들어서 인식률을 높이는 방법을 제시하고 있습니다. 물론 이럴 경우 학습에 보다 많은 시간과 리소스를 필요로 하기 때문이지요. 예제는 colab파일인데 주소는 아래와 같습니다.

https://colab.research.google.com/github/tensorflow/examples/blob/master/lite/examples/digit_classifier/ml/mnist_tflite.ipynb

아래 내용처럼 relu를 사용하는 dense layer를 복잡한 Convolution layers로 바꿔주면 정확도로 높아진다고 나오고 있습니다.

참고로 아래의 결과를 가져오는 keras.layers.Dense(10) 레이어는 지우면 안됩니다.

# Define the model architecture
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation=tf.nn.relu),

# Optional: You can replace the dense layer above with the convolution layers below to get higher accuracy.
# keras.layers.Reshape(target_shape=(28, 28, 1)),
# keras.layers.Conv2D(filters=32, kernel_size=(3, 3), activation=tf.nn.relu),
# keras.layers.Conv2D(filters=64, kernel_size=(3, 3), activation=tf.nn.relu),
# keras.layers.MaxPooling2D(pool_size=(2, 2)),
# keras.layers.Dropout(0.25),
# keras.layers.Flatten(input_shape=(28, 28)),
# keras.layers.Dense(128, activation=tf.nn.relu),
# keras.layers.Dropout(0.5),

keras.layers.Dense(10)

]) 

이렇세 모델을 개선해서(문법은 살짝 다르므로 keras.layers  를 tf.keras.layers로 바꾸세요.) 새로 모델파일을 만들면 인식률이 높아질 겁니다. 

그런데 제가 MNIST모델과 다른 모델을 학습하고 실행해 보면서 경험한 것은  일단 학습에 사용한 사진 자체가 우리가 사용하는 방식과 다를 수 있다는 겁니다. 아시겠지만 MNIST는 미국사람이 쓴 손글씨로 우리가 쓰는 숫자와 쓰는 방식이 약간 다르더라고요. 사용하신 7과 1의 경우를 보면 1의 경우 약간 안으로 굽어들게 쓰셨는데 이걸 3의 특성으로 인식할 수 있습니다. 한번 MNIST데이터에 있는 손글씨를 출력해 보시면 이해가 가실 수 있습니다. 이 모델 뿐 아니라 다른 과정에서 성별과 나이를 식별하는 모델을 사용하는데 이럴 경우 학습에 사용된 얼굴 이미지들이 모두 서양 사람들의 이미지라 저희 얼굴에서 정확도가 떨어지는 경우를 확인합니다.

그래서 제가 관련된 실제 프로젝트를 하면서 어떻게 새로 사진 데이터를 모을 수 있느냐를 고민하고 있습니다. 결국 보다 높은 정확도를 필요로 하면 근본적으로 사진 데이터부터 충분히 모을 필요도 있습니다.

도움되시길 바랍니다.

감사합니다.

 

RBP_DL01_Raspberry pi inatall 문서 다운로드위치는?

0

72

1

강의 자료 다운관련 문의 드립니다.

0

130

1

강의자료를 크리애플 홈페이지에서 찾을 수 없네요..

0

374

1

64bit picamera 관련 질문

0

893

1

라즈베리파이 firebase 설치오류

0

537

0

도와주세요

0

343

1

64비트에서는 안되는건가요?

0

308

1

코드 크리애플 홈피에 없는데 어디있나요

0

382

1

답변 부탁드려요.

0

242

1

자료 강의 구매해야하던데, 답변 부탁드려요

0

325

0

현재 인프런에서 강의 듣고 있는데 자료가 없습니다. 자료 공유관련 답변 부탁드립니다.

0

341

2

라즈베리파이 hdmi 케이블

0

465

1

안녕하세요 크리애플 구독관련해서 질문드립니다.

0

213

0

강의 업데이트 부탁드립니다. 텐서플로워 설치가 안됩니다.

2

440

1

pygame 설치 오류

0

449

0

소스코드 다운 받으려면 결제를 해야 하나요?

0

204

1

얼굴 인식 정확도

0

299

1

import dropbox 오류

0

204

1

conda install -c conda-forgo dlib 오류

0

386

1

라즈베리파이에서 RBP_DL21_YOLO_car.py 실행시

0

219

1

주차장차량세기 picamera

0

218

1

강의와 다른 라즈베리파이 홈페이지

0

340

1

ModuleNotFoundError: No module named 'cv2' (해결)

0

6069

2

no module named 'cv2'

0

756

4