inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Raspberry Pi] Dự án thực hành thị giác máy tính học sâu về IoT

Áp dụng mô hình deep learning chữ viết tay tự viết

plt. show() 숫자 출력 3값만 나옵니다.

368

avatar196kc

19 câu hỏi đã được viết

0

RBP_DL12_openCV_get_image

숫자  7 , 5 ,3 을  3값으로 찾네요. 

어디 부분을 확인을 해야 하나요? 

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

Câu trả lời 3

0

nomad

안녕하세요?

그러면 이전에 설명한 내용을 참조하세요.

어제 '[특별강의]model정확도 99%이상 높이기'라는 단원을 과정에 추가하였으니 그 내용을 보시면 되겠습니다.

감사합니다. 

0

avatar196kc

수정한 내용은 없고 다시 실행을 하니 3, 5, 3 나옵니다. 

0

nomad

안녕하세요?

좋은 질문해주셨네요.

먼저 코드를 보니 조금 수정하신 것 같은데 제가 제공해 드린 내용그래도 실행해서 같은 결과가 나오는지 확인해주세요. 만약 코드의 잘못일 수도 있지만 같은 결과가 나오면 아닐 수도 있습니다.

제가 이 내용을 가지고 특별강의를 만들었어요. 곧 공지하고 강의에 특별강의 형태로 포함할 것입니다. 

이미 강의에서도 설명드렸지만 이 예제는 직접 쓴 손글씨를 인식하는 것을 실행을 해보기 위한 주제라 정확도면에서 아쉬운 점이 있습니다. 강의를 진행하면서 이 후에 정확도를 높이는 여러 가지 방법을 소개하지만 당장 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의 경우를 보면 끝이 약간 안으로 굽어있어 가끔 3의 특성으로 인식하기도 합니다. 한번 MNIST데이터에 있는 손글씨를 출력해 보시면 이해가 가실 수 있습니다. 이 모델 뿐 아니라 다른 과정에서 성별과 나이를 식별하는 모델을 사용하는데 이럴 경우 학습에 사용된 얼굴 이미지들이 모두 서양 사람들의 이미지라 저희 얼굴에서 정확도가 떨어지는 경우를 확인합니다.

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

도움되시길 바랍니다.

감사합니다.

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

0

72

1

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

0

129

1

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

0

374

1

64bit picamera 관련 질문

0

892

1

라즈베리파이 firebase 설치오류

0

537

0

도와주세요

0

341

1

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

0

308

1

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

0

382

1

답변 부탁드려요.

0

242

1

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

0

325

0

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

0

341

2

라즈베리파이 hdmi 케이블

0

464

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

218

1

주차장차량세기 picamera

0

216

1

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

0

336

1

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

0

6062

2

no module named 'cv2'

0

750

4