deeplabv3+源码之慢慢解析2 第一章根目录(2)main.py--get_dataset函数

系列文章目录

第一章deeplabv3+源码之慢慢解析 根目录(1)main.py–get_argparser函数
第一章deeplabv3+源码之慢慢解析 根目录(2)main.py–get_dataset函数
第一章deeplabv3+源码之慢慢解析 根目录(3)main.py–validate函数
第一章deeplabv3+源码之慢慢解析 根目录(4)main.py–main函数
第一章deeplabv3+源码之慢慢解析 根目录(5)predict.py–get_argparser函数和main函数

第二章deeplabv3+源码之慢慢解析 datasets文件夹(1)voc.py–voc_cmap函数和download_extract函数
第二章deeplabv3+源码之慢慢解析 datasets文件夹(2)voc.py–VOCSegmentation类
第二章deeplabv3+源码之慢慢解析 datasets文件夹(3)cityscapes.py–Cityscapes类
第二章deeplabv3+源码之慢慢解析 datasets文件夹(4)utils.py–6个小函数

第三章deeplabv3+源码之慢慢解析 metrics文件夹stream_metrics.py–StreamSegMetrics类和AverageMeter类

第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a1)hrnetv2.py–4个函数和可执行代码
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a2)hrnetv2.py–Bottleneck类和BasicBlock类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a3)hrnetv2.py–StageModule类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a4)hrnetv2.py–HRNet类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(b1)mobilenetv2.py–2个类和2个函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(b2)mobilenetv2.py–MobileNetV2类和mobilenet_v2函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(c1)resnet.py–2个基础函数,BasicBlock类和Bottleneck类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(c2)resnet.py–ResNet类和10个不同结构的调用函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d1)xception.py–SeparableConv2d类和Block类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d2)xception.py–Xception类和xception函数
第四章deeplabv3+源码之慢慢解析 network文件夹(2)_deeplab.py–ASPP相关的4个类和1个函数
第四章deeplabv3+源码之慢慢解析 network文件夹(3)_deeplab.py–DeepLabV3类,DeepLabHeadV3Plus类和DeepLabHead类
第四章deeplabv3+源码之慢慢解析 network文件夹(4)modeling.py–5个私有函数(4个骨干网,1个模型载入)
第四章deeplabv3+源码之慢慢解析 network文件夹(5)modeling.py–12个调用函数
第四章deeplabv3+源码之慢慢解析 network文件夹(6)utils.py–_SimpleSegmentationModel类和IntermediateLayerGetter类

