本人在用C语言编写基于adanboost算法和haar特征的人脸检测代码时遇到一些问题,所以想请教一下各位,问题如下:
1.在训练阶段,是否把每一训练的图片都调整为相同的大小(我找的人脸库图片大小稍微有差距的)。
2.在训练阶段,如果我没有理解错的话是对同一特征模板,固定位置和大小(一个固定位置的窗口,这也是我问题1的由来),然后拿这个窗口遍历所有样本,求出对应的特征值,然后改变窗口的大小和位置。重复前面的步骤。得到了不同位置,不同大小的同一特征模板下所有样本的特征值。然后再通过实验找出这堆特征值之中的最佳阈值给分类器,这样就得到了基于一种haar特征的分类器。然后更换特征模板,重复上述步骤,得到了很多种haar特征模板的分类器。然后用这些分类器合成第一个弱分类器,用这个弱分类器对所有的样本进行投票,记录投票结果,然后更新样本权重,使用带有权重的样本训练第二个分类器,重复上述步骤,最后结合成一个强分类器。
我想知道我所理解的过程有没有问题?
3.第三个问题,来源于第二个问题我描述的过程中,有一个做法叫做更新样本权重,我不理解更新样本权重是什么意思,是把每个样本的新权重乘到灰度值上面吗?
4条回答 默认 最新
- 社区专家-Monster-XH 2023-03-22 13:52关注本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录weixin_50864339 2023-03-22 14:52
看了你的描述,还是有些地方不懂:
1.如果每一种haar特征和对应的最佳阈值都可以组成一个弱分类器,那更新样本权重后,下一轮的训练是用同一haar特征进行训练吗?
2.既然样本权重不加在灰度值上,那它是加在哪里?每一个样本都要被遍历,应该不会是概率的意思吧。赞回复- 1.AdaBoost算法中,每一轮训练都是针对一个特定的Haar特征和对应的最佳阈值来进行滴,所以,在下一轮训练中会用不同的Haar特征和对应的最佳阈值进行训练,而不是用上一轮训练中使用的Haar特征和对应的最佳阈值。所以说,在更新样本权重后,下一轮的训练会用不同的Haar特征进行训练。
- 2.AdaBoost算法中,每个样本都有一个权重,这个权重是来表示当前样本对于分类器的重要性。样本权重不会直接的加在灰度值上,而是作为一个额外的权重项,与灰度值一起用于计算每个Haar特征的特征值。在更新样本权重时,会根据上一轮的分类结果,调整每个样本的权重,让被错误分类的样本得到更高的权重,而被正确分类的样本得到更低的权重。目的就是为让得下一轮训练中,分类器更加关注被错误分类的样本,来提高分类器的准确性。
赞回复展开全部6条评论