多核学习在图像分类中的应用

目录(?)[+]

  1. 1摘要
  2. 2基本概念阐述
  3. 3应用背景
  4. 4分类方法的选取
  5. 5两种特征融合方式的比较
  6. 6实验过程
  7. 7个人经验与总结

1摘要

分类在搜索引擎中的应用非常广泛,这种分类属性可以方便在rank过程中针对不同类别实现不同的策略,来更好满足用户需求。本人接触分类时间并不长,在刚用SVM做分类的时候对一个现象一直比较困惑,看到大家将各种不同类型特征,拼接在一起,组成庞大的高维特征向量,送给SVM,得到想要的分类准确率,一直不明白这些特征中,到底是哪些特征在起作用,哪些特征组合在一起才是最佳效果,也不明白为啥这些特征就能够直接拼在一起,是否有更好的拼接方式?后来了解到核函数以及多核学习的一些思想,临时抱佛脚看了点,对上面的疑问也能够作一定解释,正好拿来和大家一起探讨探讨,也望大家多多指点。本文探讨的问题所列举的实例主要是围绕项目中的图像分类展开,涉及SVM在分类问题中的特征融合问题。扩展开来对其他类型分类问题,理论上也适用。

关键词: SVM  特征融合 核函数 多核学习

2基本概念阐述

SVM:支持向量机,目前在分类中得到广泛的应用

特征融合:主要用来描述各种不同的特征融合方式,常见的方式有前期融合,就是前面所描述的将各个特征拼接在一起,后期融合本文后面会提到

核函数:SVM遇到线性不可分问题时,可以通过核函数将向量映射到高维空间,在高维空间线性可分

多核学习:在利用SVM进行训练时,会涉及核函数的选择问题,譬如线性核,rbf核等等,多核即为融合几种不同的核来训练。

3应用背景

在图片搜索中,会出现这样的一类badcase,图像的内容和描述图像的文本不一致,经常会有文本高相关,而图像完全不一致的情况。解决这类问题的一个思路就是综合利用图像的内容分类属性和文本的query分类属性,看两者的匹配程度做相应策略。

4分类方法的选取

下面就可以谈到本文的重点啦,那是如何对图像分类的呢?

对分类熟悉的同学,马上可能要说出,这还不easy,抽取各种特征,然后一拼接,随便找个分类器,设定几个参数,马上分类模型文件就出来啦,80%准确率没问题。

那这个方法确实不错也可行,但是有没有可以改进的地方呢?

这里可能先要说明下图像分类的一些特殊性。

图像的分类问题跟一般的分类问题方法本质上没太大差异,主要差异体现在特征的抽取上以及特征的计算时间上。

图像特征的抽取分为两部分,一部分是针对通用图像的特征,还有一部分则是针对特定类别抽取的特征。这些特征与普通的文本特征不一致的地方在于,一个图像特征由于存在分块、采样、小波变换等,可能维度就已经很高。譬如常见的MPEG-7标准中提到的一些特征,边缘直方图150维,颜色自相关特征512维等。在分类过程中,如果将这些特征拼接在一起直接就可能过千维,但是实际在标注样本时,人工标注的正负样本也才几千张,所以在选择分类器时,挑选svm,该分类器由于可以在众多分类面中选择出最优分界面,以及在小样本的学习中加入惩罚因子产生一定软边界,可以有效规避overfitting。

在特征的计算时间上,由于图像处理涉及的矩阵计算过多,一个特征的计算时间慢的可以达到0.3秒,所以如何挑选出既有效又快速的特征也非常重要。

5两种特征融合方式的比较

那刚才的方法有什么问题呢?

仔细想想,大致存在以下几点问题:
1. 你所提取的所有特征,全部串在一起,一定合适么?如果我想知道哪些特征组合在一起效果很好,该怎么办?
2. 用svm进行学习时,不同的特征最适合的核函数可能不一样,那我全部特征向量串在一起,我该如何选择核函数呢?
3. 参数的选取。不同的特征即使使用相同的核,可能最适合的参数也不一样,那么如何解决呢?
4. 全部特征都计算,计算时间的花销也是挺大的

对于刚才的问题,如果用前期融合,可能是用下面方式来解决:
1. 根据经验,觉得在样本中可能表现不错的特征加进来,至于组合么,全部串在一起,或者选几个靠谱的串一起,慢慢试验,慢慢调,看哪些特征有改进就融合在一起
2. 也是根据经验,选取普遍表现不错的RBF核,总之结果应该不会差
3. 交叉验证是用来干嘛的?验证调优参数呗,全部特征融合在一起,再来调,尽管验证时间长,不要紧,反正模型是离线训练的,多调会也没关系。

