用KolektorSDD数据集跑caffe的unet没什么问题,虽然结果检测不到缺陷
遂用C1数据集尝试。但是训练时候报了如题的错误。
别人的说法:
1.Check failed: status == CUBLAS_STATUS_SUCCESS (11 vs. 0) CUBLAS_STATUS_MAPPING_ERROR - thesby的专栏 https://blog.csdn.net/thesby/article/details/51734199
我是做图像分割时出现这个问题的,caffe用opencv读取图像时,是读取的0–255,这样读取的label也是如此。这下就明白了,caffe如果读到了255,它就认为是有0–255的标签,但是我们最后的输出比这个维度小,这样就不对了,所以需要在输入图片是指定 scale
transform_param {
scale: 0.00390625
}
总结: 制作标签时一定要注意从0开始一个个地往后排,不能弄错
2.https://github.com/alexgkendall/caffe-segnet/issues/101
FIXED: Turns out you have to change the range of the pixel values as well as the actual number of pixel values. Segnet gets confused if you have 256 possible pixel values (0-255) and don’t have class weightings for each of them. So I changed all of my PNG label images from 255 and 0 as the pixel possibilities to 1 and 0 as the pixel possibilities. Here’s my python script for doing so:
修正:结果原来是:你必须改变像素值的范围以及像素值的实际数量。如果您有256个可能的像素值(0-255),并且没有每个像素值的类权重,Segnet会感到困惑。所以我把我所有的PNG标签图像从像素可能性为255和0改为像素可能性为1和0。
以下是我的python脚本:
import os
import cv2
import numpy as np
img = cv2.imread('/usr/local/project/old_png_labels/label.png', 0)
a_img = np.array(img, np.double)
normalized = cv2.normalize(img, a_img, 1.0, 0.0, cv2.NORM_MINMAX)
cv2.imwrite('/usr/local//project/png_labels/label.png', normalized)
关于查看像素值:
import numpy as np
from PIL import Image
img=Image.open('/home/zzn/Projects/tensorflow-models2018/c1data/SegmentationClassRaw/0595.png')
img=np.array(img)
np.unique(img)
改了标签像素后,可以训练了:
#coding=utf-8
import os
import cv2
#
# im=cv2.imread('F:\\Qin\\KolektorSDD\\SegmentationClassRaw\\0101Part5.png')
# cv2.imshow('hao',im)
# cv2.waitKey(0)
# import numpy as np
# from PIL import Image
#
# img=Image.open('F:\\Qin\\KolektorSDD\\label.png')
# img=np.array(img)
# print np.unique(img)
# 改256的像素值为1
import os
import cv2
import numpy as np
for file in os.listdir('F:\\Qin\\c1\\labels'):
img = cv2.imread('F:\\Qin\\c1\\labels\\'+file, 0)
a_img = np.array(img, np.double)
normalized = cv2.normalize(img, a_img, 1.0, 0.0, cv2.NORM_MINMAX)
cv2.imwrite('F:\\Qin\\c1\\labels2\\'+file, normalized)
print 'complete'