开源项目推荐:Dlib C++ Libraries使用说明与内存泄漏问题解决(★firecat推荐★)

编程入门 行业动态 更新时间:2024-10-25 01:37:38

开源项目推荐:Dlib C++ Libraries<a href=https://www.elefans.com/category/jswz/34/1769912.html style=使用说明与内存泄漏问题解决(★firecat推荐★)"/>

开源项目推荐:Dlib C++ Libraries使用说明与内存泄漏问题解决(★firecat推荐★)

Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具。它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。Dlib的开源许可证 允许您在任何应用程序中免费使用它。Dlib有很长的时间,包含很多模块,近几年作者主要关注在机器学习、深度学习、图像处理等模块的开发。

相比于深度学习库而言,dlib内部更多的是封装了很多传统机器学习计算函数,例如回归分析、支撑向量机、聚类,开箱即用,对外提供了C++和python两种接口。在工程实践中,dlib通常和OpenCV结合使用,OpenCV提供图像处理算法,dlib提供机器学习算法。

Dlib是一个包含机器学习算法的C++开源工具包。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。

一、官网

dlib C++ Library

Index of /files 源码下载

dlib C++ Library 编译说明

二、教程

win10之dlib安装过程(c++调用库,非python版)_Dawnfox的博客-CSDN博客 win10之dlib安装过程(c++调用库,非python版)

Dlib相关问题_YiYueHuan的博客-CSDN博客 Dlib相关问题

.html Dlib机器学习库的安装和使用

三、我个人的VS2015环境配置(Dlib v19.1版本之后必须要VS2015才能编译)

1、使用CMake转换生成VS2015工程。使用默认配置即可,不修改任何参数。

2、VS2015打开Dlib 程。点击dlib属性页。需要注意的地方有两处。

(1)配置属性》c/c++》常规中的附加包含目录,需要添加dlib解压文件dlib目录中external中的libjpeg,libpng,zlib三个文件目录

D:\My Resources\7-cmakeprj\dlib-19.17\dlib\external\libjpeg

D:\My Resources\7-cmakeprj\dlib-19.17\dlib\external\libpng

D:\My Resources\7-cmakeprj\dlib-19.17\dlib\external\zlib

(2)配置属性》c/c++》预处理器中的预处理器定义。需要注意是否存在

DLIB_JPEG_SUPPORT
DLIB_PNG_SUPPORT
DLIB_JPEG_STATIC

(3)Debug和Release分别编译,生成dlibd.lib和dlib.lib

3、VS2015新建新建Win32控制台应用工程,测试dlib库是否可以用。

(1)把Dlib源码包拷贝到Win32 exe工程。

(2)Win32 exe工程,配置属性》c/c++》常规中的附加包含目录

..\dlib-19.17
..\dlib-19.17\dlib\external\libjpeg
..\dlib-19.17\dlib\external\libpng
..\dlib-19.17\dlib\external\zlib

注意,千万不要包含..\dlib-19.17\dlib,否则会报错:

***\dlib\dlib-19.4\dlib\dlib_include_path_tutorial.txt(1): fatal error C1189: #error: “Don’t put the dlib folder in your include path”

(3)Win32 exe工程,配置属性》c/c++》预处理器中的预处理器定义,添加:

DLIB_JPEG_SUPPORT
DLIB_PNG_SUPPORT
DLIB_JPEG_STATIC

(4)Win32 exe工程,配置属性》链接器》常规中的附加库目录。添加dlib.lib所在文件目录

..\Dlib-19.17\Win32

(5)Win32 exe工程,配置属性》链接器》输入的附加依赖项。添加dlibd.lib和dlib.lib。

(6)如果在链接(编译一般不会有问题)的时候出现下面的问题

error LNK2001: 无法解析的外部符号 USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives

那么就需要将 dlib/all/source.cpp 该文件添加到Win32 exe项目中,注意要以添加现有项的方式直接选取该文件。

若没有出现上面的问题,则一般不需要添加该文件。

添加soure.cpp,编译会报错:

在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”

解决办法是:鼠标右键soure.cpp,属性,不使用预编译头

4、如何使用SQLite,官网下载SQLite Download Page,sqlite-amalgamation-3280000.zip

解压,自己新建工程编译成静态库,请参考:VS2015编译SQLite3 动态链接库DLL和静态库Lib_IceCreHaker的博客-CSDN博客

