您的位置:首页 > 移动开发 > Objective-C

读Robust Object Detection Via Soft Cascade 小结

2014-05-16 14:19 357 查看
看到文章是将softcascade的,因此大致读了一下,文章开始讲到以前的cascade(是不是就是opencv以前的traincascade方法?)方法的缺点,主要由以下几点:
  本阶的判断至于本阶的特征得分门限值有关,与之前的阶数无关,这样的检测器是脆弱的,而且浪费了之前判断计算出来的特征得分;
最终检测器的检测率是每一阶分类器检测率的乘积,如果最后要达到90%的检测率以及10的-6次方的误检率,那么如果分类器有十阶,则每一阶需要保留99%的正样本,而且消除25%的负样本,这对于一开始的几阶可能容易达到,但是对于后面的阶数很难,而且会很耗时;
训练参数的设置必须通过不断地训练来寻求最好的训练参数,但是每次训练都很耗时(我个人觉得这一点是因为文章之后提出了ROC曲面来解决问题,但是如果不用这个曲面的话,softcascade也需要通过多次实验来找参数)
对于参数的选择没有一个明确的方法?关于阶数,顺序,目标检测率,误检率等,这些都会影响检测速率,在保证检测率的前提下,没有方法来设置这些参数来达到最佳的检测速率(这一点貌似也是因为文章后来提到了ROC surface解决,所以才说这是之前cascade的缺点)
为了减小误检率,必须通过增加新的阶数来达到,但是这样的话不可避免的会降低检测率;
传统的cascade方法在正样本变化比较大的时候不适合(意思是类内间距太大的时候不适合?)

  Within this context, the conventional cascade structure requires finding the smallest t and threshold rt such that the fraction of faces with trace values greater than rt is greater than the target detection rate and the fraction
of non-faces with trace values greater than rt is less than the target false positive rate. New weak learners are trained until such conditions are met. The cumulative sum for a given instance is only computed to determine if it exceeds rt and is thereafter
discarded.

传统的分类器为了达到两个指数(正确率和误检率)需要不断训练新的阶。

figure3是softcascade的样本判定过程。



下面表示softcascade判定样本是否为正样本的伪码:

bool sampleIsFace(x)

d ← 0

for t = 1. . . T

d ← d + ct(x)

if d < rt return false

return true

从这个过程可以看出,他与之前的adaboost区别就是样本的得分是累加的,这一阶的判定结果不仅仅跟这一阶的得分有关。

提到了每一阶训练的时候加入分错的负样本,而且加入的负样本数每一阶都有所调整。这个地方一直不大明白,看程序也没看到哪个地方加负样本了。
文中还提到开始训练的时候,不需要从所有的特征中找一个错误率最小的,只需要从一部分特征中找就行,而且事实证明这样找到的特征很接近所有特征中找出来的那个。。。。这一点不知道对不对。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  softcascade adaboost
相关文章推荐