百度飞桨PaddlePaddle图像分割七日打卡营 class4 deeplab实现

  1. deeplab.py
import numpy as np
import paddle.fluid as fluid
from paddle.fluid.dygraph import to_variable
from paddle.fluid.dygraph import Layer
from paddle.fluid.dygraph import Conv2D
from paddle.fluid.dygraph import BatchNorm
from paddle.fluid.dygraph import Dropout
from resnet_multi_grid import ResNet50class ASPPPooling(Layer):# TODO:def __init__(self, num_channels, num_filters):super(ASPPPooling, self).__init__()self.features = fluid.dygraph.Sequential(Conv2D(num_channels, num_filters, 1),BatchNorm(num_filters, act='relu'))def forward(self, inputs):n,c,h,w = inputs.shapex = fluid.layers.adaptive_pool2d(inputs, 1)x = self.features(x)x =fluid.layers.interpolate(x, (h, w), align_corners=False)return xclass ASPPConv(fluid.dygraph.Sequential):# TODO:def __init__(self, num_channels, num_filters, dilation):super(ASPPConv, self).__init__(Conv2D(num_channels, num_filters, filter_size=3, padding=dilation, dilation=dilation),BatchNorm(num_filters, act='relu'))class ASPPModule(Layer):# TODO: def __init__(self, num_channels, num_filters, rates):super(ASPPModule, self).__init__()self.features = []self.features.append(fluid.dygraph.Sequential(Conv2D(num_channels, num_filters, 1),BatchNorm(num_filters, act='relu')))self.features.append(ASPPPooling(num_channels, num_filters))for r in rates:self.features.append(ASPPConv(num_channels, num_filters, r))self.project = fluid.dygraph.Sequential(Conv2D(num_filters*(2+len(rates)), num_filters, 1),BatchNorm(num_filters, act='relu'))def forward(self, inputs):res = []for op in self.features:res.append(op(inputs))x = fluid.layers.concat(res, axis=1)x = self.project(x)return xclass DeepLabHead(fluid.dygraph.Sequential):def __init__(self, num_channels, num_classes):super(DeepLabHead, self).__init__(ASPPModule(num_channels, 256, [12, 24, 36]),Conv2D(256, 256, 3, padding=1),BatchNorm(256, act='relu'),Conv2D(256, num_classes, 1))class DeepLab(Layer):# TODO:def __init__(self, num_classes=59):super(DeepLab, self).__init__()resnet = ResNet50(pretrained=False, duplicate_blocks=True)self.layer0 = fluid.dygraph.Sequential(resnet.conv,resnet.pool2d_max)self.layer1 = resnet.layer1self.layer2 = resnet.layer2self.layer3 = resnet.layer3self.layer4 = resnet.layer4# multigridself.layer5 = resnet.layer5self.layer6 = resnet.layer6self.layer7 = resnet.layer7feature_dim = 2048self.classifier = DeepLabHead(feature_dim, num_classes)def forward(self, inputs):n, c, h, w = inputs.shapex = self.layer0(inputs)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = self.layer5(x)x = self.layer6(x)x = self.layer7(x)x = self.classifier(x)x = fluid.layers.interpolate(x, (h,w), align_corners=False)return xdef main():with fluid.dygraph.guard():x_data = np.random.rand(2, 3, 512, 512).astype(np.float32)x = to_variable(x_data)model = DeepLab(num_classes=59)model.eval()pred = model(x)print(pred.shape)if __name__ == '__main__':main()
  1. resnet_multi_grid.py