然后把sqlite3.h拷贝到路径\Dlib-19.17\dlib\sqlite即可。

修改\Dlib-19.17\dlib\sqlite.h头文件

#include <sqlite3.h>//原来

#include "sqlite3.h" //firecat修改后

5、把\dlib-19.17\tools\visual_studio_natvis\dlib.natvis拷贝到

C:\Users\<用户名>\Documents\Visual Studio 2015\Visualizers

四、MFC建立项目,发现内存泄漏

使用windbg可以检测到:

1b55c8d SmartDispenser!operator new+0x0000000d
1826e7e SmartDispenser!dlib::threads_kernel_shared::thread_pool+0x0000008e
1539eb0 SmartDispenser!dlib::unregister_thread_end_handler<dlib::logger::global_data>+0x00000040
15c6e5a SmartDispenser!dlib::logger::global_data::~global_data+0x0000005a
16557cb SmartDispenser!dlib::logger::global_data::`scalar deleting destructor'+0x0000002b
15c8b51 SmartDispenser!dlib::logger::~logger+0x000000e1
1bf6968 SmartDispenser!dlib::logger_helper_stuff::`dynamic atexit destructor for 'log''+0x00000028

我提交的问题:

解决方法:.cpp#L78

说白了就是Dlib-19.17\dlib\threads\threads_kernel_shared.cpp,把变量值修改一下:

//do_not_ever_destruct = true;
do_not_ever_destruct = false; //firecat,Detected memory leaks

五、Dlib主要功能

主要特点

  • 文档丰富
    • 与许多开源项目不同的是,Dlib为每个类和功能提供了完整和精确的文档。同时它还有调试模式,可以帮助你检查使用某个函数的先决条件。启用此功能后,它将捕获由于错误地调用函数或以不正确的方式使用对象而导致的绝大多数错误。
    • 提供了许多示例程序(非常有用的示例!)
    • 我认为文档是函数库最重要的部分。因此,如果您发现任何未记录的内容,不清楚或已过时的文档,请告诉原作者,作者会及时修复它。
  • 高质量的广泛兼容的代码
    • 好的单元测试覆盖率。代码的单元测试行与库代码行之比约为1到4。
    • 该库在MS Windows,Linux和Mac OS X系统上定期进行测试。事实上,它可以在任何POSIX系统上运行,并且已经在Solaris,HPUX和BSD上使用。
    • 没有其他软件包依赖。只需要通过开箱即用的操作系统提供的底层API。
    • 在使用库之前,不需要安装或配置步骤。有关详细信息,请参阅 如何编译页面。
    • 所有操作系统特定的代码都被隔离在尽可能小的操作系统抽象层中。库的其余部分要么在OS抽象层之上分层,要么是纯ISO标准C ++。
  • 机器学习算法
    • 深度学习Deep Learning
    • 传统的基于SMO的支持向量机用于分类(classification) 和 回归(regression)
    • 用于大规模分类 和回归的Reduced-rank methods
    • 用于分类 和回归的推荐相关向量机(Relevance vector machine)
    • 通用多类分类(multiclass classification)工具
    • 一个多类SVM(Multiclass SVM)
    • 解决与结构支持向量机(structural support vector machines)相关的优化问题的工具 。
    • 用于序列标记(sequence labeling)的结构SVM工具
    • 用于解决分配问题(assignment problems)的结构SVM工具
    • 用于图像中物体检测(object detection)的结构SVM工具以及用于物体检测的更强大(但更慢)的深度学习工具(deep learning tools for object detection)。
    • 用于标记图中节点的结构SVM工具(labeling nodes)
    • 一个大规模的SVM-Rank实现
    • 在线核RLS回归(kernel RLS regression)算法
    • 在线SVM分类(SVM classification)算法
    • 半确定度量学习(Semidefinite Metric Learning)
    • 在线核化的质心估计器(centroid estimator) /新颖检测器和离线支持矢量一类分类器(one-class classification)
    • 聚类算法:线性 或核k-means, Chinese Whispers聚类和 Newman聚类。
    • 径向基函数网络(Radial Basis Function Networks)
    • 多层感知器(Multi layer perceptrons)
  • 数值计算算法
    • 使用表达式模板技术实现的快速矩阵对象,并且在可用时能够使用BLAS和LAPACK库。
    • 为矩阵对象定义了许多线性代数和数学运算,如 奇异值分解, 转置, 三角函数等。
    • 使用共轭梯度, BFGS和 L-BFGS 技术的通用非约束非线性优化算法
    • Levenberg-Marquardt用于求解非线性最小二乘问题
    • 通过BOBYQA算法进行箱约束无导数优化
    • 的的实现割平面算法优化(Optimized Cutting Plane Algorithm)
    • Several quadratic program solvers
    • 用于求解最优分配和 最小切割/最大流动问题的组合优化工具 以及用于查找most probable parse tree的CKY算法
    • 一个大整数对象
    • 一个随机数对象
  • 图形模型推理算法
    • 加入树算法在贝叶斯网络中进行精确推理。
    • 吉布斯采样马尔可夫链monte carlo算法用于贝叶斯网络中的近似推断。
    • 在链式结构, Potts或 一般因子图中执行MAP推断的例程 。
  • 图像处理
    • 用于读取和 保存常见图像格式的例程。
    • 各种像素类型之间的自动颜色空间转换
    • 常见的图像操作,如边缘检测和形态学操作
    • SURF, HOG和FHOG 特征提取算法。
    • 用于图像中的对象检测的工具,包括 正面人脸检测和 对象姿势估计。
    • 高质量的人脸识别
  • 线程
    • 该库提供了一个可移植且简单的线程API
    • 用于线程间和进程间通信的消息传递管道
    • 一个计时器对象,能够生成按时间间隔排列的事件
    • 线程对象
    • 线程函数
    • 循环并行
    • 面向未来的thread_pool
  • 网络通信
    • 该库提供了一个可移植且简单的TCP套接字API
    • 帮助您制作基于TCP的服务器的对象
    • iostream和streambuf 对象,使TCP套接字能够与C ++ iostreams库互操作
    • 一个简单的HTTP服务器对象,可用于将Web服务器嵌入到应用程序中
    • 用于线程间和进程间通信的消息传递管道
    • 用于使用批量同步并行(BSP)计算模型实现算法的工具
  • 图形用户界面
    • 该库提供了一个便携且简单的核心GUI API
    • 在核心GUI API的基础上实现了许多小部件
    • 与许多其他GUI工具包不同,整个dlib GUI工具包是线程安全的
  • 数据压缩和完整性检查算法
    • CRC 32对象
    • MD5功能
    • 代表数据压缩 算法部分的各种抽象对象。包括许多形式的PPM算法。
  • 测试
    • 在流行的Java日志记录器log4j之后的线程安全日志记录器对象
    • 模块化的单元测试框架
    • 各种断言宏对测试前置条件很有用
  • 其他通用功能
    • 一个类型安全的对象,用于在大小字节排序之间进行转换
    • 一个命令行解析器,能够使用各种参数和选项分析和验证命令行
    • 一个XML解析器
    • 可以执行base64转换的对象
    • 许多容器类
    • 序列化支持
    • 许多实现不同内存池策略的内存管理器对象
    • 一个工具,可以让您轻松地从MATLAB调用C ++

