如何用PyTorch进行语义分割?一个教程教会你|资源

语义分割损失函数系列(1):交叉熵损失函数 最近一直在做一些语义分割相关的项目,找损失函数的时候发现网上这些大佬的写得各有千秋,也没说怎么用,在此记录一下自己在训练过程中使用损失函数的一些心得.本人是使用的Pytorch框架,故这一系列都会基于Pytorch来实现。 首先是交叉熵损失函数,语义分割其实是一个逐像素分类的一个分类问题,做过图像分类的应该都比较熟悉交叉熵损失函数。 pytorch中自带有写好的交叉熵函数,只需要调用就行: loss_func = nn.CrossEntropyLoss() torch.nn模块中写好的损失函数都是以类的方 阅读详情

转载自丨量子位

很久没给大家带来教程资源啦。

正值PyTorch 1.7更新,那么我们这次便给大家带来一个PyTorch简单实用的教程资源:用PyTorch进行语义分割。

△图源:stanford

该教程是基于2020年ECCV Vipriors Chalange Start Code实现了语义分割,并且添加了一些技巧。

友情提示:教程中的所有文件均可以在文末的开源地址获取。

预设置

在开始训练之前,得首先设置一下库、数据集等。

库准备

pip install -r requirements.txt

下载数据集

教程使用的是来自Cityscapes的数据集MiniCity Dataset。

数据集的简单数据分析

将各基准类别进行输入:

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

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

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

分析结论:数据集存在严重的类别不平衡问题。

训练基准模型

使用来自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;

损失函数

有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;

归一化层

有4种归一化方法:BN(Batch Normalization)、IN(Instance Normalization)、GN(Group Normalization)和EvoNorm(Evolving Normalization)。

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

# Batch Normalization
python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8;

IN在图像像素上,对H、W做归一化,用在风格化迁移。

# Instance Normalization
python baseline.py --save_path baseline_run_deeplabv3_resnet50_instancenorm --crop_size 576 1152 --batch_size 8 --norm instance;

GN将通道分组,然后再做归一化。

# Group Normalization
python baseline.py --save_path baseline_run_deeplabv3_resnet50_groupnorm --crop_size 576 1152 --batch_size 8 --norm group;

EvoNorm则是4月份由谷歌和DeepMind 联合发布的一项新技术。实验证明,EvoNorms 在多个图像分类模型上效果显著,而且还能很好地迁移到 Mask R-CNN 模型和 BigGAN。

# Evolving Normalization
python baseline.py --save_path baseline_run_deeplabv3_resnet50_evonorm --crop_size 576 1152 --batch_size 8 --norm evo;

数据增强

2种数据增强技术:CutMix、Copy Blob。

  • CutMix

将一部分区域cut掉但不填充0像素,而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配。

而在这里,则是在原有CutMix的基础上,引入了语义分割。

# CutMix Augmentation
python baseline.py --save_path baseline_run_deeplabv3_resnet50_cutmix --crop_size 576 1152 --batch_size 8 --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;

推理

训练结束后,对训练完成的模型进行评估。

python baseline.py --save_path baseline_run_deeplabv3_resnet50 --batch_size 4 --predict;

多尺度推断

