写在最前面:这一章也是考点,不过不会涉及到很多多媒体技术,而是以其中的图像处理为核心。

下面是考点:(下面不会在强调哪些是重点)

  • 4.1 概述:了解下面记录的内容即可。
  • 4.2 网络不良图像内容识别:考点,从以下几个方面入手。
    • 肤色检测统计方法):掌握颜色空间变换的基本知识(RGB\HSV\PCbCr)+ 肤色模型(三种模型都要掌握)
    • 不良图像的识别机器学习):支持向量机(基本概率、原理、核函数、优化方法等)

概述

主要是了解下不良信息过滤的4种方法

基于分级标注的过滤

基本内容:使用浏览器本身或第三方分级标注过滤。(用户或者管理员通过浏览器安全设置选项进行实现)

缺点:并不是所有的网站都遵循ICRA标准,形同虚设。

基于URL的过滤

基本内容:是最早出现的过滤方式,将已知有害网站的URL收集到禁止列表,允许访问的网页和网站收集到URL允许列表库。(网站黑白名单)

优点:技术简单,易于实现。

缺点

  • 不够灵活:内容更新太快,存在滞后性和不完整性。
  • 管理难度大:依靠人工。
  • 数据库维护难度大:数据库越来越大,过滤速度会下降

基于关键词的过滤

基本内容:从网页提取关键词并与已经建立的不良关键词数据库进行匹配。

优点:简单易行。

缺点

  • 错误率高:法论功与反法论功
  • 过滤范围窄:只能匹配字符编码
  • 不够灵活:变形关键词无法检测

基于内容分析的过滤

基本内容:这是有研究热点,也是发展趋势。通过语义分析、机器学习、图像处理等技术分析网页内容。

优点:准确率高

缺点:技术难度大,过滤速度慢。

网络不良图像的识别

统计方法机器学习两个方面进行介绍,统计方法以肤色检测为例子,机器学习以SVM算法为例。

肤色检测-统计方法

在图像中选取对应于人体皮肤像素的过程就是肤色检测,包括颜色空间变换肤色建模

颜色空间变换(了解即可,不需要记住公式)

先来了解一下颜色空间的分类

  • RGB颜色空间:由三个通道表示一幅图像,分别为红色(R),绿色(G)和蓝色(B)。
  • HSV颜色空间:由Hue(色调、色相)、Saturation(饱和度、色彩纯净度)、Value(明度)
  • YCbCr颜色空间:Y表示亮度、Cb和Cr表示色差分量(Cb是蓝色分量和一个参考值之差,Cr是红色分量和一个参考值之差)

三种颜色空间的变换

以RGB为核心,HSV是由RGB非线性导出的颜色空间,YCbCr是由RGB线性导出的颜色空间。

YCbCr的导出公式如下:

HSV的导出公式如下:

RGB颜色空间

颜色空间是颜色集合的数学表示。在计算机中最常用的颜色系统是RGB,RGB三种颜色取不同幅度可以得到不同的颜色。如图所示,立方体代表的是RGB颜色空间,对角线表示不同的灰度(灰度可以使用灰度值量化,0-255,也是亮度的衡量指标)。

缺点:肤色在颜色空间的分布相当集中,但会受到照明和人种的影响。换句话说,FGB颜色空间将亮度和色度结合,无法去除照明的影响。

解决方法:HSV或者YCbCr颜色空间。(二者为例)

HSV颜色空间

HSV模型用色调(色相,hue)饱和度(Saturation)亮度(Value)表示颜色。它是一种六角锥模型

  • 色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红(洋红)为300°。
  • 饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
  • 亮度V表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

可以这样理解

Hue一定的情况下,饱和度减小,就是往光谱色中添加白色,光谱色所占的比例也在减小,饱和度减为0,表示光谱色所占的比例为零,导致整个颜色呈现白色。

明度减小,就是往光谱色中添加黑色,光谱色所占的比例也在减小,明度减为0,表示光谱色所占的比例为零,导致整个颜色呈现黑色。

肤色建模(要理解原理,涉及到概率论、线性代数等知识,三种都要掌握)

肤色区域模型

最简单也是最容易理解的肤色建模方法,其核心思想是对像素点的值进行公式判断以确定是否是皮肤。

使用RGB

满足上图所示的公式即可判断是否是皮肤。

优点:运算简单,系统开销小,正检率高。

缺点:误检率高。

使用YCbCr

