实验3:基于AdaBoost算法的人脸检测
实验目的
- 深入理解Adaboost的原理
- 熟悉人脸检测的基本方法
- 学会利用Adaboost解决人脸检测问题,将理论和实际工程接轨
- 体验机器学习的完整过程
数据集
- 本实验提供1000张图片用于训练(和验证)人脸分类器,其中500张是含有人脸的RGB图片,储存在./datasets/original/face 内;另外500张是不含有人脸的RGB图,储存在./datasets/original/nonface 内。
- 数据集包含在此处内,请自行下载并将其切分为训练集,验证集。
实验环境
python3, 至少包含下列python包:sklearn, numpy, matplotlib, pickle, PIL.
建议直接安装anaconda3,其已经内置了以上python包。
实验形式
个人独立完成
实验步骤
人脸分类
- 读取数据集数据。读取图片,将全部图片转成大小为24*24的灰度图,数据集正负类样本的个数和比例不限,数据集标签形式不限。
- 处理数据集数据,提取NPD特征。使用feature.py中NPDFeature类的方法提取特征。(提示:因为预处理数据集的时间比较长,可以用pickle库中的 dump() 函数将预处理后的特征数据保存到缓存中,之后可以使用 load()函数读取特征数据)。
- 将数据集切分为训练集和验证集,本次实验不切分测试集。
- 根据ensemble.py中的预留的接口编写AdaboostClassifier所有函数。以下为AdaboostClassifier类中的fit()方法的思路:
4.1 初始化训练集的权值 , ,每一个训练样本被赋予相同的权值。
4.2训练一个基分类器,基分类器可以使用sklearn.tree库中 DecisionTreeClassifier
4.3 计算基分类器在训练集上的分类误差率 。
4.4 根据分类误差率 ,计算参数 。
4.5 更新训练集的权值 .
4.6 重复以上4.2-4.6的步骤进行迭代,迭代次数为基分类器的个数。
- 用AdaboostClassifier中的方法在验证集上进行预测并计算精确率,并用sklearn.metrics库的classification_report()函数将预测结果写入classifier_report.txt中。
人脸检测
- 运行face_detection.py,体验OpenCV自带的基于Haar特征和AdaBoost的人脸检测方法,运行结果保存为detect_result.jpg。
- 可以使用其它图片替换实验默认的测试图片,体验人脸检测结果。
整理实验结果,形成图表,并完成实验报告(实验报告模板及代码模板将包含在此处)
实验代码及报告提交方式
提交内容
- 代码及实验报告
- 实验报告需要按照模板编写,并导出成pdf文件(模板未必与本次实验内容完全契合,可适当修改模板章节)
- 代码及报告需要打包,命名格式为“实验3_班级_姓名_学号.zip”。例如:“实验3_软件1班_张三_201700000000.zip”
- 提交代码及实验报告时不要在压缩包中包含数据集
- 请于截止时间前发送包含实验3和实验4的代码及实验报告的压缩包到助教邮箱jiaju.wu@qq.com,邮件命名为“实验3、4_班级_姓名_学号”
提交时间
- 2020年11月30日中午12:00截止,请于截止时间前发送包含实验3和实验4的代码及实验报告的压缩包到助教邮箱jiaju.wu@qq.com。
评分标准
评分项 |
占比 |
说明 |
出勤 |
40% |
特殊情况可向学院请假,请假条交给助教 |
代码有效 |
30% |
代码是否正确 |
实验报告 |
30% |
是否认真按照实验模板填写 |
注意事项
- 实验报告需按时提交,非特殊情况逾期补交无效
- 代码强烈推荐用python语言写,但使用其它编程语言也是允许的
- 实验报告使用中英文均可;LaTex、Word均可(如果用Word编写实验报告,需导出成pdf格式)
参考资料
[1] 周志华. 机器学习. 北京:清华大学出版社,2016:173-177