24日视频直播太阳vs森林狼 明尼苏达期望复仇
50
2024 / 10 / 04
我在预测网络结果的时候发现网络预测出来的结果是一片黑乎乎,以为是预测像素值太低导致的,为此将结果使用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的影响
请问你解决这个问题了吗
在做5类别分类时,有两个类别预测全部为0,其他正常,经过多次排查发现是使用了两层softmax
可做参考...
发表评论
暂时没有评论,来抢沙发吧~