相关疑难解决方法(0)

找到给定向量的k-最近邻居?

鉴于我的知识库中有以下内容:

1  0  6 20  0  0  6 20
1  0  3  6  0  0  3  6
1  0 15 45  0  0 15 45
1  0 17 44  0  0 17 44
1  0  2  5  0  0  2  5
Run Code Online (Sandbox Code Playgroud)

我希望能够找到以下向量的最近邻居:

1  0  5 16  0  0  5 16
Run Code Online (Sandbox Code Playgroud)

根据距离度量.所以在这种情况下,给定一个特定的阈值,我应该发现列出的第一个向量是给定向量的近邻.目前,我的知识数据库的大小大约为数百万,因此计算每个点的距离度量,然后进行比较证明是昂贵的.对于如何以显着的加速实现这一目标,还有其他选择吗?

我几乎对任何方法都持开放态度,包括在MySQL中使用空间索引(除了我不完全确定如何解决这个问题)或某种哈希(这将是伟大的,但我不完全确定).

python mysql language-agnostic algorithm search

12
推荐指数
1
解决办法
4855
查看次数

OpenCv/C++ - 轻松地从具有大型数据库的图片中查找相似之处

我想从查询与数据库中的图片(约2000)进行比较.

在本网站发帖之前,我阅读了很多关于在大型数据库中匹配图片的方法的文章,并阅读了stackOverflow上的很多帖子.

关于论文,有一些有趣的东西,但技术性很强,很难理解算法.(我刚开始专注于这个领域)

帖子(最有趣的):

简单快速的方法来比较图像的相似性 ;

高维数据中最近的邻居?;

如何理解局部敏感哈希?;

图像指纹比较多个图像的相似度 ;

C++/SIFT/SQL - 如果有一种方法可以有效地比较图像的SIFT描述符和SQL数据库中的SIFT描述符?

论文:

具有大型词汇表和快速空间匹配的对象检索,

图像相似性搜索紧凑数据结构,

LSH,

近重复图像检测min-Hash和tf-idf加权

词汇树

聚合本地描述符

但我仍然困惑.

我做的第一件事就是实施BoW.我训练了Bag of Words(使用ORB作为探测器和描述符,并使用了VLAD功能)和5级,以测试其效率.经过长时间的培训,我推出了它.它运行良好,准确率为94%.那很不错.

但是我有一个问题:

  • 我不想做分类.在我的数据库中,我将有大约2000张不同的图片.我只是想找到我的查询和数据库之间的最佳匹配.因此,如果我有2000张不同的图片,如果我合乎逻辑我必须考虑这些2000张图片作为2000年的不同类,显然这是不可能的......

首先,你同意我的意见吗?这显然是做我想做的最好的方法吗?也许还有另一种方法可以使用BoW来查找数据库中的相似之处?

我做的第二件事是"更简单".我计算查询的描述符.然后我在我的所有数据库上做了一个循环,我计算了每个图片的描述符,然后在向量中添加了每个描述符.

std::vector<cv::Mat> all_descriptors_database;
for (i ? 2000) :
    cv::Mat request=cv::imread(img);
    computeKeypoints(request) ;
    computeDescriptors(request) ;
    all_descriptors_database.pushback(descriptors_of_request)
Run Code Online (Sandbox Code Playgroud)

最后,我有一个大向量,其中包含所有数据库的所有描述符.(所有关键点都一样)

然后,这就是我感到困惑的地方.开始时,我想计算循环内部的匹配,也就是说,对于数据库中的每个图像,计算其描述符并与查询匹配.但是花了很多时间.

因此,在阅读了大量关于如何在大数据库中找到相似之处的论文后,我发现LSH算法似乎适合于那种搜索.

因此我想使用这种方法.所以在我的循环中我做了类似的事情:

//Create Flann LSH index
cv::flann::Index flannIndex(all_descriptors_database.at(i), cv::flann::LshIndexParams(12, 20, 2), cvflann::FLANN_DIST_HAMMING);
        cv::Mat results, dists;
        int k=2; // find the 2 nearest neighbors
        // search (nearest neighbor)
        flannIndex.knnSearch(query_descriptors, results, …
Run Code Online (Sandbox Code Playgroud)

c++ mysql opencv

7
推荐指数
1
解决办法
2750
查看次数

概念上将类似文档聚类在一起?

这更像是一个概念问题,而不是一个实际的实现,我希望有人可以澄清.我的目标如下:给定一组文档,我想对它们进行聚类,使属于同一个集群的文档具有相同的"概念".

根据我的理解,潜在语义分析让我找到一个术语 - 文档矩阵的低秩近似,即给定一个矩阵X,它将X分解为三个矩阵的乘积,其中一个是对角矩阵Σ:

SVD

现在,我将继续选择低秩近似,即仅从Σ中选择前k个值,然后计算X'.一旦我有了这个矩阵,我就必须应用一些聚类算法,最终结果将是对具有相似概念的文档进行分组.这是应用群集的正确方法吗?我的意思是,计算X'然后在其上应用聚类或是否还有其他方法?

此外,在我的一个有点相关的问题中,有人告诉我,随着维数的增加,邻居的意义也会丢失.在这种情况下,从X'聚类这些高维数据点的理由是什么?我猜测集群类似文档的要求是一个现实世界的要求,在这种情况下,如何解决这个问题呢?

python nlp numpy machine-learning data-mining

6
推荐指数
1
解决办法
1101
查看次数

如何在numpy数组上进行nD距离和最近邻居计算

此问题旨在成为规范的重复目标

给定两个数组XY形状,(i, n)(j, n)表示 - n维坐标列表,

def test_data(n, i, j, r = 100):
    X = np.random.rand(i, n) * r - r / 2
    Y = np.random.rand(j, n) * r - r / 2
    return X, Y

X, Y = test_data(3, 1000, 1000)
Run Code Online (Sandbox Code Playgroud)

找到最快的方法是什么:

  1. 每个点和每个点之间的D形状距离(i,j)XY
  2. 该指数k_i与距离k_d的的k针对所有点最近的邻居X中的每一个点Y
  3. 该指数r_i,r_j和距离r_d的每一个点在X距离之内r的每一个点的j …

python arrays numpy scipy scikit-learn

6
推荐指数
1
解决办法
1455
查看次数

PCL kd-tree实现极其缓慢

我正在使用基于点云库(PCL)的kd-树最近邻居(NN)搜索的C ++实现。该数据集包含约220万个点。我正在为每一个其他点搜索NN点。搜索半径设置为2.0。要完全计算,大约需要12个小时!我正在使用具有4GB RAM的Windows 64位计算机。kd树搜索是否很常见?我想知道是否还有用于3D点云数据的其他c ++库,它更快。我听说过ANN C ++库和CGAL,但不确定这些速度有多快。

kdtree nearest-neighbor cgal point-cloud-library

4
推荐指数
1
解决办法
3770
查看次数