Re: [问题] 语法观念一问

楼主: chengreg (想重回校园的工程师)   2021-06-22 12:10:38
各位前辈,由于问题描述的太过简略,容小弟详细说明
其程式码来自 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
作者: penut85420 (PenutGGorz)   2021-06-22 12:25:00
我在想你的那个float32应该是来自numpy.float32我观察前面的变量名称只有显示ndarray而不是numpy.ndarray所以我推测了这个float32应该是numpy.float32而numpy.float32也确实有.all()这个方法关于bool判断,我在GitHub上找到一个Issue也在谈论https://git.io/Jn14v
楼主: chengreg (想重回校园的工程师)   2021-06-22 12:50:00
是的。该文的问题跟小弟的一模一样 谢谢前辈
作者: s0914714 (YA)   2021-06-22 13:42:00
所以你上篇回应不太精准 这就是numpy的东西一般大家讲的Python指的是原生的Python
楼主: chengreg (想重回校园的工程师)   2021-06-22 13:44:00
这也是小弟头痛的地方,有时候会搞不清楚该数值从何而来但经由penut前辈小弟找到issue并且该作者说这是一个bug该bug也已修正,小弟会再多注意是否研读新版本,谢谢大家
作者: poototo (poototo)   2021-06-22 15:46:00
IDE 好像都不会显示更多,是numpy的float32没错x = np.float32(-1) 可以用x.all()array.item(n) 跟 array[n] 回传的类型也不一样喔
作者: penut85420 (PenutGGorz)   2021-06-22 16:31:00
我推荐检测特定变量的型态还是用内建的type()比较好
楼主: chengreg (想重回校园的工程师)   2021-06-22 20:21:00
谢谢前辈提供经验!该问题小弟已全数了解并成功解决再次谢谢各位前辈!
作者: RumiManiac (Rumi!)   2021-06-23 05:07:00
原生型别也不是叫做 float32 啊...
楼主: chengreg (想重回校园的工程师)   2021-06-23 12:34:00
是。我会多注意行型别的。谢谢前辈提醒

Links booklink

Contact Us: admin [ a t ] ucptt.com