opencv实践之SVM

使用opencv中的SVM训练人脸眼镜分类器

1 环境

ubantu 16.04
Python 3.7
opencv3.4.3
在Python环境下,sklearn包里的SVM更好用,但是因为项目需要,之后要将我的成果部署到C++中,所以选用了opencv来实现SVM。

2 SVM

3 Python实战

3.1 任务准备

我的目标是训练一个识别人脸是否戴眼镜的SVM分类器。
这里我借助于facenet获取人脸图片的512维特征,然后对这512维特征进行SVM分类。
数据集,感谢MeGlass发布的人脸-眼镜数据,MeGlass数据来自于MegaFace Dataset,项目作者将每一张图中人是否戴眼镜进行了标注。
meta.txt中,每一行包括图片路径和label,1表示戴眼镜,0表示没带眼睛。路径的**第二个@**前表示每个人的ID,这个取名和MegaFace一致。下面给出部分例子

10032527@N08_identity_4@2582182573_0.jpg 0
10032527@N08_identity_4@2582191559_0.jpg 0
10032527@N08_identity_4@2582274191_0.jpg 0
10032527@N08_identity_4@2583119706_0.jpg 0
10032527@N08_identity_4@2589966003_0.jpg 1
10032527@N08_identity_4@2590796978_0.jpg 0

我仅从所有图片中选取了前5000张用作train,5001-10000用作eval。
为了方便起见,先得到所有图片的特征文件,存到相应的txt中。

3.2 训练
# 创建一个SVM 设置超参数
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(Kernel)
svm.setC(C)
svm.setGamma(Gamma)
traindata = cv2.ml.TrainData_create(trainingData, cv2.ml.ROW_SAMPLE, labels)
svm.train(traindata)

可以通过设置setKernel、setC、 setGamma三个属性/超参数来微调,最终发现选择RBF核,其他参数默认时,验证集准确率为95.9%

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值