如何减小 opencv 中学习模型的大小(用于 CvBoost)?

Posted

技术标签:

【中文标题】如何减小 opencv 中学习模型的大小(用于 CvBoost)?【英文标题】:How do I reduce the size of the learning model in opencv (for CvBoost)? 【发布时间】:2015-04-26 16:49:11 【问题描述】:

我正在使用 opencv 的 CvBoost 进行分类。我已经用几千兆字节的数据训练了分类器,然后我把它保存了下来。该模型有一棵由 1000 个弱学习器组成的树,深度为 20(默认设置)。现在我想加载它来预测实时生产代码中的类。然而,学习模型的大小是巨大的(接近一个千兆字节)。我相信这是因为保存功能保存了所有用于学习的数据,因此可以正确更新训练模型。但是,我在运行时不需要这个功能,我只想使用固定参数(1000 个弱学习器等),这些参数不应该是太多数据。

有没有办法只保存弱学习器参数并将其加载到 CvBoost 中?

有人有使用这个或另一个 opencv 学习模型减少学习模型数据大小的经验吗? 注意:CvBoost 继承自具有保存/加载功能的 CvStatModel。

【问题讨论】:

【参考方案1】:

我意识到,对于 1000 个学习者和 20 个深度,这可能是 2^20*1000 个学习参数,即大约 10 亿或 1 GB。事实证明,学习模型需要所有空间来存储所有树。

要减小大小,我必须降低树的深度和/或学习者的数量。例如,将树深度减少到 5 只使用了 21 mb(尽管构建学习模型似乎花费了大约相同的时间)。也许降低权重修剪率会导致在达到深度 20 之前修剪更多的树(从而也减少内存大小)。我还没有测试过这个。

结案。

【讨论】:

【参考方案2】:

CvBoostParams 有一个 'use_surrogates' 参数,它的默认值是 ture。设置为 false 可以减小学习模型的大小

【讨论】:

添加一些解释,说明此答案如何帮助 OP 解决当前问题

以上是关于如何减小 opencv 中学习模型的大小(用于 CvBoost)?的主要内容,如果未能解决你的问题,请参考以下文章

[我正在用一本书在python中学习opencv,但出现此错误:只能将整数标量数组转换为标量索引

机器学习中学习曲线的 bias vs variance 以及 数据量m

如何在 iOS 项目中减小 openCV 框架大小

Keras - 分类器未从预训练模型的转移值中学习

CLIP:从自然语言监督中学习可迁移的视觉模型

新方案:从错误中学习,点云分割中的自我规范化层次语义表示