# knn_cuda **Repository Path**: master/knn_cuda ## Basic Information - **Project Name**: knn_cuda - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-24 - **Last Updated**: 2024-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # K-Nearest Neighbor GPU This repository contains a GPU version of K-Nearest Neighbor search. It also provides a python wrapper for the ease of use. The main CUDA code is modified from the [K Nearest Neighbor CUDA library](https://github.com/vincentfpgarcia/kNN-CUDA). Along with the K-NN search, the code provides feature extraction from a feature map using a bilinear interpolation. # Installation Please modify the `Makefile.config` to make sure all the dependencies are set correctly. ``` git clone https://github.com/chrischoy/knn_cuda.git cd knn_cuda ``` Modify the `Makefile.config` file to set `PYTHON_INCLUDE`, `PYTHON_LIB`, `CUDA_DIR` correctly. By default, The variables are set to the default python and CUDA installation directories. Then ``` make ``` # Example Once you build the wrapper, run ``` python example.py [[3367 2785 1523 ..., 1526 569 3616] [1929 3353 339 ..., 690 463 2972]] [[3413 3085 1528 ..., 608 2258 733] [1493 3849 1616 ..., 743 2012 1786]] [[2446 3320 2379 ..., 2718 598 1854] [1348 3857 1393 ..., 3258 1642 3436]] [[3044 2604 3972 ..., 3968 1710 2916] [ 812 1090 355 ..., 699 3231 2302]] ``` # Usage In python, after you `import knn`, you can access the knn function. ## distances, indices = knn.knn(query_points, reference_points, K) Both query_points and reference_points must be numpy arrays with float32 format. For both query and reference, the first dimension is the dimension of the vector and the second dimension is the number of vectors. K is the number of nearest neighbors. For each vector in the query_points, the function returns the distance from the query and the K-NNs and the 1-based indices of the K nearest neighbors. Both `distances` and `indices` have the same dimensions and the first dimension has size `K` and the size the second dimension is equal to the number of vectors in the query_points. ## extracted_features = knn.extract_feature(activations, coordinates) Extract features from the activation maps using bilinear interpolation. The `activations` is a 4D (N, C, H, W) tensor from which we extract features. N is the number of feature maps; C is the number of channels; H and W are height and width respectively. The `coordinates` is a 3D (N, M, 2) tensor which contains the coordinates which we use to extract features. N is the number of feature maps; M is the number of coordinates; The last 2 is for x and y coordinate. # Warning The returned index is 1-base.