精华内容
下载资源
问答
  • SuperPixel
    2021-09-17 20:47:47

    Gonzalez R. C. and Woods R. E. Digital Image Processing (Forth Edition).

    单个像素的意义其实很小, 于是有了superpixel的概念, 即一簇pixels的集合(且这堆pixels共用一个值), 这会导致图片有非常有趣的艺术风格(下图便是取不同的superpixel大小形成的效果, 有种抽象画的感觉?):

    经过superpixel的预处理后, 图片可以变得更加容易提取edge, region, 毕竟superpixel已经率先提取过一次了.

    SLIC Superpixel algorithm

    SLIC (simple linear iterative clustering) 算法是基于k-means的一种聚类算法.

    Given: 需要superpixels的个数 n s p n_{sp} nsp; 图片 f ( x , y ) = ( r , g , b ) , x = 1 , 2 , ⋯ M , y = 1 , 2 , ⋯   , N f(x, y) = (r, g, b), x = 1,2,\cdots M, y = 1, 2, \cdots, N f(x,y)=(r,g,b),x=1,2,M,y=1,2,,N;

    1. 根据图片以及其位置信息生成数据:
      z = [ r , g , b , x , y ] T , \bm{z} = [r, g, b, x, y]^T, z=[r,g,b,x,y]T,
      其中 r , g , b r, g, b r,g,b是颜色编码, x , y x, y x,y是位置信息.

    2. n t p = M N n_{tp} = MN ntp=MN表示pixels的个数, 并计算网格大小:
      s = [ n t p / n s p ] 1 / 2 . s = [n_{tp} / n_{sp}]^{1/2}. s=[ntp/nsp]1/2.

    3. 将图片均匀分割为大小 s s s的网格, 初始化superpixels的中心:
      m i = [ r i , g i , b i , x i , y i ] T , i = 1 , 2 , ⋯   , n s p , \bm{m}_i = [r_i, g_i, b_i, x_i, y_i]^T, i=1,2,\cdots, n_{sp}, mi=[ri,gi,bi,xi,yi]T,i=1,2,,nsp,
      为网格的中心. 或者, 为了防止噪声的影响, 选择中心 3 × 3 3 \times 3 3×3领域内梯度最小的点.

    4. 将图片的每个pixel的类别标记为 L ( p ) = − 1 L(p) = -1 L(p)=1, 距离 d ( p ) = ∞ d(p) = \infty d(p)=;

    5. 重复下列步骤直到收敛:

      1. 对于每个像素点 p p p, 计算其与 2 s × 2 s 2s \times 2s 2s×2s邻域内的中心点 m i \bm{m}_i mi之间的距离 D i ( p ) D_i(p) Di(p), 倘若 D i ( p ) < d ( p ) D_i(p) < d(p) Di(p)<d(p):
        d ( p ) = D i , L ( p ) = i . d(p) = D_i, L(p) = i. d(p)=Di,L(p)=i.

      2. C i C_i Ci表示 L ( p ) = i L(p) = i L(p)=i的像素点的集合, 更新superpixels的中心:
        m i = 1 ∣ C i ∣ ∑ z ∈ C i z , i = 1 , 2 , ⋯   , n s p . \bm{m}_i = \frac{1}{|C_i|} \sum_{\bm{z} \in C_i} \bm{z}, i=1, 2, \cdots, n_{sp}. mi=Ci1zCiz,i=1,2,,nsp.

    6. 将以 m i \bm{m}_i mi为中心的区域中的点的(r, g, b)设定为与 m i \bm{m}_i mi一致.

    距离函数的选择

    倘若 D D D采用的是和普通K-means一样的 ∥ ⋅ ∥ 2 \|\cdot\|_2 2显然是不合适的, 因为 ( r , g , b ) (r, g, b) (r,g,b) ( x , y ) (x, y) (x,y)显然不是一个尺度的. 故采用如下的距离函数:
    D = [ ( d c d c m ) 2 + ( d s d s m ) 2 ] 1 / 2 , d c = [ ( r j − r i ) 2 + ( g j − g i ) 2 + ( b j − b i ) 2 ] 1 / 2 , d s = [ ( x j − x i ) 2 + ( y j − y i ) 2 ] 1 / 2 , D = [(\frac{d_c}{d_{cm}})^2 + (\frac{d_s}{d_{sm}})^2]^{1/2}, \\ d_c = [(r_j - r_i)^2 + (g_j - g_i)^2 + (b_j - b_i)^2]^{1/2}, \\ d_s = [(x_j - x_i)^2 + (y_j - y_i)^2]^{1/2}, D=[(dcmdc)2+(dsmds)2]1/2,dc=[(rjri)2+(gjgi)2+(bjbi)2]1/2,ds=[(xjxi)2+(yjyi)2]1/2,
    其中 d c m , d s m d_{cm}, d_{sm} dcm,dsm分别是 d c , d s d_c, d_s dc,ds可能取到的最大值, 相当于标准化了.

    代码

    skimage.segmentation.slic

    import numpy as np
    
    
    def _generate_data(img):
        img = img.astype(np.float64)
        if len(img.shape) == 2:
            img = img[..., None]
        M, N = img.shape[0], img.shape[1]
        loc = np.stack(np.meshgrid(range(M), range(N), indexing='ij'), axis=-1)
        classes = -np.ones((M, N))
        distances = np.ones((M, N)) * np.float('inf')
        data = np.concatenate((img, loc), axis=-1)
        return data, classes, distances
    
    def _generate_means(data, size: int):
        M, N = data.shape[0], data.shape[1]
        x_splits = np.arange(0, M + size, size)
        y_splits = np.arange(0, N + size, size)
        means = []
        for i in range(len(x_splits) - 1):
            for j in range(len(y_splits) - 1):
                r1, r2 = x_splits[i:i+2]
                c1, c2 = y_splits[j:j+2]
                region = data[r1:r2, c1:c2]
                means.append(region.mean(axis=(0, 1)))
        return np.array(means)
    
    
    def _unit_step(data, means, classes, distances, size, dis_fn):
        M, N = data.shape[0], data.shape[1]
        size = 2 * size
        for i, m in enumerate(means):
            # ..., x, y
            x, y = np.round(m[-2:])
            x, y = int(x), int(y)
            xl, xr = max(0, x - size), min(x + size, M)
            yb, yt = max(0, y - size), min(y + size, N)
            p = data[xl:xr, yb:yt]
            _dis = dis_fn(p, m)
            indices = _dis < distances[xl:xr, yb:yt]
            distances[xl:xr, yb:yt][indices] = _dis[indices]
            classes[xl:xr, yb:yt][indices] = i
    
        # update
        for i in range(len(means)):
            x_indices, y_indices = np.where(classes == i)
            if len(x_indices) == 0:
                continue
            means[i] = data[x_indices, y_indices].mean(axis=0)
    
    def slic(img, size, max_iters=10, compactness=10):
        data, classes, distances = _generate_data(img)
        means = _generate_means(data, size)
        dsm = size
        dcm = (img.max(axis=(0, 1)) - img.min(axis=(0, 1))) * compactness
        dsc = np.concatenate((dcm, [dsm] * 2))
        def dis_func(p, m):
            _dis = ((p - m) / dsc) ** 2
            return _dis.sum(axis=-1)
        for _ in range(max_iters):
            _unit_step(data, means, classes, distances, size, dis_func)
        new_img = np.zeros_like(img, dtype=np.float)
        for i, m in enumerate(means):
            x_indices, y_indices = np.where(classes == i)
            if len(x_indices) == 0:
                continue
            new_img[x_indices, y_indices] = m[:-2]
        return new_img.astype(img.dtype)
        
    
    
    from skimage import io, segmentation, filters
    from freeplot.base import FreePlot
    
        
    img = io.imread(r"Lenna.png")    
    
    ours = slic(img, size=50, compactness=0.5)
    
    def mask2img(mask, img):
        new_img = img.astype(np.float)
        masks = np.unique(mask)
        for m in masks:
            x, y = np.where(mask == m)
            mcolor = new_img[x, y].mean(axis=0)
            new_img[x, y] = mcolor
        return new_img.astype(img.dtype)
    
    
    mask = segmentation.slic(img)
    yours = mask2img(mask, img)
    
    fp = FreePlot((1, 3), (10.3, 5), titles=('Lenna', 'ours', 'skimage.segmentation.slic'))
    fp.imageplot(img, index=(0, 0))
    fp.imageplot(ours, index=(0, 1))
    fp.imageplot(yours, index=(0, 2))
    fp.set_title()
    fp.show()
    

    skimage上实现的代码还有强制连通性, 我想这个是为什么它看起来这么流畅的原因. Compactness 越大, 聚类越倾向于空间信息, 所以越容易出现块状结构.

    更多相关内容
  • matlab代码abs 通用汽车制造商 ...{Superpixel Segmentation Using Gaussian Mixture Model}, year = {2018}, volume = {27}, number = {8}, pages = {4105-4117}, doi = {10.1109/TIP.2018.2836306} } 这项工
  • 该程序演示了以下论文中提出的LSC超像素分割方法: Jiansheng Chen, Zhengqin Li, Bo Huang, Linear Spectral Clustering Superpixel, IEEE Transactions on Image Processing, Vol. 26,第 7 期,第 3317-3330 页,...
  • superpixel_slic.zip

    2019-10-29 22:37:22
    代码中有SLIC超像素分割的详细代码,并且具有详细的注释,每一行代码都很清晰,直接就能运行,方便对SLIC这类的超像素分割方法进行理解和改进.语言是MATLAB和Python的.
  • 超预期分割matlab代码超级像素生成 该程序为P. Felzenszwalb的基于图的图像分割代码提供了MATLAB包装器。 有关原始C ++实现的信息,请参考。 有关算法的详细信息,请参阅论文“ Graph Based Image ...
  • 分簇matlab代码
  • 本代码是论文: Liu M Y, Tuzel O, ... Entropy rate superpixel segmentation[C]// Computer Vision and Pattern Recognition. IEEE, 2011:2097-2104. 的实现代码,网络上的原始链接均已失效,分享出来给大家研究
  • Watershed Superpixel

    热门讨论 2015-10-20 21:02:37
    分水岭超像素,包含代码和论文,Watershed SuperPixel, IEEE ICIP2015,
  • Texture Relative Superpixel Generation With Adaptive Parameters
  • SpixelFCN:具有完全卷积网络的超像素分割 这是CVPR-20文件中介绍的超像素分割网络的PyTorch实施: ,,和 如有任何疑问,请联系( )。 先决条件 该培训代码主要是使用python 2.7,PyTorch 0.4.1,CUDA 9和Ubuntu ...
  • MATLAB下的 Superpixel Segmentation using Linear Spectral Clustering 实现代码,直接可用。附赠LSC和supp两篇论文
  • matlab开发-superpixel3Dim

    2019-08-27 07:15:21
    matlab开发-superpixel3Dim。对3D图像进行超像素分割
  • 摘要:Superpixel segmentation has become an important research problem in image processing. In this paper, we propose an Iterative Spanning Forest (ISF) framework, based on sequences of Image ...
  • 超像素基准可视化 该存储库包含[1]中介绍的某些结果的可视化。 可以在或使用以下链接找到这些图: | 还要检查以下链接: | | 如果您使用或参考这些图,请引用以下工作: [1] D. Stutz, A....
  • 本代码的背景为这篇文章 Joseph Tighe and Svetlana Lazebnik, "SuperParsing: Scalable Nonparametric Image Parsing with Superpixels," European Conference on Computer Vision, 2010. 该代码是这篇文章的实现...
  • 视频图matlab代码###基于超像素的时空显着性检测 1该代码用于纸张: [1]'Z。 Liu,X。Zhang,S。Luo,O。Le Meur,基于超像素的时空显着性检测,IEEE Trans。...电路系统视频技术。...并且只能用于非商业目的,如果您使用...
  • MATLAB编写的SLIC超像素算法,若有需要的朋友可以下载
  • 基于超像素的遥感图像制图图形模型 面向对象的遥感影像分类方法由于能够将不同形状和大小的相邻区域的空间信息整合到分类过程中,从而提高了遥感影像的制图精度,因此越来越受到人们的欢迎。然而,对象识别本身是...
  • LRW lazy Random Walks forsuperppixel segmentation文章代码,matlab版。文章也在压缩包中,欢迎图像分割初学者下载学习。
  • matlab精度检验代码超像素网络 该存储库包含与超像素有关的程序,该程序的灵感来自于论文“基于深度网络的超像素引导医学图像分割”。 深度学习框架的实现-使用Matlab,Keras的网络 该架构的灵感来自基于深度网络的...
  • 脑功能成像matlab代码
  • PAMY 论文VCells的代码。代码只有一个文件,用vs即可使用。
  • 超像素分割技术MATLAB代码。。。。。。。。实测可用
  • Superpixel Convolutional Networks 3.1 Superpixels 3.2 Bilateral Inceptions 4 Experiments 4.1 Semantic Segmentation 4.2 Material Segmentation 4.3 Street Scene Segmentation 5 我的总结 开源代码 Abstract...


    开源代码


    Abstract

    本文提出了一种用于语义图像分割的CNN结构。我们引入了一个Bilateral Inception (BI) 模块,可以插入到现有的CNN结构中,并在多个特征尺度上对图像中的超像素进行双边滤波。双边滤波的特征空间和模块的其他参数使用标准反向传播技术进行端到端学习。BI模块解决了一般CNN分割体系结构中出现的两个问题。首先,该模块在尊重图像边缘的同时,在(超)像素之间传播信息,从而使用问题的结构化信息来改进结果。第二,该层从CNN的低分辨率解决方案中恢复全分辨率分割结果。在实验中,我们通过在最后的CNN(1×1卷积)层之间插入我们的感知模块来修改几个现有的CNN结构。在三个不同数据集上的实验结果表明,不仅与基线网络相比有可靠的改进,而且与CRFs等几种密集像素预测技术相比也有改进,且更省时。

    1. Introduction

    本文网络结构:
    在这里插入图片描述

    • 在FC层之间插入BI模块(1x1卷积),从而消除了进一步上采样的必要性
    • BI模块还根据空间和颜色的相似性在相隔遥远的像素之间传播信息,并且比其他标签传播方法性能更好。

    本文的基本假设:
    在空间和光度上相似的像素更有可能具有相同的标签。

    3. Superpixel Convolutional Networks

    3.1 Superpixels

    超像素分割优点是,基于空间和光度相似性对像素进行预分组,减少元素数量,从而简化问题。
    超像素分割缺点是,每当一个超像素具有不同于真值的标签分配时,超像素会引入量化误差。

    下图展示了在两个不同的分割数据集(PascalVOC和Materials in Context)上,随着超像素数量的变化,最佳可实现性能的变化趋势。我们发现量化误差对比目前最好的分割效果来说较小。超像素算法是SLIC。

    3.2 Bilateral Inceptions

    双边滤波:
    在这里插入图片描述
    在这里插入图片描述

    • z ∈ R P ∗ C z \in \mathbb{R}^{P*C} zRPC表示CNN最后一层的响应,即 P P P个点与 C C C个滤波器;
    • z c ∈ R P z_{c} \in \mathbb{R}^{P} zcRP表示滤波器 c c c的激活向量值;
    • f j ∈ R D f_{j} \in \mathbb{R}^{D} fjRD表示点 j j j的特征向量; D = 2 D=2 D=2表示XY空间信息; D = 5 D=5 D=5表示XY空间信息+RGB颜色信息;
    • F i n = { f 1 , . . . , f p } F_{in}=\{f_{1},...,f_{p}\} Fin={f1,...,fp}表示输入特征点的值,共 P P P个特征点; F o u t F_{out} Fout表示输出特征点的值,共 Q Q Q个特征点; P , Q P,Q P,Q关系可能为 { P > Q } \{P>Q\} {P>Q}, { P < Q } \{P<Q\} {P<Q}, { P = Q } \{P=Q\} {P=Q}
    • z ^ ∈ R Q ∗ C \hat z \in \mathbb{R}^{Q*C} z^RQC表示双边滤波输出;注意这里将双边滤波用在每个 c c c通道上;
    • 双边滤波含有两个参数:滤波指定范围参数(the filter specific scale) θ ∈ R + \theta \in \mathbb{R}_{+} θR+和全局特征变换参数(the global feature transformation parameters) Λ ∈ R D ∗ D \Lambda \in \mathbb{R}^{D*D} ΛRDD
    • K ∈ R Q ∗ P K \in \mathbb{R}^{Q*P} KRQP f j ∈ F i n f_{j} \in F_{in} fjFin, f i ∈ F o u t f_{i} \in F_{out} fiFout

    上述公式可由下面这张图表示:
    在这里插入图片描述
    值得注意的是:从核学习术语来看, K K K只不过是一个高斯矩阵,如果 F i n = F o u t F_{in} = F_{out} Fin=Fout,它是对称的。
    作者在Caffe中使用上图所示的不同层输出来实现这种滤波。存在近似计算 K z c Kz_{c} Kzc的算法,它们能减少运算量,提升运行时间。
    考虑到运算量,作者选择了一个显式的 K K K算法,利用GPU实现,中间的成对相似度计算在不同的应用程序中重复使用BI模块。整个运行时只是CNN运行时的一小部分。当然,当P和Q的值较大时需要用的前面提到的加速算法。

    BI(Bilateral Inception Module:)模块:
    在这里插入图片描述
    BI是不同双边滤波器的加权组合。将H的输出与不同尺度 θ 1 , . . . , θ H θ_1,...,θ_H θ1,...,θH的滤波器核 K K K结合起来。所有内核使用相同的特征变换 Λ Λ Λ 这使得成对差分的预计算更加容易,并且避免了滤波器的过度参数化。不同滤波器的输出 z ^ h \hat z^h z^h和h线性组合产生 z ‾ \overline z z
    在这里插入图片描述

    • w c h ∈ R H ∗ C w_{c}^{h} \in \mathbb{R}^{H*C} wchRHC表示对于每个channel c c c,不同尺度 θ h \theta^{h} θh的参数;
    • z ‾ c ∈ R Q ∗ C \overline z_{c} \in \mathbb{R}^{Q*C} zcRQC表示每个BI模块有Q个点,每个点对应每个channel c c c有激活值;

    此外,受DenseCRF架构的启发,我们使用了成对的BI模块:一个仅用位置特征(u,v),另一个使用位置和颜色特征(u,v,r,g,b)作为输入,每个模块具有不同尺度 { θ h } \{θ_h\} {θh}

    Motivation and Comparison to DenseCRF:
    BI模块采用双边滤波处理CNN最后一层输出的激励,将此DenseCRF进行对比。DenseCRF利用的中间CNN层表示的细粒度信息已经被压缩为表示标签可信度的低维向量。使用平均场更新标签可信度信息。
    类似的行为是通过使用BI模块获得的,但是在不同的尺度上(使用多个不同的滤波器 K ( θ h ) K(θ^h) K(θh)和中间CNN激活层输出 z z z
    由于最终要预测的像素不是独立同分布的,因此当使用双边滤波器作为DenseCRF的近似传递,以及在上述模型中,这种模糊将导致更好的性能。
    这两种尝试都是对问题的先验知识进行编码,即位置和颜色相近的像素可能具有相同的标签。

    Superpixel Convolutions
    BI模块允许使得信息以更高级的方式储存在CNN中,这就是使用超级像素的地方。我们不是将信息存储在固定的网格上,而是计算每幅图像的超像素,并使用其包含像素的平均颜色和位置作为特征。我们可以在BI模块中将网格表示转换为超像素表示,反之亦然。
    超像素之间的BI模块根据其在特征空间中的距离,卷积所有超像素之间的单位激活值。这保留了双边滤波器的所有特性,空间上接近并且具有相似平均颜色的超像素将彼此具有更强的联系。

    超像素并不是唯一的选择,原则上人们也可以从图像中随机抽取点,并将它们用作中间表示。我们使用超像素是出于计算原因,因为它们可以用来传播标签信息至完整的图像分辨率。
    其他插值技术是可能的,包括众所周知的双线性插值、上采样卷积和DenseCRFs。第节中提到的量化误差。3.1提到的量化误差仅仅因为利用超像素进行插值。还要注意的是,独立于图像的固定网格是一个很难选择的信息应该保存这些信息。原则上,我们可以在所有可能的空间位置密集地评估CNN,但是我们发现,与插值方法相比,这导致了较差的性能。

    4 Experiments

    4.1 Semantic Segmentation

    下图展示了Pascal VOC12分割测试数据集上的IoU分数和不同模型对应的平均运行时(ms);同时显示了使用相同backbone的密集像素预测技术对应的结果。运行时间包括了超像素计算(6ms)。在第二列中,“BI”、“FC”和“FULL”分别对应于训练“BI”、“FC”和完整模型层。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.2 Material Segmentation

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.3 Street Scene Segmentation

    在这里插入图片描述
    在这里插入图片描述

    5 我的总结

    全文的创新点在我看来有二:

    1. 将双边滤波融入CNN;
    2. 将超像素作为替换阵列表示方法,保留先验边界信息;且又与双边滤波的目的相同,(即位置相似,颜色亮度一致的像素应有更多的联系),将两者结合,巧妙的解决了超像素算法不可微分的问题。

    作为一种技巧,即插即用,代码现成,具有参考意义。deeplab没有出v3前,分割效果超过当时的state of art 。

    展开全文
  • 本文提出了一种联合颜色信息和超像素的颜色协方差矩阵作为特征进行图像分割的方法。协方差矩阵流形采用非欧几里德距离度量。然后,为了产生关联图,本文引进了三种从两个特征空间中获取的相似矩阵融合方法。...
  • 【论文精读】Superpixel Sampling NetworksAbstract4 Superpixel Sampling Networks(SSN)4.4 实现与实验参数设定 Abstract 4 Superpixel Sampling Networks(SSN) 4.4 实现与实验参数设定 原文code 实现:Caffe=...

    本文原文链接

    原文:Jampani, V., Sun, D., Liu, M. Y., Yang, M. H., & Kautz, J. (2018). Superpixel sampling networks. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 352-368).

    Abstract

    超像素为图像数据提供了一种高效的低/中级表示方法,大大减少了后续视觉任务所需的图像基元数量。现有的超像素算法是不可微的,这使得它们很难集成到端到端可训练的深层神经网络中。我们开发了一个新的可微分超像素采样模型,利用深度网络学习超像素分割。结果表明,该超像素采样网络(SSN)是端到端可训练的,它允许学习具有灵活损失函数的任务特定超像素,运行速度快。大量的实验分析表明,SSN不仅在传统的分割基准上优于现有的超像素算法,而且可以学习其他任务的超像素。此外,SSN可以很容易地集成到下游深度网络中,从而提高性能。

    1和2部分懒得翻译

    详见原文

    3 复习SLIC

    1. Pixel-Superpixel association:将每个像素与五维空间中最近的超级像素中心相关联,即判断每个像素p属于哪个新的超像素中心
      在这里插入图片描述
      D D D表示计算距离: D ( a , b ) = ∣ ∣ a − b ∣ ∣ 2 D(a,b)=||a-b||^{2} D(a,b)=ab2;注意由于在等式1中计算所有像素和超级像素之间的距离D是耗时的,因此该计算通常被限制在每个超像素中心周围的固定邻域内。
      H p t H_{p}^{t} Hpt大小为n*m,表示第t次迭代时,原图第 p p p个像素是否属于第 i i i个超像素
      I p I_{p} Ip表示原图第 p p p个像素
      S i t − 1 S_{i}^{t-1} Sit1表示第 t − 1 t-1 t1次迭代时,第 i i i个超像素中心
    2. Superpixel center update:计算每个超像素内的平均像素特征(XY+Lab)以获得新的超像素中心 S t S^{t} St
      在这里插入图片描述
      S i t S_{i}^{t} Sit表示第t次迭代时,第 i i i个超像素中心
      I p I_{p} Ip表示原图第p个像素
      Z i t Z_{i}^{t} Zit超像素 i i i的像素个数
      p ∣ H p t p|H_{p}^{t} pHpt表示第t次迭代时,属于超像素 i i i的像素 p p p
    3. 重复1、2步,直到收敛或进行固定次数的迭代。

    4 Superpixel Sampling Networks(SSN)

    在这里插入图片描述
    SSN由两部分组成:一个生成像素特征的深度网络,然后将其传递给可微SLIC。

    4.1 可微SLIC算法

    为什么SLIC不可微?
    答:问题出在Pixel-Superpixel association的计算(公式1),涉及不可微的最近邻运算。
    解决方案:修改Pixel-Superpixel association从硬距离 H ∈ { 0 , 1 , . . . , m − 1 } n ∗ 1 H \in \{0,1,...,m-1\}^{n*1} H{0,1,...,m1}n1变成软距离 Q ∈ R n ∗ m Q \in R^{n*m} QRnm;变不可微为可微分。

    1. Soft Pixel-Superpixel association:
      在这里插入图片描述
      Q p i t Q_{pi}^{t} Qpit表示第t次迭代时,属于超像素 i i i与像素 p p p的软连接;
      I p I_{p} Ip表示原图第p个像素
      S i t − 1 S_{i}^{t-1} Sit1表示第t-1次迭代时,第 i i i个超像素中心
      D D D表示计算距离: D ( a , b ) = ∣ ∣ a − b ∣ ∣ 2 D(a,b)=||a-b||^{2} D(a,b)=ab2
    2. Superpixel center update:
      在这里插入图片描述
      S i t S_{i}^{t} Sit表示第t次迭代时,第 i i i个超像素中心
      I p I_{p} Ip表示原图第p个像素
      Q p i t Q_{pi}^{t} Qpit表示第t次迭代时,属于超像素 i i i与像素 p p p的软连接;
      Z i t = ∑ p Q p i t Z_{i}^{t}=\sum_{p}Q_{pi}^{t} Zit=pQpit 为归一化常数

    将上述公式(4)矩阵化:
    S t = Q t ^ T I S^{t}={\hat{Q^{t}}}^{T}I St=Qt^TI
    其中 Q t ^ \hat{Q^{t}} Qt^表示列归一化的 Q t Q^{t} Qt

    其次, Q Q Q的大小是n×m,即使对于少量的超像素m,计算所有像素和超像素之间的 Q p i Q_{pi} Qpi也是非常昂贵的。因此,我们将每个像素的距离计算限制为仅9个周围的超像素,如下图中红色和绿色框所示。
    在这里插入图片描述

    对于绿框中的每个像素,仅考虑红框中周围的超级像素来计算关联。这将 Q Q Q的大小从n×m降到n×9,使得它在计算和内存方面都非常有效。 Q Q Q计算中的这种近似在本质上类似于SLIC中的近似近邻搜索。

    总算法流程:用深度网络计算的k维像素特征 F p ∈ R n ∗ k F_{p} \in R^{n*k} FpRnk来代替上述等式3和4中的图像特征 I p I_{p} Ip
    在这里插入图片描述

    一个关于后续计算损失函数的问题:像素和超像素如何映射?
    答:
    超像素至像素: S = Q ^ T I S=\hat Q^{T}I S=Q^TI,其中 Q ^ \hat Q Q^表示列归一化的 Q Q Q
    像素至超像素: F = Q ~ S F=\tilde Q S F=Q~S, 其中 Q ~ \tilde Q Q~表示行归一化的 Q Q Q

    4.2 SSN网络架构

    在这里插入图片描述
    CNN由一系列卷积层、卷积层、BN和ReLU交织组成,整个网络可以进行端到端的训练:

    • 在第二和第四卷积层之后,使用最大池(max-pooling),将输入的样本减少2倍,以增加感受野。
    • 对第四和第六卷积层输出进行双线性上采样,然后与第二卷积层输出串联以传递到最终的卷积层。
    • 用3× 3卷积滤波器,每个层的输出通道数设置为64个,但最后一个输出k− 5个频道。
    • 连接这个k− 5通道与XY Lab图像原始特征,得到k维像素特征。
    • 产生的k维特征被传递到可微SLIC的两个模块上,这两个模块迭代地更新像素超像素关联和v迭代的超像素中心。

    4.3 损失函数:学习任务特定的超像素

    1. Task-specific reconstruction loss:
      在这里插入图片描述
      R ∈ R n ∗ l R \in R^{n*l} RRnl表示像素特征,比如说R可以表示为语义分割标签或者光流图;
      素特征映射至超像素特征: R ~ = Q ^ T R \tilde R=\hat Q^{T}R R~=Q^TR,其中 Q ^ \hat Q Q^表示列归一化的 Q Q Q R ~ ∈ R ~ m ∗ l \tilde R \in \tilde R^{m*l} R~R~ml
      超像素特征映射至像素特征: R ∗ = Q ~ S R^{*}=\tilde Q S R=Q~S, 其中 Q ~ \tilde Q Q~表示行归一化的 Q Q Q
      L \mathcal{L} L表示特定任务的损失函数,对于分割任务,使用交叉熵损失,对于光流,使用L1范数。
    2. Compactness loss:
      在这里插入图片描述
      R x y R^{xy} Rxy表示像素位置特征;
      像素位置特征映射至超像素位置特征: S x y = Q ^ T I x y S^{xy}=\hat Q^{T}I^{xy} Sxy=Q^TIxy
      超像素位置特征映射至像素位置特征: I ‾ x y = S i x y ∣ H p = i \overline I^{xy}=S_{i}^{xy}|H_{p}=i Ixy=SixyHp=i;其中 H p H_{p} Hp表示硬位置距离
    3. 总损失函数:
      L = L r e c o n + λ L c o m p a c t (7) L=L_{recon}+\lambda L_{compact} \tag{7} L=Lrecon+λLcompact(7)
      其中本实验中 λ = 1 0 − 5 \lambda =10^{-5} λ=105

    4.4 实现与实验参数设定

    1. 原文code
    2. 实现:Caffe=+Python
    3. 输入: xy坐标 + Lab(scaled);
      γpos表示位置;γcolor表示颜色;
      γcolor的值与超级像素的数量无关,设置为0.26,颜色值介于0和255之间。
      γpos的值取决于超级像素的数量,γpos=η * max(mw/nw,mh/nh),其中mw,nw和mh,nh分别表示沿图像宽度和高度的超级像素和像素的数量。实践中,η=2.5表现良好。
    4. 训练网络输入:201×201的图像块,100个超级像素。
    5. 数据增强:左右翻转;对于小型BSDS500数据集:随机缩放图像块。
    6. 优化器 Adam,batch为8,学习率为0.0001。训练次500K迭代,并根据验证精度选择最终模型。
    7. 消融实验:200K次迭代,缩放上述输入位置特征来估计不同数量的超像素
    8. 可微SLIC训练:5次迭代(v=5)进行训练,测试时10次迭代,因为更多的迭代收益有限

    5. Experiments

    5.1 Learned Superpixels

    1. 数据集:BSDS500
    2. 损失函数:重建损失中使用GT分割标签(等式5)。具体地说,将每个图像中的GT分割表示为一个热编码向量,并将其作为重建损失中的像素属性R。 L \mathcal{L} L为交叉熵损失函数。
    3. 评价指标:Achievable Segmentation Accuracy (ASA) + Boundary Recall (BR) + Boundary Precision (BP)
      ASA表示对超像素进行下一步的分割步骤可达到的精度上限。BR、BP度量超级像素边界与GT边界的对齐程度。
      其次,对边界精度和召回的公平评估期望超像素在空间上是连接的。因此,计算hard clusters并在SSN超像素上强制执行空间连接性(算法1中的第7-8行)。
    4. 消融实验:
      S S N d e e p SSN_{deep} SSNdeep:main model :7卷积层神经网络
      S S N l i n e a r SSN_{linear} SSNlinear:用一个卷积层代替了深层网络,学习XY+lab线性变换
      S S N p i x SSN_{pix} SSNpix: 可微SLIC算法,以像素XY+lab特征

      结果表明,ASA和BR的得分随着深度网络的增加而显著提高,随着特征维数k和可微 S L I C SLIC SLIC迭代次数v的增加而略有提高
      出于计算原因,选择k=20和v=10,从这里开始,将此模型称为 S S N d e e p SSN_{deep} SSNdeep
    5. 与其它算法对比
      在这里插入图片描述
      S S N p i x SSN_{pix} SSNpix的性能类似于 S L I C SLIC SLIC超像素,表明当放松近邻约束时 S L I C SLIC SLIC的性能不会下降。 S S N p i x SSN_{pix} SSNpix在ASA、BP、BR方面,对比其它超像素分割算法都有相当好的表现。

    5.2 Superpixels for Semantic Segmentation

    1. 数据集:Cityscapes + PascalVOC
    2. 损失函数:与5.1相似,利用语义标签作为图像重建损失中的像素属性R
    3. 结果:
      on Cityscapes :
      在这里插入图片描述
      on PascalVOC:
      在这里插入图片描述
      ASA和边界精确召回结果表明, S S N SSN SSN的性能优于其他技术在这里插入图片描述
    4. 运行时间分析:在512×1024图像上计算1000个超像素用时
      S S N p i x SSN_{pix} SSNpix S S N d e e p SSN_{deep} SSNdeep之间的运行时比较表明, S S N SSN SSN计算时间的很大一部分是由可微 S L I C SLIC SLIC引起的。运行时表明 S S N SSN SSN比几种超像素算法的实现速度要快得多
      在这里插入图片描述
    5. 附加实验:将SSN与此文献中模型结合,与文献中使用的原始SLIC超像素相比,IoU的提升表明 S S N SSN SSN可以给使用超像素的下游任务网络带来性能改进。
      在这里插入图片描述

    5.3 Superpixels for Optical Flow

    1. 数据集:MPI-Sintel dataset
    2. 损失函数:GT光流作为重建损失中的像素属性R(等式5),并使用L1范数作为 L \mathcal{L} L损失函数
    3. 结果:
      在这里插入图片描述
      用不同类型的超像素获得的分段光流图像表明,与其他技术相比, S S N d e e p SSN_{deep} SSNdeep超像素可以更好地表示GT光流。
    展开全文
  • Superpixel Sampling Networks 原始文档:https://www.yuque.com/lart/papers/ssn 本文的思想很简单,传统的超像素算法是一种有效的低/中级的图像数据的表达,极大地降低了后续图像任务的基元(image primitives)...

    Superpixel Sampling Networks

    image.png

    原始文档:https://www.yuque.com/lart/papers/ssn

    本文的思想很简单,传统的超像素算法是一种有效的低/中级的图像数据的表达,极大地降低了后续图像任务的基元(image primitives)数量。但是现存的超像素算法由于使用的是最邻近算法,一般都是不可微的,这就导致很难将它们集成到端到端的深度网络中,所以文章就改进提出了一种可微分的超像素算法,也就是文章提出的超像素采样网络(Superpixel Sampling Network),这可以学习任务特定的有着灵活的损失函数的超像素,并且具有快速运行时间(runtime)。

    工作介绍

    超像素是通过基于低级图像属性对图像像素进行分组而形成的图像的过分割。它们提供了图像内容感知上有意义的细分,从而减少了后续图像处理的图像基元的数量。由于它们的代表性和计算效率,超像素已经成为一种既定的低/中级图像表示,并广泛应用于计算机视觉算法,如物体检测,语义分割,显着性估计,光流估计,深度估计,跟踪等等。超像素尤其广泛用于传统的能量最小化框架,其中少量图像基元极大地降低了优化复杂度。

    近年来,广泛的计算机视觉问题都开始采用深度学习。除了一些方法(例如,[Superpixel convolutional networks using bilateral inceptions,SuperCNN: A superpixelwise convolutional neural network for salient object detection,Recursive context propagation network for semantic scene labeling]),超像素几乎不与现代深度网络结合使用。这有两个主要原因。

    1. 形成大多数深层结构基础的标准卷积运算通常在规则网格上定义,并且当在不规则超像素晶格上操作时变得低效。
    2. 现有的超像素算法是不可微分的,因此在深度网络中使用超像素使得在端到端的可训练网络架构中引入了不可微分的模块。

    这项工作通过提出一种新的深度可扩展的超像素分割算法来缓解第二个问题。

    首先重新讨论广泛使用的简单线性迭代聚类(SLIC)超像素算法,并通过放松SLIC中存在的最近邻居约束将其转换为可微分算法。这种新的可微分算法允许端到端训练,使得能够利用强大的深度网络来学习超像素,而不是使用传统的手工设计特征。这种深度网络与可微分SLIC的结合形成了超像素采样网络(SSN) 的端到端可训练超像素算法。

    image.png

    图1显示了所提出的SSN的概述。

    1. 给定的输入图像首先通过深度网络产生更为有效的特征。
    2. 然后将这些深度特征传递到可微分SLIC上
    3. SLIC执行迭代聚类
    4. 从而产生所需的超像素

    整个网络是端到端的可训练的。SSN的可微分性允许使用灵活的损失函数来学习特定于任务的超像素。图1显示了一些SSN生成的超像素样本。

    与现有的超像素算法相比,所提出的SSN具有以下有利特性:

    1. 可端到端训练
    2. 灵活且任务特定: SSN允许学习灵活的损失函数,从而学习特定于任务的超像素
    3. 当前最佳的超像素算法
    4. 有利的运行时间:SSN在运行时方面也优于当前优异的超像素算法,使其适合在大型数据集上学习,并且对实际应用也有效

    相关工作

    超像素算法

    传统的超像素算法可以被大致分为基于图的和基于聚类的方法。

    • 基于图的方法将超像素分割问题表达为图划分问题。图的节点为像素,图的边表示邻接像素之间的连接强度。通常,通过解决离散优化问题来进行图划分。一些广泛使用的算法包括下面几种,但由于离散优化涉及离散变量,优化目标通常是不可微分的,因此难以在基于图的方法中利用深度网络。
      • 归一化切割[Normalized-Cuts]
      • Felzenszwalb和Huttenlocher(FH)
      • 熵率超像素(ERS)
    • 基于聚类的方法利用传统的聚类技术,例如用于超像素分割的k均值。广泛使用的算法包括下面几种,这些方法主要进行k均值聚类,但其特征表示不同。虽然这些聚类算法需要迭代更新,但在SNIC方法[2]中提出了一种用于超像素分割的非迭代聚类方案
      • SLIC:SLIC将每个像素表示为5维特征(位置和Lab颜色 XY Lab特征)
      • LSC:LSC方法将这些5维特征投影到10维空间并在投影空间中执行聚类
      • Manifold-SLIC:使用二维流形特征空间进行超像素聚类

    本文提出的方法也是基于聚类的方法。但是,与现有技术不同,这里利用深度网络通过端到端的训练框架来学习超像素聚类的功能。

    正如最近的一篇调查论文[36]所详述的,其他技术被用于超像素分割,包括分水岭变换,几何流,图形切割,均值漂移和爬山算法(watershed transform, geometric flows, graph-cuts, mean-shift, and hill-climbing)。然而,这些方法都依赖于手工设计的特征,将深度网络融入这些技术并非易事。最新的SEAL技术[Learning superpixels with segmentation-aware affinity loss]提出了一种不可微的超像素算法通过绕过梯度来为超像素分割学习深度特征的方法。与我们的SSN框架不同,SEAL不是端到端可微分的。

    深度聚类

    受到监督任务深度学习成功的启发,有几种方法研究了深度网络在无监督数据聚类中的应用。

    • 最近,Greff等人提出神经期望最大化框架,他们使用深度网络模拟聚类标签的后验分布,并展开EM程序中的迭代步骤以进行端到端训练
    • 在另一项工作中,梯形网络用于建模用于聚类的分层潜变量模型
    • Hershey等人提出了一种基于深度学习的聚类框架,用于分离和分割音频信号
    • Xie等人提出了一个深度嵌入式聚类框架,用于同时学习特征表示和聚类分配
    • 在最近的一份调查报告中,Aljalbout等人给出了基于深度学习的聚类方法的分类

    在本文提出了一种基于深度学习的聚类算法。与以前的工作不同,本文的算法是针对超像素分割任务而定制的,其中使用特定于图像的约束。此外,该框架可以轻松地结合其他视觉目标函数来学习任务特定的超像素表示。

    基础知识

    SSN方法核心是一种可微分的聚类方法,受SLIC超像素算法启发。这里简单介绍下SLIC算法。SLIC算法是最简单最广泛使用的超像素算法之一,它很容易实现,有着较高的运行时(runtime),并且可以生成较为紧凑和均匀的超像素。尽管已经有数种SLIC算法的变体,在SLIC的原始形式中,SLIC是一种K均值聚类算法,针对图像像素的五维特征空间(XY LAB)进行聚类。

    对于超像素计算的任务而言,其最终目的是要对每个像素分配一个超像素标号,假设要分成m个超像素,且给定一个图像I,它是一个nx5的集合,有n个像素,每个像素是5维(XY LAB)向量,SLIC算法的主要操作流程如下所述。

    采样初始的m个聚类中心(超像素中心)S0,其是mx5的集合。该采样通常在像素网格上均匀地进行,并且基于图像梯度进行一些局部扰动。给定这些初始的超像素中心后,SLIC算法可以开始反复迭代下面的两步:

    image.pngimage.png

    1. 像素-超像素关联上一次迭代确定的超像素中心Hp=Si**,如上1式,这里的D计算的是欧式距离的平方image.png。实际上就是一个聚成簇的过程。
    2. 超像素中心更新:对每个超像素簇中所有的像素的特征进行平均,获得簇中心,进而得到这次迭代后的聚类中心。如上式2,表示的就是这个过程。其中Zi表示第i个簇中包含的像素数量。

    这两个步骤构成了SLIC算法的核心,并且一直重复直到收敛或者达到固定次数的迭代。因为在所有像素和超像素之间计算公式1中的距离D是耗时的,该计算通常被约束到每个超像素中心周围的固定邻域。最后,根据应用,有一个可选步骤,强制每个超像素簇中的像素之间的空间连接。[SLIC superpixels compared to state-of-the-art superpixel methods]

    SSN(Superpixel Sampling Networks)

    网络结构

    1556797849298-bd4d761d-542d-41b3-8e95-f16502b666d2.png#align=left&display=inline&height=321&originHeight=327&originWidth=760&status=done&width=746

    途中的箭头是双线性插值上采样,多个输入会被拼接起来送入卷积。卷积使用的都是3x3卷积,每一层输出为64通道,除了最后一层的输出为k-5,因为要和原图像的XYLab特征向量进行拼接,一起生成一个k维的特征张量集合。
    k微特征被送入两个可微的SLIC模块,迭代更新关联与聚类中心v步,整个网络端到端训练。

    可微分的SLIC

    首先分析为什么SLIC不可以微分。仔细观察SLIC中的所有计算,_像素-超像素关联_的计算产生不可微分性,其涉及不可微分的最近邻操作。这个最近邻计算也构成了SLIC超像素聚类的核心,因此无法避免这种操作。

    可微分的SLIC的关键在于转换这种不可微分的最近邻操作为可微分的计算。由于前面的SLIC算法中的这种硬性关联H存在不可微的特性,那么就将其软化,这里有点类似于阶跃函数和Sigmoid函数的关系。后者也可以看做是前者的一个软化

    这里提出一种计算soft-associations Q(nxm)的方法。对于迭代过程中第t步的像素p和超像素i,这里替换最近邻操作用以下的关于距离的钟型函数权重的形式来表达:

    image.png

    因为这里对于超像素与像素的关联实际上就是一中距离上的关系,原本是直接限定了最近的,相当于直接截断了整图像素与超像素中心的距离关联。这里不用截断操作。

    image.png

    式子4通过1加权的形式计算了新的超像素中心。这里的image.png是一个归一化约束,实际上就是对于Q的列归一化,表示为image.png,于是式子4可以写作image.png((mxn)x(nx5))。因为对于计算所有的像素和超像素之间的距离仍然是一件计算昂贵的事情,所以这里进行了约束,只计算像素和9个周围的像素,如下图中的红色和绿色框所示。

    image.png

    对于绿色框中的像素,在计算关联的时候只考虑红色框里周围的超像素。这将Q从nxm变为了nx9,一定程度上降低了计算和存储的消耗。在Q计算中的近似有些相似于SLIC中的最近邻搜索。

    现在,每个SLIC迭代中的计算都是完全可微分的,将这种修改后的算法称为可微分SLIC(_ differentiable SLIC_)。根据经验,观察到用可微分SLIC中的软关联替换SLIC中的硬关联不会导致任何性能下降。由于这种新的超像素算法是可微分的,因此可以轻松地集成到任何深度网络架构中。

    Superpixel Sampling Network

    可以利用深度特征提取器而不是手工设计的超像素特征Ip,并且端到端的对整个网络进行训练。换句话说,将上面的式3和4中的图像特征Ip替换为深度网络得到的k维像素特征Fp(nxk)。将深度网络与可微分SLIC的耦合称为超像素采样网络(SSN)。

    1556797613632-14c6b706-8d99-4ba6-847f-6503af1eb548.png#align=left&display=inline&height=251&originHeight=423&originWidth=1258&status=done&width=746
    算法1概述了SSN中的所有计算步骤。

    1. 从使用CNN的深度图像特征提取开始(第1行)
    2. 使用初始常规超像素网格中的平均像素特征来初始化超像素中心(第2行)(图2)
    3. 对于v次迭代,使用上述计算(第3-6行)迭代地更新像素-超像素关联超像素中心**。
      1. 虽然可以直接使用软关联Q来执行多个下游任务,但根据应用需求,可以选择将软关联转换为硬关联(第7行)。
      2. 此外,与原始SLIC算法一样,可以选择强制跨每个超像素集群内的像素进行空间连接。这是通过将小于特定阈值的超像素与周围的超像素合并,然后为每个空间连接的组件分配唯一的簇ID来实现的。
      3. 请注意,这两个可选步骤(第7,8行)不可微分

    像素和超像素表示之间的映射

    对于使用超像素的一些下游应用程序,像素表示被映射到超像素表示,以及反过来。

    1. 利用提供硬聚类的传统超像素算法,这种从像素到超像素表示的映射是通过在每个聚类内部进行平均来完成的(方程2)。
    2. 从超像素到像素表示的逆映射是通过将相同的超像素特征分配给属于该超像素的所有像素来完成的。我们可以使用与SSN超像素相同的像素-超像素映射,这使用了从SSN获得的硬聚类(算法1中的第7行)。然而,由于这种硬关联的计算是_不可微分_的,因此在集成到端到端可训练系统时可能不希望使用硬聚类。

    值得注意的是,由SSN生成的软像素-超像素关联也可以容易地用于像素和超像素表示之间的映射。

    1. 式4描述了从像素到超像素表示的映射。1556796991992-c1efc780-e1db-42d4-8c3d-3ea958b78299.png#align=left&display=inline&height=32&originHeight=36&originWidth=101&status=done&width=90
    2. 从超像素到像素的逆映射通过乘以行归一化的Q来计算,表示为:image.png

    因此像素-超像素特征映射关系可以使用简单的矩阵乘法来进行描述,并且这是可微的。

    学习任务特定的超像素

    端到端可训练SSN的主要优点之一是损失函数的灵活性,可以使用它来学习任务特定的超像素表示。

    与任何CNN一样,可以将SSN与任何特定于任务的损失函数相结合,从而学习针对下游计算机视觉任务进行优化的超像素。

    在这里,专注于优化超像素的表现效率,即学习可以有效地表示场景特征的超像素,例如语义标签,光流,深度等。例如,如果想要学习超像素用于下游语义分割任务,期望产生遵循语义边界的超像素。为了优化表示效率,作者发现任务特定的重建损失和紧凑性损失的组合表现良好。

    任务特定的重建损失

    用超像素表示我们想要有效表示的像素属性为R(n×l)。例如,R可以是语义标签(独热编码后的)或光流图。重要的是要注意,我们在测试时是不能无法获取R,即SSN仅使用图像数据来预测超像素。只用R来训练,以便SSN可以学习预测适合的表示R的超像素。可以使用列标准化关联矩阵Q,image.png将像素属性映射到超像素上。然后使用行标准化关联矩阵Q,image.png将得到的超像素表示映射回像素表示R*(n×1)。可以得到重建损失为:

    image.png

    而这里的L表示的是任务特定的损失函数,针对分割任务使用交叉熵函数来作为L,使用L1范数损失来应对光流任务。这里的Q表示的是可微分SLIC的最终迭代之后关联矩阵Qv。为了方便,忽略了v。

    紧凑性损失

    除了上面的损失,也使用了一个紧凑性损失来鼓励超像素实现空间上的紧凑性。也就是在超像素簇内部有着更低的空间方差。

    1. 使用Ixy表示位置像素特征。
    2. 首先将这些位置特征使用Q映射到超像素表示。
    3. 然后使用硬关联H替代软关联Q来逆映射到像素表示。
      1. 这里通过将相同超像素位置的特征赋给属于该超像素的像素。

    紧凑损失可以使用如下的L2损失表示:

    image.png

    这个损失鼓励超像素有着更低的空间方差。

    SSN的灵活性允许使用许多其他的损失函数。这份工作中使用了前面的重建损失与这里的紧凑性损失的组合损失:

    image.png

    其中的系数lambda为1e-5。

    实验细节

    1. 使用放缩过的XYLab特征作为SSN的输入,其中位置和色彩特征尺寸表示为ypos和ycolor。
      1. ycolor的值独立于超像素的数量,被设置为0.26,颜色值被放缩到0~255。
      2. ypos的值依赖于超像素数量,image.png,这里的m和n分别表示超像素和像素沿着图像的宽和高的数量。实际中设置eta为2.5。
    2. 训练中使用201x201大小的图像patch和100个超像素。
    3. 数据增强使用了左右反转,对于小的BSDS500数据集,使用了额外的图像patch随机放缩的增强方式。
    4. 所有实验都是用Adam优化器,batch为8,学习率为0.0001
    5. 除非特别提及,训练模型500K次迭代,并基于验证集准确率来选择最终的训练模型。
    6. 消融研究中,训练改变了参数的模型200K次迭代。
    7. 需要注意的是,使用一个训练好的SSN模型,通过缩放上面描述的输入位置特征来估计不同数量的超像素。
    8. 在训练的时候,可微分的SLIC使用五次迭代,也就是v=5,而测试的时候,v=10。因为观察到,随着迭代次数的提升,性能增益不大(only marginal performance gains with more iterations)。

    超像素

    BSDS500数据集:BSDS500 consists of 200 train, 100 validation, and 200 test images. Each image is annotated with ground-truth (GT) segments from multiple annotators. We treat each annotation as as a separate sample resulting in 1633 training/validation pairs and 1063 testing pairs.

    为了学习附着到真值分割的超像素,在重建损失(式子5)中使用真值分割标签,也就是将真值分割标签表达为one-hot编码向量,并且使用其作为像素属性R,用在重建损失中。在式子5中使用交叉熵损失作为L,注意这里与真值标签具有意义的语义分割任务不同,这个数据集里的真值标签并不带有什么语义信息。这对网络的学习设置没有任何问题,因为SSN和重建损失都与像素属性R的含义无关(agnostic)。重建损失使用给定输入信号R及其重建版本R*生成损失值,并不考虑是否在图像中保留了R的含义。

    评估指标

    超像素在各种视觉任务中都很有用,并且存在用于评估超像素的若干度量。

    在这项工作中,将可实现的分割准确度(Achievable Segmentation Accuracy,ASA)视为主要指标,同时还报告边界指标,如边界召回(BR)和边界精度(BP)指标。

    • ASA得分表示通过在超像素上执行的任何分割步骤可实现的准确度的上限。
    • 另一方面,边界精度和召回率测量超像素边界与GT边界的对齐程度。

    在补充材料中更详细地解释了这些指标。这些得分越高,分割结果越好。通过改变生成的超像素的平均数量来报告平均ASA和边界度量。对边界精度和召回的公平评估期望超像素在空间上连接。因此,为了进行无偏比较,遵循计算硬聚类的可选后处理,并在SSN超像素上实施空间连通性(算法1中的第7-8行)。

    消融实验

    • 参考图3所示的主模型,在深网络中有7个卷积层,作为SSNdeep。
    • 作为基线模型,评估使用可微分SLIC生成的超像素,该像素采用像素XYLab特征作为输入。这与标准SLIC算法类似,将其称为SSNpix,并且没有可训练的参数。
    • 作为另一个基线模型,替换深度网络用一个简单的卷积层来学习输入XYLab特征的线性变换,这个表示为SSNlinear。

    image.png

    图4中可以看出来,SSNlinear就已经实现了远高于基线的ASA和BR得分,这显示了损失函数和通过超像素算法反向传播损失信号的重要性。SSNdeep进一步提升了ASA和BR得分。可以看到,k越高,往往也就有着更高的得分,v也是这样。

    出于计算的考虑,这里之后的SSNdeep都指代k=20和v=10。

    比较

    1556850895423-11927450-e8d6-4286-a1a6-dc885a46ef14.png#align=left&display=inline&height=256&originHeight=401&originWidth=1168&status=done&width=746

    图上可以看到,SSNpix效果接近于SLIC算法,这也反映出来当放松最近邻约束的时候SLIC的性能并不会损失。

    image.png

    请注意,SSNdeep超像素平滑地跟随对象边界,并且也更集中在对象边界附近。

    语义分割

    使用的数据集:Cityscapes和Pascal VOC。

    • Cityscpes:We train SSN with the 2975 train images and evaluate on the 500 validation images. For the ease of experimentation, we experiment with half-resolution(512 × 1024) images.
    • Pascal VOC:We train SSN with 1464 train images and validate on 1449 validation images.

    Cityscapes

    image.png

    image.png

    我们使用NVIDIA Tesla V100 GPU计算GPU运行时。SSNpix和SSNdeep之间的运行时比较表明SSN计算时间的很大一部分是由于可微分SLIC。运行时表明SSN比几个超像素算法的实现快得多。

    这里与上一部分的差异主要在于语意标签的使用和重建损失。鼓励SSN学习附着于语义分割的超像素。

    Pascal VOC

    image.png

    图8中a的曲线显示了不同技术的ASA得分,这里没有分析在这个数据集上的边界得分,因为真值语义边界被用忽略标签给扩展了。这里同时评估了使用BSDS训练的模型,也就是图中的SSNdeep-BSDS模型,可以看出,相较于当前数据集训练的模型,只有少量的得分损失。这也体现出了SSN在不同数据集上的泛化能力和鲁棒性。

    图7中有些图片示例。

    额外实验

    进行了一个额外的实验,将SSN插入到[Superpixel convolutional networks using bilateral inceptions]的下游语义分割网络中,[Superpixel convolutional networks using bilateral inceptions]中的网络具有双边inception层(bilateral inception layer),利用超像素进行远程数据自适应信息传播,跨过中间CNN表示。

    image.png

    表2显示了在测试数据上评估的该联合模型的IoU得分。与这篇论文中使用的原始SLIC超像素相比,IoU的改进表明SSN还可以为使用超像素的下游任务网络带来性能改进

    光流

    使用的数据集是MPI-Sintel:The MPI-Sintel dataset consists of 23 video sequences, which we split intodisjoint sets of 18 (836 frames) training and 5 (205 frames) validation sequences.

    To this end, we experiment on the MPI-Sintel dataset and use SSN to predict superpixels** given a pair of input frames**.

    为了证明SSN对回归任务的适用性,进行了概念验证实验,学习了遵循光流边界的超像素。使用真值光流作为像素属性R,用在重建损失中,使用L1损失作为L,鼓励SSN来生成有效表示光流的超像素。

    image.png

    这里使用相同的方法来计算ASA得分。对于每个超像素内部的像素,指定平均真值光流来产生一个分割光流,图9中显示了一些分割光流的结果。之后计算真值光流和分割光流的欧氏距离,这称为终点误差(end-point error EPE)。该值越低,超像素越能更好的表示光流。

    图9中的结果表明,SSNdeep超像素相比其他超像素,对于真值光流的变化更好地对齐。图8b显示了现有超像素技术的平均EPE值,可以看出SSNdeep相较于现存的超像素技术表现出色。这显示了SSN在学习任务特定的超像素中的有用性

    总结

    提出了一种新颖的超像素采样网络(SSN),它利用通过端到端训练学到的深层特征来估计任务特定的超像素。这是第一个端到端可训练的深度超像素预测技术。

    • 实验的几个基准测试表明,SSN始终如一地在表现出色,同时也更快。
    • 将SSN集成到语义分割网络中还可以提高性能,显示SSN在下游计算机视觉任务中的实用性。
    • SSN快速,易于实施,可以轻松集成到其他深层网络中,具有良好的实证性能。
    • SSN解决了将超像素纳入深度网络的主要障碍之一,这是现有超像素算法的不可微分性质。
    • 在深度网络中使用超像素可以具有几个优点。
      • 超像素可以降低计算复杂度,尤其是在处理高分辨率图像时
      • 超像素也可用于加强区域常量假设(enforce piece-wise constant assumptions)
      • 也有助于远程信息传播

    相信这项工作开辟了利用深层网络中的超像素的新途径,并激发了使用超像素的新深度学习技术。

    相关连接

    转载于:https://www.cnblogs.com/lart/p/10805952.html

    展开全文
  • 深度聚类之Superpixel Sampling Networks

    千次阅读 2019-05-03 11:38:41
    Superpixel Sampling Networks 文章目录Superpixel Sampling Networks工作介绍相关工作超像素算法深度聚类基础知识SSN(Superpixel Sampling Networks)网络结构可微分的SLICSuperpixel Sampling Network像素和超像素...
  • Superpixel整理

    2019-09-25 07:51:29
    ...5. Entropy Rate Superpixel Segmentation, 2011. Ming-Yu Liu, Tuzel, O., Ramalingam, S. , Chellappa, R., Entropy Rate Superpixel Segmentation, CVPR,2011. Project Home Page: ...
  • 视频图matlab代码超像素相似度测量 ...{IEEE视频技术电路和系统的交易},标题=“通过二进制边缘图全局测量超像素的相似性”适用于Superpixel Clustering},年份= {2016},数量= {PP},数量= {99},页面= {1-1},do

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,685
精华内容 674
关键字:

Superpixel