看众多语义分割经典算法的复现中常常都在训练之前将label的RGB图转化为单通道的灰度图,尤其深度学习的出现以及算力的不断提升为什么还需要灰度图进行训练呢?
查找相关资料有以下几点原因:
- 梯度信息对于识别物体来说很重要。所以我们可以把灰度图像看作图像的强度(Intensity),来求一些梯度特征。比较常用的有 HOG,LBP,SIFT等等。如下图为行人检测中的hog模型。通过hog来检测部件,最后找到图像中的行人。(Reference: rbgirshick/voc-dpm)注:可视化为rgb图像,但输入是灰度图像,不要被骗了。
- 另外对于大多数的医学图像RGB提供的信息量很少(几乎没有),所以可以直接灰度图像来进行后续计算。在这些问题上,反而对灰度图像预处理更重要(当然,CNN发展以后这些预处理作用也小了)。下图为Kaggle肺癌比赛的热度图。热度图其实也为一维的强度图像,只是可视化的时候把亮度高的变为红色,亮度低变为蓝色的一种方式。
其实最主要的原因就是灰度化之后矩阵维数下降,运算速度大幅度提高,并且梯度信息仍然保留
在对测试结果进行分析时出现了如下这种图:
于是思考的这究竟是不是训练结果不理想导致的?
答案是否定的,因为如果是训练次数或者网络深度引起的话那么最后应该只有21种像素。因为在网络的最后一层利用softmax进行分类,得到主元素的得分,我们可以理解为主类别的概率,然后主元素的得分与不同类别上的one-hot求loss,输出的一张图中每一个像素代表每个类别,我们前面规定了每个类别所对应的RGB(这里等同于给每个类别进行上色区分)
那么实际参与loss计算的label又是什么样的呢?如何进行计算的呢?
我的理解是softmax以后会得到主元素的得分,可以理解为类别的概率,利用主元素的得分与groundtruth不同分类上的独热编码求loss,输出的每一张图中每一个像素代表一个类别,我们给每个类别规定一种RGB以便区分,等于给每个类别进行上色处理。