말도 안 되는 이미지 분류기 만들어 보기(9) 추론
카탈로그
드디어 keshikaran.py를 구했다
저번는'EfficientNet B0'의 이미지 분류 모델을 사용해 약 2만장의 이미지를 학습해 85%의 정밀도를 얻었다.
"테스트 데이터의 정밀도는 85%입니다!"그렇게 말하지만 현실의'말도 안 되는 이미지'를 분류하지 못하면 의미가 없다.
이번에는 추론(Inference,Predict)의 스크립트를 쓰기 위해 얻은 이미지 분류 모델을 사용합니다.
네, 드디어 첫글망상
keshikaran.py
을 받을 때가 됐어요!모형의 읽기에 조금 빠져있어요.
학습 스크립트
train.py
, 학습 완료 모델model.save("model.h5")
의 느낌으로 파일로 작성.이 모델 파일
model.h5
을 읽고 추론합니다.···갑자기 모델을 읽기 시작해서 조금 반했어요.
import tensorflow as tf
model = tf.keras.models.load_model("model.h5")
같은 코드로 모델을 읽으면 ValueError: Unknown layer: KerasLayer
가 발생한다.Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/saving/save.py", line 206, in load_model
return hdf5_format.load_model_from_hdf5(filepath, custom_objects,
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/saving/hdf5_format.py", line 183, in load_model_from_hdf5
model = model_config_lib.model_from_config(model_config,
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/saving/model_config.py", line 64, in model_from_config
return deserialize(config, custom_objects=custom_objects)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/layers/serialization.py", line 173, in deserialize
return generic_utils.deserialize_keras_object(
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/generic_utils.py", line 354, in deserialize_keras_object
return cls.from_config(
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/sequential.py", line 492, in from_config
layer = layer_module.deserialize(layer_config,
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/layers/serialization.py", line 173, in deserialize
return generic_utils.deserialize_keras_object(
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/generic_utils.py", line 346, in deserialize_keras_object
(cls, cls_config) = class_and_config_for_serialized_keras_object(
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/generic_utils.py", line 296, in class_and_config_for_serialized_keras_object
raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
ValueError: Unknown layer: KerasLayer
조금 조사한 결과 hub.KerasLayer
를 사용하면 읽을 때 사용자 정의 도면층에 대한 정보가 필요합니다.다음과 같이 지정
custom_objects
하면 모델을 읽을 수 있습니다.import tensorflow as tf
import tensorflow_hub as hub
model = tf.keras.models.load_model("model.h5", custom_objects={"KerasLayer": hub.KerasLayer})
참조:keshikaran.py 설치
모형의 읽기에 성공했으니 바로 설치해 보세요
keshikaran.py
.규격은 아래와 같다.keshikaran.py
#!/usr/bin/env python3
import numpy as np
import PIL.Image
import sys
import tensorflow as tf
import tensorflow_hub as hub
image_path = sys.argv[1]
image = PIL.Image.open(image_path).convert("RGB").resize((224, 224))
image = np.array(image) / 255
image = np.expand_dims(image, 0)
model = tf.keras.models.load_model("model.h5", custom_objects={"KerasLayer": hub.KerasLayer})
predictions = model.predict(image)
print(predictions[0][0])
추론해 보다
그럼 실제 이미지를 입력하여 추론을 진행합시다.아래의 그림은 야채 수프에서 빌려온 것이다.
우선 이쪽개의 초상화부터 추론하겠습니다.양 같기도 하고 귀엽네요.
$ python3 keshikaran.py dog.jpg
0.29267535
생각보다 수치가 높지만 중간(0.5) 수치가 생각보다 낮아'용서할 수 없는 이미지'로 볼 수 있다.다음은 내가 이곳을 추론해 보겠다약간 섹시한 여자 사진..
$ python3 keshikaran.py woman.jpg
0.824198
강아지 사진보다 수치가 훨씬 커요.말도 안 되는 그림'이다.더욱 실천(?)원하는 이미지를 입력합니다.
aHR0cHM6Ly9ibG9nLWltZ3MtMTQ1LmZjMi5jb20vcy91L20vc3Vtb21vY2hhbm5lbC92cl9ha2lyYWVsbHlfMTAyNTgtMDAyLmpwZw==
에서 받은 그림을 입력해 보세요(링크가 무서워서 기본적으로 64번 URL을 인코딩했습니다).$ python3 keshikaran.py sexy.jpg
0.9372734
쳇!아이고, 이건 말도 안 돼.마지막으로 한 장 더 입력하세요. 피부색이 더 많아요이쪽 그림..
$ python3 keshikaran.py man_and_dog.jpg
0.34251067
이 분은 "용서할 수 없는 그림"입니다.강력히 동의하다.이번에는 여기까지.
마침내 망상을 실현했다
keshikaran.py
.여기는 단지 몇 장의 그림만 시험해 보았을 뿐, 기본적으로 동작이 매우 좋다.솔직히 어디에 쓸 수 있는지 모르겠는데 재밌는 생각 있으면 말해주세요.지난번에도 썼는데 요청이 있으면 이미 배운 모형을 공개할 거예요.
도중에 해시태그 등을 붙이는 재료를 건너뛰었기 때문에 추가가 되면 거기도 쓸 수 있으면 좋겠다고 생각했어요.오늘은 여기까지!
추기: 번외편 "EfficientNet B0~B7에서 학습 이미지 분류기 옮기기"을 썼다.
Reference
이 문제에 관하여(말도 안 되는 이미지 분류기 만들어 보기(9) 추론), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kleamp1e/articles/202104-pornography-classifier-9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)