deeplab v3 keras VOC2012

本文介绍了如何使用Keras-segmentation-deeplab-v3.1实现Deeplab V3在VOC2012数据集上的实验。内容包括对原始代码的修改,如调整数据生成器以适应VOC官方的txt数据划分方式,以及修正验证数据的获取方法。同时提到了在使用OpenCV读取标注图像时需要注意的label范围转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2012的测试集是不公开的。

实验代码来源https://github.com/Golbstein/Keras-segmentation-deeplab-v3.1

这个代码需要改的。一个新的代码从来都不是下来就能用的,至少你的数据存储地址就不一样。

这个代码主要是要修改utils.py里面的数据生成器:

self.image_path_list = sorted(glob.glob(os.path.join(folder, 'JPEGImages', 'train', '*')))
self.label_path_list = sorted(glob.glob(os.path.join(folder, 'SegmentationClassAug', '*')))

这两句直接获取JPEGImage里面的train文件夹,众所周知,VOC官方是提供的txt来做data split,显然这里作者自己把训练数据放到一个文件夹里面了。所以如果是按照官方的先读取txt获得:

train_text = open(os.path.join(folder, 'ImageSets', 'Segmentation')+'/train.txt').read()
train = train_text.split('\n')
self.image_path_list = sorted([os.path.join(folder, 'JPEGImages')+ '/'+ name + '.jpg' for name in train ])[1:]
self.label_path_list = sorted([os.path.join(folder, 'SegmentationClass')+'/'+name +'.png' for name in train ])[1:]

同样的不要忘记修改test。

以及这个作者的validation数据是随机从image_path_list里面分出来的:

np.random.seed(seed)
        
n_images_to_select = round(len(self.image_path_list) * validation_split)
x = np.random.permutation(len(self.image_path_list))[:n_images_to_select]

所以前面的train应该使用trainval

train_text = open(os.path.join(folder, 'ImageSets', 'Segmentation')+'/trainval.txt').read()
train = train_text.split('\n')
self.image_path_list = sorted([os.path.join(folder, 'JPEGImages')+ '/'+ name + '.jpg' for name in train ])[1:]
self.label_path_list = sorted([os.path.join(folder, 'SegmentationClass')+'/'+name +'.png' for name in train ])[1:]

另外,需要使用Image读取,使用opencv读取的话,需要将标注图片提前转换到1-21的label范围,要不然读出来是0-220的,会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值