我是tensorflow的新手,并试图弄清楚tensorflow如何执行以下任务:
(对齐的面部图像)>(facenet nn模型,训练有素的重量)>(嵌入计算)
https://www.python36.com/face-detection-matching-using-facenet/
如果我理解正确,下面列出的是上述任务的代码,我的问题是计算是否是通过sess.run()执行的?
如果我错了,请纠正我 - (1)xxx.pb包含模型的所有内容:神经网络的层和权重,(2)声明image_placeholder和嵌入用于输入和神经网络的输出张量,(3)赋值'images'通过feed_dict输入,(4)执行sess.run()从输入'feed_dict'传递神经网络(xxx.pb),计算输出'embeddings'。
让我感到困惑的是,执行时“嵌入”没有其他表达方式:
sess.run(embeddings,feed_dict = feed_dict)
顺便说一下,对于输出张量,如果我用“输出”或任何其他名称替换名称“embeddings”,这是否重要?我不认为有用于声明“嵌入”的代码行,与“input:0”相同。
facenet.load_model("xxx.pb")
# prepare placeholders for input and output tensors
images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")
# execute the tensorflow graph with "images" input
feed_dict = { images_placeholder: images, ... }
images_embeddings = sess.run(embeddings,feed_dict=feed_dict)
<facenet.py>
......
def load_model(model):
model_exp = os.path.expanduser(model)
if (os.path.isfile(model_exp)):
print('Model filename: %s' % model_exp)
with gfile.FastGFile(model_exp,'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
tf.import_graph_def(graph_def, name='')
else
......
是的,上述执行流程(1)〜(4)是正确的。
可以通过运行以下代码来计算“嵌入”
python face_detect_demo.py --img = images / faces.jpg