-
Notifications
You must be signed in to change notification settings - Fork 140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
负样本不够 #7
Comments
@caxieyou 如果你说的 Python 版本是指 FaceDetect/jointCascade_py,我看过它的源码,并没有做 hard negative mining,也就是说负样本的数量一开始就是固定的,随着训练过程的深入,负样本必然不断减少。 我现在采取的策略是当负样本数量不够时,通过在线生成的方式来扩充负样本(也可以离线事先生成足够多的负样本)。 你用的 20000 张背景图片事实上是可以生成很多负样本的,500x500 的尺寸下做区域的选取并加上相应的变换 (旋转,翻转,模糊等) 应该能够生成足够多的负样本,论文中也提到用来 20000 张背景图片来生成负样本。 |
谢谢你的回复,继续就这个问题进行讨论的话 我之前没有做过相关的算法,这是第一个决策树类的训练项目,然后就数量而言 论文里送了正负样本各两万张 然后就训练了5040个弱分类器 这在我看来是一件很神奇的事情 python代码采取的策略是 每隔8个像素进行一次位移的“扫图” 其中一共候选的负样本按照20000张计算的话,最后生产的小样本,有几百万个小patch之多,最后就直接不够用,而且是在第40个分类器就用完了,如果采用hard negative mining这样的方法,作用能有多大,后面还有几千个弱分类器等着要“喂养”,真的可以训练出这么多个分类器么 |
@caxieyou 不好意思,我之前的说法有误,FaceDetect/jointCascade_py 事实上是做了 hard negative mining 的,参考这段代码。 我没有跑过 FaceDetect/jointCascade_py 。JDA 还没写完,所以自己也没有实践过训练,对训练数据大小也没有很好的把握(我也是新手=。=) 关于你用了 2W 张背景图片,却在第 40 个分类器下就被消耗完了,说明在 hard negative mining 阶段消耗了大量背景图片,这是否意味着你的背景图片之间的相似度很高,背景不够丰富?我没仔细看 FaceDetect/jointCascade_py 中是如何产生负样本的,我认为在滑动窗口的基础上还可以对产生的区域(也就是负样本)做各种变换来成倍地增加负样本数量,当然,这种方法在 hard negative mining 面前并不一定有效。 关于这种级联分类器的训练,我认为 OpenCV 自带的 haartraining 程序的参数设置有一定的参考价值。我认为 VJ 和 JDA 本身的思路是基本一致的。 |
谢谢回复 我的邮箱没有通知说收到了 有点回的慢了,真个python代码我都摸了一遍,还和作者沟通过修了一个bug,你说的这段代码当然我也仔细研究过,这里并没有什么旋转,变换,镜像之类的操作,只有平移,纯粹的平移。 |
那份 Python 代码里确实是做了 hard negative mining,它产生负样本之后还送到了现有的级联分类器中去做验证,如果被判成正样本的就认为该负样本为 hard negative。负样本在送到现有级联分类器前做一下 Data Augmentation 也是可以的,但是效果不好说。 PS:我的 QQ 号 1062018952 |
void NegGenerator::NextState() |
可以考虑多次调用 |
mining_pool_size = std::thread::hardware_concurrency(); 5000太浪费了 :) |
请问你代码实现的如何了,我试着跑了下python的版本,结果负样本完全不够用,我塞了3000张正样本,20000张负样本(500*500)结果训练到第一个stage的第40个弱分类器就完全不够用了,
实在差的太多了。
是不是哪里有什么问题?
谢谢
The text was updated successfully, but these errors were encountered: