大创项目推荐 深度学习实现语义分割算法系统 - 机器视觉

news2024/11/19 9:35:19

文章目录

  • 1 前言
  • 2 概念介绍
    • 2.1 什么是图像语义分割
  • 3 条件随机场的深度学习模型
    • 3\. 1 多尺度特征融合
  • 4 语义分割开发过程
    • 4.1 建立
    • 4.2 下载CamVid数据集
    • 4.3 加载CamVid图像
    • 4.4 加载CamVid像素标签图像
  • 5 PyTorch 实现语义分割
    • 5.1 数据集准备
    • 5.2 训练基准模型
    • 5.3 损失函数
    • 5.4 归一化层
    • 5.5 数据增强
    • 5.6 实现效果
  • 6 最后

1 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 基于深度学习实现语义分割算法系统

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:4分
  • 创新点:4分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

2 概念介绍

2.1 什么是图像语义分割

这几年,随着深度学习理论和大规模并行计算设备快速发展,计算机视觉的诸多难点实现了质的突破,包括图像分类叫、目标检测、语义分割等等。

其中图像分类和目标检测在各种场景应用中大放光彩。目前最先进网络的准确度已经超过人类。

而图像语义分割是一.种语义信息更丰富的视觉识别任务,其主要任务是实现像素级别的分类。

图像语义分割示意图如下图所示。

图像语义分割技术在实际中有着非常广泛的应用,如自动驾驶、生物医学以及现实增强技术等等。

在这里插入图片描述

语义分割在自动驾驶的应用:

在这里插入图片描述
在这里插入图片描述

3 条件随机场的深度学习模型

整个深度学习模型框架下如图:
在这里插入图片描述

3. 1 多尺度特征融合

图像中的各类物体都以不同的形态出现, 用来观测它们的尺度也不尽相同, 不同的物体需要用合适的尺度来测量。

尺度也有很多种, 宏观上大的如“米”、“千米” 甚至“光年”; 微观上小的如“微米”、“纳米” 甚至是“飞米”。 在日常生活中,
人们也经常接触到尺度上的变换, 例如人们经常用到的电子地图上的放大与缩小、 照相机焦距的变化等,都是以不同的尺度来观察或者测量不同的物体。

当人们将一幅图像输入到计算机中时, 计算机要尝试很多不同的尺度以便得到描述图片中不同物体的最合适的尺度。

卷积神经网络中含有大量的超参数, 而且在网络中的任何一个参数, 都会对网络生成的特征映射产生影响。 当卷积神经网络的结构已经确定下来时,
网络中每一层学习到的特征映射的尺度也随之固定了下来, 拥有了在一定程度上的尺度不变性。

与此同时, 为了完成当前的任务, 网络中的这些已经设置好的超参数不能被随意更改, 所以必须要考虑融合多尺度特征的神经网络。

这种神经网络可以学习学长提供的框架不同尺度的图像特征, 获得不同尺度的预测, 进而将它们融合, 获得最后的输出。

一种多尺度特征融合网络如下所示。

在这里插入图片描述

4 语义分割开发过程

学长在这详细说明图像语义分割,如何进行开发和设计

语义分割网络对图像中的每个像素进行分类,从而产生按类别分割的图像。语义分割的应用包括用于自主驾驶的道路分割和用于医学诊断的癌细胞分割。有关详细信息,请参阅语义分段基础知识(计算机视觉系统工具箱)。

为了说明训练过程,学长训练SegNet ,一种设计用于语义图像分割的卷积神经网络(CNN)。用于语义分段的其他类型网络包括完全卷积网络(FCN)和U-
Net。此处显示的培训程序也可以应用于这些网络。

此示例使用剑桥大学的CamVid数据集进行培训。此数据集是包含驾驶时获得的街道视图的图像集合。该数据集为32种语义类提供了像素级标签,包括汽车,行人和道路。

4.1 建立

此示例创建具有从VGG-16网络初始化的权重的SegNet网络。要获得VGG-16,请安装适用于VGG-16网络的Deep Learning
Toolbox™模型。安装完成后,运行以下代码以验证安装是否正确。

vgg16();
下载预训练版的SegNet。预训练模型允许您运行整个示例,而无需等待培训完成。

