源码地址:https://github.com/HiLab-git/SSL4MIS
目的
本文主要通过对github上源码的分析,学习半监督语义分割的思想,并通过代码提供的数据对比各个半监督方法的效果。
介绍
在语义分割领域,标注往往是比较困难的。因为掩膜标注要求和目标边缘紧密贴合,否则会带来边界上的额外损失。如下图:
相反的,未标注的数据量一般要远远多于标注的数据量。基于此,半监督方法的研究就至关重要了。
机器学习按数据标注情况可分为三种:监督学习,无监督学习和半监督学习。
- 监督学习:在有标记的情况下,对数据进行分类或回归。比如随机森林、SVM和目前流行的全卷积网络、循环神经网络都归为这一类;
- 无监督学习:没有给定事先标记过的范例,自动对输入的资料进行分类或分群。此类有很多机器学习算法,比如k-means、meanshift和PCA,一般通过核函数划分超空间;
- 半监督学习:在有部分标记的情况下,使用所有提供的数据,对输入进行分类和回归的方法。
实验
数据来源
本文实验采用19%标注数据,81%未标注数据进行训练与测试。数据来源为ACDC-Segmentation,该数据集为第戎大学采集的心脏核磁共振影像,标注类型为:背景区域,右心室腔,心肌层和左心室腔。我们使用后三类作为分割结果,使用dice和hd95作为评价指标进行实验。两个指标中,Dice对mask的内部填充比较敏感,而hausdorff distance 对分割出的边界比较敏感。
测量指标
Dice
dice是评价两个目标相关性的指标,又叫F1-score。平衡了召回率和精度的影响,是一个综合性指标。
D i c e = 1 r e c a l l − 1 + p r e c i s i o n − 1 = 2 T P 2 T P + F P + F N Dice=\frac {1} {recall^{-1}+precision^{-1}}=\frac {2TP} {2TP+FP+FN} Dice=recall−1+precision−11=2TP+FP+FN2TP
hausdorff distance
hausdorff distance是测量点集X的到另外一个集和Y最近点的最大距离。
结合下图直观的说,就是比较两点的距离,取更大值。
hd95(95% hausdorff distance)类似HD,但只取距离排序后的中间的95%距离,其目的是减轻特殊野点的影响。
监督学习(Baseline)
监督学习实验中使用Unet作为分割网络。下文对比方法中,除非指明,否则默认也使用Unet网络进行对照。监督学习流程如下:
监督损失包括Dice loss 和 Cross Entropy loss。
l o s s s u p e r v i s e d = l o s s C E ( X , Y ) + l o s s D i c e ( X , Y ) , l o s s C E ( X , Y ) = ∑ ( − Y log ( X ) + ( 1 − Y ) log ( 1 − X ) ) , l o s s D i c e ( X , Y ) = 1 − 2 ∣ X ⋂ Y ∣ X + Y loss_{supervised}=loss_{CE}(X,Y)+loss_{Dice}(X,Y), \\ loss_{CE}(X, Y) = \sum (-Y \log (X)+(1-Y) \log (1-X)), \\ loss_{Dice}(X, Y)=1-2 \frac {\left | X \bigcap Y\right | } {X+Y} losssupervised=lossCE(X,Y)+lossDice(X,Y),loss