那是否有更好的选择方案呢?

多核学习(MKL)可能是个不错的选择,该方法属于后期融合的一种,通过对不同的特征采取不同的核,对不同的参数组成多个核,然后训练每个核的权重,选出最佳核函数组合来进行分类。

先看下简单的理论描述:

普通SVM的分类函数可表示为:

其中为待优化参数,物理意义即为支持向量样本权重,用来表示训练样本属性,正样本或者负样本,为计算内积的核函数,为待优化参数。

其优化目标函数为:


其中用来描述分界面到支持向量的宽度,越大,则分界面宽度越小。C用来描述惩罚因子,而则是用来解决不可分问题而引入的松弛项。
在优化该类问题时,引入拉格朗日算子,该类优化问题变为:

其中待优化参数在数学意义上即为每个约束条件的拉格朗日系数。
而MKL则可认为是针对SVM的改进版,其分类函数可描述为:

其中,表示第K个核函数,则为对应的核函数权重。
其对应的优化函数可以描述为:

在优化该类问题时,会两次引入拉格朗日系数,参数与之前相同,可以理解为样本权重,而则可理解为核函数的权重,其数学意义即为对每个核函数引入的拉格朗日系数。具体的优化过程就不描述了,不然就成翻译论文啦~,大家感兴趣的可以看后面的参考文档。
通过对比可知,MKL的优化参数多了一层其物理意义即为在该约束条件下每个核的权重。
Svm的分类函数形似上是类似于一个神经网络,输出由中间若干节点的线性组合构成,而多核学习的分类函数则类似于一个比svm更高一级的神经网络,其输出即为中间一层核函数的输出的线性组合。其示意图如下:

在上图中,左图为普通SVM示例,而全图则为MKL示例。其中为训练样本,而为不同的核函数,为支持向量权重(假设三个训练样本均为支持向量),为核权重,y为最终输出分类结果。

6实验过程:

以实际对地图类别的分类为例,目前用于分类的特征有A,B,C,D,E,F,G(分别用字母代表某特征),这些特征每个的维数平均几百维。
准备工作:
1. 人工标注地图类别正负样本,本次标注正样本176张,负样本296张
2. 提取正负训练样本图片的A~G各个特征
3. 归一化特征
4. 为每个特征配置对应的核函数,以及参数
工具:

Shogun工具盒:http://www.shogun-toolbox.org/,其中关于该工具的下载,安装,使用实例都有详细说明。该工具除了提供多核学习接口之外,几乎包含所有机器学习的工具,而且有多种语言源码,非常方便使用。

结果测试:

经过大约5分钟左右的训练,输出训练模型文件,以及包含的核函数权重、准确率。

在该实例中,7个特征分别用七个核,其权重算出来为:

0.048739 0.085657 0.00003 0.331335 0.119006 0.00000 0.415232,

最终在测试样本上准确率为:91.6%

为了节省特征抽取的时间,考虑去掉权重较小的特征A、C、F,

拿剩下4个核训练,几分钟后,得到核函数权重如下:

0.098070 0.362655 0.169014 0.370261,

最终在测试样本上准确率为:91.4%

在这次训练中,就可以节约抽取A、C、F特征的训练时间,并且很快知道哪些特征组合在一起会有较好的结果。

实验的几点说明:
1. 该类别的分类,因为样本在几百的时候就已经达到不错效果,所以选取数目较少。
2. 该实验是针对每个特征选择一个核,且每个核配置固定参数,实际中如果时间允许,可以考虑每个特征选不同核,同一核可以选取不同参数,这样可以得到稍微更好的结果。
参考文章:

Large Scale Multiple Kernel Learning

SimpleMKL

Representing shape with a spatial pyramid kernel

参考代码:http://www.shogun-toolbox.org/doc/cn/current/libshogun_examples.html,

7个人经验与总结:

1. 多核学习在解释性上比传统svm要强。多核学习可以明显的看到各个子核中哪些核在起作用,哪些核在一起合作效果比较好。
2. 关于参数优化。曾经做过实验,关于同一特征选用同一核,但是不同参数,组合成多个核,也可以提升分类准确率。
3. 多核学习相比前期特征融合在性能上会有3%~5%左右的提升。
4. 通过特征选择,可以节约特征计算时间。

原文来源:http://stblog.baidu-tech.com/?p=1272

