基于SIFT+Kmeans+SVM的场景识别,参数需注意的问题(Matlab实现)
来源:互联网 发布:直男癌语录知乎 编辑:程序博客网 时间:2024/05/22 16:50
具体细节请参考我的论文
http://download.csdn.net/detail/m0_37393277/9895391
1.试验目的:
实现20类的建筑图片分类。
2.实现方法及正确率:
可参见本人上传的资源,论文中有详细介绍。
用深度学习的方法来做,正确率虽然高,但是训练的时候,对硬件要求高啊~没条件不会玩的只能abandon了。流程图如下:
3.参数需注意的问题
(1)图片的预处理
原图像素太大时,往往需要压缩。这里建议不要过分的压缩。这样才能尽可能的多的保留原图像的特征。压缩时,按原图长宽比例进行压缩。例如:960×1280像素的图片压缩成480×640。
(2)提取SIFT特征
推荐一个很实用的工具箱--vlfeat。里面有SIFT、Kmeans等实用工具。
其实用SURF也是很好的选择,速度快,鲁棒性高。Dense SIFT(分块提取)计算也很快。
SIFT可以直接找David Lowe的Matlab源程序。
要明白一幅图像SIFT提取的特征就是n×128维的特征矩阵
(3)Kmeans聚类
Kmean聚类,类别数对试验结果影响很大。如下图:
这里不推荐用Matlab自带的Kmeans聚类,太慢!!!聚1000类的话,如果是20类图片,每类100张480×640像素,那么时间>24h。
推荐用vlfeat工具包,vlfeat里的vlfeat-kmeans,只要2h。不过还是很久。
这里聚类是所有类的所有图片的所有1×128维特征向量放在一起聚类,得到1000类聚类中心。然后在把每张图片的1×128维特征按欧式距离到聚类中心的远近,归入最近的聚类中心所在的类。这样,就把一幅图像的n×128的特征矩阵转换成 1×K的统计直方图了。
(4)SVM
SVM可以用libsvm的工具包里的SVM。当然特征数量和维数很大时,liblinear更高效。
SVM的核函数可以选线性核('-t 2'),也可以选高斯核('-t 0')(默认)。线性核需要调c的值,高斯核就需要调c和g.有参数寻优的方法找c和g。我用的是线性核,特征数量比较多,用线性核。
当训练集里的每一类图像比例很大时,可以通过SVM中的‘-w’来调权重,不然结果对误判为训练集中数量多的那一类。
阅读全文
0 0
- 基于SIFT+Kmeans+SVM的场景识别,参数需注意的问题(Matlab实现)
- 基于SIFT+Kmeans+LDA的图片分类器的实现
- 基于SIFT+Kmeans+LDA的图片分类器的实现
- 基于SIFT+Kmeans+LDA的图片分类器的实现
- Matlab图像处理学习笔记(六):基于sift特征点的人民币识别
- Kmeans的matlab的实现
- 基于 Sift + Kmeans + 倒排索引 的图像匹配
- kmeans基于mapreduce的实现
- SIFT算法的MATLAB实现
- SIFT算法的Matlab实现
- KMeans和KMedoid 的Matlab实现
- KMeans和KMedoid 的Matlab实现
- KMeans和KMedoid 的Matlab实现
- KMeans和KMedoid 的Matlab实现
- 基于SIFT特征和SVM的图像分类
- 基于MATLAB,运用PCA+SVM的特征脸方法人脸识别
- Matlab实现svm的分类
- Kmeans和GMM参数学习的EM算法原理和Matlab实现
- android系统广播大全
- linux查找目录或者文件
- 别的程序员是怎么读你的简历的
- C#压缩解压(可任意选择多个文件夹,文件一起压缩);BackgroundWorker配合进度条的使用
- 简易论坛制作
- 基于SIFT+Kmeans+SVM的场景识别,参数需注意的问题(Matlab实现)
- FFmpeg 音视频同步
- Linux安装docker
- 二分查找相关题目
- php 数组怎么传递到html 怎么依靠json对象的形式操作
- centos挂载新硬盘并且设置开机启动
- c++运算符重载
- leetcode 438. Find All Anagrams in a String& 滑动窗口
- Lua面向对象编程