优点:亮度与色度分离,受亮度变化影响小,易于实现聚类算法。

使用HSV:

肤色区域模型总结

  • 优点:方法简单,容易实现。
  • 难点:选择合适的颜色空间以及确定皮肤过滤器的参数
  • 缺点:误检率高

高斯分布模型

书中对这部分的介绍很少,而且比较难理解。这里使用自己的话描述一下,不涉及具体的公式(具体的公式推导见下参考文献)
参考文献

首先需要了解一下这种检测方法的大体思路

  1. 在原始数据中进行特征的选取
  2. 通过选取的特征进行参数的估计
  3. 将估计得到的参数值带入模型(一个函数)
  4. 通过该函数预测概率,进行阈值比较。

现在我们将上步骤与本课题联系

因为肤色的像素统计结果是近似高斯分布的,所以可以使用已有的函数进行拟合。具体的函数如下:

先不需要深究上公式,高斯分布模型是一个参数化模型。只需要知道其中的待求参数:均值和方差(协方差矩阵)

所以下一步就是通过已有的数据进行参数的估计(最大似然估计,如下图),也就是说通过已有数据可以得到两个具体的值,将该值带入上公式即可得到只有一个变量的函数。具体到本课题,该变量就是颜色空间的参数(如YCbCr中的Cb和Cr值)

最后就是进行概率的预测,即带入变量x,得到其是皮肤的概率,将其与设定的阈值比较,确定是否是皮肤。(当然也可以使用别的方法,比如计算与肤色的接近程度等)

统计直方图模型

统计直方图模型是一个非参数化模型。其通过肤色样本的直方图统计构造肤色概率图,并利用肤色概率图进行肤色像素的检测,有以下两个方法:

机器学习-S(支持向量机)

:这个地方建议看那个支持向量机初解。下面补充两个必考的问题:

SVM要解决什么问题?

下面用一个天使与魔鬼的故事介绍一下SVM到底是要解决什么问题:

传说魔鬼和天使玩了一个游戏,魔鬼在桌上放了两种颜色的球。魔鬼让天使用一根木棍将它们分开。这对天使来说,似乎太容易了。天使不假思索地一摆,便完成了任务。魔鬼又加入了更多的球。随着球的增多,似乎有的球不能再被原来的木棍正确分开,如下图所示。

SVM实际上是在为天使找到木棒的最佳放置位置,使得两边的球都离分隔它们的木棒足够远。依照SVM为天使选择的木棒位置,魔鬼即使按刚才的方式继续加入新球,木棒也能很好地将两类不同的球分开。

看到天使已经很好地解决了用木棒线性分球的问题,魔鬼又给了天使一个新的挑战,如下图所示。

按照这种球的摆法,世界上貌似没有一根木棒可以将它们 完美分开。但天使毕竟有法力,他一拍桌子,便让这些球飞到了空中,然后凭借 念力抓起一张纸片,插在了两类球的中间。从魔鬼的角度看这些 球,则像是被一条曲线完美的切开了。

后来,“无聊”的科学家们把这些球称为“数据”,把木棍称为“分类面”,找到最 大间隔的木棒位置的过程称为“优化”,拍桌子让球飞到空中的念力叫“核映射”,在 空中分隔球的纸片称为“分类超平面”。这便是SVM的童话故事。

:上述标黑的地方都是SVM涉及到的一些术语,我们后面会具体介绍。不过从上故事可以看出SVM要解决的就是一个二分类的问题,同时对于非线性平面引入了核映射来进行特征升维。

理解SVM:第一层

支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

线性分类器:给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者0,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置):

1
2
3

$W^T+b$

这个超平面可以用分类函数 !$f(x) = X^T+b$表示,当f(x) 等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点。

函数间隔与几何间隔

在超平面wx+b=0确定的情况下,|wx+b|能够表示点x到距离超平面的远近,而通过观察wx+b的符号与类标记y的符号是否一致可判断分类是否正确,所以,可以用(y(w*x+b))的正负性来判定或表示分类的正确性。于此,我们便引出了函数间隔(functional margin)的概念。

函数间隔公式:!$γ = y(W^T+b) = y(f(x))$

而超平面(w,b)关于数据集T中所有样本点(xi,yi)的函数间隔最小值(其中,x是特征,y是结果标签,i表示第i个样本),便为超平面(w, b)关于训练数据集T的函数间隔:!$γ = minγ i(i=1,...n)$

