diff --git a/README.md b/README.md index 96c87f0de4eaa524d9ceca09925bec13c20b0866..799c05ea9f8ff8dc8064706b7441abd2a54c8c77 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ pip install -r requirements.txt ### 高级功能 * [PaddleSeg的数据增强](./docs/data_aug.md) -* [PaddleSeg的loss选择](./docs/loss_select.md) +* [如何解决二分类中类别不均衡问题](./docs/loss_select.md) * [特色垂类模型使用](./contrib) * [多进程训练和混合精度训练](./docs/multiple_gpus_train_and_mixed_precision_train.md) @@ -118,10 +118,10 @@ pip install -r requirements.txt |-|-| |快速开始|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/100798)| |U-Net宠物分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/102889)| -|DeepLabv3+图像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/101696)| +|DeepLabv3+图像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/226703)| |工业质检(零件瑕疵检测)|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/184392)| |人像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/188833)| -|PaddleSeg特色垂类模型|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/115541)| +|PaddleSeg特色垂类模型|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/226710)|
diff --git a/docs/imgs/hrnet.png b/docs/imgs/hrnet.png new file mode 100644 index 0000000000000000000000000000000000000000..a4733a7b7c62534f8cfc8f8cfeb4fe049d6dfba8 Binary files /dev/null and b/docs/imgs/hrnet.png differ diff --git a/docs/imgs/softmax_loss.png b/docs/imgs/softmax_loss.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5cbbce470fe48ca5f500c59995776c2fbd5ec5 Binary files /dev/null and b/docs/imgs/softmax_loss.png differ diff --git a/docs/imgs/unet.png b/docs/imgs/unet.png index 960f289321a9a6b894d3054ec4f257a36cb8969e..5a7b691ae54f9fe29dded913d8e6f6cacac494f7 100644 Binary files a/docs/imgs/unet.png and b/docs/imgs/unet.png differ diff --git a/docs/loss_select.md b/docs/loss_select.md index f7e975822c50efdcc1e80cadb40fbc5f55fafb1e..6749979821de5cd7387f3161e0a2bd25a9f02e4e 100644 --- a/docs/loss_select.md +++ b/docs/loss_select.md @@ -1,18 +1,12 @@ -# dice loss解决二分类中样本不均衡问题 +# 如何解决二分类中类别不均衡问题 +对于二类图像分割任务中,经常出现类别分布不均匀的情况,例如:工业产品的瑕疵检测、道路提取及病变区域提取等。 -对于二类图像分割任务中,往往存在类别分布不均的情况,如:瑕疵检测,道路提取及病变区域提取等等。 -在DeepGlobe比赛的Road Extraction中,训练数据道路占比为:%4.5。如下为其图片样例: -

-
-

-可以看出道路在整张图片中的比例很小。 - -## 数据集下载 -我们从DeepGlobe比赛的Road Extraction的训练集中随机抽取了800张图片作为训练集,200张图片作为验证集, -制作了一个小型的道路提取数据集[MiniDeepGlobeRoadExtraction](https://paddleseg.bj.bcebos.com/dataset/MiniDeepGlobeRoadExtraction.zip) +目前PaddleSeg提供了三种loss函数,分别为softmax loss(sotfmax with cross entroy loss)、dice loss(dice coefficient loss)和bce loss(binary cross entroy loss). 我们可使用dice loss解决这个问题。 + +注:dice loss和bce loss仅支持二分类。 -## dice loss -dice loss的定义如下: +## Dice loss +Dice loss的定义如下:


