我正在使用Python运行一个斩首的DCNN(在本例中为Inception-V3)来获取图像特征。我正在使用Anaconda,Py3.6和Windows7。
使用TensorFlow时,我将会话保留在变量中(感谢jdehesa)并运行:
sess, graph, allTensors, modelInfo = initiate_graph(modelDir)
while True:
filename = getImageFile()
if not filename: break
imgResized = fileReadAndResize(filename)
feats = np.squeeze( sess.run(allTensors['dcnn'], {allTensors['resizedInput']: imgResized}) )
doSmthWithFeats(feats)
以这种方式运行时(allTensors['dcnn']
在没有最后一层的情况下运行Inception-V3),我知道sess.run(...)
大约需要0.4秒。
我想迁移到Keras,因为它非常简单,而且易于运行和比较多个标准DCNN。
我的Keras平行项是:
def createModel():
model = InceptionV3(input_tensor=Input(shape=(299, 299, 3)), include_top=False)
x = model.output
x = AveragePooling2D((8, 8), strides=(8, 8))(x)
return Model(model.input, x)
modelIncptV3 = createModel()
while True:
...
feats = model.predict(np.expand_dims(imgResized, 0)).flatten()
doSmthWithFeats(feats)
现在,这里的feats
创建行大约需要1.1秒(同时产生相同的功能)。
我尝试先编译模型
model.compile( optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) )
每个图像的运行时间现在约为1.0秒。
我在TF中使用不同的代码时遇到了类似的问题,我在运行时的差异是由于为每个图像启动了一个会话。这是一样的吗?我可以做些什么来保留会话?还有其他想法可与普通TF媲美吗?
谢谢