各位前辈,由于问题描述的太过简略,容小弟详细说明
其程式码来自 YOLO 的 predict result decoder,source code 如下 :
netout #为Numpy NDarray
anchors #为 Numpy DNarray
obj_thresh #为 Float32 其数值为 0.6
net_h ,netw #为 int 其数值为 416
def decode_netout(netout, anchors, obj_thresh, net_h, net_w):
grid_h, grid_w = netout.shape[:2]
nb_box = 3
netout = netout.reshape((grid_h, grid_w, nb_box, -1))
nb_class = netout.shape[-1] - 5
boxes = []
netout[..., :2] = _sigmoid(netout[..., :2])
netout[..., 4:] = _sigmoid(netout[..., 4:])
netout[..., 5:] = netout[..., 4][..., np.newaxis] * netout[..., 5:]
netout[..., 5:] *= netout[..., 5:] > obj_thresh
for i in range(grid_h*grid_w):
row = i / grid_w
col = i % grid_w
for b in range(nb_box):
# 4th element is objectness score
objectness = netout[int(row)][int(col)][b][4]
if(objectness.all() <= obj_thresh): continue
# first 4 elements are x, y, w, and h
x, y, w, h = netout[int(row)][int(col)][b][:4]
x = (col + x) / grid_w # center position, unit: image width
y = (row + y) / grid_h # center position, unit: image height
w = anchors[2 * b + 0] * np.exp(w) / net_w # unit: image width
h = anchors[2 * b + 1] * np.exp(h) / net_h # unit: image height
# last elements are class probabilities
classes = netout[int(row)][col][b][5:]
box = BoundBox(x-w/2, y-h/2, x+w/2, y+h/2, objectness, classes)
boxes.append(box)
return boxes
而小弟追踪该 function 时发现该 objectness 为 float32 (请看截图) 而无法理解
该ojbectness为何会有 .all() 这个方法, 并且用来判断 bool ?
一直无法理解这个问题
故上来请教前辈们这个疑惑
谢谢大家帮忙
图片如下 :
https://photos.app.goo.gl/rbsPt91WBi1FcuvN6