Advertisement

【学习笔记】Semantic Segmentation Suite使用过程中的遇到的坑

阅读量:

最近因为需要要上手语义分割,发现语义分割大牛的源代码仿佛都是caffe框架下的,Tensorflow框架下都是爱好者根据大牛的源码和论文自己撸的……查来查去发现了一个语义分隔套件,上手使用的过程中遇到的问题记录下来,希望可以帮到有缘人。

问题一:训练用label图是RGB彩色图。

我的数据集的原图及标签展示:

这个是我遇到的第一个问题,因为我的数据集是使用Labelme软件制作的,制作好的label是8位的灰度图,怎么办?

我解决思路是,照猫画虎,按照作者的camvid数据集中的csv文件制作自己的csv文件,然后自己写个脚本,把灰度图变为RGB图。说干就干,脚本如下:(因为我的类别比较少,颜色都是一个个手撸进去的,类别太多的话考虑从csv文件中读取RGB值)

复制代码
 '''

    
 This script is used to trans lableme gray lable to rgb lable.
    
 @author:KH
    
 20190325
    
 '''
    
 import os
    
 from PIL import Image
    
  
    
 x =0
    
 y =0
    
  
    
 img_path = '/home/kanghao/semantic-segmentation-suite/lmc_six_dataset/val_labels/'
    
 file_img = sorted(os.listdir(img_path))
    
  
    
 for image in file_img:
    
 	img_name = str(image)
    
 	#img_name = img_name.replace('.png','.jpg') #!!!
    
 	img = Image.open(os.path.join(img_path,image))
    
 	img = img.convert("RGB")
    
 	img_weight = img.size[0]
    
 	img_hight = img.size[1]
    
 	w_range = range(img_weight)
    
 	h_range = range(img_hight)
    
 	for x in w_range:
    
 		for y in h_range:
    
 			pix = img.getpixel((x,y))
    
 			if pix == (0,0,0): # background
    
 				pix = img.putpixel((x,y),(0,0,0))
    
 			elif pix == (1,1,1): # road
    
 				pix = img.putpixel((x,y),(0,255,0))
    
 			elif pix == (2,2,2): # grass
    
 				pix = img.putpixel((x,y),(144,228,144))
    
 			elif pix == (3,3,3): # fence
    
 				pix = img.putpixel((x,y),(255,255,0))
    
 			elif pix == (4,4,4): # stone
    
 				pix = img.putpixel((x,y),(255,0,0))
    
 			elif pix == (5,5,5): # pit
    
 				pix = img.putpixel((x,y),(30,144,255))
    
 	img.save("/home/kanghao/semantic-segmentation-suite/lmc_six_dataset/val_labels_rgb/" + img_name)
    
  
    
    
    
    

因为我的原图为jpb格式,而生成的label为png格式,有博主说两个图的格式要对应起来,于是我在脚本里染色的同时把pg转换为了jpg格式,这里坑就来了……

问题二:GT图是花的,训练多次后PRED图全黑?

转换完成后,开始训练,然而ground truth图抽风了……

我原始的GT图是这样的:

但是代码生成的GT图是这样的?? 而且这样训练下去的预测图都是黑色的……玩毛?

什么鬼?这个问题困扰了我很久,包括从源代码一步步的调试查找原因……最后的原因很简单……放大一副染色后的JPG 格式的图片看看:

发现什么了吗?是的,png到jpg后,由于编码格式改变……图片莫名奇妙产生了其他的RGB值!用PS来看RGB更明显,这就导致我的label中有不止我划分的6个类了………(在脚本中注释掉并且加了!!!的语句就是罪魁祸首)

至此,可算是可以训练了,目前训练结果尚可,但是还有问题就是我的某一类,比如草(grass,没骂街……)的准确率是0,预测不出来。 等我解决再来填坑,另推这位博主的套件详细使用过程 :)

全部评论 (0)

还没有任何评论哟~