首页 > 其他分享 >Cityscapes怎么做!DeepLabv3参见!

Cityscapes怎么做!DeepLabv3参见!

时间:2023-09-01 16:06:36浏览次数:62  
标签:__ 参见 nn Cityscapes channels DeepLabv3 size self out

项目场景:

问题描述: 使用计算机视觉技术和英特尔® AI 分析工具套件为自动驾驶车辆开发实时对象检测模型。参赛团队需要创建一个深度学习模型,用于准确检测行人、车辆、交通标志和交通信号等对象。该模型需要具有高准确度和低延迟,能够满足自动驾驶车辆安全导航的需求。

预期解决方案::

  1. 使用英特尔® AI 分析工具套件中的适当组件开发一个深度学习模型,用于准确、快速检测并对道路上的对象进行分割。:
  2. 使用包括挑战赛指定的真实场景(如各种天气条件、光线条件和道路环境)的数据集测试模型。:
  3. 尝试进行模型优化,以实现低延迟,以支持自动驾驶车辆进行实时对象检测。:
  4. 鼓励参赛团队使用英特尔CPU或英特尔GPU完成项目。

数据集:: 城市景观数据集:这个数据集包含高分辨率的城市场景图像,专门用于城市场景语义理解任务。该数据集包含 30 类对象(行人、汽车、公共汽车、自行车等)的 5,000 幅图像,并带有精细注释。: 本次挑战赛使用下列两个数据集文件:原始图片leftImg8bit_trainvaltest.zip 和 标记文件gtFine_trainvaltest.zip。 请使用该数据集内默认的训练、验证和测试集的划分,禁止把测试集加入到训练集中。: *本次挑战的数据源于https://www.cityscapes-dataset.com/ ,使用时请遵循相关网站的使用条款及使用符合规定的企业或机构邮箱完成注册,进入Download页面获取本次挑战赛指定的上述数据集。

参考资料:: 英特尔AI参考套件中提供了类似解决参考代码及方案:https://github.com/idz-cn/Drone-navigation

评选规则::

  1. 代码质量: • 代码易于理解且可重现: • 代码经过良好测试,功能无错误: • 代码有详细记录:
  2. 技术实现: • 开发人员适当利用和使用英特尔® AI 分析工具包: • 检测道路上的对象时能实现高准确率,参考测试集中图片平均像素交并比(Intersection over Union, IoU )、像素精度(Pixel Accuracy, PA )数值。: • 尽可能地实现低延迟对象检测,参考测试集中单张图片的平均预测时间。: • 鼓励使用英特尔CPU 或英特尔 GPU。:
  3. 创造力和原创性: • 解决方案是原创的,与同类提交的方案明显不同: • 解决方案创造了超越竞争的明显附加价值:


模型选择

由于个人算力有限,而本人长期从事于手机或者其他移动设备的研发,希望在本次比赛研发出的模型能够用移动设备的算力,也能够很好的进行推理。 因此我选择了模型参数很小的DeepLabv3

Deeplabv3改进在于引入了ASPP模块和改进的decoder模块。ASPP模块是一种多尺度特征融合的方法,它可以在不同尺度上对特征进行采样和池化。

该项目中我用的模型如下

import torch
import torch.nn as nn
import torch.nn.functional as F

class DeepLabV3(nn.Module):
    def __init__(self, n_classes):
        super(DeepLabV3, self).__init__()
        self.n_classes = n_classes
        self.backbone = torchvision.models.resnet50(pretrained=True)
        self.aspp = ASPP(2048, 256, [6, 12, 18])
        self.decoder = Decoder(256, 256, n_classes)
    
    def forward(self, x):
        x = self.backbone.conv1(x)
        x = self.backbone.bn1(x)
        x = self.backbone.relu(x)
        x = self.backbone.maxpool(x)

        x1 = self.backbone.layer1(x)
        x2 = self.backbone.layer2(x1)
        x3 = self.backbone.layer3(x2)
        x4 = self.backbone.layer4(x3)

        x = self.aspp(x4)
        x = self.decoder(x, x3)

        x = F.interpolate(x, size=x.size()[2:], mode='bilinear', align_corners=True)
        
        return x

class ASPP(nn.Module):
    def __init__(self, in_channels, out_channels, atrous_rates):
        super(ASPP, self).__init__()
        self.conv1x1 = nn.Conv2d(in_channels, out_channels, kernel_size=1)
        self.conv3x3_1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=atrous_rates[0], dilation=atrous_rates[0])
        self.conv3x3_2 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=atrous_rates[1], dilation=atrous_rates[1])
        self.conv3x3_3 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=atrous_rates[2], dilation=atrous_rates[2])
        self.conv3x3_4 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=atrous_rates[3], dilation=atrous_rates[3])
        self.bn = nn.BatchNorm2d(out_channels)
    
    def forward(self, x):
        feat1x1 = self.conv1x1(x)
        feat3x3_1 = self.conv3x3_1(x)
        feat3x3_2 = self.conv3x3_2(x)
        feat3x3_3 = self.conv3x3_3(x)
        feat3x3_4 = self.conv3x3_4(x)

        out = torch.cat((feat1x1, feat3x3_1, feat3x3_2, feat3x3_3, feat3x3_4), dim=1)
        out = self.bn(out)
        
        return F.relu(out)

