openCV训练程序申请内存不足
在用OpenCV训练分类器(特别是训练Adaboost类型的分类器)的时候,当样本的数量特别大的时候,就会出现申请内存不够的情况,很早以前碰到过这样的情况,最近再训练的时候又出现了这样的情况,于是在网上找了一下解决方法。
首先给出我的配置吧,win7 64位 + vs2010 + opencv2.4.9,其实这个问题的产生应该只与系统有关系
本文的绝大部分是引用自博友lff0305的“使用LargeAddressAware压榨额外的用户态内存”,在此向其表示感谢!
一般情况下,无论在32位系统还是64位系统下,一个Win32用户进程可用的内存空间只有2GB少一点。那么,假设一个Win32程序内存不够用了,又不想(或者没办法)编译成X64的,怎么办呢,MS提供了一种方法,Linker中的LargeAddressAware参数。
启用它,可以获得额外的用户态内存。我在自己的X64系统下测试,如果没有启用,可以申请2GB不到;但是启动了这个参数,则可以申请将近4GB(因为还要受32位程序32位指针的限制):
程序很简单,如下:
- int _tmain(int argc, _TCHAR* argv[])
- {
- int c = 0;
- while (true) {
- void * p = malloc(1024 * 1024 * 32);
- if (p != 0) {
- c++;
- printf("alloc %d MB OK\n", c * 32);
- } else {
- break;
- }
- }
- printf("alloc %d MB Totally\n", c * 32);
- getchar();
- return 0;
- }
运行结果是
该程序如果不设置LargeAddressAware参数的话是1986MB。
我自己没有测试32位的系统,但是查到的资料说需要设置/3GB的启动参数。
对于已经存在的程序(没办法编译),可以使用VC中带的editbin.exe工具把该标志位打开:
这样这个程序也可以使用超过2GB的内存了。
同样对于一个exe,可以使用dumpbin.exe来验证。
如果dumpbin.exe /headers 文件名.exe
显示 Application can handle large (>2GB) addresses
那么说明该应用程序可以使用超过2GB的内存
当然这种方法的缺点:
1. 在64位系统上没办法使用超过4GB的内存;不过以前只能用2G,聊胜于无了;
2. 在32位系统上必须打开/3GB启动参数,为用户态程序预留3GB的内存
3. 对于带有自校验的程序,不适用,因为dumpbin相当于修改了这个exe,那么文件校验肯定是失败了;
总之最终的解决方法还是使用(或者编译出)X64的程序。
-----------------------------------------------以上内容均引自使用LargeAddressAware压榨额外的用户态内存----------------------------------------
由于我的系统也是64位的,所以也没有对32位系统做相关的测试。
如果是等待编译的程序,则可以按照上面的方式在vs中进行修改;如果是已经编译好的程序,则可以用editbin.exe工具打开LargeAddressAware标志位。接下来主要是说一下用editbin.exe工具打开LargeAddressAware标志位。因为以前也没用过这玩意,所以刚开始看到了还不大会弄,看原博主的贴图中以为是直接把editbin.exe复制到相应的文件夹下就可以直接用了,可并不是这样,因为执行editbin还需要link.exe和MSPDB100.DLL,这在vs安装路径中很容易找到。后来发现可以直接通过Visual Studio命令提示来操作。可以在开始按钮中打开该命令提示,如图
在打开命令提示后,就可以用调用editbin.exe了,如图
将要已编译好的要修改的程序的完整路径放在最后面。执行完执行可以用dumpbin来查看,如图
看到显示 Application can handle large (>2GB) addresses,那么说明该应用程序可以使用超过2GB的内存。
最后附上一个链接,在这个链接里面可以看到win系统的相关内存限制说明,网址:
openCV训练程序申请内存不足的更多相关文章
- 使用opencv训练分类器时,traincascade训练报错:Train dataset for temp stage can not be filled.解决方法
opencv分类器训练中,出错一般都是路径出错,例如, 1.opencv_traincascade.exe路径 2.负样本路径文件,neg.dat中的样本前路径是否正确 3.移植到别的电脑并修改完路径 ...
- 如何利用OpenCV自带的级联分类器训练程序训练分类器
介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...
- OpenCV训练分类器制作xml文档
OpenCV训练分类器制作xml文档 (2011-08-25 15:50:06) 转载▼ 标签: 杂谈 分类: 学习 我的问题:有了opencv自带的那些xml人脸检测文档,我们就可以用cvLoad( ...
- opencv 训练自己的分类器汇总
原地址:http://www.cnblogs.com/zengqs/archive/2009/02/12/1389208.html OpenCV训练分类器 OpenCV训练分类器 一.简介 目标检测方 ...
- 使用OpenCV训练Haar like+Adaboost分类器的常见问题
<FAQ:OpenCV Haartraining>——使用OpenCV训练Haar like+Adaboost分类器的常见问题 最近使用OpenCV训练Haar like+Adaboost ...
- java\c程序的内存分配
JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该 ...
- 程序的内存分配 C\C++
原文:http://blog.csdn.net/oohaha_123/article/details/24460425 程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区( ...
- C程序的内存分配
一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. ...
- C语言和C++中动态申请内存
在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h> ...
随机推荐
- 洛谷P3414 SAC#1 - 组合数
P3414 SAC#1 - 组合数 218通过 681提交 题目提供者ProjectWTA 标签 难度普及/提高- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 讨论区出bug ...
- 洛谷P1991 无线通讯网
P1991 无线通讯网 170通过 539提交 题目提供者洛谷OnlineJudge 标签图论 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 怎么又炸了 为啥一直40!求解! UKE:inv ...
- Java Socket UDP编程
package com; import java.io.IOException; import java.net.*; /** * UDP Client * * Created by Administ ...
- 2017北京国庆刷题Day3 afternoon
期望得分:100+0+30=130 实际得分:100+36.5+0=136.5 T3 一个变量写混了,丢了30.. 模拟栈 #include<cstdio> #include<cst ...
- HDU 1402 FFT 大数乘法
$A * B$ FFT模板题,找到了一个看起来很清爽的模板 /** @Date : 2017-09-19 22:12:08 * @FileName: HDU 1402 FFT 大整数乘法.cpp * ...
- 提高效率!15款最好的 Bug 跟踪应用程序
当涉及到开发项目时,其中比较重要的事情是它需要某种形式的错误和问题跟踪工具来发现和解决问题,否则会浪费大量的时间. 此外,你总是要标签应用来标示那些悬而未决的问题,而这种分期执行的项目进度将帮助您 ...
- js_beautifier && css_beautifier for emeditor
// // Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier // written by Einar Li ...
- IO流-读取写入缓冲区
例如FileReader和FileWriter在读取的时候是读一次或者写一次就请求磁盘,这样使用的时间非常的长,效率比较低,因此引入BufferedReader和BufferedWriter作为读取和 ...
- thinkphp学习,蛋疼啊~新公司要弄这个。。。
common/function.php 看里面函数大全,啥玩意都有 Tpl中的是模板文件,action中是控制类,Model中有action用到的一些东西,例: class IndexAction e ...
- $this->success()传值不完整
public function manager_doExport() { $search=$_POST['search']; //前台输入2017-12-1,即,$search['starttime' ...