1

我需要在ios上使用tensorflow的检测模型。1中可用的 tflite 模型文件是 uint8 格式,不能很好地与 CoreML 配合使用,所以我决定下载一个完整的模型并自己将其转换为 tflite。

TF zoo 中的所有 SSD 模型都包含非极大值抑制算法,并且由于 NMS 不能很好地与 tflite 配合使用,我删除了 export_tflite_graph_lib_tf2 代码中的后处理功能,以便创建没有 NMS 的 tflite 模型。

所以现在我有一个工作检测模型(确切地说是ssd mobilenetv2),它输出(box_encodings、class_predictions、anchors)而不是(boxes、classes、scores、num_detections)

如何从每个 box_encoding、anchors 中创建一个 bbox?

我在2中找到了这个公式:

ycenter = y / y_scale * anchor.h + anchor.y;  
xcenter = x / x_scale * anchor.w + anchor.x;  
half_h = 0.5*exp(h/ h_scale)) * anchor.h;  
half_w = 0.5*exp(w / w_scale)) * anchor.w;  
ymin = ycenter - half_h; 
ymax = ycenter + half_h; 
xmin = xcenter - half_w; 
xmax = xcenter + half_w;

但我不确定y_scale、x_scale等是什么。它的图像大小?(320*320)。如果是这样,数字不匹配。

例如,(0.425, 0.225, 0.399, 0.200) 的框编码和 (0.958, 1.315, 1.437, 0.938) 的锚点创建 (0.496, 0.953, 2.641, 2.099) 的 bbox。这些数字对我来说没有意义(我希望所有四个数字(bbox 的角)都在 [0,1] 范围内)。任何人都可以澄清这一点吗?谢谢

4

1 回答 1

1

发现了答案:

  1. 我的 box_encodings,锚混在一起了。
  2. 比例因子是:x,y:10;w,h:5(而不是 320)

现在创建的框已正确创建

于 2021-06-07T11:56:48.440 回答