一番簡単に学習済みの重みを利用できる方法はグレースケール画像をカラー画像 (3チャンネル) に変換することです。
カラー画像として読み込んでも見た目の変化はありません。
グレースケール画像
グレースケール画像をカラー画像に変換したもの
グレースケール画像をカラー画像として読み込む。
python
1# PIL の場合
2import cv2
3from PIL import Image
4
5gray = Image.open("sample.png")
6print(img.size, img.mode) # (640, 427) L
7
8rgb = img.convert("RGB")
9print(rgb.size, rgb.mode) # (640, 427) RGB
10
11# OpenCV の場合
12img = cv2.imread("sample.png")
13print(img.shape)
14# デフォルトでグレースケール画像も RGB として読み込まれる。
すでに読み込んであるグレースケール画像をカラー画像に変換するのは Pillow なら img.convert("RGB")、OpenCV なら cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) でできます。
サンプルコード
VGG16 で推論する例
python
1import numpy as np
2from tensorflow.keras.applications.vgg16 import (
3 VGG16,
4 preprocess_input,
5 decode_predictions,
6)
7from tensorflow.keras.preprocessing import image
8
9# VGG16 を構築する。
10model = VGG16()
11
12# 画像を読み込む。
13img = image.load_img("sample.png", target_size=model.input_shape[1:3]) # デフォルトでグレースケール画像もカラー画像として読み込まれます
14print(img.size, img.mode) # (224, 224) RGB
15
16# PIL -> numpy
17x = image.img_to_array(img)
18
19# バッチ次元追加
20x = np.expand_dims(x, axis=0)
21
22# VGG16 用の前処理を行う。
23x = preprocess_input(x)
24
25# 予測する。
26predictions = model.predict(x)
27
28# 予測結果をデコードする。
29predictions = decode_predictions(predictions, top=3)
30
31for _, name, score in predictions[0]:
32 print(f"{name}: {score:.2%}")
33
34# Egyptian_cat: 7.81%
35# window_screen: 6.24%
36# tabby: 4.62%
グレースケール画像でもちゃんとネコと認識できています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/08 07:11 編集