import numpy as np
import paddle.fluid as fluid
from paddle.fluid.dygraph import to_variable
from paddle.fluid.dygraph import Conv2D
from paddle.fluid.dygraph import BatchNorm
from paddle.fluid.dygraph import Pool2D
from paddle.fluid.dygraph import Linearmodel_path = {'ResNet18': './resnet18','ResNet34': './resnet34','ResNet50': './resnet50','ResNet101': './resnet101','ResNet152': './resnet152'}class ConvBNLayer(fluid.dygraph.Layer):def __init__(self,num_channels,num_filters,filter_size,stride=1,groups=1,act=None,dilation=1,padding=None,name=None):super(ConvBNLayer, self).__init__(name)if padding is None:padding = (filter_size-1)//2else:padding=paddingself.conv = Conv2D(num_channels=num_channels,num_filters=num_filters,filter_size=filter_size,stride=stride,padding=padding,groups=groups,act=None,dilation=dilation,bias_attr=False)self.bn = BatchNorm(num_filters, act=act)def forward(self, inputs):y = self.conv(inputs)y = self.bn(y)return yclass BasicBlock(fluid.dygraph.Layer):expansion = 1  # expand ratio for last conv output channel in each blockdef __init__(self,num_channels,num_filters,stride=1,shortcut=True,name=None):super(BasicBlock, self).__init__(name)self.conv0 = ConvBNLayer(num_channels=num_channels,num_filters=num_filters,filter_size=3,stride=stride,act='relu',name=name)self.conv1 = ConvBNLayer(num_channels=num_filters,num_filters=num_filters,filter_size=3,act=None,name=name)if not shortcut:self.short = ConvBNLayer(num_channels=num_channels,num_filters=num_filters,filter_size=1,stride=stride,act=None,name=name)self.shortcut = shortcutdef forward(self, inputs):conv0 = self.conv0(inputs)conv1 = self.conv1(conv0)if self.shortcut:short = inputselse:short = self.short(inputs)y = fluid.layers.elementwise_add(x=short, y=conv1, act='relu')return yclass BottleneckBlock(fluid.dygraph.Layer):expansion = 4def __init__(self,num_channels,num_filters,stride=1,shortcut=True,dilation=1,padding=None,name=None):super(BottleneckBlock, self).__init__(name)self.conv0 = ConvBNLayer(num_channels=num_channels,num_filters=num_filters,filter_size=1,act='relu')
#                                 name=name)self.conv1 = ConvBNLayer(num_channels=num_filters,num_filters=num_filters,filter_size=3,stride=stride,padding=padding,act='relu',dilation=dilation)#                                name=name)self.conv2 = ConvBNLayer(num_channels=num_filters,num_filters=num_filters * 4,filter_size=1,stride=1)#                                name=name)if not shortcut:self.short = ConvBNLayer(num_channels=num_channels,num_filters=num_filters * 4,filter_size=1,stride=stride)
#                                     name=name)self.shortcut = shortcutself.num_channel_out = num_filters * 4def forward(self, inputs):conv0 = self.conv0(inputs)#print('conv0 shape=',conv0.shape)conv1 = self.conv1(conv0)#print('conv1 shape=', conv1.shape)conv2 = self.conv2(conv1)#print('conv2 shape=', conv2.shape)if self.shortcut:short = inputselse:short = self.short(inputs)#print('short shape=', short.shape)y = fluid.layers.elementwise_add(x=short, y=conv2, act='relu')return yclass ResNet(fluid.dygraph.Layer):def __init__(self, layers=50, num_classes=1000, multi_grid=[1, 2, 4], duplicate_blocks=False):super(ResNet, self).__init__()self.layers = layerssupported_layers = [18, 34, 50, 101, 152]assert layers in supported_layersmgr = [1, 2, 4] # multi grid rate for duplicated blocksif layers == 18:depth = [2, 2, 2, 2]elif layers == 34:depth = [3, 4, 6, 3]elif layers == 50:depth = [3, 4, 6, 3]elif layers == 101:depth = [3, 4, 23, 3]elif layers == 152:depth = [3, 8, 36, 3]if layers < 50:num_channels = [64, 64, 128, 256, 512]else:num_channels = [64, 256, 512, 1024, 2048]num_filters = [64, 128, 256, 512]self.conv = ConvBNLayer(num_channels=3,num_filters=64,filter_size=7,stride=2,act='relu')self.pool2d_max = Pool2D(pool_size=3,pool_stride=2,pool_padding=1,pool_type='max')if layers < 50:block = BasicBlockl1_shortcut=Trueelse:block = BottleneckBlockl1_shortcut=Falseself.layer1 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[0],num_filters[0],depth[0],stride=1,shortcut=l1_shortcut,name='layer1'))self.layer2 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[1],num_filters[1],depth[1],stride=2,name='layer2'))self.layer3 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[2],num_filters[2],depth[2],stride=1,dilation=2,name='layer3'))# add multi grid [1, 2, 4]      self.layer4 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[3],num_filters[3],depth[3],stride=1,name='layer4',dilation=multi_grid))if duplicate_blocks:self.layer5 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[4],num_filters[3],depth[3],stride=1,name='layer5',dilation=[x*mgr[0] for x in multi_grid]))self.layer6 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[4],num_filters[3],depth[3],stride=1,name='layer6',dilation=[x*mgr[1] for x in multi_grid]))self.layer7 = fluid.dygraph.Sequential(*self.make_layer(block,num_channels[4],num_filters[3],depth[3],stride=1,name='layer7',dilation=[x*mgr[2] for x in multi_grid]))self.last_pool = Pool2D(pool_size=7, # ignore if global_pooling is Trueglobal_pooling=True,pool_type='avg')self.fc = Linear(input_dim=num_filters[-1] * block.expansion,output_dim=num_classes,act=None)self.out_dim = num_filters[-1] * block.expansiondef forward(self, inputs):x = self.conv(inputs)x = self.pool2d_max(x)#print(x.shape)x = self.layer1(x)#print(x.shape)x = self.layer2(x)#print(x.shape)x = self.layer3(x)#print(x.shape)x = self.layer4(x)#print(x.shape)x = self.last_pool(x)x = fluid.layers.reshape(x, shape=[-1, self.out_dim])x = self.fc(x)return xdef make_layer(self, block, num_channels, num_filters, depth, stride, dilation=1, shortcut=False, name=None):layers = []if isinstance(dilation, int):dilation = [dilation] * depthelif isinstance(dilation, (list, tuple)):assert len(dilation) == 3, "Wrong dilation rate for multi-grid | len should be 3"assert depth ==3, "multi-grid can only applied to blocks with depth 3"padding = []for di in dilation:if di>1:padding.append(di)else:padding.append(None)layers.append(block(num_channels,num_filters,stride=stride,shortcut=shortcut,dilation=dilation[0],padding=padding[0],name=f'{name}.0'))for i in range(1, depth):layers.append(block(num_filters * block.expansion,num_filters,stride=1,dilation=dilation[i],padding=padding[i],name=f'{name}.{i}'))return layersdef ResNet18(pretrained=False):model = ResNet(layers=18)if pretrained:model_state, _ = fluid.load_dygraph(model_path['ResNet18'])model.set_dict(model_state)return modeldef ResNet34(pretrained=False):model =  ResNet(layers=34)if pretrained:model_state, _ = fluid.load_dygraph(model_path['ResNet34'])model.set_dict(model_state)return modeldef ResNet50(pretrained=False, duplicate_blocks=False):model =  ResNet(layers=50, duplicate_blocks=duplicate_blocks)if pretrained:model_state, _ = fluid.load_dygraph(model_path['ResNet50'])if duplicate_blocks:set_dict_ignore_duplicates(model, model_state)else:model.set_dict(model_state)return modeldef findParams(model_state, name):new_dict = dict()for key,val in model_state.items():if name == key[0:len(name)]:print(f'change {key} -> {key[len(name)+1::]}')new_dict[key[len(name)+1::]] = valreturn new_dictdef set_dict_ignore_duplicates(model, model_state):model.conv.set_dict(findParams(model_state,'conv'))model.pool2d_max.set_dict(findParams(model_state,'pool2d_max'))model.layer1.set_dict(findParams(model_state,'layer1'))model.layer2.set_dict(findParams(model_state,'layer2'))model.layer3.set_dict(findParams(model_state,'layer3'))model.layer4.set_dict(findParams(model_state,'layer4'))model.fc.set_dict(findParams(model_state,'fc'))return modeldef ResNet101(pretrained=False, duplicate_blocks=False):model = ResNet(layers=101, duplicate_blocks=duplicate_blocks)if pretrained:model_state, _ = fluid.load_dygraph(model_path['ResNet101'])if duplicate_blocks:set_dict_ignore_duplicates(model, model_state)else:model.set_dict(model_state)return modeldef ResNet152(pretrained=False):model = ResNet(layers=152)if pretrained:model_state, _ = fluid.load_dygraph(model_path['ResNet152'])model.set_dict(model_state)return modeldef main():with fluid.dygraph.guard():#x_data = np.random.rand(2, 3, 512, 512).astype(np.float32)x_data = np.random.rand(2, 3, 224, 224).astype(np.float32)x = to_variable(x_data)#model = ResNet18()#model.eval()#pred = model(x)#print('resnet18: pred.shape = ', pred.shape)#model = ResNet34()#pred = model(x)#model.eval()#print('resnet34: pred.shape = ', pred.shape)model = ResNet101(pretrained=False)model.eval()pred = model(x)print('dilated resnet50: pred.shape = ', pred.shape)#model = ResNet101()#pred = model(x)#model.eval()#print('resnet101: pred.shape = ', pred.shape)#model = ResNet152()#pred = model(x)#model.eval()#print('resnet152: pred.shape = ', pred.shape)#print(model.sublayers())#for name, sub in model.named_sublayers(include_sublayers=True):#    #print(sub.full_name())#    if (len(sub.named_sublayers()))#    print(name)if __name__ == "__main__":main()

