В настоящее время я пытаюсь реализовать код, который позволит моему дрону перемещаться в помещении с использованием tenorflow. Мне нужно запустить две модели за один сеанс.
Одна предназначена для основной навигации - это переработанная модель Inception V3, отвечающая за классификацию изображений в коридоре и выполнение решения о движении вперед, влево или вправо - вторая - модель отслеживания объектов, которая будет отслеживать объекты и вычислять их относительное расстояние до камера.
Я не знаю, как использовать несколько графиков в одном сеансе, поэтому я попытался создать отдельный сеанс внутри цикла, что создает большие накладные расходы и заставляет мой скрипт работать с 0 FPS.
def inception_model():
# Graph for the InceptionV3 Model
graph = load_graph('inception_v3_frozen/inception_v3_2016_08_28_frozen.pb')
with tf.Session(graph = graph) as sess:
while camera.isOpened():
ok, img = camera.read()
cv.imwrite("frame_temp.jpeg", img)
t = read_tensor_from_image('frame_temp.jpeg')
input_layer = "input"
output_layer = "InceptionV3/Predictions/Reshape_1"
input_name = "import/" + input_layer
output_name = "import/" + output_layer
input_operation = graph.get_operation_by_name(input_name)
output_operation = graph.get_operation_by_name(output_name)
results = sess.run(output_operation.outputs[0], {
input_operation.outputs[0] : t
})
results = np.squeeze(results)
top_k = results.argsort()[-5:][::-1]
for i in top_k:
print(labels[i], results[i])
# inception_model()
with tf.Session(graph = object_detection_graph) as sess:
while camera.isOpened():
ok, img = camera.read()
cv.imwrite("frame_temp.jpeg", img)
img = np.array(img)
rows = img.shape[0]
cols = img.shape[1]
inp = cv.resize(img, (299, 299))
# inception_model()
# # Graph for the InceptionV3 Model
# graph = load_graph('inception_v3_frozen/inception_v3_2016_08_28_frozen.pb')
# t = read_tensor_from_image('frame_temp.jpeg')
# input_layer = "input"
# output_layer = "InceptionV3/Predictions/Reshape_1"
# input_name = "import/" + input_layer
# output_name = "import/" + output_layer
# input_operation = graph.get_operation_by_name(input_name)
# output_operation = graph.get_operation_by_name(output_name)
# with tf.Session(graph = graph) as sess:
# results = sess.run(output_operation.outputs[0], {
# input_operation.outputs[0] : t
# })
# results = np.squeeze(results)
# top_k = results.argsort()[-5:][::-1]
# for i in top_k:
# print(labels[i], results[i])
inp = inp[:, :, [2, 1, 0]] # BGR2RGB
# Run the model
out = sess.run([object_detection_graph.get_tensor_by_name('num_detections:0'),
object_detection_graph.get_tensor_by_name('detection_scores:0'),
object_detection_graph.get_tensor_by_name('detection_boxes:0'),
object_detection_graph.get_tensor_by_name('detection_classes:0')],
feed_dict={'image_tensor:0': inp.reshape(1, inp.shape[0], inp.shape[1], 3)})