[CS131] Lecture 10 Semantic Segmentation and Clustering

根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正

Lecture 10 Semantic Segmentation and Clustering

Clustering and Segmentation

图片分割目的是检测相似和应该在一起的图片区域或像素组。有多种相似度测量方法,以下是一个例子,将属于不同物体的像素分割。

图像分割可以通过检测像素组,将图像分割为独立的多个物体。这项功能除了能直接运用于物体检测外,还能提高后面的图像处理过程的效率。

Gestalt School and Factors

Gestalt 理论认为总体大于其部分之和,各部分之间的联系可以产生新的性质与特征。这个理论定义了 Gestalt 因子,用于定义图像中的组。以下是 Gestalt 因子的一个例子。

例二。左图的视觉内容看起来没有意义,但是加上灰线条后,右图提供了关于像素分组和图像内容的视觉线索。现在可以看出原图是一些被遮挡的数字 9。这是一个通过遮挡反映连续性的例子,灰线条让我们的大脑黑色像素不是分离的,进而识别出数字。

例三。图中可以看到两张人脸或者一个花瓶,取决于视角不同。这种内容变化来自于我们将物体识别为前景还是背景。

Agglomerative Clustering

聚类是一种非监督学习:多个数据点 x1,...,xnRD x 1 , . . . , x n ∈ R D ,在不知道正确标签 / 类别的情况下,将它们组合成一类。凝聚聚类 (Agglomerative Clustering) 是聚类的一种常用算法。

凝聚聚类的基本思想是通过检测点之间的相似度,决定这些点如何以明智的方式组合。首先,我们需要决定如何检测相似度。

Distance Measures

有许多的距离公式,但很难决定什么公式能形成好的距离矩阵。所以我们只列出两个标准、经过研究的距离矩阵。

Euclidean Distance

欧几里德距离考虑两个点 x,x x , x ′ 的角度和大小来计算距离。

sim(x,x)=xTx s i m ( x , x ′ ) = x T x ′

这种距离测量没有将矢量正规化,所以它们的大小是相似度计算的一个因素。

Cosine Similarity Measure

这种距离计算只考虑两个点之间的角度。注意,和欧几里德距离不同,余弦相似度测量只体现相似度,而不体现距离。且点和自身之间的余弦相似度等于 1.

sim(x,x)=cos(θ)=xTx||x||||x||=xTxxTxxTx(1)(2)(3) (1) s i m ( x , x ′ ) = c o s ( θ ) (2) = x T x ′ | | x | | · | | x ′ | | (3) = x T x ′ x T x x ′ T x ′

根据矢量大小的划分导致距离矩阵的正规化,并且保证了测量只取决于两个物体间的角度。

Desirable Clustering Properties

当我们选择特定的聚类算法时,需要考虑以下几个性质:

  1. 可拓展性 - 在计算能力和容量方面
  2. 不同的数据类型 - 算法需要支持在 Rd R d 上的任意数据
  3. 输入参数 - 算法的参数调整不能太难。当算法不依赖于我们对数据的精确了解时,会更有用。
  4. 可说明性 - 我们要能解释结果。
  5. 约束性 - 算法需要有效运用事先设定的约束(例如,我们知道两个点属于或不属于一类)。

Agglomerative Clustering Implementation

凝聚聚类通过将更近的点分组在一起来计算数据点之间的相似度。新形成的组又可以进一步和靠近它的组合并。这种迭代过程持续至只剩下一个组。这种方式形成了一个层次,最好用树状图 (dendrogram) 来观察。

上图第一张显示了所有点,第 2-5 张显示了聚类算法的步骤:第 2 步将两个红点聚类,第三步将两个绿点聚类,第四部将绿点集群和附近的蓝点聚类成黄点,最后黄点组和红点组聚类。第六张是最后的树状图。

Algorithm
  1. 初始化每个点,作为单独的集群
  2. 找到一对最接近的集群
  3. 合并这对接近的集群,成为一个父集群
  4. 重复步骤 2、3,直到剩下一个集群
Questions

虽然凝聚聚类很有效,但是当实现它的时候,需要考虑到许多问题。例如:

  1. 我们如何定义集群之间的相似度?我们怎么测量集群之间的距离?

    集群之间的距离有多种计算方式:点之间的平均距离、集群中点之间的最小距离、集群中点之间的最大距离。集群距离计算方式对结果有极大的影响。

  2. 我们需要选择多少集群?

    我们可以通过距离阈值来决定我们需要多少集群。另外,我们可以在树状图的不同层次上水平裁剪,得到我们想要的集群数量。

Different measures of nearest clusters

当我们分割数据集时,有三个主要的模型可以用来决定集群中点之间的距离:

  1. Single link

    d(Ci,Cj)=minxCi,xCjd(x,x) d ( C i , C j ) = min x ∈ C i , x ′ ∈ C j d ( x , x ′ )

    通过单链接,我们利用两个集群中点之间的最小距离来实现聚类。

    这种方法被称为最小生成树。

    我们可以在集群之间的距离超过阈值时停止聚类。这种算法通常生成长、瘦的类(因为我们只考虑集群中有最小距离的点,所以很容易将距离较远的点连接到同一集群中)。

  2. Complete link

    d(Ci,Cj)=maxxCi,xCjd(x,x) d ( C i , C j ) = max x ∈ C i , x ′ ∈ C j d ( x , x ′ )

    通过完整链接,我们利用两个集群中点之间的最大距离来实现聚类。

    这种算法通常生成紧凑、密集的集群(因为它偏向把所有点放在一起)。

  3. Average link

    d(Ci,Cj)=xCi,xCjd(x,x)|Ci||Cj| d ( C i , C j ) = ∑ x ∈ C i , x ′ ∈ C j d ( x , x ′ ) | C i | · | C j |

    通过平均链接,我们利用两个集群中点之间的平均距离来实现聚类。

    这种模型对噪音具有强健性,因为距离不像单连接和完整连接一样,只取决于单独的一对点。