多核学习在图像分类中的应用相关推荐

  1. 深度学习在图像分类中的发展

    深度学习是一门比较年轻的研究方向,从机器视觉到语音识别,以及自然语言识别等领域都有它的身影.说实话,喵哥此前只是知道有这个学科,但是并不清楚它到底是什么,怎么使用它.其实现在也是一无所知,但是我越发觉 ...

  2. 基于深度学习的图像分类:使用卷积神经网络实现猫狗分类器

    摘要: 深度学习在计算机视觉领域中具有广泛的应用.本文将介绍如何使用卷积神经网络(CNN)实现一个猫狗分类器.我们将使用Python和TensorFlow框架搭建一个简单的卷积神经网络模型,并利用猫狗 ...

  3. 图像分类中的SVM多核学习

    1.引文 SVM是机器学习里面最强大最好用的工具之一,它试图在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.它的强大之处还在于,当样本在原特征空间中线性不可分,即找不到一个足够好的超平面时, ...

  4. ICLR 2020 | 如何解决图像分类中的类别不均衡问题?不妨试试分开学习表征和分类器...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心 在图像分类任务中类别不均衡问题一直是个难点,在 ...

  5. 深度学习之图像分类(十七)-- Transformer中Self-Attention以及Multi-Head Attention详解

    深度学习之图像分类(十七)Transformer中Self-Attention以及Multi-Head Attention详解 目录 深度学习之图像分类(十七)Transformer中Self-Att ...

  6. 图像分类中的深度学习网络汇总

    深度学习在图片处理中的应用是从图像分类开始的,所以我们要先从图像分类中了解深度学习的应用情况. 本文根据阅读大量的资料和视频资源,简单地总结了图像分类中所有经典的深度学习神经网络. 1.LeNet L ...

  7. 多核学习工具箱Shogun的手动编译过程

    多核学习工具箱Shogun的手动编译过程 目录 多核学习工具箱Shogun的手动编写过程 一.写在前面的话 二.正式开始吧 三.可能有用的附录 四.写在最后的话 A.可能的更新1 B.可能的更新2 一 ...

  8. [王晓刚]深度学习在图像识别中的研究进展与展望(转发)

    [王晓刚]深度学习在图像识别中的研究进展与展望(转发) (2015-06-04 08:27:56) 转载▼     深度学习是近十年来人工智能领域取得的最重要的突破之一.它在语音识别.自然语言处理.计 ...

  9. [caffe]深度学习之图像分类模型VGG解读

    一.简单介绍 vgg和googlenet是2014年imagenet竞赛的双雄,这两类模型结构有一个共同特点是go deeper.跟googlenet不同的是.vgg继承了lenet以及alexnet ...

最新文章

  1. EM(期望最大化)算法初步认识
  2. 数据中台应用实战50篇(一)-带你概览BI、数据仓库、数据湖与数据中台之间有什么关联关系?(建议收藏)
  3. 深入浅出Node.js(八):Connect模块解析(之二)静态文件中间件
  4. bash的RANDOM变量生成的是真正的随机数吗
  5. php 中 相关文章 的思路,WordPress实现推荐相关文章功能代码
  6. Disqus API 用法 How to get your Disqus API keys
  7. 2014/4/4做题感悟
  8. 数据结构上机实践第八周项目5 - 计数的模式匹配
  9. a标签下载文件 自定义下载文件名
  10. 黑客用社会工程学做渗透测试的广泛应用介绍
  11. APPLE 知识模块初步设计
  12. [飘渺女声]罗琳娜 麦肯尼(Loreena McKennitt)
  13. php测试页面打开速度,在JS中如何测试目标网站的打开响应速度
  14. 【git】error: .repo/manifests/: contains uncommitted changes解决思路
  15. 大连渤海・黄海潮汐时间表
  16. android使用磁场传感器和加速度传感器确定当前朝向(即:方位角),以及常见问题的解决办法
  17. 计算机软件定时运行,win10系统设置定时运行指定软件的详细方案
  18. 中文词性标注学习笔记(一)---词性标注概念
  19. gnss、gps、imu、rtk、ins区分及含义
  20. Linux下生产者与消费者模型

热门文章

  1. win10 jenkins svn android studio 自动化打包教程 以及一些问题的解决办法
  2. python 1 2 3怎么拼接所有可能的数_6000字长文,带你用Python完成 “Excel合并(拆分)” 的各种操作!...
  3. 的table数据重复添加_Mysql的奇技淫巧 - 避免重复插入数据
  4. C++ static静态成员变量详解
  5. java 学习(一)冒泡排序
  6. linux怎么打开云硬盘,Linux系统云服务器如何挂在磁盘
  7. python flask 路由_python框架之Flask(2)-路由和视图Session
  8. win7磁盘清理_window7越来越卡?系统残余文件太多,磁盘清理可以搞定!!
  9. NTU 课程笔记:CV6422 样本分布
  10. torch_geometric笔记:nn. graclus (图点分类)