tensorflow-yolo
tensorflow-yolo copied to clipboard
为什么我只能检测到一个对象,具体怎么改代码啊,求大神帮忙,万分感谢
demo.py里有: P = C * p_classes; index = np.argmax(P) demo应该是取最大的概率的一个框展示出来,我将损失从30多降到1点几发现实际检测效果很差,不知道是什么原因,请问你有没这个问题?
我把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
#49 里有,可以参考