我的目标是训练SVM并获得支持向量,我可以将其插入opencv的HOGdescriptor中进行对象检测.
我收集了4000~阳性和15000~阴性,我使用opencv提供的SVM进行训练.结果给了我太多的误报.(每张图片最多20个)我会剪掉误报并将它们添加到负片池中以重新训练.而且我有时会得到更多的误报!我已经尝试将我的hogdescriptor的L2HysThreshold调整到300而没有显着改善.我的积极和消极的数量足够大吗?
SVM培训也比预期快得多.我尝试使用2916和12996的特征向量大小,在不同的尝试中使用灰度图像和彩色图像.SVM培训从未花费超过20分钟.我用auto_train.我是机器学习的新手,但从我听到的训练中,我的数据集应该至少花一天时间吗?
我相信cvSVM没有做太多的学习,根据http://opencv-users.1802565.n2.nabble.com/training-a-HOG-descriptor-td6363437.html,它不适合这个目的.有cvSVM经验的人对此有更多的意见吗?
我正在考虑使用SVMLight http://svmlight.joachims.org/, 但看起来没有办法可视化SVM超平面.我有什么选择?
我使用opencv2.4.3并为hogdescriptor尝试了以下设置
hog.winSize = cv::Size(100,100);
hog.cellSize = cv::Size(5,5);
hog.blockSize = cv::Size(10,10);
hog.blockStride = cv::Size(5,5); //12996 feature vector
hog.winSize = cv::Size(100,100);
hog.cellSize = cv::Size(10,10);
hog.blockSize = cv::Size(20,20);
hog.blockStride = cv::Size(10,10); //2916 feature vector
Run Code Online (Sandbox Code Playgroud)
cvSVM),否则正负样本的数量应大致相同.cvSVM通常不是用于训练OpenCV HOG的SVM的工具.使用SVMLight的二进制形式(不是出于商业目的免费)或libSVM(出于商业目的).使用C++/OpenCV代码计算所有样本的HOG,并将其写入SVMLight/libSVM的正确输入格式的文本文件中.使用任一程序使用具有最优的线性内核训练模型C.C通过在C循环中更改时搜索最佳精度来找到最佳值.N+1通过找到所有支持向量,将alpha值乘以每个对应的支持向量,然后为每个维度添加所有得到的alpha*值来找到ND向量,计算检测器向量(维度向量,其中N是描述符的维度).作为最后一个元素添加-b其中b是超平面偏差(你可以出来的SVMLight/LIBSVM培养模式文件中找到它).将此N+1尺寸检测器送入HOGDescriptor::setSVMDetector()并使用HOGDescriptor::detect()或HOGDescriptor::detectMultiScale()用于检测.| 归档时间: |
|
| 查看次数: |
2023 次 |
| 最近记录: |