初めに
画像から犬種・猫種を特定したいと思います。それもたった11行のpythonのコードで!
tensorflowには、学習済みのモデルがたくさん組み込まれています。その中のefficient netを使用します。このモデルはすでに1000種類の画像分類タスクを学習されているので、自分で学習させる必要なくすぐに分類に使用できます。このモデルでは、犬は125種、猫は5種の分類ができます。
tensorflowで使用できるモデル一覧はこちら
https://www.tensorflow.org/api_docs/python/tf/keras/applications
モデルが多すぎてどれを使ったらいいのかわからないですが、以下のQiita記事がヒントになります。
https://qiita.com/omiita/items/83643f78baabfa210ab1
コード
google colabを使うと環境設定も不要で、簡単です。以下のようにcolabの画面の左下のところに写真をドロップしてください。
この写真を判定してもらいます。
商用利用無料
Pixabay License
帰属表示は必要ありません
そして、以下のコードを実行します。
from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras.preprocessing.image import load_img, img_to_array
import numpy as np
import tensorflow as tf
# 写真の前処理を行う※
pic = load_img("/content/dog_dalmatian.jpg", target_size= (224,224,3))
pic = img_to_array(pic).astype('float32')
pic = np.expand_dims(pic,axis=0)
processedpic = tf.keras.applications.efficientnet.preprocess_input(pic)
# efficientnetのモデルを読み込む
model = EfficientNetB0(weights='imagenet')
# modelを使って犬種・猫種を予想する
prediction = model.predict(processedpic)
tf.keras.applications.efficientnet.decode_predictions(prediction)
[[(‘n02110341’, ‘dalmatian’, 0.90001744),
(‘n02109047’, ‘Great_Dane’, 0.0051623993),
(‘n02100735’, ‘English_setter’, 0.0027725038),
(‘n02100236’, ‘German_short-haired_pointer’, 0.0025760268),
(‘n02092339’, ‘Weimaraner’, 0.0019489381)]]
1000カテゴリーの中から可能性が高い5カテゴリーを確率で教えてくれます。1000カテゴリーは、犬以外のカテゴリもたくさん入っています。
ダルメシアンが90%です!正解!
load_img()の中には、写真のファイルのパスを設定してください。
他にも試してみます。
[[(‘n02099712’, ‘Labrador_retriever’, 0.42502728),
(‘n02093428’, ‘American_Staffordshire_terrier’, 0.04134651),
(‘n02109961’, ‘Eskimo_dog’, 0.032269508),
(‘n02110185’, ‘Siberian_husky’, 0.031741217),
(‘n02093256’, ‘Staffordshire_bullterrier’, 0.024241285)]]
[[(‘n02123045’, ‘tabby’, 0.23962992),
(‘n02123159’, ‘tiger_cat’, 0.21859926),
(‘n02127052’, ‘lynx’, 0.13928987),
(‘n02124075’, ‘Egyptian_cat’, 0.13626963),
(‘n02123394’, ‘Persian_cat’, 0.056125946)]]
tabbyはトラ猫だそうです。
[[(‘n02123597’, ‘Siamese_cat’, 0.829578),
(‘n01877812’, ‘wallaby’, 0.012674228),
(‘n02497673’, ‘Madagascar_cat’, 0.008706838),
(‘n02500267’, ‘indri’, 0.007321883),
(‘n02127052’, ‘lynx’, 0.0048339292)]]
さてこれはどうでしょう。犬も猫も一緒です。
[[(‘n02113023’, ‘Pembroke’, 0.8427573),
(‘n02113186’, ‘Cardigan’, 0.027167425),
(‘n02094258’, ‘Norwich_terrier’, 0.007881726),
(‘n02110806’, ‘basenji’, 0.0076770447),
(‘n02110185’, ‘Siberian_husky’, 0.0065252013)]]
コーギーだけ当たってます。猫は??
1000カテゴリは何があるか
Efficient netの学習した1000カテゴリは以下で確認できます。
https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json
犬 125種類
n02085620 | Chihuahua |
n02085782 | Japanese_spaniel |
n02085936 | Maltese_dog |
n02086079 | Pekinese |
n02086240 | Shih-Tzu |
n02086646 | Blenheim_spaniel |
n02086910 | papillon |
n02087046 | toy_terrier |
n02087394 | Rhodesian_ridgeback |
n02088094 | Afghan_hound |
n02088238 | basset |
n02088364 | beagle |
n02088466 | bloodhound |
n02088632 | bluetick |
n02089078 | black-and-tan_coonhound |
n02089867 | Walker_hound |
n02089973 | English_foxhound |
n02090379 | redbone |
n02090622 | borzoi |
n02090721 | Irish_wolfhound |
n02091032 | Italian_greyhound |
n02091134 | whippet |
n02091244 | Ibizan_hound |
n02091467 | Norwegian_elkhound |
n02091635 | otterhound |
n02091831 | Saluki |
n02092002 | Scottish_deerhound |
n02092339 | Weimaraner |
n02093256 | Staffordshire_bullterrier |
n02093428 | American_Staffordshire_terrier |
n02093647 | Bedlington_terrier |
n02093754 | Border_terrier |
n02093859 | Kerry_blue_terrier |
n02093991 | Irish_terrier |
n02094114 | Norfolk_terrier |
n02094258 | Norwich_terrier |
n02094433 | Yorkshire_terrier |
n02095314 | wire-haired_fox_terrier |
n02095570 | Lakeland_terrier |
n02095889 | Sealyham_terrier |
n02096051 | Airedale |
n02096177 | cairn |
n02096294 | Australian_terrier |
n02096437 | Dandie_Dinmont |
n02096585 | Boston_bull |
n02097047 | miniature_schnauzer |
n02097130 | giant_schnauzer |
n02097209 | standard_schnauzer |
n02097298 | Scotch_terrier |
n02097474 | Tibetan_terrier |
n02097658 | silky_terrier |
n02098105 | soft-coated_wheaten_terrier |
n02098286 | West_Highland_white_terrier |
n02098413 | Lhasa |
n02099267 | flat-coated_retriever |
n02099429 | curly-coated_retriever |
n02099601 | golden_retriever |
n02099712 | Labrador_retriever |
n02099849 | Chesapeake_Bay_retriever |
n02100236 | German_short-haired_pointer |
n02100583 | vizsla |
n02100735 | English_setter |
n02100877 | Irish_setter |
n02101006 | Gordon_setter |
n02101388 | Brittany_spaniel |
n02101556 | clumber |
n02102040 | English_springer |
n02102177 | Welsh_springer_spaniel |
n02102318 | cocker_spaniel |
n02102480 | Sussex_spaniel |
n02102973 | Irish_water_spaniel |
n02104029 | kuvasz |
n02104365 | schipperke |
n02105056 | groenendael |
n02105162 | malinois |
n02105251 | briard |
n02105412 | kelpie |
n02105505 | komondor |
n02105641 | Old_English_sheepdog |
n02105855 | Shetland_sheepdog |
n02106030 | collie |
n02106166 | Border_collie |
n02106382 | Bouvier_des_Flandres |
n02106550 | Rottweiler |
n02106662 | German_shepherd |
n02107142 | Doberman |
n02107312 | miniature_pinscher |
n02107574 | Greater_Swiss_Mountain_dog |
n02107683 | Bernese_mountain_dog |
n02107908 | Appenzeller |
n02108000 | EntleBucher |
n02108089 | boxer |
n02108422 | bull_mastiff |
n02108551 | Tibetan_mastiff |
n02108915 | French_bulldog |
n02109047 | Great_Dane |
n02109525 | Saint_Bernard |
n02109961 | Eskimo_dog |
n02110063 | malamute |
n02110185 | Siberian_husky |
n02110341 | dalmatian |
n02110627 | affenpinscher |
n02110806 | basenji |
n02110958 | pug |
n02111129 | Leonberg |
n02111277 | Newfoundland |
n02111500 | Great_Pyrenees |
n02111889 | Samoyed |
n02112018 | Pomeranian |
n02112137 | chow |
n02112350 | keeshond |
n02112706 | Brabancon_griffon |
n02113023 | Pembroke |
n02113186 | Cardigan |
n02113624 | toy_poodle |
n02113712 | miniature_poodle |
n02113799 | standard_poodle |
n02113978 | Mexican_hairless |
n02114367 | timber_wolf |
n02114548 | white_wolf |
n02114712 | red_wolf |
n02114855 | coyote |
n02115641 | dingo |
n02115913 | dhole |
n02116738 | African_hunting_dog |
猫 5種
n02123045 | tabby |
n02123159 | tiger_cat |
n02123394 | Persian_cat |
n02123597 | Siamese_cat |
n02124075 | Egyptian_cat |