Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 结合多特征向量、HOG和LBP_Matlab_Image Processing_Video Processing_Feature Extraction - Fatal编程技术网

Matlab 结合多特征向量、HOG和LBP

Matlab 结合多特征向量、HOG和LBP,matlab,image-processing,video-processing,feature-extraction,Matlab,Image Processing,Video Processing,Feature Extraction,我正在使用两个特征描述符(HOG和LBP)进行人员检测。到目前为止,我使用了一个简单的连接来组合这两个特性。但它有时会让我看到由于大向量而产生的问题。这是我的密码 %extract features from negative and positive images [HOGpos,HOGneg] = features(pathPos, pathNeg); % loading and labeling each training example HOG_featV = HOGfeatu

我正在使用两个特征描述符(HOG和LBP)进行人员检测。到目前为止,我使用了一个简单的连接来组合这两个特性。但它有时会让我看到由于大向量而产生的问题。这是我的密码

%extract features from negative and positive images

[HOGpos,HOGneg] = features(pathPos, pathNeg);  


% loading and labeling each training example
HOG_featV = HOGfeature(fpos,fneg);   


% get label of training data from HOG
HOGlabel  = cell2mat(HOG_featV(2,:));

% get the feature vector value from HOG
HOGfeatureVector = HOG_featV(3,:)';

C = cell2mat(HOGfeatureVector); % each row of P correspond to a training example 




%extract features from LBP
[LBPpos,LBPneg] = LBPfeatures(pathPos, pathNeg);


% loading and labeling each training example
LBP_featV = loadingV(LBPpos, LBPneg); 


% get label of training data from LBP
LBPlabel = cell2mat(LBP_featV(2,:));

% get feature vector value from LBP
LBPfeatureVector = LBP_featV(3,:);
M = cell2mat(LBPtP)'; % each row of P correspond to a training example


%concatenate HOG and LBP feature
featureVector = [C M];

我想知道,有什么方法可以把两个特征向量结合起来,更可靠,更快?如果是,请给出一些建议或链接,我可以参考。谢谢。

我从您的评论中了解到以下内容: 您正在图像中选择1845个关键点。对于每个点,计算长度为383(LBP+HOG组合)的特征向量。代表图像的总矢量长度约为100000

如果事实上你只有1845张图像,而每张图像仅由383个特征表示,那么你注定会失败,你的支持向量机将有很高的错误率。主要原因是(特征向量太短,训练图像数量太少)。所以我认为情况并非如此

您的方法有一些问题。

  • 似乎您不理解检测器和分类器之间的区别,您正在尝试应用分类器来解决检测问题。这是一个核心区别。分类器设计用于区分2个(或更多)类。例如,这种水果和“苹果”或“橙子”是什么。你可以通过两门课的很多例子来训练它。但是如果你给分类器一个香蕉,它将返回一个随机值!结果。它可能会说100%自信的“苹果”或100%自信的橙色。分类器无法处理不在训练类(apple、orange)内的示例(如香蕉)。另一方面,探测器没有两个类。它有一个“苹果”和“其他一切”。除了培训课程外,没有其他例子,因为“苹果”和“其他一切”涵盖了整个世界。你不能训练分类器识别“其他一切”,因为有无限多的对象不是“苹果”“其他一切”不是一个可以通过分类器训练识别的类。为此,你需要一个探测器。检测器的培训过程有点不同,您提供的示例类型也不同。为了训练探测器,你必须提供大量的“非苹果”。汽车、人、椅子、飞机的图像。通常,您需要数百万个不同的“非苹果”示例,而只需要几个苹果示例(比如数千个)
  • 支持向量机并不能很好地解决检测问题。支持向量机的核心思想是,您可以选择几个具有代表性的示例(支持向量机),并使用这些示例描述两个类之间的分离。但让我问你——什么是“不是苹果”的所有事物的代表性图像?回答那个问题是不可能的。非“苹果”对象的数量是无限的,因此您无法为它们选择好的支持向量。选择“苹果”(红苹果、绿苹果、烂苹果等的形象)的代表很容易,但选择“其他一切”类的代表则很难。 不要误解我的意思-人们使用SVM来检测容易的对象(如公司徽标),但当你的任务很困难时,如人的检测(你有巨大的类内差异),SVM就差了。即使您设法训练SVM进行检测,您也会遇到两个问题:运行时间慢,新示例的错误率高(由于类内变化)。我建议使用增压方法来训练探测器
  • 我假设您的错误率很高,因为用于培训的图像数量非常少。您的特征向量的长度约为100000,因此,如果您使用数百万张图像进行训练,SVM将需要几天时间进行训练。记住:对于2类分类问题,几千张图片就足够了。但是,对于检测问题,您需要数百万张图像
  • 您的功能数量太多(假设为100000)。我打赌你的图像样本少于特征向量的~100000个长度。对于检测问题,功能数量应该相对较低(300-3000),但每个功能都必须良好!例如,您从60000个不同功能的列表开始,在培训过程中,将数量减少到1500个良好功能,并仅将其用于检测。如果你一开始使用的特征数量(如383=LBP直方图+HOG直方图)比大多数特征都少,那么大多数特征都是无用的,如果你使用PCA,你可能会惊讶地发现,实际上你只有约40个有助于检测的特征,而其他特征都是无用的。相反,如果你完成了训练,仍然需要100000个特征,你会疯狂地过度拟合,这将导致SVM的高错误率
  • 实用建议:

  • 你可以继续使用LBP/HOG特性,但首先要确保你有大量的“非人类”示例(100-1000万),否则你会有很高的错误率。试着拍几千张人的照片

  • 训练一个单一的级联检测器。它比支持向量机更容易理解、更快、更准确。为训练过程提供所有可能的HOG、LBP特征(无直方图),并让其选择好的特征。openCV中有级联检测器培训的免费实现,您可以使用它。我个人的建议是:不要使用SVM进行检测。这是一个错误的工具。一旦你在图像中检测到一个人,你可以使用SVM来分类他是成年人还是小孩,但不要使用SVM来检测


  • 我从您的评论中了解到以下内容: 您正在图像中选择1845个关键点。对于每个点,计算长度为383(LBP+HOG组合)的特征向量。代表图像的总矢量长度约为100000

    如果事实上你只有1845张图片,而每张图片只有383个特征,那么你注定会失败,你的