Skip to main content

Image Algorithm for General Purpose

Image Algorithm is a clustering algorithm based fast search and find of density peaks. Comparing with other popular clustering methods, such as DBSCAN, one of the most prominent advantages of Image Algorithm is being highly parallelizable. This repository is an implementation of Image Algorithm for general purpose, supporting strong and easy GPU acceleration.

For now, the implementation includes three backends: numpy, CUDA and OpenCL.

backend dependency Support Platform Support Device
numpy None Mac/Linux/Windows CPU
CUDA pycuda Linux Only NVIDIA GPU
OpenCL pyopencl Mac NVIDIA/AMD/Intel GPU, multi-core CPU

It has been tested that all three backends give the identical clustering results. Therefore users can feel free to choose whichever faster and easier for their purposes.

For all three backends, two kinds of data structure can be taken in: Flat list and kdbin. KDBin, bins in k-dimention, accommodates points inside spatial bins in k-dimention with dynamic bin distribution and flexible bin capacity. Techniqually it uses hashmap and a set of memory references to obtain nearest neighboring bins and points inside, such that query of neighborhood for each point is O(1) complexity. Performance test shows a strong acceleration in density calculation using KDBin data structure.

supported data structure rho Calculation rhorank and nh Calculation
numpy list/bin list/bin
CUDA list/bin list
OpenCL list/bin list

For density rho calculation, performance tested is shown below.

To do list

  • Calculate rhorank in CUDA/OpenCL via 'Merge Sorted List' for parallel sorting.
  • Support nh search in nearest neighboring bins in CUDA/OpenCL

Installation

pip install ImageAlgoKD

Regarding dependency, no dependency is required for numpy backend. And it usually does a good job dealing with small dataset and needs no extra packages. However, for users wanting to use GPU acceleration with either CUDA or OpenCL backend, extra dependency is required.

# if want to use opencl backend
pip install pyopencl
# if want to use CUDA backend
pip install pycuda

Quick Start

The primary usage of the module is the following First of all, import ImageAlgo class for K-Dimension

from ImageAlgoKD import *

Declare an instance of ImageAlgoKD with your algorithm parameters. Then give it the input data points.

ia = ImageAlgoKD(MAXDISTANCE=20, KERNEL_R=1.0)
ia.setInputsPoints(Points(np.genfromtxt("../data/basic.csv",delimiter=',')))

Then run the clustering over input data points.

ia.run("numpy")
# ia.run("opencl") or ia.run("cuda") if want run in parallel

In the end, the clustering result can be access by

ia.points.clusterID

Algorithm Parameters

Parameters Comments Default Value
MAXDISTANCE the separation distance of the point with highest density. 10.0
KERNEL_R 'd_c' in density calculation 1.0
KERNEL_R_NORM 'd_0' in density calculation 1.0
KERNEL_R_POWER 'k' in density calculation. 0.0
DECISION_RHO_KAPPA the ratio of density threshold of seeds to the highest density 4.0
DECISION_NHD the separation threshold of seeds 1.0
CONTINUITY_NHD the separation threshold of continuous clusters 1.0

where density is defined as

Examples

I. Basic

Perform IA clustering on 1000 toy 2D points, sampled from two Gaussian Distrituion and noise. The toy data is in data/basic.csv, while the corresponding jupyter notebook can be found here in examples/.

II. MNIST

Perform IA clustering on 1000 MNIST 28x28 dimension points. The MNIST data is in data/mnist.csv, while the corresponding jupyter notebook can be found here in examples/.

III. HGCal

This is an event of 10 Pions with 300 GeV energy in CMS HGCal. A 3D interactive visualization can be found here. In addition, for event with pile up, here is an 300GeV pion with PU200 event. A PU200 event typically includes about 200k HGVCal reconstructed detector hits, which is input into IA clustering

Metadata

Release files for ImageAlgoKD 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for ImageAlgoKD 0.0.4
File Interpreter ABI Platform Actions
ImageAlgoKD-0.0.4-py3-none-any.whl Python 3 none any Details for ImageAlgoKD-0.0.4-py3-none-any.whl

Release files / ImageAlgoKD-0.0.4-py3-none-any.whl

Download URL ImageAlgoKD-0.0.4-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c6fc1ce69af75f38845531723fa9e53493d74a82960e3ecc9403d805891c4c9
BLAKE2b-256 checksum
How to use checksums
d91366d721b7ed480b67cf0d3228baec524643c5861e6f1359985f5d5d53d83c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.6.1

Security for ImageAlgoKD 0.0.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page