Tensorflow2.0---DeepLab v3+分割网络原理及代码解析(四)- 训练过程

Tensorflow2.0—DeepLab v3+分割网络原理及代码解析(四)- 训练过程

Tensorflow2.0—DeepLab v3+分割网络原理及代码解析(三)- 特征提取网络实现中,输入图片已经经过主干网络进行了特征提取,最终得到的fearture map的shape为(512,512,2)。
这篇主要讲讲训练过程吧~~

一、dataset

train_dataloader = DeeplabDataset(train_lines, input_shape, batch_size, num_classes, True, VOCdevkit_path)[3]
val_dataloader = DeeplabDataset(val_lines, input_shape, batch_size, num_classes, False, VOCdevkit_path)

train.py中上述两行代码开启dataset的重定义~

    def __getitem__(self, index):
        images  = [] #保存img
        targets = [] #保存label
        for i in range(index * self.batch_size, (index + 1) * self.batch_size):  
            i           = i % self.length
            name        = self.annotation_lines[i].split()[0] #从第i批batch数据的第一张图开始遍历处理
            #-------------------------------#
            #   从文件中读取图像(返回的都是Image对象,而不是数组)
            #-------------------------------#
            jpg         = Image.open(os.path.join(os.path.join(self.dataset_path, "VOC2007/JPEGImages"), name + ".jpg"))
            png         = Image.open(os.path.join(os.path.join(self.dataset_path, "VOC2007/SegmentationClass"), name + ".png"))
            #-------------------------------#
            #   数据增强
            #-------------------------------#
            jpg, png    = self.get_random_data(jpg, png, self.input_shape, random = self.train)
            jpg         = preprocess_input(np.array(jpg, np.float64))  #输入图片做归一化操作
            png         = np.array(png)
            png[png >= self.num_classes] = self.num_classes
            #-------------------------------------------------------#
            #   转化成one_hot的形式
            #   在这里需要+1是因为voc数据集有些标签具有白边部分
            #   我们需要将白边部分进行忽略,+1的目的是方便忽略。
            #-------------------------------------------------------#
            seg_labels  = np.eye(self.num_classes + 1)[png.reshape([-1])]
            seg_labels  = seg_labels.reshape((int(self.input_shape[0]), int(self.input_shape[1]), self.num_classes + 1))

            images.append(jpg)
            targets.append(seg_labels)

        images  = np.array(images)
        targets = np.array(targets)
        return images, targets
  • images:一个列表,包含了batch_size个图片,每个图片都经过了归一化的操作,shape均为(512,512,3)
  • targets:一个列表,包含了batch_size个label,shape均为(img_h,img_w,class_num+1)

二、loss

直接看大佬的blog吧~
憨批的语义分割重制版10——Tensorflow2 搭建自己的DeeplabV3+语义分割平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进我的收藏吃灰吧~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值