百度课程链接:https://aistudio.baidu.com/aistudio/course/introduce/1767

百度飞桨PaddlePaddle图像分割七日打卡营 class4 deeplab实现相关推荐

  1. 基于百度飞桨PaddlePaddle模型训练的手势识别模型控制音乐播放器

    基于百度飞桨paddle模型训练的手势识别模型控制音乐播放器 前言 一.什么是百度飞桨PaddlePaddle? 一.1 飞桨AI Studio 二.实际使用 1.配置虚拟环境 2.安装 三.实战 四 ...

  2. 百度飞桨2021李宏毅机器学习特训营学习笔记之回归及作业PM2.5预测

    百度飞桨2021李宏毅机器学习特训营学习笔记之回归及作业PM2.5预测 前言 回归 什么是回归(Regression)? 怎么做回归? 线性回归(Linear Regression) 训练集与验证集 ...

  3. 工程师程序员的自我修养 Episode.4 基于百度飞桨PaddlePaddle框架的女朋友情绪分析防被打消息推荐深度学习系统

    具体为什么想到这个题目呢...大概是我也想不出别的什么有趣的话题或者项目的工作了吧. 有一天,柏拉图问老师苏格拉底什么是爱情?老师就让他到理论麦田里去,摘一棵全麦田里最大最金黄的麦穗来,期间只能摘一次 ...

  4. python画饼图_百度飞桨PaddlePaddle之[Python小白逆袭大神]7天训练营

    第三次参加百度的7天训练营了 这次参加的主题是[Python小白逆袭大神],不过你别看是小白逆势...除非你一开始参加就逆袭完,不然你真的是python小白,这个课程还是有难难度的. 说一下个训练营的 ...

  5. 盘点国内那些深度学习框架:清华计图Jittor、腾讯优图NCNN、百度飞桨PaddlePaddle、阿里X-DeepLearning

    1.清华计图Jittor 清华大学开发了一个名为计图(Jittor)的深度学习框架. 计图(Jittor:Just in Time)是一个采用元算子表达神经网络计算单元.完全基于动态编译(Just-i ...

  6. 强化学习——百度飞桨paddlepaddle parl

    1. 配置环境 安装paddlepaddle(CPU/GPU) CPU和GPU版本的paddlepaddle均可使用,不知道是由于本人电脑显卡性能过低还是其他原因,并未发现明显训练速度差异.应该是缺少 ...

  7. 2021全国人工智能师资培训正式“开课”,百度飞桨助力高校教师提升AI“超能力”...

    点击左上方蓝字关注我们 随着人工智能在各行各业的加速渗透和落地,AI人才缺口问题亟待解决.与此同时,高校教学仍面临着与工业实践脱节.资源差异大等困难,AI师资培训成为人才培养不可忽视的重要一环. 为积 ...

  8. 【机器学习】百度飞桨AI Studio平台项目:基于卷积神经网络分类方法的人脸颜值打分

    基于卷积神经网络分类方法的人脸颜值打分 说在前面 实验数据 解决过程 1.Precondition 2.Dataset Preparation 3.Network Configuration 4.Mo ...

  9. 飞桨PaddlePaddle深度学习七日打卡营结营体会(小白菜只想混算力康康证书)

    我是真的纯纯小白菜了,没法像大佬们一样技术心得体会了... 这是我第一次接触飞桨,第一次报飞桨的打卡营 我就 搞个 纯纯的体验版心得体会?(毕竟我就想看看证书啥样再混个算力 咋上路的 被大佬给我丢了个 ...

最新文章

  1. Oracle 11g Data Guard 使用duplicate from active database 创建 standby database
  2. USACO 1.0_Friday the Thirteenth
  3. JMeter初探五-配置元件与参数化
  4. Java守护线程概述
  5. Java但中获取时间将时间转换成字符串格式(年月日格式)
  6. 采蘑菇的克拉莉丝(树链剖分)
  7. grep与egrep的区别
  8. mysql 存储过程 模糊查询_mysql 分页创建存储过程并实现模糊查询
  9. linux系统怎么安装python3视频教程_Linux系统,python3.7安装教程
  10. 一种软件定时器/超时机制的实现方法
  11. 关于输入法的弹出和隐藏
  12. 360无痕浏览器_功能强大好用的浏览器
  13. matlab中小波工具箱下载,matlab小波工具箱小波分析步骤
  14. C#调用TSC打印机打印数据
  15. 算法导论 答案勘误(ing)
  16. 360浏览器通过访问插件管理界面启用flash实例演示,360浏览器启用Adobe Flash Player方法
  17. NSSM部署Net Core流程
  18. 【Python量化】 Scipy库求解最优资产投资组合
  19. 什么是mx记录?如何设置域名mx记录?
  20. 网络云盘前端项目启动

热门文章

  1. java实现excel文件上传并解析内容保存到数据库中
  2. 何新生的英语史(四)—学英语的最高境界是什么?
  3. python中如何多行缩进_vi 多行缩进 技巧
  4. 快速上手highcharts
  5. DOS分区表项实例分析
  6. 面向过程与面向对象编程实例
  7. 关于SeekBar的简单介绍
  8. 与CSDN学生大本营一起的日子
  9. 利用python调整word格式
  10. Leonard ai 画明代皇帝肖像