我正在使用opencv的CvBoost进行分类。我已经使用几千兆字节的数据训练了分类器,然后我将其保存下来。该模型有一个1000个弱学习者的树,深度为20(默认设置)。现在我想加载它来预测实时生产代码中的类。但是,学习模型的大小是巨大的(接近1千兆字节)。我相信这是因为保存功能会保存用于学习的所有数据,因此可以正确更新训练模型。但是,我在运行时不需要这个功能,我只想使用固定参数(1000个弱学习者等),这些参数应该不是很多。
有没有办法可以将弱学习者参数保存并加载到CvBoost中?
有没有人有使用这个或另一个opencv学习模型减少学习模型数据大小的经验? 注意:CvBoost继承自具有保存/加载功能的CvStatModel。 < / p>
答案 0 :(得分:0)
我意识到,对于1000个学习者和20个深度,这可能是2 ^ 20 * 1000个学习参数,即大约10亿或1千兆字节。事实证明,学习模型需要所有空间来存储所有树木。
为了减小尺寸,我必须降低树深度和/或学习者数量。例如,将树深度减少到5只使用了21 mb(尽管它似乎需要大约相同的时间来构建学习模型)。也许降低重量修剪率会导致更多的树在到达深度20之前被修剪(因此也减少了内存大小)。我还没有测试过这个。
案件结案。
答案 1 :(得分:0)
CvBoostParams有一个'use_surrogates'参数,它的默认值是ture。设置为false可以减小学习模型的大小