事前トレーニング済みの VGG 顔 CNN を読み込んで、正常に実行しました。レイヤー 3 と 8 からハイパー列平均を抽出したいと思います。ここからハイパー列の抽出に関するセクションに従っていました。ただし、get_output 関数が機能していなかったため、いくつかの変更を加える必要がありました。
輸入品:
import matplotlib.pyplot as plt
import theano
from scipy import misc
import scipy as sp
from PIL import Image
import PIL.ImageOps
from keras.models import Sequential
from keras.layers.core import Flatten, Dense, Dropout
from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras.optimizers import SGD
import numpy as np
from keras import backend as K
主な機能:
#after necessary processing of input to get im
layers_extract = [3, 8]
hc = extract_hypercolumn(model, layers_extract, im)
ave = np.average(hc.transpose(1, 2, 0), axis=2)
print(ave.shape)
plt.imshow(ave)
plt.show()
Get features function:(私はこれに従いました)
def get_features(model, layer, X_batch):
get_features = K.function([model.layers[0].input, K.learning_phase()], [model.layers[layer].output,])
features = get_features([X_batch,0])
return features
ハイパーカラム抽出:
def extract_hypercolumn(model, layer_indexes, instance):
layers = [K.function([model.layers[0].input],[model.layers[li].output])([instance])[0] for li in layer_indexes]
feature_maps = get_features(model,layers,instance)
hypercolumns = []
for convmap in feature_maps:
for fmap in convmap[0]:
upscaled = sp.misc.imresize(fmap, size=(224, 224),mode="F", interp='bilinear')
hypercolumns.append(upscaled)
return np.asarray(hypercolumns)
ただし、コードを実行すると、次のエラーが発生します。
get_features = K.function([model.layers[0].input, K.learning_phase()], [model.layers[layer].output,])
TypeError: list indices must be integers, not list
どうすればこれを修正できますか?
ノート:
ハイパー列抽出関数で、feature_maps = get_features(model,1,instance)
1 の代わりに任意の整数を使用すると、正常に動作します。しかし、レイヤー3から8までの平均を抽出したい.