如何用PyTorch进行语义分割?一个教程教会你|资源
木易 发自 凹非寺?
量子位 报道 | 公众号 QbitAI
很久没给大家带来教程资源啦。
正值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
— 完 —
本文系网易新闻?网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。
「MEET 2021智能未来大会」启幕,
早鸟票限时抢购中,扫码预定席位!


量子位?QbitAI · 头条号签约作者
?'?' ? 追踪AI技术和产品新动态
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见~
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 总书记引领中国经济巨轮行稳致远 7904793
- 2 日本强震 高市早苗神色慌张一路小跑 7808103
- 3 受贿超11亿!白天辉被执行死刑 7711837
- 4 明年经济工作怎么干?关注这些重点 7618039
- 5 一定要在这个年龄前就开始控糖 7520885
- 6 《大明王朝1566》逆袭成国产剧天花板 7427208
- 7 日本发生7.5级强震后 高市早苗发声 7328067
- 8 苹果原装取卡针回收超300元?官方回应 7231388
- 9 外交部就所谓“雷达照射”反问日方 7142191
- 10 “中国游”“中国购”体验感拉满 7039222







量子位
