《Learning Statistical Texture for Semantic Segmentation》

– 现存的语义分割模型重在高层抽象语义分析,例如CNNs就能很好完成这一点。但高层抽象语义往往会忽略一些底层的特征,例如边缘信息、纹理信息等

– 本文利用低层特征信息的优点提出了 Texture Learning Network(STLNet)用于语义分割

– 本文设计了一个 Quantization and Counting Operator(QCO)用于统计和描述纹理信息

– 基于QCO设计除了 Texture Enhance Module(TEM)纹理增强模块,和Pyramid Texture Feature Extraction Module(PTFEM)模块用于从多尺度提取纹理统计信息

– 底层的卷积往往能提取到纹理信息,随着深度的增加,提取的信息也越来越抽象。将底层卷积核可视化

– QCO中,将输入特征放到多层神经网络中,每一层都代表一个纹理特征的统计信息。然后计算每一层的强度用作特征编码

– STLNet分为两层

首先使用ResNet101提取特征,后跟一个 ASPP 池化层

使用ResNet的前两层作为纹理提取分支的输入,先将这两层下采样到与模型整体输出相同的shape,再将它们连接起来,然后将其串联输送到TEM和PTFEM中。如图,在整个过程中,还需要多次将各个模型的输入和其他模型的输出连接起来,作为下一个模型的输入(图中黄色圈的的C,即concat)

– QCO可以分为两类:1维的用于TEM,2维的用于PTFEM。

– 1维QCO

理解1维QCO的关键在于知道它要做什么:和灰度直方图相似,它计算每个特征图像素点与平均特征距离的统计值。

  1. 首先使用全局平均池化得到每个channel的均值 g(图中A后面那个横着的长条,其实就是每个channel特征图像素值的平均值)
  2. 可以想象,g是一个 c 维向量(c指channel数),而A中每个像素也是一个c维向量,两个向量就可以计算cos值作为相似度,计算完之后得到图中的 S 矩阵,再将其reshape为1维向量
  3. 将所得的相似度分成 n 个区间,计算每个像素所在的空间,即图中的E矩阵,每一行表示图片的哪些像素在第n个区间中,若不在则该位置的值赋0,在的话则是一个非0的数
  4. 将E中每一行求和并除以E矩阵的总和(相当于计算每个灰度阶下像素个数的占比),将其和每个阶对应的起始灰度值连接起来,形成C矩阵,相当于组成一个List<Map<>>,map的key为灰度阶起始值,value为该阶所有像素值数量占比
  5. 将C矩阵使用MLP升维,并将g上采样,然后将两者连接起来输出D

– 2维QCO

1维QCO只是统计了像素的数量信息,但并没有表示出各个像素之间的关系,所以需要2维QCO,其本质同灰度共生矩阵

2维QCO输出E矩阵的过程同1维QCO,但后续处理不同

  1. 将输出的E矩阵reshape为 N*1*H*W,相当于将一维向量还原成二维图片,并且图片的每一个像素值是一个 N*1 的向量(类似与将每个像素 one-hot 成L个灰度阶)
  2. 计算每个像素和其后面一个像素转置的点乘。因为每个像素为 N*1 的维度,故点乘后得到 N*N 的维度,又由于每个像素的N维中,只有其所在阶的值不为0,故该 N*N 维的输出中,只有这两个相邻像素所在阶交叉的地方不为0。若当前像素灰度阶为m,其下一个像素灰度阶为n,则只有(m, n)的位置不为0
  3. 遍历所有像素,计算每个(m, n)对的总和,除以所有(m,n)对的总和,相当于计算每个(m,n)对个数的占比,得到一个N*N的矩阵
  4. 将3得到的矩阵与其(m,n)对形成的矩阵连接起来(同1维QCO第4步)得到一个类似于灰度共生矩阵的东西
  5. 使用MLP对4的结果升维,并将g上采样,两者连接起来得到特征矩阵D

– TEM模型

balabala,想象图像处理中的直方图均衡化,是不是就有增强对比度的功能,增强了对比度是不是就更容易分辨出各个物体的边界了,TEM做的事也差不多是这个意思,其输入就是1维QCO中的D和E,输出就是增强后的特征图

– PTFEM

分为两个部分:纹理特征提取、金字塔结构

纹理特征提取类比灰度共生矩阵,只不过输入是上述2维QCO生成的统计信息

金字塔结构用于提升性能和鲁棒性balabalabala

Leave a Comment