pretrainedURL = 'https: //www.mathworks.com/supportfiles/vision/data/segnetVGG16CamVid.mat ' ;
pretrainedFolder = fullfile(tempdir,'pretrainedSegNet';
pretrainedSegNet = fullfile(pretrainedFolder,'segnetVGG16CamVid.mat'; 
如果〜存在(pretrainedFolder,'dir')
    MKDIR(pretrainedFolder);
    disp('下载预训练的SegNet(107 MB)......';
    websave(pretrainedSegNet,pretrainedURL);
结束

强烈建议使用具有计算能力3.0或更高版本的支持CUDA的NVIDIA™GPU来运行此示例。使用GPU需要Parallel Computing
Toolbox™。

4.2 下载CamVid数据集

从以下URL下载CamVid数据集。

imageURL = 'http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/files/701_StillsRaw_full.zip;  
labelURL = 'http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/data/LabeledApproved_full.zip;

outputFolder = fullfile(tempdir,‘CamVid’);

如果〜存在(outputFolder,‘dir’)

MKDIR(outputFolder)
labelsZip = fullfile(outputFolder,'labels.zip';
imagesZip = fullfile(outputFolder,'images.zip';   

disp('下载16 MB CamVid数据集标签......';
websave(labelsZip,labelURL);
unzip(labelsZip,fullfile(outputFolder,'labels'));

disp('下载557 MB CamVid数据集图像......';  
websave(imagesZip,imageURL);       
解压缩(imagesZip,fullfile(outputFolder,'images'));    


注意:数据的下载时间取决于您的Internet连接。上面使用的命令会阻止MATLAB,直到下载完成。或者,您可以使用Web浏览器首先将数据集下载到本地磁盘。要使用从Web下载的文件,请将outputFolder上面的变量更改为下载文件的位置。

4.3 加载CamVid图像

使用imageDatastore加载CamVid图像。在imageDatastore使您能够高效地装载大量收集图像的磁盘上。

imgDir = fullfile(outputFolder,'images''701_StillsRaw_full';
imds = imageDatastore(imgDir);
显示其中一个图像。

在这里插入图片描述

4.4 加载CamVid像素标签图像

使用pixelLabelDatastore加载CamVid像素标签图像数据。A
pixelLabelDatastore将像素标签数据和标签ID封装到类名映射中。

按照原始SegNet论文[1]中使用的程序,将CamVid中的32个原始类分组为11个类。指定这些类。

class = [
     “Sky” 
    “Building” 
    “Pole” 
    “Road” 
    “Pavement” 
    “Tree” 
    “SignSymbol” 
    “Fence” 
    “Car” 
    “Pedestrian” 
    “Bicyclist” 
    ];

要将32个类减少为11个,将原始数据集中的多个类组合在一起。例如,“Car”是“Car”,“SUVPickupTruck”,“Truck_Bus”,“Train”和“OtherMoving”的组合。使用支持函数返回分组的标签ID,该函数camvidPixelLabelIDs在本示例的末尾列出。

abelIDs = camvidPixelLabelIDs();
使用类和标签ID来创建 pixelLabelDatastore.

labelDir = fullfile(outputFolder,'labels';
pxds = pixelLabelDatastore(labelDir,classes,labelIDs);
通过将其叠加在图像上来读取并显示其中一个像素标记的图像。

C = readimage(pxds,1;

cmap = camvidColorMap;

B = labeloverlay(I,C,'ColorMap',cmap);
imshow(B)
pixelLabelColorbar(CMAP,班);

在这里插入图片描述

5 PyTorch 实现语义分割

学长这里给出一个具体实例 :

使用2020年ECCV Vipriors Chalange Start Code实现语义分割,并且做了一些优化,让进度更高

5.1 数据集准备

使用Cityscapes的数据集MiniCity Dataset。

在这里插入图片描述

将各基准类别进行输入:

在这里插入图片描述

从0-18计数,对各类别进行像素标记:

在这里插入图片描述

使用deeplab v3进行基线测试,结果发现次要类别的IoU特别低,这样会导致难以跟背景进行区分。

如下图中所示的墙、栅栏、公共汽车、火车等。

在这里插入图片描述

注意: 以上的结果表述数据集存在严重的类别不平衡问题。

5.2 训练基准模型

使用来自torchvision的DeepLabV3进行训练。

硬件为4个RTX 2080 Ti GPU (11GB x 4),如果只有1个GPU或较小的GPU内存,请使用较小的批处理大小(< = 8)。

python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8;  
python baseline.py --save_path baseline_run_deeplabv3_resnet101 --model DeepLabv3_resnet101 --train_size 512 1024 --test_size 512 1024 --crop_size 384 768 --batch_size 8; 

5.3 损失函数

有3种损失函数可供选择,分别是:交叉熵损失函数(Cross-Entropy Loss)、类别加权交叉熵损失函数(Class-Weighted Cross
Entropy Loss)和焦点损失函数(Focal Loss)。

交叉熵损失函数,常用在大多数语义分割场景,但它有一个明显的缺点,那就是对于只用分割前景和背景的时候,当前景像素的数量远远小于背景像素的数量时,模型严重偏向背景,导致效果不好。

# Cross Entropy Loss  
python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8; 

类别加权交叉熵损失函数是在交叉熵损失函数的基础上为每一个类别添加了一个权重参数,使其在样本数量不均衡的情况下可以获得更好的效果。

# Weighted Cross Entropy Loss  
python baseline.py --save_path baseline_run_deeplabv3_resnet50_wce --crop_size 576 1152 --batch_size 8 --loss weighted_ce; 

焦点损失函数则更进一步,用来解决难易样本数量不平衡。

# Focal Loss  
python baseline.py --save_path baseline_run_deeplabv3_resnet50_focal --crop_size 576 1152 --batch_size 8 --loss focal --focal_gamma 2.0; 

5.4 归一化层

在这里插入图片描述

BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。

5.5 数据增强

2种数据增强技术

  • CutMix
  • Copy Blob

在 Blob 存储的基础上构建,并通过Copy的方式增强了性能。

在这里插入图片描述

另外,如果要解决前面所提到的类别不平衡问题,则可以使用视觉归纳优先的CopyBlob进行增强。

# CopyBlob Augmentation  
python baseline.py --save_path baseline_run_deeplabv3_resnet50_copyblob --crop_size 576 1152 --batch_size 8 --copyblob; 

5.6 实现效果

多尺度推断

使用[0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.2]进行多尺度推理。另外,使用H-Flip,同时必须使用单一批次。

# Multi-Scale Inference  
python baseline.py --save_path baseline_run_deeplabv3_resnet50 --batch_size 1 --predict --mst; 

使用验证集计算度量

计算指标并将结果保存到results.txt中。

python evaluate.py --results baseline_run_deeplabv3_resnet50/results_val --batch_size 1 --predict --mst; 

训练结果
在这里插入图片描述

最后的单一模型结果是0.6069831962012341,

如果使用了更大的模型或者更大的网络结构,性能可能会有所提高。

另外,如果使用了各种集成模型,性能也会有所提高。

6 最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1371345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka - Topic 消费状态常用命令

新建 Topic ./kafka-topics --zookeeper 166.188.xx.xx --create --topic flink_source --partitions 1 --replication-factor 1 replication-factor&#xff1a;指定副本数量 partitions&#xff1a;指定分区 删除 Topic ./kafka-topics --zookeeper 166.188.xx.xx --dele…

【控制篇 / 策略】(7.4) ❀ 02. 地理地址对象在策略中的应用 ❀ FortiGate 防火墙

【简介】如何做到只允许访问国内网站&#xff1f;如何阻止来自美国的不同IP的攻击&#xff1f;这些都是防火墙管理员经常会碰到的问题。通过地理地址对象可以快速的解决这些问题。 只允许访问国内网站 一般我们通过流出策略来限制对外网的访问。 ① 通常我们将上网策略的目标地…

【LMM 012】TinyGPT-V:24G显存训练,8G显存推理的高效多模态大模型

论文标题&#xff1a;TinyGPT-V: Efficient Multimodal Large Language Model via Small Backbones 论文作者&#xff1a;Zhengqing Yuan, Zhaoxu Li, Lichao Sun 作者单位&#xff1a;Anhui Polytechnic University, Nanyang Technological University, Lehigh University 论文…

神经网络-搭建小实战和Sequential的使用

CIFAR-10 model structure 通过已知参数&#xff08;高、宽、dilation1、kernel_size&#xff09;推断stride和padding的大小 网络 import torch from torch import nnclass Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.conv1 nn.Conv2d(in_chan…

GEE计算Landsat8的NDVI

目录 前言源代码结果 前言 NDVI&#xff08;近红-红&#xff09;/&#xff08;近红红&#xff09; normalizedDifference方法是&#xff08;A-B&#xff09;/&#xff08;AB&#xff09;的计算方法 计算NDVI一般用来配合其他反演参数&#xff0c;构造指数或者数据升降尺度。 …

ELK生命周期

ELKkafka <es生命周期可视化配置界面> 一、创建索引模式 根据logstash中的日志规则 匹配对应系统日志 二、创建索引生命周期策略&#xff1a;可以控制生成索引的生命周期 共4个阶段&#xff1a;热阶段——温阶段——冷阶段——删除阶段 阶段1. hot: 索引被频繁写入和查…

Maintaining Performance with Less Data(待补)

文章目录 AbstractIntroductionPrevious WorkIncreasing data useReducing data useVariable data useContribution MethodsDatasetsHardwarePerformance MetricsNetwork Architecture ExperimentationBenchmarkData stepobserve Data IncrementData Cut DiscussionConclusion …

竞赛保研 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

java解析json复杂数据的第三种思路

文章目录 一、概述二、数据预览1. 接口json数据2. json转xml数据 三、代码实现1. pom.xml2. 核心代码3. 运行结果 四、源码传送 一、概述 接上篇 java解析json复杂数据的两种思路 我们已经通过解析返回json字符串得到数据,现在改变思路, 按照如下流程获取数据: #mermaid-svg-k…

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

在 Part 1 中&#xff0c;我们一起了解了什么是 Prometheus 和 Grafana&#xff0c;以及使用这些工具的前提条件和优势。在本部分&#xff0c;将继续带您学习如何安装 Helm 以及如何使用 Prometheus Helm Charts。 开始使用 Helm 和 Helm Chart ArtifactHub 为 Helm Chart 提供…

cctalk录屏去水印翻录过检测教程

最近在上cctalk的网课时候&#xff0c;遇到了这种情况&#xff0c;无法打开录屏工具&#xff0c;打开了录屏软件会被播放器检测&#xff0c;无法正常播放网课视频&#xff0c;可以用这个工具&#xff0c;就可以随便录了&#xff0c;而且可以去用户名水印。 使用方法也很简单&a…

WPS Office找回丢失的工作文件

WPS office恢复办公文件方法有两种. 1.通过备份中心可以查看近期编辑 office 历史版本进行恢复. 2.缓存备份目录可以查看编辑过的 office 文件的历史版本&#xff0c;新版本 WPS 可以在配置工具-备份清理找到&#xff0c;2019 年旧版本 WPS 可以在新建任意 office 文件-文件-选…

北京大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;教育漏洞报告平台(EDUSRC) 兑换价格&#xff1a;30金币 获取条件&#xff1a;北京大学任意中危或以上级别漏洞

为什么你的手机需要更大的内存

可以确定的是&#xff0c;手机已经先于电脑开启了AI计算时代&#xff0c;新发布的手机几乎都集成了AI处理器&#xff0c;那为什么你还需要更大的内存呢&#xff0c;下面我们来探讨下这个问题。 虽然目前新发布的手机并不都集成了AI处理器&#xff0c;但AI处理器已经成为了一种趋…

SpringMVC 的入门

SpringMVC 的入门 1环境搭建 1.1.创建工程 1.2.添加web支持 右键项目选择Add framework support... 2.添加web支持 ​ 3.效果 注意&#xff1a; 不要先添加打包方式将web目录要拖拽到main目录下&#xff0c;并改名为webapp 1.3.pom.xml <?xml version"1.0&q…

LabVIEW在旋转机械故障诊断中的随机共振增强应用

在现代工业自动化领域&#xff0c;准确的故障诊断对于保障机械设备的稳定运行至关重要。传统的故障检测方法往往因噪声干扰而难以捕捉到微弱的故障信号。随着LabVIEW在数据处理和系统集成方面的优势日益凸显&#xff0c;其在旋转机械故障诊断中的应用开始发挥重要作用&#xff…

钉钉审批流程解读

组织机构 部门 部门可以创建下级部门部门可以设置部门主管&#xff0c;可以是多人部门可以默认构建&#xff0c;沟通群可以设置部门信息&#xff0c;比如电话、简介可以设置部门的可见性&#xff0c;比如隐藏本部门&#xff0c;本部门将不会在组织机构、搜索&#xff0c;个人…

聚焦DDoS安全,分享防御DDoS攻击的几大有效方法

当下在混合云、多云环境中&#xff0c;不论任何人、任何部门以及组织都依赖互联网进行运作&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击是正在面临的最大威胁之一。当DDoS攻击汹涌而至&#xff0c;缺失详细的保护预案&#xff0c;企业很可能会陷入数小时或数天…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -创建图文投票实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

【海康威视】场景中遇到的那些问题

文章目录 问题一&#xff1a;DOM 遮挡问题描述解决 问题二&#xff1a;切换过快时&#xff0c;页面出现白块解决 前言&#xff1a;在使用 海康威视 插件进行做视频接入时&#xff0c;出现的一些奇奇怪怪的问题&#xff0c;今天整理一下吧&#xff01;&#xff01;&#xff01; …