使用[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,

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

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

  • 资源地址:
    https://github.com/hoya012/semantic-segmentation-tutorial-pytorch

YOLO V8语义分割模型部署 阅读详情

相关推荐

Pytorch 语义分割DeepLabV3+ 训练自己的数据集

照葫芦画瓢总结记录了一下DeepLab分割系列,并对Deeplab V3++实现 一、DeepLab系列理解 1、DeepLab V1 原文:Semantic image segmentation with deep convolutional nets and fully connected CRFs(https://arxiv.org/pdf/1412.7062v3.pdf) 收录:ICLR 2015 (International Conference on Learning Representatio

yx868yx的博客 7932

如何用PyTorch进行语义分割?

木易 发自 凹非寺量子位 报道 | 公众号 QbitAI很久没给大家带来教程资源啦。正值PyTorch 1.7更新,那么我们这次便给大家带来一个PyTorch简单实用的教程资源:用Py...

zandaoguang的博客 1381

Pytorch:图像语义分割-基于VGG19的FCN8s实现

实现了基于VGG19 backbone的FCN8s的语义分割,利用该模型在VOC2012数据集上进行图像语义分割的训练,验证和测试。

Jingmin Wei's Blog 4359

YOLOV8实例分割(环境配置+搭建模型+数据集制作+训练+预测全套)

双击exe——Next——I Argee——just me ——选择路径(建议自定义,不要安装到c盘,且安装路径不要出现中文)——两个勾都勾上,不然配置环境很麻烦——Install——接下来页面两个勾不选——fnish完成安装。接下来进入自己虚拟环境,前面base变成了自己的环境名称,就可以接下来在这个环境里为所欲为了,安装卸载,即使弄错了,去anaconda安装路径找envs文件夹,里面有你的虚拟环境可以整个复制或者删除。点开能进入命令框,输入python,可以看到python版本。

m0_63172128的博客 1万+

pytorch零基础实现语义分割项目(四)——模型训练与预测

在本系列的前几篇文章中我们介绍了数据与模型,在本篇中我们将数据与模型相结合进行模型训练与预测。

艾醒的博客 1962

Python-TensorFlow语义分割组件

TensorFlow中的语义分割套件。 轻松实现,训练和测试新的语义分割模型!

pytorch 归一化_如何用PyTorch进行语义分割?一个教程教会你资源

木易 发自 凹非寺量子位 报道 | 公众号 QbitAI很久没给大家带来教程资源啦。正值PyTorch 1.7更新,那么我们这次便给大家带来一个PyTorch简单实用的教程资源:用PyTorch进行语义分割。△图源:stanford该教程是基于2020年ECCV Vipriors Chalange Start Code实现了语义分割,并且添加了一些技巧。友情提示:教程中的所有文件均可以...

weixin_39997253的博客 107

NE555构成多谐振荡器及三角波、正弦波的生成(附工程文件)

NE555构成多谐振荡器及三角波、正弦波的生成 续上一篇:NE555基本原理及相关公式的推导

qq_49979053的博客 5万+

pytorch 语义分割loss_如何用PyTorch进行语义分割?一个教程教会你|资源

原标题:如何用PyTorch进行语义分割?一个教程教会你|资源来源:公众号量子位授权很久没给大家带来教程资源啦。正值PyTorch 1.7更新,那么我们这次便给大家带来一个PyTorch简单实用的教程资源:用PyTorch进行语义分割。 △图源:stanford该教程是基于2020年ECCV Vipriors Chalange Start Code实现了语义分割,并且添加了一些技巧。友情提示:教程...

weixin_39768444的博客 159

「0基础安装本地Hermes」本地部署Hermes|为Hermes装上UI图形界面

Hermes已经发布有一段时间了,不少小伙伴也装配上了这个Agent。相对于之前发布爆火的Openclaw,Hermes对于很多小白不是很友好,它没有属于自己的UI界面,只能在本地终端运行,前不久Github上有人发布自己的作品,让终端里的Hermes拥有属于自己的UI界面,EKKOLearnAI开发的Hermes UI界面项目为终端运行的Hermes提供了可视化操作方式,降低了使用门槛。该项目通过Web界面与本地Hermes Agent交互,实现更友好的操作体验。

qq_55438365的博客 1872

墨刀原型设计工具操作使用指南及实践操作

该指南通过异常场景处理、像素级参数说明、复杂交互示例,覆盖了墨刀操作的全细节,适合从新手到资深用户的进阶学习。结合 PlantUML 思维导图的层级化展示,可快速定位具体功能的操作要点与问题解决方法,真正实现 “照指南即可操作” 的实用价值。

hy行者勇哥的博客 4950

Pytorch深度学习实战教程:语义分割基础与环境搭建

一、前言该系列文章的内容有:Pytorch的基本使用语义分割算法讲解先从最简单的语义分割基础与开发环境搭建开始讲解。PS:由于微信不允许外部链接,你需要点击页尾左下角的“阅读原文”,才能...

AI蜗牛车 4823

Unity特效序列帧输出全攻略:Recorder+Timeline保姆级教程(解决透明通道问题)

本文提供Unity特效序列帧输出的完整解决方案,重点讲解如何结合Recorder与Timeline工具,实现带透明通道的PNG序列帧高效输出。通过保姆级教程,详细解析摄像机隔离、层级设置、参数配置等关键步骤,并深度解决透明通道丢失等常见问题,帮助特效师和动画师打通引擎创作与后期合成的工作流。

tensorflowjs6的博客 429

Pytorch深度学习实战教程(一):开启炼丹模式,语义分割基础与环境搭建

Pytorch实战,深度学习教程开启!

Jack-Cui 1万+

保姆级教程:用ESP32和SPH0645麦克风做个无线录音笔(附Python服务端实时播放)

本文提供了一份详细的ESP32无线录音笔开发指南,涵盖从硬件搭建到Python服务端实时回放的全过程。通过SPH0645麦克风采集高质量音频数据,利用ESP32的I2S接口和WiFi功能实现无线传输,并结合Python服务端实现实时播放和WAV文件保存,适合远程音频监控和创意交互装置开发。

weixin_30700099的博客 643

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

用PyTorch进行语义分割

点击上方“机器学习与生成对抗网络”,关注"星标"获取有趣、好玩的前沿干货!木易 发自 凹非寺量子位 报道 | 公众号 QbitAI很久没给大家带来教程资源啦。正值PyT...

idol24的博客 1018

RK3568平台(网络篇)WIFI模块RTL8821CU调试

RTL8821CU是瑞昱半导体推出的usb接口的wifi,下面的教程将介绍如何将RTL8821CU移植到rk3588的平台上。移植usb wifi需要修改的文件Android hal层需要修改的文件//kernel需要修改的文件kernel/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi //除去板上的sdio的wifi。

weixin_49303682的博客 3905

PyTorch DeepLab Xception 终极教程:从零开始掌握语义分割技术

PyTorch DeepLab Xception 是一个基于 PyTorch 框架实现的高性能语义分割模型,专门用于图像分割任务。这个开源项目实现了 DeepLab v3+ 架构,支持多种骨干网络包括 ResNet、Xception、DRN 和 MobileNet,在 Pascal VOC、Cityscapes 和 COCO 等主流数据集上都表现出色。无论你是计算机视觉初学者还是经验丰富的开发者,

gitblog_01093的博客 936

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

玩PyTorch?你不得不看的PyTorch资源大列表

写在前面 强烈安利,拿走不谢,顺手留个关注和点个赞,嘿嘿嘿 PyTorch我就不多说了吧,我搞CV平时也就用PyTorch和TensorFlow,不过最近更喜欢用PyTorch 了,因为TensorFlow的API真的搞的我头疼,不过因为我有时候用C++写算法的话,还是会用TensorFlow的。PyTorch 能在短时间内被众多研究人员和工程师接受并推崇是因为其有着诸多优点,如采用 Python...

BoCong-Deng的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pytorch 语义分割loss_用PyTorch进行语义分割

点击上方“机器学习与生成对抗网络”,关注"星标"获取有趣、好玩的前沿干货!木易 发自 凹非寺量子位 报道 | 公众号 QbitAI很久没给大家带来教程资源啦。正值PyTorch 1.7更新,那么我们这次便给大家带来一个PyTorch简单实用的教程资源:用PyTorch进行语义分割。 △图源:stanford该教程是基于2020年ECCV Vipriors Chalange Start Code实...

weixin_34684094的博客 553

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 解除限制!阿里《大数据工程师手册》完整版 PDF 限时下载!
下一篇: 图解:卷积神经网络数学原理解析
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值