语义分割预测结果为全0图片是怎们回事? - 知乎

admin 45 2024-04-11 13:11:01

  我在预测网络结果的时候发现网络预测出来的结果是一片黑乎乎,以为是预测像素值太低导致的,为此将结果使用img=img*125进行显示,发现预测出来的结果根本不对。所以回过头找原因,预测代码反反复复找了好多遍,都没发现问题,为此找决定从源头开始找,将训练数据集的原图和label重新检查,由于label也是黑色的为了便于观察我做了label= label*125的处理,但是还是黑色的,为此怀疑label的问题,使用下列代码将label的像素值逐个写入到csv中,发现所有的像素值均为0.

  path = '/home/l/leilei/test_data/water_greenland/lei/label.x=23,y=16.tif'

  img = cv2.imread(path)

  img = img*250

  out = open("/home/l/leilei/test_data/water_greenland/lei/label.x=23,y=16.csv", 'a')

  csv_write = csv.writer(out,dialect = 'excel')

  for i in range(256):

  for j in range(256):

  a = img[i][j]

  csv_write.writerow(a)

  下面是得到的部分结果

  0,0,0

  0,0,0

  0,0,0

  0,0,0

  0,0,0

  0,0,0

  0,0,0

  0,0,0

  0,0,0

  所有的像素值都是这样的,我怀疑是label的问题,但是我用imagelabeler这个label制作软件读原图和label,能看出label应该是有内容的,下面是使用imagelabeler得到的结果,能看出label中将水体是绿色,植被是红色,其他均为背景为黄色。这能说明label有内容吧?但是为啥用代码读出来的label均为0呢?这个实验预测结果完全错误的原因是啥呢?不知道有没有描述清楚问题,期待回复

  你确定opencv读的结果是正确的吗?查查标签保存的格式,channel未必==3或1,有可能是voc标签格式制作的。你预测出来的结果channel应该为1,每个像素点代表类别,这样的话0和1,2,3,4看起来就是一样的,保存图片看起来一片黑,你直接在预测结果后面20,不是保存再读取后*125。用软件读取颜色分明是因为颜色索引,比如1对应(255,0,0),2对应(0,255,0)。

  我今天训练binary segmentation遇到了这个问题,经过低端的打印输出调试手段,发现网络的输出值经过sigmoid之后倾向于全部预测为1,估计是这样会是损失较小,原因是label中前景占得比例小。在将学习率不断减小之后,发现刚开始训练时预测的label是既有0也有1的,后来迭代次数增加就全部为1了。现在我想调整一下损失函数,加上权重试试。

  过拟合了可能

语义分割预测结果为全0图片是怎们回事? - 知乎

  在损失函数前面接个权重 降低0的影响

  请问你解决这个问题了吗

  在做5类别分类时,有两个类别预测全部为0,其他正常,经过多次排查发现是使用了两层softmax

  可做参考...

上一篇:贝利和马拉多纳为何从未得过金球奖? - 知乎
下一篇:赛制安排,比赛的模式 采用世界华语辩论锦标赛赛制辩论锦标赛赛制,比赛规则?请问这该怎么写我已经疯了? - 知乎
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

返回顶部小火箭