FCN分割Pascal VOC 2007

参考:


完整代码点击此处


Pascal VOC 2007数据下载

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
# 执行以下命令将解压到一个名为VOCdevkit的目录中
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

数据预览

1、VOC2007/Annotations

类别名与对象的矩形框位置

2、VOC2007/JPEGImages

这里写图片描述

3、VOC2007/SegmentationClass

这里写图片描述

4、VOC2007/SegmentationObject

这里写图片描述


Pascal_VOC_2007_data.py

解析图片与mask路径

class ShapesDataset(object):

    def __init__(self, SegmentationClass='./VOCdevkit/VOC2007/SegmentationClass/*.png',
                 JPEGImages='./VOCdevkit/VOC2007/JPEGImages'):
        '''
        :param SegmentationClass: Mask 路径
        :param JPEGImages: JPG路径 
        '''
        self.image_info = []
        self.SegmentationClass=SegmentationClass
        self.JPEGImages=JPEGImages
        # self.height=224
        # self.width = 224

    def add_image(self, f, annotation_file, **kwargs):
        image_info = {
            "image": f, # JPG 路径
            "annotation": annotation_file, # 对应mask路径  
        }
        image_info.update(kwargs)
        self.image_info.append(image_info)

    def load_shapes(self,count):
        '''加载图像和对应的Mask的路径(没有事先解析成numpy)'''
        Class_path = glob.glob(self.SegmentationClass)
        np.random.shuffle(Class_path)  # 数据随机打乱
        for num, path in enumerate(Class_path):
            # 进度输出
            sys.stdout.write('\r>> Converting image %d/%d' % (
                num + 1, len(Class_path)))
            sys.stdout.flush()

            file_name = path.split('/')[-1].split('.')[0]
            # 对应JPG
            image_path = os.path.join(self.JPEGImages, file_name + '.jpg')

            self.add_image(f=image_path, annotation_file=path)
            if (num+1)==count:
                break

        sys.stdout.write('\n')
        sys.stdout.flush()

BatchDatsetReader.py

修改的地方

# self.annotations = np.array(
#[np.expand_dims(self._transform(filename['annotation']), axis=3) for filename in self.files]) # [h,w,1]

        self.annotations = np.array([self._transform(filename['annotation']) for filename in self.files]) # [h,w,3]
        self.annotations=np.expand_dims(np.argmax(self.annotations,axis=-1),-1) # [h,w,1]

FCN_Pascal_VOC_2007_data.py

基本上是FCN_shape_data.py

修改的地方

NUM_OF_CLASSESS = 21 # 因为Pascal_VOC_2007是20个类,加上背景 21

# 其他的基本不变

train

python3 FCN_Pascal_VOC_2007_data.py

test

python3 FCN_Pascal_VOC_2007_data.py --mode visualize

运行结果

这里写图片描述

运行的时间比较短,只能大致看到一些轮廓

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值