初めに

画像から犬種・猫種を特定したいと思います。それもたった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)]]

Pixabay License

[[(‘n02123045’, ‘tabby’, 0.23962992),
(‘n02123159’, ‘tiger_cat’, 0.21859926),
(‘n02127052’, ‘lynx’, 0.13928987),
(‘n02124075’, ‘Egyptian_cat’, 0.13626963),
(‘n02123394’, ‘Persian_cat’, 0.056125946)]]

tabbyはトラ猫だそうです。

Pixabay License

[[(‘n02123597’, ‘Siamese_cat’, 0.829578),
(‘n01877812’, ‘wallaby’, 0.012674228),
(‘n02497673’, ‘Madagascar_cat’, 0.008706838),
(‘n02500267’, ‘indri’, 0.007321883),
(‘n02127052’, ‘lynx’, 0.0048339292)]]

さてこれはどうでしょう。犬も猫も一緒です。

Pixabay License

[[(‘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種類

n02085620Chihuahua
n02085782Japanese_spaniel
n02085936Maltese_dog
n02086079Pekinese
n02086240Shih-Tzu
n02086646Blenheim_spaniel
n02086910papillon
n02087046toy_terrier
n02087394Rhodesian_ridgeback
n02088094Afghan_hound
n02088238basset
n02088364beagle
n02088466bloodhound
n02088632bluetick
n02089078black-and-tan_coonhound
n02089867Walker_hound
n02089973English_foxhound
n02090379redbone
n02090622borzoi
n02090721Irish_wolfhound
n02091032Italian_greyhound
n02091134whippet
n02091244Ibizan_hound
n02091467Norwegian_elkhound
n02091635otterhound
n02091831Saluki
n02092002Scottish_deerhound
n02092339Weimaraner
n02093256Staffordshire_bullterrier
n02093428American_Staffordshire_terrier
n02093647Bedlington_terrier
n02093754Border_terrier
n02093859Kerry_blue_terrier
n02093991Irish_terrier
n02094114Norfolk_terrier
n02094258Norwich_terrier
n02094433Yorkshire_terrier
n02095314wire-haired_fox_terrier
n02095570Lakeland_terrier
n02095889Sealyham_terrier
n02096051Airedale
n02096177cairn
n02096294Australian_terrier
n02096437Dandie_Dinmont
n02096585Boston_bull
n02097047miniature_schnauzer
n02097130giant_schnauzer
n02097209standard_schnauzer
n02097298Scotch_terrier
n02097474Tibetan_terrier
n02097658silky_terrier
n02098105soft-coated_wheaten_terrier
n02098286West_Highland_white_terrier
n02098413Lhasa
n02099267flat-coated_retriever
n02099429curly-coated_retriever
n02099601golden_retriever
n02099712Labrador_retriever
n02099849Chesapeake_Bay_retriever
n02100236German_short-haired_pointer
n02100583vizsla
n02100735English_setter
n02100877Irish_setter
n02101006Gordon_setter
n02101388Brittany_spaniel
n02101556clumber
n02102040English_springer
n02102177Welsh_springer_spaniel
n02102318cocker_spaniel
n02102480Sussex_spaniel
n02102973Irish_water_spaniel
n02104029kuvasz
n02104365schipperke
n02105056groenendael
n02105162malinois
n02105251briard
n02105412kelpie
n02105505komondor
n02105641Old_English_sheepdog
n02105855Shetland_sheepdog
n02106030collie
n02106166Border_collie
n02106382Bouvier_des_Flandres
n02106550Rottweiler
n02106662German_shepherd
n02107142Doberman
n02107312miniature_pinscher
n02107574Greater_Swiss_Mountain_dog
n02107683Bernese_mountain_dog
n02107908Appenzeller
n02108000EntleBucher
n02108089boxer
n02108422bull_mastiff
n02108551Tibetan_mastiff
n02108915French_bulldog
n02109047Great_Dane
n02109525Saint_Bernard
n02109961Eskimo_dog
n02110063malamute
n02110185Siberian_husky
n02110341dalmatian
n02110627affenpinscher
n02110806basenji
n02110958pug
n02111129Leonberg
n02111277Newfoundland
n02111500Great_Pyrenees
n02111889Samoyed
n02112018Pomeranian
n02112137chow
n02112350keeshond
n02112706Brabancon_griffon
n02113023Pembroke
n02113186Cardigan
n02113624toy_poodle
n02113712miniature_poodle
n02113799standard_poodle
n02113978Mexican_hairless
n02114367timber_wolf
n02114548white_wolf
n02114712red_wolf
n02114855coyote
n02115641dingo
n02115913dhole
n02116738African_hunting_dog

猫 5種

n02123045tabby
n02123159tiger_cat
n02123394Persian_cat
n02123597Siamese_cat
n02124075Egyptian_cat

Categories:

category