一个自主设计的人脸表情识别器

本文介绍了一个从底层实现的人脸表情识别器,通过简化神经网络创建和训练,结合OpenCV与SVM算法,成功识别普通、讨厌及高兴三种表情。作者分享了从样本质量到算法优化的心得,强调了打破黑箱的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个自主设计的人脸表情识别器

在实践了机器学习和人工智能一段时间后,我觉得当下机器学习,尤其是视觉检测遇到了一个瓶颈:神经网络的建立固然可以最大限度地抽取物体特征,但是这个过程对于我们而言是一个黑箱,哪怕我们明白我们所创建的网络的结构;例如,tensorflow中我们所熟悉的mnist训练,其基本操作就已经给出了超过90%的正确率;可是,花费了多得多的时间所进行的高级训练,却并没有带来相应的正确率的提高;究其原因,就在于背后过程是一个黑箱,我们无法从打破这个黑箱入手来提高运行效率。

从底层打破黑箱的尝试

有感于此,我在Matlab的dynare部分源码的基础上,从底层实现了基础性的神经网络创建工作(主要是BP算法)以及常用的logit及SVM算法;在结合OpenCV的基础上,简化了神经网络的创建和训练;最后,用这个简单的算法实现了一个人脸情绪识别器,同时,为了得到一个简单的GUI提示,用java jni来调用。具体步骤如下:

  1. 在GUI提示下,用OpenCV自带的haarcascade_frontalface_default.xml分别用video抓取普通表情,讨厌表情及高兴表情各三张图片;
  2. 用基于dynare源码的C代码实现几个基本的haarscade特征的提取,并生成myEmotionCascade.xml;
  3. 运用SVM算法,采取两两组合的方式定义标签,训练这9个sample,并把训练结果存入data路径下面;
  4. 训练结束后,读取生成的myEmotionCascade.xml,在相应的haarscade特征的帮助下,完成人脸定位检测;
  5. 再在读取SVM训练生成数据的基础上,完成人脸情绪的识别。
    对应的 github链接: link.

友情提示

最后,有一个经验和各位同仁分享:机器学习得到的结果无论多么精致,本质上都是一个统计概率问题;而统计中有一个著名的行话:Garbage in, garbage out. 所以,建议各位以重视算法的认真态度同样重视样本的质量。
欢迎拍砖!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值