tensorflow-yolo icon indicating copy to clipboard operation
tensorflow-yolo copied to clipboard

为什么我只能检测到一个对象,具体怎么改代码啊,求大神帮忙,万分感谢

Open ss199302 opened this issue 7 years ago • 3 comments

ss199302 avatar Nov 24 '17 03:11 ss199302

demo.py里有: P = C * p_classes; index = np.argmax(P) demo应该是取最大的概率的一个框展示出来,我将损失从30多降到1点几发现实际检测效果很差,不知道是什么原因,请问你有没这个问题?

lileiigithub avatar Jan 31 '18 10:01 lileiigithub

我把process_predicts这个函数这样改,然后再用非极大值抑制,可以检测出多个目标,但是确实效果特别差。 def process_predicts(predicts): p_classes = predicts[0, :, :, :1] C = predicts[0, :, :, 1:3] coordinate = predicts[0, :, :, 3:]

p_classes = np.reshape(p_classes, (7, 7, 1, 1)) #class类别 C = np.reshape(C, (7, 7, 2, 1)) P = C * p_classes

#print (P.shape) a = np.array(P >= 0.0001, dtype='bool') c = np.nonzero(a) #print(c) L = [] for i in range(0,len(c[0])): index = c[0][i] * 7* 2 * 1 + c[1][i] * 2 * 1 + c[2][i] * 1 + c[3][i] # index = np.argmax(P) if index == 0 : continue

index = np.unravel_index(index, P.shape)

class_num = index[3]
coordinate = np.reshape(coordinate, (7, 7, 2, 4))
max_coordinate = coordinate[index[0], index[1], index[2], :]

xcenter = max_coordinate[0]
ycenter = max_coordinate[1]
w = max_coordinate[2]
h = max_coordinate[3]

if xcenter<0 or ycenter<0 or w <0 or h<0 :
  continue
#print("index", index)
#print("max_coordinate", max_coordinate)

xcenter = (index[1] + xcenter) * (448/7.0)
ycenter = (index[0] + ycenter) * (448/7.0)

w = w * 448
h = h * 448


xmin = xcenter - w/2.0
ymin = ycenter - h/2.0

xmax = xmin + w
ymax = ymin + h
if xmin<0 or ymin<0 or xmax <0 or ymax<0 or xmin>448 or ymin>448 or xmax>448 or ymax>448 :
  continue
score = P[index]
#print(b)
L1 = [xmin, ymin, xmax, ymax, class_num,score]
L.append(L1)

return L

zhouyanpei avatar Nov 22 '18 06:11 zhouyanpei

#49 里有,可以参考

ZhouJiaHuan avatar Nov 22 '18 06:11 ZhouJiaHuan