第五章deeplabv3+源码之慢慢解析 utils文件夹(1)ext_transforms.py.py–[17个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(2)loss.py–[1个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(3)scheduler.py–[1个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(4)utils.py–[1个类,4个函数]
第五章deeplabv3+源码之慢慢解析 utils文件夹(5)visualizer.py–[1个类]
总结

文章目录

  • 系列文章目录
    • 第一章deeplabv3+源码之慢慢解析根目录(2)main.py--get_dataset函数
    • 数据集设置,get_dataset函数


第一章deeplabv3+源码之慢慢解析根目录(2)main.py–get_dataset函数

本篇介绍main.py中的第二个函数get_dataset,主要涉及函数中所使用的数据集设定。

数据集设置,get_dataset函数

提示:看完上个部分所说的get_argparser函数,理解了对于bash命令的解析。接下来介绍对数据集的设定,改为自己的数据集后,对这个部分也需要做相关的修改。

def get_dataset(opts):  
#opts是此函数中传入的参数,在main函数中,这个就是上一篇讲的,对参数的解析结果。main函数中的第一行,opts = get_argparser().parse_args()

    """ Dataset And Augmentation        #此部分是做数据增强
    """
    if opts.dataset == 'voc':      #如果选择VOC数据集
    	#et来自于导入部分(代码详见上一篇main导入部分)第13行from utils import ext_transforms as et,所以具体内容到utils中ext_transforms去看,在后续篇幅介绍。
        train_transform = et.ExtCompose([     
            # et.ExtResize(size=opts.crop_size),
            et.ExtRandomScale((0.5, 2.0)),              #变尺寸
            et.ExtRandomCrop(size=(opts.crop_size, opts.crop_size), pad_if_needed=True),
            et.ExtRandomHorizontalFlip(),               #水平翻转
            et.ExtToTensor(),
             #以下是归一化操作,借用一句很好的解释:“图像其实是一种平稳的分布,减去数据对应维度的统计平均值,可以消除公共部分。以凸显个体之前的差异和特征。”代码中是来自Imagenet训练的均值和标准差,代码介绍后有补充链接,感兴趣的话可以看。
            et.ExtNormalize(mean=[0.485, 0.456, 0.406],
                            std=[0.229, 0.224, 0.225]),
        ])
        if opts.crop_val:   #是否翻转验证,此参数在上一篇get_argparser函数第50行,默认为false.
            val_transform = et.ExtCompose([
                et.ExtResize(opts.crop_size),
                et.ExtCenterCrop(opts.crop_size),
                et.ExtToTensor(),
                et.ExtNormalize(mean=[0.485, 0.456, 0.406],     
                                std=[0.229, 0.224, 0.225]),
            ])
        else:
            val_transform = et.ExtCompose([
                et.ExtToTensor(),
                et.ExtNormalize(mean=[0.485, 0.456, 0.406],
                                std=[0.229, 0.224, 0.225]),
            ])
        #以下参数都可以在上一篇get_argparser函数进行查找,opts.data_root第6行,opts.year第80行,opts.download第76行,train_transform是本函数选择数据集之后的第一行代码返回的结果,VOCSegmentation函数在导入的第12行,需要详见datasets文件夹下面voc.py中的VOCSegmentation类代码。
        train_dst = VOCSegmentation(root=opts.data_root, year=opts.year,
                                    image_set='train', download=opts.download, transform=train_transform)
        val_dst = VOCSegmentation(root=opts.data_root, year=opts.year,
                                  image_set='val', download=False, transform=val_transform)

    if opts.dataset == 'cityscapes':   #如选择的数据集为'cityscapes',相关设置可参考VOC理解,差别不大。
        train_transform = et.ExtCompose([
            # et.ExtResize( 512 ),
            et.ExtRandomCrop(size=(opts.crop_size, opts.crop_size)),
            et.ExtColorJitter(brightness=0.5, contrast=0.5, saturation=0.5),
            et.ExtRandomHorizontalFlip(),
            et.ExtToTensor(),
            et.ExtNormalize(mean=[0.485, 0.456, 0.406],
                            std=[0.229, 0.224, 0.225]),
        ])

        val_transform = et.ExtCompose([
            # et.ExtResize( 512 ),
            et.ExtToTensor(),
            et.ExtNormalize(mean=[0.485, 0.456, 0.406],
                            std=[0.229, 0.224, 0.225]),
        ])

        train_dst = Cityscapes(root=opts.data_root,
                               split='train', transform=train_transform)
        val_dst = Cityscapes(root=opts.data_root,
                             split='val', transform=val_transform)
    return train_dst, val_dst

Tips

  1. 关于Imagenet的均值和标准差,感兴趣的话可以参考网友的详细介绍。
  2. 本函数难点不多,但对于数据集下载后,文件夹和层级关系,建议一定要按照readme中的要求去存放,等熟悉了以后再去更改,否则很容易没入门就放弃,切记切记。

如VOC数据集的文件夹层级:
deeplabv3+源码之慢慢解析2 第一章根目录(2)main.py--get_dataset函数_第1张图片deeplabv3+源码之慢慢解析2 第一章根目录(2)main.py--get_dataset函数_第2张图片

  1. 下一个函数是验证集函数validate。

你可能感兴趣的:(技术,deeplabv3+,语义分割,深度学习,人工智能)