了解 Dlib 内核实现

Posted

技术标签:

【中文标题】了解 Dlib 内核实现【英文标题】:Understanding Dlib Kernel implementation 【发布时间】:2014-02-23 06:24:07 【问题描述】:

我开始使用 dlib,但我很难理解内核的实现方式。我从 k-kmeans 算法开始,因为我知道这种聚类方法。但是我无法弄清楚内核的计算位置。输入数据是一个矩阵(不是内核),算法从不将数据转换为内核。 我希望内核类返回一个方阵。但是我没有见过这样的东西! 我想使用 dlib 来实现使用内核的聚类算法,而 dlib 听起来是一个很好的解决方案。有没有人有关于它是如何实现的文档或者可以向我解释它是如何工作的?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

内核基本上只是一个函数,它接受两个输入样本并输出一个数字。所以是的,有时您会看到代码,然后计算 N 乘 N 矩阵,其中包含 N 个样本的所有可能的核函数输出。然而,这是一个有点幼稚的实现策略,因为它需要 O(N^2) RAM。所以大多数现实世界的内核方法软件使用某种延迟评估或缓存策略来避免这个问题。

在 dlib 中的内核 K-means 实现中,这是通过 kcentroid 对象完成的。在 kcentroid 内部,您可以看到它在许多地方调用内核函数并执行所有“内核工作”。您可以阅读 kcentroid 的文档以了解它的作用。虽然,如果你刚刚开始使用内核方法,那么你真的需要一本关于这个主题的书。我强烈建议选择以下之一:

使用内核学习:支持向量机、正则化、优化等,作者:Bernhard Schlkopf 和 A​​lexander J. Smola John Shawe-Taylor 和 Nello Cristianini 的模式分析内核方法

【讨论】:

【参考方案2】:

对于一组 N 个数据点,内核通常由 NxN 矩阵指定,其第 (i,j) 项给出数据点 i 和数据点 j 之间的内核值。这适用于内核方法,只要矩阵是对称且正定的,对于真正的内核来说,这保证是正确的。

【讨论】:

好吧,如果我明白你的意思,在示例中提供的 k-kmeans 不用作内核,但如果提供内核,它的工作原理是否相同?那么如何从输入的数据中获取内核呢?

以上是关于了解 Dlib 内核实现的主要内容,如果未能解决你的问题,请参考以下文章

dlib实现人脸识别(一)生成描述文件和标签文件

dlib实现人脸识别(一)生成描述文件和标签文件

Dlib 实现人脸的68点检测

人脸识别基于dlib库实现人脸特征值提取

dlib库包的介绍与使用,opencv+dlib检测人脸框opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类dlib视频目标跟踪

OpenCV+dlib实现疲劳检测