---

C++库大全

C++常用机器学习库

.html

mlpack

mlpack - Home

 

mlpack 是一个 C++ 的机器学习库,它重点在于其扩展性、高速性和易用性。它的目的是让新用户通过简单、一致的 API 使用机器学习,同时为专业用户提供 C++ 的高性能和最大灵活性。他的性能超出大量类似的机器学习库,如 WEKA、Shogun、MATLAB、mlpy 及 sklearn,这一对比工作可以参考文献 [1]。

mlpack 含有丰富的文档和教程,可以参考项目主页。教程中包含的算法有:近邻搜索(NeighborSearch)、范围搜索(RangeSearch)、线性回归(LinearRegression)、欧几里德最小生成树(The Euclidean Minimum Spanning Tree)、K - 均值(K-Means)、FastMKS(Fast max-kernel search)等。

mlpack 提供了大量的类或 API 供程序调用,同时还提供了很多可执行程序供不懂 C++ 的用户使用。这些可执行文件包括:allkfn, allknn, emst, gmm, hmm_train, hmm_loglik, hmm_viterbi, hmm_generate, kernel_pca, kmeans, lars, linear_regression, local_coordinate_coding, mvu, nbc, nca, pca, radical, sparse_coding。

 

更多推荐

开源项目推荐:Dlib C++ Libraries使用说明与内存泄漏问题解决(★firecat推荐★)

本文发布于:2024-03-12 05:50:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1730827.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:使用说明   开源   内存   项目   Libraries

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!