当前位置: 首页 > news >正文

做网站需要做什么页面昌江区网站建设

做网站需要做什么页面,昌江区网站建设,百度推广账号怎么申请,定制软件开发公司介绍UNet介绍 参考UNet网络介绍整体架构UNet过程输入编码器#xff08;下采样#xff09;中间特征表示解码器#xff08;上采样#xff09;输出 代码详解unetUP和Unet关系上采样模块——unetUp用于图像分割的卷积神经网络#xff08;CNN#xff09;架构模块——Unet类的定义初… UNet介绍 参考UNet网络介绍整体架构UNet过程输入编码器下采样中间特征表示解码器上采样输出 代码详解unetUP和Unet关系上采样模块——unetUp用于图像分割的卷积神经网络CNN架构模块——Unet类的定义初始化方法上采样模块额外的上采样卷积层仅用于ResNet50最终卷积层前向传播方法冻结和解冻骨干网络 完整代码 参考 U-Net: Convolutional Networks for Biomedical Image Segmentation 输入文章名自行查询 参考博客 UNet网络介绍 整体架构 U-net 架构以最低分辨率为 32x32 像素为例每个蓝色框对应一个多通道特征图。通道数显示在框的顶部。x-y 大小位于框的左下边缘。白框表示复制的特征图。箭头表示不同的操作。 深蓝色箭头利用3×3的卷积核对图片进行卷积后通过ReLU激活函数输出特征通道 灰色箭头对左边下采样过程中的图片进行裁剪复制 红色箭头通过最大池化对图片进行下采样池化核大小为2×2 绿色箭头反卷积对图像进行上采样卷积核大小为2×2 青色箭头使用1×1的卷积核对图片进行卷积。 因为网络形状像U故被称为U-net 参考博客网络结构很清晰推荐 UNet过程 输入 U-Net 的输入是一幅单通道的图像通常大小为 572x572 像素由于在不断valid卷积过程中会使得图片越来越小为了避免数据丢失在图像输入前都需要进行镜像扩大。 编码器下采样 U-Net 的编码器部分输入图像通过卷积层进行特征提取这些卷积层通常使用 3x3 的卷积核逐步提取图像特征并缩小空间维度。然后通过池化层通常是最大池化将图像的空间维度减小例如从 572x572 缩小到 286x286。这个过程会重复多次每次都会减小图像的空间维度和增加特征通道数。 中间特征表示 在编码器的最后一层我们获得了一个中间特征表示通常是一个高维的特征张量。这个特征表示包含了图像的抽象特征可以用于后续的分割任务。 解码器上采样 U-Net 的解码器部分将中间特征表示还原到原始的空间维度并逐步增加分辨率。首先通过上采样操作将特征张量的空间维度扩大例如从 286x286 扩大到 572x572。然后通过卷积层进行特征融合将低级和高级特征结合起来。最后输出通道数为 64 的卷积层将特征映射到最终的分割结果。 输出 U-Net 的输出是一个分割图像大小与输入图像相同通常为 572x572 像素这幅分割图像被分成不同的区域其中不同区域被分配不同的标签或类别。分割图像中的每个像素都被分类到不同的类别中即可以准确地知道图像中的每个像素属于哪个结构或区域。这个分割图像可以用于识别生物医学图像中的不同结构例如肿瘤、器官等。 代码详解 unetUP和Unet关系 unetUp: unetUp 是一个自定义的 PyTorch 模块nn.Module用于实现 U-Net 模型中的上采样部分。它接受两个输入特征张量 inputs1 和 inputs2并将它们进行上采样、特征融合和卷积操作最终输出一个特征张量。在 U-Net 中unetUp 负责将低分辨率的特征图上采样到与高分辨率特征图相同的尺寸以便进行特征融合。 Unet: Unet 是整个 U-Net 模型的主体部分它由多个 unetUp 模块组成。根据选择的 backbone可以是 VGG 或 ResNet-50Unet 使用不同的主干网络提取特征。Unet 的前向传播过程包括多次特征融合上采样和卷积操作最终生成语义分割结果。 上采样模块——unetUp 这段代码定义了一个名为 unetUp 的类它是一个用于UNet架构中的上采样模块。这个模块的作用是将低分辨率特征图上采样并与高分辨率特征图结合以生成更高分辨率的输出。 # 定义unetUp类unetUp类继承自nn.Module是PyTorch中所有神经网络模块的基类。 class unetUp(nn.Module): # 初始化方法 in_size 和 out_size 是输入和输出通道的数量。 self.conv1 和 self.conv2 是两个二维卷积层卷积核大小为3填充为1。 self.up 是一个最近邻插值的上采样层放大倍数为2。 self.relu 是一个ReLU激活函数。def __init__(self, in_size, out_size):super(unetUp, self).__init__()self.conv1 nn.Conv2d(in_size, out_size, kernel_size3, padding1)self.conv2 nn.Conv2d(out_size, out_size, kernel_size3, padding1)self.up nn.UpsamplingNearest2d(scale_factor2)self.relu nn.ReLU(inplaceTrue) # 前向传播方法 # inputs1 和 inputs2 是前向传播时的输入张量。 # torch.cat([inputs1, self.up(inputs2)], 1) 将 inputs1 和上采样后的 inputs2 在通道维度上拼接。 # outputs self.conv1(outputs) 对拼接后的张量进行第一次卷积。 # outputs self.relu(outputs) 对卷积结果应用ReLU激活函数。 # outputs self.conv2(outputs) 对激活后的张量进行第二次卷积。 # outputs self.relu(outputs) 再次应用ReLU激活函数。最终返回处理后的 outputs。 # 这段代码的主要功能是将低分辨率特征图上采样并与高分辨率特征图结合经过两次卷积和激活函数处理后生成更高分辨率的输出特征图。def forward(self, inputs1, inputs2):outputs torch.cat([inputs1,self.up(inputs2)],1)outputs self.conv1(outputs)outputs self.relu(outputs)outputs self.conv2(outputs)outputs self.relu(outputs)return outputs用于图像分割的卷积神经网络CNN架构模块——Unet 下面这段代码定义了一个名为 Unet 的类它是一个用于图像分割的卷积神经网络CNN架构。这个类可以使用不同的骨干网络backbone如VGG16或ResNet50并包含上采样模块以生成高分辨率的输出。以下是对代码的详细解释 类的定义 class Unet(nn.Module):Unet 类继承自 nn.Module这是PyTorch中所有神经网络模块的基类。 初始化方法 def __init__(self, num_classes21, pretrainedFalse, backbonevgg):super(Unet, self).__init__()if backbone vgg:self.vgg VGG16(pretrainedpretrained)in_filters [192, 384, 768, 1024]elif backbone resnet50:self.resnet resnet50(pretrainedpretrained)in_filters [192, 512, 1024, 3072]else:raise ValueError(Unsupported backbone - {}, Use vgg, resnet50..format(backbone))out_filters [64, 128, 256, 512]num_classes 是输出类别的数量。pretrained 指示是否使用预训练的权重。backbone 指定使用的骨干网络可以是VGG16或ResNet50。根据选择的骨干网络初始化相应的网络并设置输入过滤器的数量。in_filters输入通道数在卷积神经网络CNN中in_filters 表示输入图像的通道数或特征图的数量。在输入层如果是灰度图片那就只有一个 feature map如果是彩色图片一般就是 3 个 feature map对应红、绿、蓝通道。在其他层每个卷积核也称为过滤器与上一层的每个 feature map 做卷积产生下一层的一个 feature map。因此如果有 N 个卷积核下一层就会产生 N 个 feature map。out_filters输出通道数在卷积神经网络中out_filters 表示卷积核的数量或输出的特征图数量。卷积核的个数决定了下一层的 feature map 数量。每个卷积核可以提取一种特征并生成一个新的特征图。在多层卷积网络中下一层的卷积核的通道数等于上一层的 feature map 数量。如果通道数不相等就无法继续进行卷积操作。 上采样模块 # upsampling self.up_concat4 unetUp(in_filters[3], out_filters[3]) self.up_concat3 unetUp(in_filters[2], out_filters[2]) self.up_concat2 unetUp(in_filters[1], out_filters[1]) self.up_concat1 unetUp(in_filters[0], out_filters[0])定义四个上采样模块每个模块将低分辨率特征图上采样到更高分辨率并与高分辨率特征图结合。self.up_concat4, self.up_concat3, self.up_concat2 , self.up_concat1 是上采样操作的一部分。它们分别将不同层的特征图级联在一起以获得更丰富的特征表示 额外的上采样卷积层仅用于ResNet50 if backbone resnet50:self.up_conv nn.Sequential(# 使用双线性插值nn.UpsamplingBilinear2d将特征图的大小放大两倍nn.UpsamplingBilinear2d(scale_factor2), # 通过两个卷积层对特征图进行处理以获得更好的特征表示nn.Conv2d(out_filters[0], out_filters[0], kernel_size3, padding1),# 使用 nn.ReLU() 激活函数来确保非线性变换nn.ReLU(),nn.Conv2d(out_filters[0], out_filters[0], kernel_size3, padding1),nn.ReLU(),) else:self.up_conv None如果使用ResNet50作为骨干网络定义一个额外的上采样卷积层。 最终卷积层 # self.final 是一个卷积层用于生成最终的输出。它将高分辨率的特征图映射到类别数num_classes self.final nn.Conv2d(out_filters[0], num_classes, 1)定义一个最终的卷积层将输出通道数转换为类别数。 前向传播方法 定义模型的前向传播过程将输入数据通过网络的各层进行计算最终生成输出。 def forward(self, inputs): # 根据 self.backbone 的值选择不同的模型VGG 或 ResNet-50进行前向传播。# 通过卷积层和池化层对输入数据进行处理得到特征图 feat1、feat2、feat3、feat4 和 feat5if self.backbone vgg:[feat1, feat2, feat3, feat4, feat5] self.vgg.forward(inputs)elif self.backbone resnet50:[feat1, feat2, feat3, feat4, feat5] self.resnet.forward(inputs) # 通过上采样操作将这些特征图进行级联得到更高分辨率的特征图 up4、up3、up2 和 up1up4 self.up_concat4(feat4, feat5)up3 self.up_concat3(feat3, up4)up2 self.up_concat2(feat2, up3)up1 self.up_concat1(feat1, up2) # 如果存在上采样卷积层 self.up_conv则对 up1 进行进一步处理if self.up_conv ! None:up1 self.up_conv(up1) # 通过 self.final 层获得最终的输出final self.final(up1)return final根据选择的骨干网络获取不同层的特征图。使用上采样模块逐层上采样并结合特征图。如果定义了额外的上采样卷积层则应用该层。最终通过一个卷积层生成输出。 冻结和解冻骨干网络 def freeze_backbone(self):if self.backbone vgg:for param in self.vgg.parameters():param.requires_grad Falseelif self.backbone resnet50:for param in self.resnet.parameters():param.requires_grad Falsedef unfreeze_backbone(self):if self.backbone vgg:for param in self.vgg.parameters():param.requires_grad Trueelif self.backbone resnet50:for param in self.resnet.parameters():param.requires_grad Truefreeze_backbone 方法用于冻结骨干网络的参数使其在训练过程中不更新。unfreeze_backbone 方法用于解冻骨干网络的参数使其在训练过程中可以更新。 冻结或解冻神经网络模型的特定层–更好地进行迁移学习或微调 迁移学习 在迁移学习中使用一个预训练的神经网络模型通常在大规模数据集上进行训练来解决新的任务。通过冻结模型的底层层例如卷积层可以保留其在原始任务上学到的特征表示然后在新任务上进行微调。这样做有助于避免在新任务上过拟合并且可以加快训练速度。 微调 微调是指在预训练模型的基础上继续训练以适应新任务的特定数据。解冻底层层允许其权重在新任务上进行调整以更好地适应新数据。通常我们只微调模型的一部分而不是整个模型以避免丢失预训练模型的有用特征。 完整代码 import torch import torch.nn as nnfrom nets.resnet import resnet50 from nets.vgg import VGG16class unetUp(nn.Module):def __init__(self, in_size, out_size):super(unetUp, self).__init__()self.conv1 nn.Conv2d(in_size, out_size, kernel_size3, padding1)self.conv2 nn.Conv2d(out_size, out_size, kernel_size3, padding1)self.up nn.UpsamplingNearest2d(scale_factor2)self.relu nn.ReLU(inplaceTrue)def forward(self, inputs1, inputs2):outputs torch.cat([inputs1,self.up(inputs2)],1)outputs self.conv1(outputs)outputs self.relu(outputs)outputs self.conv2(outputs)outputs self.relu(outputs)return outputs class Unet(nn.Module):def __init__(self, num_classes 2, pretrained False, backbone vgg):super(Unet, self).__init__()if backbone vgg:self.vgg VGG16(pretrainedpretrained)in_filters [192, 384, 768, 1024]elif backbone resnet50self.resnet resnet50(pretrainedpretrained)in_filters [192, 512, 1024, 3072]else:raise ValueError(Unsupported backbone -{}, Use vgg, resnet50..format(backbone))out_filters [64, 128, 256, 512]#???self.up_concat4 unetUp(in_filters[3], out_filters[3])self.up_concat3 unetUp(in_filters[2], out_filters[2])self.up_concat2 unetUp(in_filters[1], out_filters[1])self.up_concat1 unetUp(in_filters[0], out_filters[0])if backbone resnet50:self.up_conv nn.Sequential(nn.UpsamplingNearest2d(scale_factor2),nn.Conv2d(out_filters[0],out_filters[0], kernel_size3, padding1),nn.ReLU(),nn.Conv2d(out_filters[0], out_filters[0], kernel_size3, padding1),nn.ReLU(),)else:self.up_conv Noneself.final nn.Conv2d(out_filters[0], num_classes, 1)self.backbone backbonedef forward(self, inputs):if self.backbone vgg:[feat1, feat2, feat3, feat4, feat5] self.vgg.forward(inputs)elif self.backbone resnet50:[feat1, feat2, feat3, feat4, feat5] self.resnet.forward(inputs)up4 self.up_concat4(feat4, feat5)up3 self.up_concat3(feat3, up4)up2 self.up_concat2(feat2, up3)up1 self.up_concat1(feat1, up2)if self.up_conv ! None:up1 self.up_conv(up1)final self.final(up1)return finaldef freeze_backbone(self):if self.backbone vgg:for param in self.vgg.parameters():param.requires_grad Falseelif self.backbone resnet50:for param in self.resnet.parameters():param.requires_grad Falsedef unfreeze_backbone(self):if self.backbone vgg:for param in self.vgg.parameters():param.requires_grad Trueelif self.backbone resnet50:for param in self.resnet.parameters():param.requires_grad True
http://www.dnsts.com.cn/news/247865.html