Agglomerative clustering conclusions

优点:

  • 易于实现与应用
  • 集群形状适应数据集
  • 形成一个集群层次
  • 初始化时不需要指定集群数目。

缺点:

  • 可能返回不平衡的聚群
  • 必须指定阈值
  • 因为需要时间 O(n3) O ( n 3 ) ,所以不能很好的测量
  • 贪婪合并会被卡在局部最小值

K-Means Clustering

K-means 聚类:确定一定数量固定的集群中心,将每个点标记到距离最近的集群中。k-means 聚类和凝聚聚类最大的不同在于,k-means 要求输入集群数目。

Image Segmentation Example

下图上方可以简单的通过像素密度不同分割,但是下方因为包含噪音,所以我们要用 K-means 分割。

用 K-means 的目的是找到三个集群中心作为强度代表,并将每个像素标记到最接近的集群。最佳的集群中心要能够最小化所有点和最近集群中心 ci c i 之间的距离平方和 (Sum of Square Distance, SSD):

SSD=iclustersxclusteri(xci)2 S S D = ∑ i ∈ c l u s t e r s ∑ x ∈ c l u s t e r i ( x − c i ) 2

当我们用 k-means 处理数据集时,我们的目标是最小化每个集群中所有数据点的方差。我们想用一定数目的集群提供尽可能多的信息。可以用以下方程描述:

Algorithm

我们从随机初始化 k 个集群开始。接着我们运行一个迭代过程,该过程会计算集群成员和集群中心,直到达到最大迭代次数或集群中心值收敛。该过程如下:

  1. 初始化 ( t=0 t = 0 ):集群中心 c1,...,cK c 1 , . . . , c K

    • 通常这些中心都是在数据点中随机选择的。
    • 或者对 k k 进行贪婪选择,最小化剩余。
  2. 计算δt:将每个点聚集到最近的中心点。像在凝聚聚类中一样,我们可以用欧几里德距离或者余弦距离来计算。

    δt=minδ1NjNiKδt1ij(ct1ixj)2 δ t = min δ 1 N ∑ j N ∑ i K δ i j t − 1 ( c i t − 1 − x j ) 2

  3. 计算 ct c t :更新集群中心为每个集群的均值点。

    ct=minc1NjNiKδt1ij(ct1ixj)2 c t = min c 1 N ∑ j N ∑ i K δ i j t − 1 ( c i t − 1 − x j ) 2

  4. t=t+1 t = t + 1 ,重复 2-3,直到集群中心点 ct c t 停止改变(收敛)或者算法达到最大迭代次数。

Output

每次运行,k-means 聚集到一个局部最小值。另外,因为中心点是随机初始化的,所以每次运行算法可能会返回不同的结果。因此,应该多次运行算法并选择最好的结果。评估结果的标准是最小化集群的 SSD 或者每个集群的方差。K-means 在球形数据下最有效。

Segmentation as Clustering

针对单独的颜色强度(一个颜色对应一个物体),K-means 是很有效的。但是像下图,就需要我们定义一个特征空间,选择可以作为输入的像素特征。特征空间的选择直接影响到点之间的相似度测量,也有利于生成区别较大、易于分辨的集群。

除了像素强度之外,也可以用 RGB 颜色、纹理、像素位置创建特征空间。其中,纹理可以使用经过特定过滤器过滤后的像素相似度衡量。位置特征包括图中像素坐标。像素的强度和位置都可以一起基于相似度和邻近度聚集像素。

K-Means++

K-means 优势在于易于实现且速度快,但是精度不高。通过增加一个变量来选择 k-means 算法的随机种子,可以回避坏的聚类。K-means++ 算法如下:

  1. 随机从数据点中选择一个起始中心
  2. 计算距离 D(X) D ( X ) ,即每个点 x x 和被选择中心之间的距离。通过一个加权概率分布,基于与D(x)2成正比的概率( x x 对总误差的贡献),选择一个新的点作为新中心点。
  3. 重复以上步骤,直到选择k个中心点。接着用这些中心点作为初始化种子,运行 k-means 算法。

K-means++ 期望误差 = O(logK) O ( l o g K )

Evaluation of clusters

聚类结果可以通过多种方法评估。例如,

  • 内部评价测量,给出一个单一的质量分数
  • 外部评估,将聚类结果和已有的正确分类进行比较
  • 基于遗传评估:从集群中重建点的效果如何,或者是判断集群中心是否能很好的体现数据。
  • 区别方法:评估集群对应标签的效果如何。集群是否能够合理的分离物体。这项测量只能在监督学习下进行。

Pros & Cons

Pros

  • 易于实现
  • 在低维数据下运行较快
  • 能很好的体现数据(聚类中心最小化条件方差)

Cons

  • 不能识别异常值
  • 需要确定 k k 的值
  • 不能处理有不同大小和密度的非球形数据
  • 只能在有中心概念的数据上运用
  • 不能保证达到全局最优

为了选出k的值,可以画出关于 k 值的目标方程。在目标方程有剧变的位置就是应该选择的 k k 值。

Mean-shift Clustering

均值 - 偏移聚类目的是找到特征空间中最密集的区域。步骤如下:

  1. 初始化随机种子,以及窗W
  2. 计算 W W 的中心重力 (“mean”):xWxH(x)
  3. 将搜索窗移动到 “mean”
  4. 重复步骤,直到收敛(窗不再改变)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值