但这样定义的函数间隔有问题,即如果成比例的改变w和b(如将它们改成2w和2b),则函数间隔的值f(x)却变成了原来的2倍(虽然此时超平面没有改变),所以只有函数间隔还远远不够。

几何间隔:

事实上,我们可以对法向量w加些约束条件,从而引出真正定义点到超平面的距离–几何间隔(geometrical margin)的概念。假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ,w 是垂直于超平面的一个向量,!$\gamma$为样本x到超平面的距离,如下图所示:

从上述函数间隔和几何间隔的定义可以看出:几何间隔就是函数间隔除以||w||,而且函数间隔y*(wx+b) = y*f(x)实际上就是|f(x)|,只是人为定义的一个间隔度量,而几何间隔|f(x)|/||w||才是直观上的点到超平面的距离
\

最大间隔分类器的定义

对一个数据点进行分类,当超平面离数据点的“间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值。这个间隔就是下图中的Gap的一半。

通过由前面的分析可知:函数间隔不适合用来最大化间隔值,因为在超平面固定以后,可以等比例地缩放w的长度和b的值,这样可以使得!$f(x) = X^T+b$的值任意大,亦即函数间隔可以在超平面保持不变的情况下被取得任意大。但几何间隔因为除上了w,使得在缩放w和b的时候几何间隔的值是不会改变的,它只随着超平面的变动而变动,因此,这是更加合适的一个间隔。换言之,这里要找的最大间隔分类超平面中的**“间隔”指的是几何间隔。

如下图所示,中间的实线便是寻找到的最优超平面(Optimal Hyper Plane),其到两条虚线边界的距离相等,这个距离便是几何间隔,两条虚线间隔边界之间的距离等于2倍几何间隔,而虚线间隔边界上的点则是支持向量。由于这些支持向量刚好在虚线间隔边界上,所以它们满足 !$y(W^T+b) = 1$,对于所有不是支持向量的点,则显然有 !$y(W^T+b) > 1$

:到这里SVM第一层的基本原理便已经介绍完了,其优化过程就是求解最大间隔的过程,并通过求得的超平面实现数据的分类。

深度SVM:第二层

事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM咋处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。

具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:

通常人们会从一些常用的核函数中选择(根据问题和数据的不同,选择不同的参数,实际上就是得到了不同的核函数),例如:多项式核、高斯核、线性核

读者可能还是没明白核函数到底是个什么东西?我再简要概括下,即以下三点:

  • 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去(映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
  • 但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的。那咋办呢?
  • 此时,核函数就隆重登场了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,避免了直接在高维空间中的复杂计算。

如果数据中出现了离群点outliers,那么就可以使用松弛变量来解决。

不准确的说,SVM它本质上即是一个分类方法,用 w^T+b 定义分类函数,于是求w、b,为寻最大间隔,引出1/2||w||^2,继而引入拉格朗日因子,化为对拉格朗日乘子a的求解(求解过程中会涉及到一系列最优化或凸二次规划等问题),如此,求w.b与求a等价,而a的求解可以用一种快速学习算法SMO,至于核函数,是为处理非线性情况,若直接映射到高维计算恐维度爆炸,故在低维计算,等效高维表现

SVM的一些问题

  • 是否存在一组参数使SVM训练误差为0?

    • 答:存在
  • 训练误差为0的SVM分类器一定存在吗?

    • 答:一定存在
  • 加入松弛变量的SVM的训练误差可以为0吗

    • :使用SMO算法训练的线性分类器并不一定能得到训练误差为0的模型。这是由于我们的优化目标改变了,并不再是使训练误差最小
  • 带核的SVM为什么能分类非线性问题?

    • :核函数的本质是两个函数的內积,通过核函数将其隐射到高维空间,在高维空间非线性问题转化为线性问题, SVM得到超平面是高维空间的线性分类平面。其分类结果也视为低维空间的非线性分类结果, 因而带核的SVM就能分类非线性问题。
  • 如何选择核函数

    • 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
    • 如果特征的数量小样本的数量正常,则选用SVM+高斯核函数;
    • 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

LR和SVM的联系与区别

相同点

  • 都是线性分类器。本质上都是求一个最佳分类超平面
  • 都是监督学习算法。
  • 都是判别模型。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。

不同点

  • LR是参数模型,svm是非参数模型,linear和rbf则是针对数据线性可分和不可分的区别;
  • 从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
  • SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
  • 逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
  • logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了