相关文章:

  • 广州微网站建设dmz100网站什么时候备案好
  • 郑州网站建设哪家公司便宜临沂河东网站建设
  • 网站建设域名网站添加ico
  • 建网站多少钱龙岩上杭县
  • 免费网站建设建议深圳网站建设黄浦网络-骗子
  • 珠海企业网站建设费用上海计算机一级网页设计
  • 如何在网站上做404页面python是做什么的
  • 自己电脑做网站服务器设置个人注册公司费用
  • 营销型网站策划 建设的考试题怎么做免费视频网站吗
  • 有没有免费网站建设泰安网络设计公司
  • 企业管理网站模板建筑设计院分公司加盟
  • 怎样做网站的seo怎么免费建立自己的网站
  • 某品牌休闲零食网站建设规划书网络服务商主要包括哪些方面
  • 济南微信网站网站与支付宝对接
  • 郑州专业网站优化网站备案起名要求
  • 嘉兴seo网站优化wordpress 2
  • 网站前后端分离怎么做什么平台可以推广
  • 用什么做响应式网站信息发布的网站怎么做
  • 男女做暖暖到网站重庆做的好的房产网站
  • 淘宝店铺推广方式有哪些建湖网站优化公司
  • 家乡的网站设计模板微网站运营
  • 网站建设的功能担路做网站
  • 征婚网站上教人做恒指期货网站开发佛山
  • 网站网页设计海报图片江苏网站备案流程
  • 济宁官方网站专业的微网站公司
  • 做刀模网站psd模板怎么做网站
  • 网站如何改造wap百度网页版网址
  • 小伙做钓鱼网站 背警方带走绍兴做网站公司
  • php做视频网站源码房产网站电商怎么做
  • 最新章节 第四百六十二章 花两亿做的网站济南建设网官网首页