100균의 주방만으로 이상 검지(성공편)
13341 단어 RaspberryPiKeras딥러닝TensorFlow기계 학습
시행 착오의 궤적을 남깁니다.
이번에도 이것!
이미지의 물 증가
전회 사용한 화상은 모두 400장(정상 200장, 이상 200장)이었습니다. 이미지가 너무 적을까 생각하고 이미지를 늘리기로 했습니다. Keras에 편리한 기능이있었습니다.
자체 딥 러닝을 위한 데이터 세트를 확장하고 늘리십시오.
htps : // 이 m /은 lsp 인 g / ms / 7692504
이미지 전처리 - Keras Documentation
htps : // 케라 s. 이오/쟈/p레 p로세신 g/이마게/
참고로 한 사이트 거의 그대로입니다만, 이번 주방만의 경우, 화상의 각도가 중요하다고 생각해, 화상의 회전은 하지 않게 했습니다.
매개변수
설정값
rotation_range
코멘트 아웃
horizontal_flip
거짓
vertical_flip
거짓
# 拡張する際の設定
generator = ImageDataGenerator(
# rotation_range=90, # 90°まで回転
width_shift_range=0.1, # 水平方向にランダムでシフト
height_shift_range=0.1, # 垂直方向にランダムでシフト
channel_shift_range=50.0, # 色調をランダム変更
shear_range=0.39, # 斜め方向(pi/8まで)に引っ張る
horizontal_flip=False, # 垂直方向にランダムで反転
vertical_flip=False # 水平方向にランダムで反転
)
이 방법으로 이미지를 10배의 4000장(정상 2000장, 이상 2000장)으로 할 수 있었습니다.
모델 매개변수 변경
Keras의 문서를 바라보고, 이번 문제는 「개」 「고양이」 「코끼리」와 같이 복수로 나누는 것이 아니라, 「정상치」 「이상치」의 2개로 분류하는 것만의 문제라고 깨닫고 네.
Sequential 모델 가이드 - Keras Documentation
htps : // / 케라 s. 이오 / 그럼 / 껄껄 gs r d / 세쿠 엔 치아
# マルチクラス分類問題の場合
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 2値分類問題の場合
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 前回のコード(参考元のコピペです)
model.compile(loss='categorical_crossentropy',
optimizer='SGD',
metrics=['accuracy'])
중간의 '이진 분류 문제'의 코드로 변경했습니다.
optimizer의 의미는 공부합니다.
Optimizer : 심층 학습의 기울기 방법 이해
htps : // 코 m / 토쿠 만 / ms / 1944c00415d129
이미지의 회색조
물 늘어난 이미지를 보았을 때, 이번 문제는 색 정보는 관계 없다고 생각했습니다.
이것도 Keras에서 쉽게 할 수있었습니다. (대단해, Keras!!)
img = img_to_array(load_img(picture, target_size=(224,224), grayscale=True))
그레이스케일로 하는 것으로, 색 정보가 RGB의 3으로부터 1이 되므로, input_shape
를 추가로 지정할 필요가 있습니다. (지정하지 않으면 3 취급인가?)
model = MobileNet(include_top=True, weights=None, classes=2,input_shape=(224, 224, 1))
모델 변경(이번에는 불용)
모델을 바꾸면 결과도 바뀔까라고 생각해 보았습니다만, Raspberry Pi Zero로 예측시키려고 하면, 메모리 부족으로 동작시킬 수 없었습니다. 감각을 모르겠지만 Raspberry Pi Zero의 512MB 메모리에서 작동한다는 것은 대단한 일이지요.
예측
이미지
결과
[[9.9999988e-01 1.2415921e-07]]200g 이하! 정답!
[[1.0000000e+00 5.4107854e-08]]200g 이하! 정답!
[[8.696176e-06 9.999913e-01]]200g 이상 정답!
[[7.8308704e-10 1.0000000e+00]]200g 이상! 정답!
[[4.8343203e-08 1.0000000e+00]]200g 이상! 정답!
[[1.0000000e+00 1.5057713e-08]]200g 이하! 부정해! (주방만의 뒷면) 예상치 못한 이미지 때 어떻게 하면 좋을까
예측 소스
# coding:utf-8
from time import sleep
from keras.applications import mobilenet
from keras.models import load_model
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array, load_img
import numpy as np
from keras.utils import np_utils
model = load_model('0212_my_model_0216.h5', custom_objects={
'relu6': mobilenet.relu6,
'DepthwiseConv2D': mobilenet.DepthwiseConv2D})
while True:
X = []
picture = '/home/pi/motion/capture/lastsnap.jpg'
img = img_to_array(load_img(picture, target_size=(224, 224), grayscale=True))
X.append(img)
X = np.asarray(X)
X = X.astype('float32')
X = X / 255.0
features = model.predict(X)
print(features)
if features[0][0] > features[0][1]:
print('200g以下!')
else:
print('200g以上!')
sleep(5)
끝에
어떻게든 잘 분류할 수 있었습니다.
다만, 역치를 200g에서 300g으로 바꾸고 싶어지면 다시 한번 학습시켜야 하는 것일까?
「멀티 클래스 분류」로 하면 좋을까?
덤
예측에 사용한 이미지와 예측 결과를 LINE Notify로 통지하면 뭔가 했던 느낌.
Python에서 LINE Notify로 LINE으로 메시지 보내기
htps : // 이 m/단 3/이고 ms/0998c18df11d4아1c7427
Reference
이 문제에 관하여(100균의 주방만으로 이상 검지(성공편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/fcef72137b7ec80ae437
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 拡張する際の設定
generator = ImageDataGenerator(
# rotation_range=90, # 90°まで回転
width_shift_range=0.1, # 水平方向にランダムでシフト
height_shift_range=0.1, # 垂直方向にランダムでシフト
channel_shift_range=50.0, # 色調をランダム変更
shear_range=0.39, # 斜め方向(pi/8まで)に引っ張る
horizontal_flip=False, # 垂直方向にランダムで反転
vertical_flip=False # 水平方向にランダムで反転
)
Keras의 문서를 바라보고, 이번 문제는 「개」 「고양이」 「코끼리」와 같이 복수로 나누는 것이 아니라, 「정상치」 「이상치」의 2개로 분류하는 것만의 문제라고 깨닫고 네.
Sequential 모델 가이드 - Keras Documentation
htps : // / 케라 s. 이오 / 그럼 / 껄껄 gs r d / 세쿠 엔 치아
# マルチクラス分類問題の場合
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 2値分類問題の場合
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 前回のコード(参考元のコピペです)
model.compile(loss='categorical_crossentropy',
optimizer='SGD',
metrics=['accuracy'])
중간의 '이진 분류 문제'의 코드로 변경했습니다.
optimizer의 의미는 공부합니다.
Optimizer : 심층 학습의 기울기 방법 이해
htps : // 코 m / 토쿠 만 / ms / 1944c00415d129
이미지의 회색조
물 늘어난 이미지를 보았을 때, 이번 문제는 색 정보는 관계 없다고 생각했습니다.
이것도 Keras에서 쉽게 할 수있었습니다. (대단해, Keras!!)
img = img_to_array(load_img(picture, target_size=(224,224), grayscale=True))
그레이스케일로 하는 것으로, 색 정보가 RGB의 3으로부터 1이 되므로, input_shape
를 추가로 지정할 필요가 있습니다. (지정하지 않으면 3 취급인가?)
model = MobileNet(include_top=True, weights=None, classes=2,input_shape=(224, 224, 1))
모델 변경(이번에는 불용)
모델을 바꾸면 결과도 바뀔까라고 생각해 보았습니다만, Raspberry Pi Zero로 예측시키려고 하면, 메모리 부족으로 동작시킬 수 없었습니다. 감각을 모르겠지만 Raspberry Pi Zero의 512MB 메모리에서 작동한다는 것은 대단한 일이지요.
예측
이미지
결과
[[9.9999988e-01 1.2415921e-07]]200g 이하! 정답!
[[1.0000000e+00 5.4107854e-08]]200g 이하! 정답!
[[8.696176e-06 9.999913e-01]]200g 이상 정답!
[[7.8308704e-10 1.0000000e+00]]200g 이상! 정답!
[[4.8343203e-08 1.0000000e+00]]200g 이상! 정답!
[[1.0000000e+00 1.5057713e-08]]200g 이하! 부정해! (주방만의 뒷면) 예상치 못한 이미지 때 어떻게 하면 좋을까
예측 소스
# coding:utf-8
from time import sleep
from keras.applications import mobilenet
from keras.models import load_model
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array, load_img
import numpy as np
from keras.utils import np_utils
model = load_model('0212_my_model_0216.h5', custom_objects={
'relu6': mobilenet.relu6,
'DepthwiseConv2D': mobilenet.DepthwiseConv2D})
while True:
X = []
picture = '/home/pi/motion/capture/lastsnap.jpg'
img = img_to_array(load_img(picture, target_size=(224, 224), grayscale=True))
X.append(img)
X = np.asarray(X)
X = X.astype('float32')
X = X / 255.0
features = model.predict(X)
print(features)
if features[0][0] > features[0][1]:
print('200g以下!')
else:
print('200g以上!')
sleep(5)
끝에
어떻게든 잘 분류할 수 있었습니다.
다만, 역치를 200g에서 300g으로 바꾸고 싶어지면 다시 한번 학습시켜야 하는 것일까?
「멀티 클래스 분류」로 하면 좋을까?
덤
예측에 사용한 이미지와 예측 결과를 LINE Notify로 통지하면 뭔가 했던 느낌.
Python에서 LINE Notify로 LINE으로 메시지 보내기
htps : // 이 m/단 3/이고 ms/0998c18df11d4아1c7427
Reference
이 문제에 관하여(100균의 주방만으로 이상 검지(성공편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/fcef72137b7ec80ae437
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
img = img_to_array(load_img(picture, target_size=(224,224), grayscale=True))
model = MobileNet(include_top=True, weights=None, classes=2,input_shape=(224, 224, 1))
모델을 바꾸면 결과도 바뀔까라고 생각해 보았습니다만, Raspberry Pi Zero로 예측시키려고 하면, 메모리 부족으로 동작시킬 수 없었습니다. 감각을 모르겠지만 Raspberry Pi Zero의 512MB 메모리에서 작동한다는 것은 대단한 일이지요.
예측
이미지
결과
[[9.9999988e-01 1.2415921e-07]]200g 이하! 정답!
[[1.0000000e+00 5.4107854e-08]]200g 이하! 정답!
[[8.696176e-06 9.999913e-01]]200g 이상 정답!
[[7.8308704e-10 1.0000000e+00]]200g 이상! 정답!
[[4.8343203e-08 1.0000000e+00]]200g 이상! 정답!
[[1.0000000e+00 1.5057713e-08]]200g 이하! 부정해! (주방만의 뒷면) 예상치 못한 이미지 때 어떻게 하면 좋을까
예측 소스
# coding:utf-8
from time import sleep
from keras.applications import mobilenet
from keras.models import load_model
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array, load_img
import numpy as np
from keras.utils import np_utils
model = load_model('0212_my_model_0216.h5', custom_objects={
'relu6': mobilenet.relu6,
'DepthwiseConv2D': mobilenet.DepthwiseConv2D})
while True:
X = []
picture = '/home/pi/motion/capture/lastsnap.jpg'
img = img_to_array(load_img(picture, target_size=(224, 224), grayscale=True))
X.append(img)
X = np.asarray(X)
X = X.astype('float32')
X = X / 255.0
features = model.predict(X)
print(features)
if features[0][0] > features[0][1]:
print('200g以下!')
else:
print('200g以上!')
sleep(5)
끝에
어떻게든 잘 분류할 수 있었습니다.
다만, 역치를 200g에서 300g으로 바꾸고 싶어지면 다시 한번 학습시켜야 하는 것일까?
「멀티 클래스 분류」로 하면 좋을까?
덤
예측에 사용한 이미지와 예측 결과를 LINE Notify로 통지하면 뭔가 했던 느낌.
Python에서 LINE Notify로 LINE으로 메시지 보내기
htps : // 이 m/단 3/이고 ms/0998c18df11d4아1c7427
Reference
이 문제에 관하여(100균의 주방만으로 이상 검지(성공편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/fcef72137b7ec80ae437
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# coding:utf-8
from time import sleep
from keras.applications import mobilenet
from keras.models import load_model
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array, load_img
import numpy as np
from keras.utils import np_utils
model = load_model('0212_my_model_0216.h5', custom_objects={
'relu6': mobilenet.relu6,
'DepthwiseConv2D': mobilenet.DepthwiseConv2D})
while True:
X = []
picture = '/home/pi/motion/capture/lastsnap.jpg'
img = img_to_array(load_img(picture, target_size=(224, 224), grayscale=True))
X.append(img)
X = np.asarray(X)
X = X.astype('float32')
X = X / 255.0
features = model.predict(X)
print(features)
if features[0][0] > features[0][1]:
print('200g以下!')
else:
print('200g以上!')
sleep(5)
어떻게든 잘 분류할 수 있었습니다.
다만, 역치를 200g에서 300g으로 바꾸고 싶어지면 다시 한번 학습시켜야 하는 것일까?
「멀티 클래스 분류」로 하면 좋을까?
덤
예측에 사용한 이미지와 예측 결과를 LINE Notify로 통지하면 뭔가 했던 느낌.
Python에서 LINE Notify로 LINE으로 메시지 보내기
htps : // 이 m/단 3/이고 ms/0998c18df11d4아1c7427
Reference
이 문제에 관하여(100균의 주방만으로 이상 검지(성공편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/fcef72137b7ec80ae437
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(100균의 주방만으로 이상 검지(성공편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moritalous/items/fcef72137b7ec80ae437텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)