Skip to main content

Sliced Detection and Clustering Analysis Toolkit - Developed by MBARI

Project description

MBARI semantic-release License Python

sdcat

Sliced Detection and Clustering Analysis Toolkit

This repository processes images using a sliced detection and clustering workflow. If your images look something like the image below, and you want to detect objects in the images, and optionally cluster the detections, then this repository is for you.


Drone/UAV

ISIIS Plankton Imager


DeepSea Imaging System

DINO + HDBSCAN Clustering

The clustering is done with a DINO Vision Transformer (ViT) model, and a cosine similarity metric with the HDBSCAN algorithm. The DINO model is used to generate embeddings for the detections, and the HDBSCAN algorithm is used to cluster the detections. To reduce the dimensionality of the embeddings, the t-SNE algorithm is used to reduce the embeddings to 2D. The defaults are set to produce fine-grained clusters, but the parameters can be adjusted to produce coarser clusters. The algorithm workflow looks like this:

Installation

Pip install the sdcat package including all requirements with:

pip install sdcat

Alternatively, Docker can be used to run the code. A pre-built docker image is available at Docker Hub with the latest version of the code.

Detection

docker run -it -v $(pwd):/data mbari/sdcat detect --image-dir /data/images --save-dir /data/detections --model MBARI-org/uav-yolov5

Followed by clustering

docker run -it -v $(pwd):/data mbari/sdcat cluster detections --det-dir /data/detections/ --save-dir /data/detections --model MBARI-org/uav-yolov5

A GPU is recommended for clustering and detection. If you don't have a GPU, you can still run the code, but it will be slower. If running on a CPU, multiple cores are recommended and will speed up processing.

docker run -it --gpus all -v $(pwd):/data mbari/sdcat:latest-cuda12 detect --image-dir /data/images --save-dir /data/detections --model MBARI-org/uav-yolov5

Commands

To get all options available, use the --help option. For example:

sdcat --help

which will print out the following:

Usage: sdcat [OPTIONS] COMMAND [ARGS]...

  Process images from a command line.

Options:
  -V, --version  Show the version and exit.
  -h, --help     Show this message and exit.

Commands:
  cluster  Cluster detections.
  detect   Detect objects in images

To get details on a particular command, use the --help option with the command. For example, with the cluster command:

 sdcat  cluster --help 

which will print out the following:

Usage: sdcat cluster [OPTIONS]

  Cluster detections from a single collection.

Options:
  --det-dir TEXT      Input folder with raw detection results
  --save-dir TEXT     Output directory to save clustered detection results
  --device TEXT       Device to use.
  -h, --help          Show this message and exit.

File organization

The sdcat toolkit generates data in the following folders. Here, we assume both detection and clustering is output to the same root folder.:

/data/20230504-MBARI/
└── detections
    └── hustvl
        └── yolos-small                         # The model used to generate the detections
            ├── det_raw                         # The raw detections from the model
            │   └── csv                    
            │       ├── DSC01833.csv
            │       ├── DSC01859.csv
            │       ├── DSC01861.csv
            │       └── DSC01922.csv
            ├── det_filtered                    # The filtered detections from the model
            ├── det_filtered_clustered          # Clustered detections from the model
                ├── crops                       # Crops of the detections 
                ├── dino_vits8...date           # The clustering results - one folder per each run of the clustering algorithm
                ├── dino_vits8..exemplars.csv   # Exemplar embeddings - examples with the highest cosine similarity within a cluster
                ├── dino_vits8..detections.csv  # The detections with the cluster id
            ├── stats.txt                       # Statistics of the detections
            └── vizresults                      # Visualizations of the detections (boxes overlaid on images)
                ├── DSC01833.jpg
                ├── DSC01859.jpg
                ├── DSC01861.jpg
                └── DSC01922.jpg

Process images creating bounding box detections with the YOLOv5 model.

The YOLOv5s model is not as accurate as other models, but is fast and good for detecting larger objects in images, and good for experiments and quick results. Slice size is the size of the detection window. The default is to allow the SAHI algorithm to determine the slice size; a smaller slice size will take longer to process.

sdcat detect --image-dir <image-dir> --save-dir <save-dir> --model yolov5s --slice-size-width 900 --slice-size-height 900

Cluster detections from the YOLOv5 model

Cluster the detections from the YOLOv5 model. The detections are clustered using cosine similarity and embedding features from a FaceBook Vision Transformer (ViT) model.

sdcat cluster --det-dir <det-dir> --save-dir <save-dir> --model yolov5s

Related work

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdcat-1.7.0.tar.gz (14.6 MB view details)

Uploaded Source

Built Distribution

sdcat-1.7.0-py3-none-any.whl (14.6 MB view details)

Uploaded Python 3

File details

Details for the file sdcat-1.7.0.tar.gz.

File metadata

  • Download URL: sdcat-1.7.0.tar.gz
  • Upload date:
  • Size: 14.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.11.9 Linux/5.15.0-113-generic

File hashes

Hashes for sdcat-1.7.0.tar.gz
Algorithm Hash digest
SHA256 a58629c8ad6087e36ae3ad6deb904f31ba934f75f4552e5d7f82c33ba19b92ee
MD5 13ed3712a77f74ed08e72aedd895a543
BLAKE2b-256 8a3c1452a5acdd5150a0f36bd8ab8915542f73ccc169d28e692d7e90452f7f2f

See more details on using hashes here.

File details

Details for the file sdcat-1.7.0-py3-none-any.whl.

File metadata

  • Download URL: sdcat-1.7.0-py3-none-any.whl
  • Upload date:
  • Size: 14.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.11.9 Linux/5.15.0-113-generic

File hashes

Hashes for sdcat-1.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eedd386527dc98dd568339fe7044cc2ddaa704d7db1ceeee5828aed8bcf97f1c
MD5 94143791ce01db59c1e5f76ddb337cde
BLAKE2b-256 7652bf8e162e85e37ba22b8b2f015cfac986cfd98b548922f5bdb5698d4255ae

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page