Tensorflow 我想知道对象检测api中边界框的大小
我使用了Tensorflow 我想知道对象检测api中边界框的大小,tensorflow,object-detection,Tensorflow,Object Detection,我使用了API () 然后呢, 我如何知道边界框的长度 我在github上实时使用了IPython笔记本教程 但是我不知道使用哪个命令来计算长方体的长度。您可以调用长方体,如下所示: boxes = detection_graph.get_tensor_by_name('detection_boxes:0') 分数和班级也是如此 然后在会话运行时调用它们 (boxes, scores, classes) = sess.run( [boxes, scores, cla
API
()
然后呢,
我如何知道边界框的长度
我在github上实时使用了IPython笔记本教程
但是我不知道使用哪个命令来计算长方体的长度。您可以调用长方体,如下所示:
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
分数和班级也是如此
然后在会话运行时调用它们
(boxes, scores, classes) = sess.run(
[boxes, scores, classes],
feed_dict={image_tensor: imageFile})
只是为了扩展Beta的答案: 可以从检测图中获得预测的边界框。中给出了一个示例。这就是Beta版被截取的代码的来源。访问
检测图
,并从张量中提取预测边界框的坐标:
通过调用np.squence(box)
可以将它们重塑为(m,4),其中m表示预测框的数量。现在,您可以访问这些框并计算长度、面积或您想要的任何内容
但请记住,预测框坐标是标准化的!它们的顺序如下:
[ymin,xmin,ymax,xmax]
因此,以像素为单位计算长度将类似于:
def length_of_bounding_box(bbox):
return bbox[3]*IMG_WIDTH - bbox[1]*IMG_WIDTH
基本上,你可以从图中得到所有这些
image_tensor = graph.get_tensor_by_name('image_tensor:0')
boxes = graph.get_tensor_by_name('detection_boxes:0')
scores = graph.get_tensor_by_name('detection_scores:0')
classes = graph.get_tensor_by_name('detection_classes:0')
num_detections = graph.get_tensor_by_name('num_detections:0')
框[0]包含所有预测的边界框坐标,其格式为[top_left_x,top_left_y,bottom_right_x,bottom_right_y],这就是您要查找的
查看此回购协议,您可能会发现更多详细信息:
我写了一个关于如何找到边界框坐标的完整答案,并认为它可能对这方面的人也有用 Google Object Detection API以[ymin,xmin,ymax,xmax]格式和规范化形式返回边界框(完整解释)。要找到(x,y)像素坐标,我们需要将结果乘以图像的宽度和高度。首先获取图像的宽度和高度:
width, height = image.size
然后,从框
对象中提取ymin、xmin、ymax、xmax并相乘以获得(x,y)坐标:
ymin = boxes[0][i][0]*height
xmin = boxes[0][i][1]*width
ymax = boxes[0][i][2]*height
xmax = boxes[0][i][3]*width
最后打印框角的坐标:
print 'Top left'
print (xmin,ymin,)
print 'Bottom right'
print (xmax,ymax)
识别对象并返回位置和置信度信息的以下代码为:
(boxes, scores, classes, num_detections) = sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})
遍历这些框
for i,b in enumerate(boxes[0]):
要获取宽度和高度,请执行以下操作:
width = boxes[0][i][1]+boxes[0][i][3]
height = boxes[0][i][0]+boxes[0][i][2]
您可以找到更多详细信息:[欢迎访问SO!如果您能更详细地解释这个问题,它将对您和本论坛的其他用户更有用。以及您迄今为止所做的尝试。感谢您的详细回答!!但是我如何“访问检测图并从张量中提取预测边界框的坐标”。我对代码不太清楚。@SUNJIAWEI您可以使用
框[0][I]
@iTiger访问第I个框的坐标。我不确定在这里(和下面)的答案日期之间tensorflow是否发生了变化,但我在遵循[xmin,ymin,xmax,ymax]时没有得到预期的结果
约定。2018年2月8日,我使用此链接()查看了github上图像数组上的绘制边界框函数的源代码,顺序是[ymin,xmin,ymax,xmax]
@KolaB是的,看起来他们改变了坐标的顺序。谢谢你的评论!我会编辑我的答案。@Itger你指定的链接已断开。我想它是旧版本的。到目前为止,我认为object_detection.ipynb中的代码也被更改了。我应该对新文件做什么更改,以便获得边界坐标框。当我打印输出[u dict['detection\u box']我得到了所有测试图像的100个元组,即使是那些模型无法预测的图像。非常感谢您的帮助。感谢您提供详细的答案!但是,在调用Box之后,我如何才能在会话中获得长度?@SUNJIAWEI:如果您选中Box值,它将为您提供对象的坐标。假设您正在检查图像是否具有per不管你是不是儿子。框中给出了人物在图像中的坐标(或位置)。如果你只想知道人物的长度,你可以提取人物的长度。