Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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 用于视频中人类活动分类的3D筛选。精度不高。_Matlab_Video_Svm_K Means_Sift - Fatal编程技术网

Matlab 用于视频中人类活动分类的3D筛选。精度不高。

Matlab 用于视频中人类活动分类的3D筛选。精度不高。,matlab,video,svm,k-means,sift,Matlab,Video,Svm,K Means,Sift,我试图在视频中对人类活动进行分类(六个类,每个类近100个视频,6*100=600个视频)。我正在使用UCF的3D SIFT(xy和t比例=1) for f= 1:20 f offset = 0; c=strcat('running',num2str(f),'.mat'); load(c) pix=video3Dm; % Generate descriptors at locations given by subs matrix for i=1:100 reRun = 1; while re

我试图在视频中对人类活动进行分类(六个类,每个类近100个视频,6*100=600个视频)。我正在使用UCF的3D SIFT(xy和t比例=1)

for f= 1:20
f
offset = 0;
c=strcat('running',num2str(f),'.mat');
load(c)
pix=video3Dm;
% Generate  descriptors at locations given by subs matrix
for i=1:100
 reRun = 1;
while reRun == 1
    loc = subs(i+offset,:);

    fprintf(1,'Calculating keypoint at location (%d, %d, %d)\n',loc);

    % Create a 3DSIFT descriptor at the given location
    [keys{i} reRun] = Create_Descriptor(pix,1,1,loc(1),loc(2),loc(3));

    if reRun == 1
        offset = offset + 1;
    end

     end
  end
  fprintf(1,'\nFinished...\n%d points thrown out do to poor descriptive        ability.\n',offset);

for t1=1:20
des(t1+((f-1)*100),:)=keys{1,t1}.ivec;
end
f
end
我的方法是首先为一个视频获取50个描述符(640维),然后使用所有描述符执行单词包(50*600=30000个描述符)。执行Kmeans后(具有1000 k值)

我得到了30k的长度索引向量。然后,我根据集群中的索引值创建每个视频的直方图特征。然后在标志(dim-600*1000)上执行svmtrain(在matlab中求和)。
一些潜在问题-

1-我在3D中随机生成300个点,从这些点的300个点计算任意50个点上的50个描述符

2-xy和时间刻度值,默认情况下为“1”

3个群集编号,我不确定k=1000是否足以容纳30000x640数据

4-svmtrain,我正在使用这个matlab库


注意:一切都在MATLAB上

您的基本设置似乎是正确的,尤其是在您获得85-95%的准确率的情况下。现在,只需调整程序。不幸的是,除了测试各种参数、检查结果并重复测试之外,没有其他方法可以做到这一点。我将把这个答案分成两部分。关于单词包特征的建议,以及关于SVM分类器的建议

单词功能调整包 每个视频使用50个3D SIFT功能,这些功能来自随机选择的点,词汇表为1000个视觉单词。正如您已经提到的,词汇表的大小是您可以调整的一个参数。每个视频的描述符数量也是如此

假设每个视频都有60帧长(每秒30帧,仅2秒,但假设一分钟视频的采样速度为1fps)。这意味着每帧捕获的描述符少于一个。这对我来说似乎很低,即使是3D描述符,尤其是如果位置是随机选择的

我将手动检查生成要素的点。它们在空间和时间上是否分布均匀?你捕获的背景太多了吗?扪心自问,我是否能够区分给定这些特征的操作

如果您发现许多选定点不具有信息性,增加点的数量可能会有所帮助。kmeans集群可以为无信息的异常值创建几个组,更多的点意味着您有望捕获更多信息点。也可以尝试其他方法来选择点。例如,可以使用角点

也可以手动检查聚集在一起的点。这些团体有哪些共同的结构?集群是否太复杂了?这通常意味着你需要更大的词汇量

调整支持向量机 使用Matlab SVM实现或Libsvm实现应该没有什么区别。它们都是相同的方法,具有相似的调优选项

首先,您应该真正使用交叉验证来调整SVM,以避免在测试集上过度拟合

支持向量机最强大的参数是核选择。在Matlab中,有五个内置内核选项,您也可以定义自己的选项。内核也有自己的参数。例如,高斯核有一个比例因子sigma。通常,您从一个简单的内核开始,并与更复杂的内核进行比较。例如,从线性开始,然后测试二次、三次和高斯。要进行比较,只需查看平均交叉验证准确度

在这一点上,最后一个选择是查看错误分类的单个实例,并尝试找出它们可能比其他实例更难的原因。是否有共同点,例如遮挡?还可以直接查看为这些实例选择的可视单词。您可能会发现在调整功能时忽略了一些东西


祝你好运

有什么问题吗?我看不到问题陈述。嘿,我为这个角色道歉。问题是我对这个过程的准确性不好。这就是我在这里描述一切的原因。别生气。我只是想问更多的情况。你的准确度是多少?你希望得到什么样的准确度?还有多少视频用于培训,多少用于验证?你好,塞西莉亚,别误会我。我做了那份声明以便每个人都能看到问题声明。如果是那样的话,我再次道歉。
 idx1000=kmeans(double(total_des),1000);