class Decoder(nn.Module):
    def __init__(self, in_channels, mid_channels, out_channels):
        super(Decoder, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, mid_channels, kernel_size=1)
        self.bn1 = nn.BatchNorm2d(mid_channels)
        self.conv2 = nn.Conv2d(mid_channels, mid_channels, kernel_size=3, padding=1)
        self.bn2 = nn.BatchNorm2d(mid_channels)
        self.conv3 = nn.Conv2d(mid_channels, out_channels, kernel_size=1)
        self.bn3 = nn.BatchNorm2d(out_channels)
    
    def forward(self, x, skip):
        x = F.interpolate(x, size=skip.size()[2:], mode='bilinear', align_corners=True)
        skip = self.conv1(skip)
        skip = self.bn1(skip)
        x = torch.cat((x, skip), dim=1)
        
        x = self.conv2(x)
        x = self.bn2(x)
        
        x = self.conv3(x)
        x = self.bn3(x)
        
        return F.relu(x)

模型训练:

该模型在leftImg8bit训练集上训练了100个epoch。 显卡为:3090 24GB显存 batch_size:64

import torch
import torch.nn as nn
import torch.optim as optim

model = DeepLabV3(n_classes=19)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(num_epochs):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(trainloader)))

模型测试:

在该项目中,我使用了交叉熵作为评估标准,同时保留每次训练最佳的模型。因此可以达到较好的识别效果。

可视化结果展示如下:

Cityscapes怎么做!DeepLabv3参见!_DeepLabv3

One AI套件使用

VTune Profiler分析PyTorch*程序的性能瓶颈,并进行优化。

步骤:

  1. 安装Intel® VTune™ Profiler,并启动。
  2. 在VTune Profiler中创建一个新的性能分析项目。

3 .选择“Python*”作为分析类型,并选择要分析的Python脚本。

4.在“高级设置”中,选择“PyTorch*”作为框架,并选择要使用的Python版本和PyTorch版本。

  1. 开始分析,并等待分析结果。
  2. 在分析结果中,选择“热点”视图,查看程序的性能瓶颈。
  3. 根据热点视图中的数据,进行代码优化,例如减少数据传输、使用更高效的算法等。
  4. 重新运行程序,并使用VTune Profiler进行性能测试,以验证优化效果。

标签:__,参见,nn,Cityscapes,channels,DeepLabv3,size,self,out
From: https://blog.51cto.com/u_11876373/7323703

相关文章

  • 使用LabVIEW实现 DeepLabv3+ 语义分割含源码
    (文章目录)前言图像分割可以分为两类:语义分割(SemanticSegmentation)和实例分割(InstanceSegmentation),前面已经给大家介绍过两者的区别,并就如何在labview上实现相关模型的部署也给大家做了讲解,今天和大家分享如何使用labview实现deeplabv3+的语义分割,并就PascalVOC2012(DeepL......
  • 使用LabVIEW实现 DeepLabv3+ 语义分割含源码
    前言图像分割可以分为两类:语义分割(SemanticSegmentation)和实例分割(InstanceSegmentation),前面已经给大家介绍过两者的区别,并就如何在labview上实现相关模型的部署也给大家做了讲解,今天和大家分享如何使用labview实现deeplabv3+的语义分割,并就PascalVOC2012(DeepLabv3Plus-Mo......
  • iOS MachineLearning 系列(18)—— PoseNet,DeeplabV3与FCRN-DepthPrediction模型
    iOSMachineLearning系列(18)——PoseNet,DeeplabV3与FCRN-DepthPrediction模型本篇文章将再介绍三个官方的CoreML模型:PoseNet,DeeplabV3和FCRN-DepthPrediction。PoseNet是人体姿势分析模型,可以识别图片中的人体部分,然后以17个基准点来描述人体的姿势。关于人体姿势的识别,其实Vision......
  • 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其他适用的错误日志。
    原文链接:https://blog.csdn.net/qq_32152803/article/details/80256503请求失败或服务未及时响应。有关详细信息,请参见事件日志或其他适用的错误日志。  第一步:怎......
  • 37、在OAK摄像头上部署tensorflow deeplabv3+进行实例分割
    基本思想:手中有个OAK摄像头,一直想移植一下官方的deeplabv3的模型,逐记录一下训练过程和模型转换,从pb转模型到openvino,然后在移植oak摄像头,tensorflow/model的版本为2022-09-1......
  • 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割
     前言今天我们一起来看一下如何使用LabVIEW实现语义分割。一、什么是语义分割图像语义分割(semanticsegmentation),从字面意思上理解就是让计算机根据图像的语义来进......
  • 深度学习从入门到精通——图像分割实战DeeplabV3
    DeeplabV3算法​​参数配置​​​​关于数据集的配置​​​​训练集参数​​​​数据预处理模块​​​​DataSet构建模块​​​​测试一下数据集​​​​去正则化​​​​模......
  • forms组件参见错误参数
    Fieldrequired=True,是否允许为空widget=None,HTML插件label=None,用于生成Label标签或显示内容......