Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 标签在图像分割中的作用[SegNet]_Image Processing_Tensorflow_Keras_Computer Vision_Image Segmentation - Fatal编程技术网

Image processing 标签在图像分割中的作用[SegNet]

Image processing 标签在图像分割中的作用[SegNet],image-processing,tensorflow,keras,computer-vision,image-segmentation,Image Processing,Tensorflow,Keras,Computer Vision,Image Segmentation,我试图理解在keras中使用SegNet实现的图像分割。我已经使用Conv和Deconv架构以及扩展的Conv层阅读了原稿。然而,我很难理解像素的标签是如何工作的 我正在考虑实施以下措施: 此处使用pascal数据集属性: 21类: # 0=background # 1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle # 6=bus, 7=car, 8=cat, 9=chair, 10=cow # 11=diningtable, 12=dog, 1

我试图理解在keras中使用SegNet实现的图像分割。我已经使用Conv和Deconv架构以及扩展的Conv层阅读了原稿。然而,我很难理解像素的标签是如何工作的

我正在考虑实施以下措施:

此处使用pascal数据集属性:

21类:

# 0=background
# 1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle
# 6=bus, 7=car, 8=cat, 9=chair, 10=cow
# 11=diningtable, 12=dog, 13=horse, 14=motorbike, 15=person
# 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor
这些类别由以下内容表示:

pascal\u nclasses=21
pascal_palete=np.array([(0,0,0)
, (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128)
, (0, 128, 128), (128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0)
, (192, 128, 0), (64, 0, 128), (192, 0, 128), (64, 128, 128), (192, 128, 128)
,(0,64,0),(128,64,0),(0,192,0),(128,192,0),(0,64,128)],dtype=np.uint8)
我试图打开猫和船的标签图片,因为猫只在R空间,船只在蓝色。我使用以下方式显示带标签的图像:

船只:

label=cv2.imread(“2008_000120.png”)
标签=np.乘法(标签,100)
cv2.imshow(“kk”,标签[:,:,2])
cv2.等待键(0)
对于cat:

label=cv2.imread(“2008_000056.png”)
标签=np.乘法(标签,100)
cv2.imshow(“kk”,标签[:,:,0])
cv2.等待键(0)
然而,我选择哪个空间并不重要,这两张图片总是给出相同的结果。i、 e.以下代码也给出了相同的结果

船只:

label=cv2.imread(“2008_000120.png”)
标签=np.乘法(标签,100)
cv2.imshow(“kk”,标签[:,:,1])#改为绿色空间
cv2.等待键(0)
对于cat:

label=cv2.imread(“2008_000056.png”)
标签=np.乘法(标签,100)
cv2.imshow(“kk”,标签[:,:,1])#改为绿色空间
cv2.等待键(0)
我的假设是,我只能在红色的空间里看到猫,只能在蓝色的空间里看到船。但是,所有情况下的输出:

我现在很困惑这些像素是如何被标记的,它们是如何被读取的,并且在创建logit的过程中被唯一地用于与类别配对的

如果有人能解释或放一些相关链接来理解这个过程,那就太好了。我试图搜索,但大多数教程只讨论CNN架构,而不是标签过程或这些标签在CNN中的使用方式

我已附上猫和船的标签图片以供参考。

标签只是二进制图像遮罩,因此是单通道图像。标签图像每个位置的像素值根据每个像素处存在的类别而变化。因此,当像素上没有对象时,值为0,否则,值为1-20,具体取决于类别

语义分割是一项分类任务,因此您尝试用一个类对每个像素进行分类(在本例中,类标签为0-20)

您的模型将生成一个输出图像,并且您希望在每个输出图像像素和每个标签图像像素之间执行softmax交叉熵

在多类情况下,您有K个类(如这里的K=21),每个像素将有K个通道,并且您在每个像素的通道上执行softmax交叉熵。为什么每个班级都有一个频道?考虑一下在分类中,我们为K类生成一个长度为K的向量,这与长度为K的一个热向量相比较