@@ -30,13 +24,20 @@ dice loss的定义如下: **Note:** 在标注图片中,务必保证前景像素值为1,背景像素值为0. -dice系数请参见[维基百科](https://zh.wikipedia.org/wiki/Dice%E7%B3%BB%E6%95%B0) +Dice系数请参见[维基百科](https://zh.wikipedia.org/wiki/Dice%E7%B3%BB%E6%95%B0) + +**为什么在类别不均衡问题上,dice loss效果比softmax loss更好?** -**为什么在正负样本不均衡问题上,dice loss效果比softmax loss更好?** +首先来看softmax loss的定义: + +

+
+

+ +其中 y 表示ground truth,p 表示网络输出。 在图像分割中,`softmax loss`评估每一个像素点的类别预测,然后平均所有的像素点。这个本质上就是对图片上的每个像素进行平等的学习。这就造成了一个问题,如果在图像上的多种类别有不平衡的表征,那么训练会由最主流的类别主导。以上面DeepGlobe道路提取的数据为例子,网络将偏向于背景的学习,降低了网络对前景目标的提取能力。 -而`dice loss(dice coefficient loss)`通过预测和标注的交集除以它们的总体像素进行计算,它将一个类别的所有像素作为一个整体作为考量,而且计算交集在总体中的占比,所以不受大量背景像素的影响。 -,能够取得更好的效果。 +而`dice loss(dice coefficient loss)`通过预测和标注的交集除以它们的总体像素进行计算,它将一个类别的所有像素作为一个整体作为考量,而且计算交集在总体中的占比,所以不受大量背景像素的影响,能够取得更好的效果。 在实际应用中`dice loss`往往与`bce loss(binary cross entroy loss)`结合使用,提高模型训练的稳定性。 @@ -46,7 +47,20 @@ dice系数请参见[维基百科](https://zh.wikipedia.org/wiki/Dice%E7%B3%BB%E6 PaddleSeg通过`cfg.SOLVER.LOSS`参数可以选择训练时的损失函数, 如`cfg.SOLVER.LOSS=['dice_loss','bce_loss']`将指定训练loss为`dice loss`与`bce loss`的组合 -## 实验比较 +## Dice loss解决类别不均衡问题的示例 + +我们以道路提取任务为例应用dice loss. +在DeepGlobe比赛的Road Extraction中,训练数据道路占比为:4.5%. 如下为其图片样例: +

+
+

+可以看出道路在整张图片中的比例很小。 + +### 数据集下载 +我们从DeepGlobe比赛的Road Extraction的训练集中随机抽取了800张图片作为训练集,200张图片作为验证集, +制作了一个小型的道路提取数据集[MiniDeepGlobeRoadExtraction](https://paddleseg.bj.bcebos.com/dataset/MiniDeepGlobeRoadExtraction.zip) + +### 实验比较 在MiniDeepGlobeRoadExtraction数据集进行了实验比较。 @@ -84,5 +98,4 @@ softmax loss和dice loss + bce loss实验结果如下图所示。

- diff --git a/docs/models.md b/docs/models.md index 20352413f7c16fefc1222f64d26aa2acbdca0bc2..48ed910771597308d95498723ed11f76269faa66 100644 --- a/docs/models.md +++ b/docs/models.md @@ -1,10 +1,19 @@ # PaddleSeg 分割模型介绍 -### U-Net -U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。 +- [U-Net](#U-Net) +- [DeepLabv3+](#DeepLabv3) +- [ICNet](#ICNet) +- [PSPNet](#PSPNet) +- [HRNet](#HRNet) + +## U-Net +U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。U-Net最早于2015年提出,并在ISBI 2015 Cell Tracking Challenge取得了第一。经过发展,目前有多个变形和应用。 + +原始U-Net的结构如下图所示,由于网络整体结构类似于大写的英文字母U,故得名U-net。左侧可视为一个编码器,右侧可视为一个解码器。编码器有四个子模块,每个子模块包含两个卷积层,每个子模块之后通过max pool进行下采样。由于卷积使用的是valid模式,故实际输出比输入图像小一些。具体来说,后一个子模块的分辨率=(前一个子模块的分辨率-4)/2。U-Net使用了Overlap-tile 策略用于补全输入图像的上下信息,使得任意大小的输入图像都可获得无缝分割。同样解码器也包含四个子模块,分辨率通过上采样操作依次上升,直到与输入图像的分辨率基本一致。该网络还使用了跳跃连接,以拼接的方式将解码器和编码器中相同分辨率的feature map进行特征融合,帮助解码器更好地恢复目标的细节。 + ![](./imgs/unet.png) -### DeepLabv3+ +## DeepLabv3+ DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, 在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, @@ -21,7 +30,7 @@ DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1, DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于服务端部署。 -### ICNet +## ICNet Image Cascade Network(ICNet) [3] 主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。 @@ -29,7 +38,7 @@ Image Cascade Network(ICNet) [3] 主要用于图像实时语义分割。相较 ![](./imgs/icnet.png) -### PSPNet +## PSPNet Pyramid Scene Parsing Network (PSPNet) [4] 起源于场景解析(Scene Parsing)领域。如下图所示,普通FCN [5] 面向复杂场景出现三种误分割现象:(1)关系不匹配。将船误分类成车,显然车一般不会出现在水面上。(2)类别混淆。摩天大厦和建筑物这两个类别相近,误将摩天大厦分类成建筑物。(3)类别不显著。枕头区域较小且纹理与床相近,误将枕头分类成床。 @@ -39,6 +48,16 @@ PSPNet的出发点是在算法中引入更多的上下文信息来解决上述 ![](./imgs/pspnet.png) +### HRNet + +High-Resolution Network (HRNet) [6] 在整个训练过程中始终维持高分辨率表示。 +HRNet具有两个特点:(1)从高分辨率到低分辨率并行连接各子网络,(2)反复交换跨分辨率子网络信息。这两个特点使HRNet网络能够学习到更丰富的语义信息和细节信息。 +HRNet在人体姿态估计、语义分割和目标检测领域都取得了显著的性能提升。 + +整个网络结构如下: + +![](./imgs/hrnet.png) + ## 参考文献 [1] [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) @@ -51,3 +70,5 @@ PSPNet的出发点是在算法中引入更多的上下文信息来解决上述 [5] [Fully Convolutional Networks for Semantic Segmentation](https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf) +[6] [Deep High-Resolution Representation Learning for Visual Recognition](https://arxiv.org/abs/1908.07919) +