# 基于Portrait数据集实现人像分割
实现数据集读取、分割模型训练、训练分析、模型推理、线上部署
掌握图像分割损失函数、数据增强、封装-TTA-badcase分析、基于Flask的web部署
最终web端效果如下图:
![image-20230404211842942](imgs/image-20230404211842942.png)
## 网页端提供人像分割
web服务
存储和速度角度考虑模型的选择
速度受图片分辨率、运算设备和模型设计影像
## 实时分割模型——BiSeNet
BiSeNet由旷视提出的一种实时语义分割模型,在Titan XP,2048*1024分辨率可达到105FPS
实时的定义:
大于30FPS(Frames Per Second,每秒帧率) ,(FPS即每秒处理的图片数量)
**速度与硬件息息相关**
BiSeNet分析了模型结构层面加速的方法并提出双分支的BiSeNet加速
### 在输入和模型上改动
- 原始图像resize
缺点: 丢失**空间**信息(spatial information )
- 删减网络层,以提速
缺点: 模型容量下降,精度降低
![image-20230404204913690](imgs/image-20230404204913690.png)
### U型弥补丢失的空间信息
缺点与UNet相同,速度慢且**占显存**
### ARM
Attention Refinment Module 注意力机制模块
通过对输入张量进行全局平均池化来生成全局上下文信息。使用一个卷积层和一个Sigmoid激活函数来**计算注意力权重**。最后将输入张量与注意力权重相乘,以便在通道维度上重新加权输入张量。
FFM: Feature Fusion Module,特征融合模块,设计一个能将特征图融合在一起的模块
![image-20230404210616488](imgs/image-20230404210616488.png)
### 辅助损失
在Context分支输出的特征图直接用于计算分割结果Feature map 输入到一个conv层用于输出分割结果
$$
L(X;W) = l_p(X;W)+\alpha \sum^K_{i=2}l_i(X_i;W)\\
L(X;W)分割结果\\
l_p(X;W)像素级别损失函数\\
\sum^K_{i=2}l_i(X_i;W)边界损失函数
$$
### 总结
BiSeNet主要有两大分支构成,分别是Spatial分支和Context分支Spatial分支采用小步长的策略,少降低分辨率,以保留更多空间信息
Context分支采用快速下降分辨率的策略,**使特征具有丰富的感受野**
最后利用特征融合模块FFM,将两个分支特征进行融合即可输出
![img](imgs/webp-16806133361913.webp)
## 人像分割Protrait Matting
Portrait Dataset 2000Portrait 数据集由香港中文大学于2016年发布是当前标注质量较高的数据集之一共有2000张自拍人像图像,1700训练、300测试
Portrait Dataset 34427由北京玩星汇聚科技有限公司高质量标注,原始图片来源于Flickr、百度、淘宝。经过人脸检测和区域裁剪后生成了600*800的半身人像。
BiSeNet: https://github.com/CoinCheung/BiseNet
Portrait DataSet
训练代码: 重点观察loss计算、评估部分output和label的处理
Inference: 耗时统计 (torch.cuda.synchronize())[等待GPU计算完成]
## 损失函数
Dice Loss: `diece_loss.py`
Focal Loss: `focal_loss.py`、``focal_loss_binary.py`
CE Float Loss: `cross_entropy.py`
CE + Dice: `bce_dice_loss.py`
LR warmup : `portrait train.py`、`model trainer_bisenet.py`
Loss Functions
图像分割损失主要有以下两种:
- 基于数据分布的CE
- 基于区域的Dice
Dice loss 是从Dice系数推广得到的损失函数
Dice 系数是一种集合相似度度量函数,是从区域角度衡量两个集合的相似度。 (CE Loss是从概率分布角度)
两个集合完全重叠时为1, 完全不重叠时为0,计算公式如下Dice 系数值域为 [0,1] ,
$$
Dice = \frac{2TP}{FP+2TP+FN}\\
= \frac{2*gtmask\cap predmask }{gtmask+predmask}\\
Diec Loss = 1- \frac{2|A\cap B|}{|A|+|B|}\\
值域[0,1],loss越小重合度越高
$$
分母的计算: |A| 和|B|分别表示A、B的元素个数
分子的计算: A和B的交集,用点乘
`Soft Dice Loss`:Prediction不用换位Binary mask的Dice Loss
### CE+Dice Loss
采用CE+Dice,权重比例1:1
从概率分布和区域两个角度衡量模型
### Focal Loss
针对Two-Stage目标检测RPN网络中正负样本严重不平衡问题以及困难样本提出的
核心:解决困难样本
![image-20230405143539674](imgs/image-20230405143539674.png)
- 解决不平衡:增加类别权重
$$
CE(p_i) = -\alpha_tlog(p_i)
$$
- 解决困难样本:增加难度权重
$$
FL(p_t) = -(1-p_t)^\upsilon log(p_t)
$$
- 综合
$$
FL(p_t) = -\alpha_tlog(1-p_i)^\upsilon log(p_t)
$$
调参经验
- $\alpha \in$(0,1)反应了各类单独的难度
- 二分类场景下类似正例的sample_weight,key,可以按照样本占比,适度加权
- eg:5条正,95负,则建议**$\alpha$=0.95**
- **$\alpha$=0.5**相当于关掉该功能
- $\upsilon \in$[0,+∞),对于难度的区分程度
- $\upsilon$=0取消该功能,一视同仁
- $\upsilon$越大表示越专注困难样本,(0.5,10.0)范围尝试
### LR warmup
调整策略:从稳定到逐步降低
- Warmup
学习率从小到大,让训练逐渐步入正轨,完成模型训练预热,进入训练稳定状态
- Cosine
余弦下降至终止学习率
第t个terationnt的学习率
终止学习率min
初始学习率max
Tcur:当前iteration
T:总共的iteration
核心在于cos项,值从1逐渐减小至-1,来影响LR变化
![image-20230405150540106](imgs/image-20230405150540106.png)
- Warmup + Cosine
每个iteration逐渐增大至初始学习率,然后余弦下降至终止学习率
batches:一个Epoch对应几个iteration
max_epochs: 总共跑几个Epoch
base_lr: 初始学习率
final_lr: 终止学习率
warmup_epochs: warmup多久?
warmup_init_lr: warmup初始学习率是?
## 数据增强
Pytorch提供的transforms模块大部分不适用于图像分割与目标检测
**图像分割与目标检测在进行空间变换需要对图像和标签做相同的变换**
### Albumentations
广泛应用于工业界、学术界、AI竞赛和开源项目中的CV数据增强工具
适用任务: 图像分类、图像分割、目标检测、实例分割
适用领域:自然图像、医疗影像、卫星图像、工业图像
可无缝衔接PyTorch、Keras框架
Pixel Level、Spatial Level
Albumentations图像分割使用逻辑
定义好一系列transform方法同时传入image和mask返回字典,通过`image`和`mask`获得处理后的数据
![image-20230405201807019](imgs/image-20230405201807019.png)
### 色彩扰动
图像分割常用数据增强方法
```python
ColorJitter (brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2, always apply=False,p=0.5)
```
参数
- brightness: 亮度的偏移幅度。图像给人的直观感受,如果是灰度图像,灰度值越高则图像越亮
- contrast: 对比度偏移幅度。不同颜色最亮处和最暗处之间的差别,影响纹理细节
- saturation: 饱和度偏移幅度。饱和度越高,颜色表现越丰富
- hue:色相偏移幅度
亮度、对比度和饱和度是数字图像处理中常用概念,夜晚场景,亮度偏低;雨雾天对比度低。
### 仿射变化
```python
Affine_(scale=None,translate_percent=None,translate_px=None,rotate=None,shear=Noneinterpolation=1,cval= 0,cval mask= 0,mode= 0fit output= False, always apply= False,p= 0.5)
```
参数
- rotate : 旋转角度,int or tuples
- hear: 错切,int or tuple
- translate_percent: 平移,int or tuple
- scale: 缩放,int or tuple
### 弹性变化
```python
ElasticTransform (alpha=1, sigma=50, alpha affine= 50, interpolation=1,border_mode=4, value=None, mask value=None,always apply=False, approximate= False,p=0.5)
```
过程
(1) 每个像素点(x,y)产生两个-1~1之间的随机数,$\nabla(x,y)$和$\nabla(x,y)$分别表示该像素点的x方向和y方向的移动距离
(2) 生成一个以0为均值,以o为标准差的高斯核k nn,并用前面的随机数与之做卷积,并将结果作用于原图像。
alpha越小,sigma越大,产生的�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Python实现图像分割算法期末大作业项目源码(95分以上).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机相关专业的学生或从业者下载使用,也可作为期末课程设计、期末课程大作业等,具有较高的学习价值。 基于Python实现图像分割算法期末大作业项目源码(95分以上).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机相关专业的学生或从业者下载使用,也可作为期末课程设计、期末课程大作业等,具有较高的学习价值。基于Python实现图像分割算法期末大作业项目源码(95分以上).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机相关专业的学生或从业者下载使用,也可作为期末课程设计、期末课程大作业等,具有较高的学习价值。基于Python实现图像分割算法期末大作业项目源码(95分以上).zip 该项目是个人大作业项目源码,评审分达到95分以
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现图像分割算法.zip (66个子文件)
基于Python实现图像分割算法
tools
helpers.py 2KB
predictor.py 6KB
evalution_segmentaion.py 8KB
common_tools.py 7KB
model_trainer_bisenet.py 5KB
model_trainer.py 4KB
my_lr_schedule.py 4KB
__pycache__
evalution_segmentaion.cpython-39.pyc 7KB
my_lr_schedule.cpython-39.pyc 4KB
common_tools.cpython-39.pyc 6KB
model_trainer_bisenet.cpython-39.pyc 3KB
src
portrait_train.py 9KB
deploy_web
app_4.py 4KB
templates
upload.html 397B
first_html.html 168B
.idea
seg_-project.iml 633B
vcs.xml 167B
misc.xml 199B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 276B
.gitignore 176B
datasets
portrait_dataset.py 6KB
__pycache__
portrait_dataset.cpython-39.pyc 5KB
losses
dice_loss.py 1KB
cross_entropy.py 2KB
focal_loss_binary.py 4KB
__pycache__
dice_loss.cpython-39.pyc 1KB
focal_loss_binary.cpython-39.pyc 4KB
bce_dice_loss.cpython-39.pyc 1KB
bce_dice_loss.py 743B
focal_loss.py 2KB
相关资源
前置.md 543B
相关资源.md 1KB
bins
fuision_img.py 3KB
analysis_badcase.py 3KB
bisenet_inference.py 4KB
bisenet_camera.py 3KB
lr_range_test.py 3KB
hist_label_portarit.py 1KB
models
segnet.py 10KB
build_BiSeNet.py 8KB
unet.py 7KB
resnet.py 12KB
backbones
__init__.py 277B
mobilenetv2.py 5KB
wrapper.py 3KB
build_contextpath.py 3KB
deeplabv3_plus.py 7KB
__pycache__
build_contextpath.cpython-39.pyc 2KB
build_BiSeNet.cpython-39.pyc 5KB
imgs
image-20230404210616488.png 141KB
webp.webp 25KB
image-20230404211842942.png 922KB
image-20230405150540106.png 50KB
image-20230405201807019.png 208KB
image-20230406212259411.png 141KB
image-20230406205628572.png 307KB
image-20230405143539674.png 165KB
image-20230406210244392.png 230KB
webp-16806133361913.webp 20KB
image-20230404204913690.png 140KB
image-20230406100057440.png 125KB
image-20230406210336119.png 216KB
README.md 14KB
config
__pycache__
portrait_config.cpython-39.pyc 1KB
portrait_config.py 1KB
共 66 条
- 1
资源评论
盈梓的博客
- 粉丝: 9154
- 资源: 2200
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 大数据-Matlab界面设计
- 数据分析-SPSS分析入门与深入
- 李跳跳_真实好友5.0_内测版.apk
- 前端开发中Vue.js模板与指令详解及应用场景
- 题目源码2024年强网杯全国网络安全挑战赛 PWN题目old-fashion-apache源码
- 基于Java 实现的百度图像识别API开发的车型识别APK
- CD python 数据分析代码及数据集(CDNOW-master.txt)
- 【MATLAB代码】二维平面上的TDOA,使用加权最小二乘法,不限制锚点数量(锚点数量>3即可)
- 数据分析-matlab入门
- 基于原生小程序实现的图像智能识别小程序,垃圾智能分类 通过拍照或者上传照片完成智能垃圾分类,服务端为 C#
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功