Code Monkey home page Code Monkey logo

kmeans-anchors-ratios's Introduction

K-Means Anchors Ratios Calculator

Example of usage

$ pip install -r requirements.txt
$ python kmeans_anchors_ratios.py --help

output:

usage: python kmeans_anchors_ratios.py \
           --instances path/to/your_coco_instances.json \
           --anchors-sizes 32 64 128 256 512 \
           --input-size 512 \
           --normalizes-bboxes True \
           --num-runs 3 \
           --num-anchors-ratios 3 \
           --max-iter 300 \
           --min-size 0 \
           --iou-threshold 0.5 \
           --decimals 1 \
           --default-anchors-ratios '[(0.7, 1.4), (1.0, 1.0), (1.4, 0.7)]'

optional arguments:
  -h, --help            show this help message and exit
  --instances N         Path to the json instances file in COCO format.
  --anchors-sizes N [N ...]
                        List of anchors sizes (e.g. [32, 64, 128, 256, 512]).
  --input-size N        Size according to which each image is resized before
                        being processed by the model.
  --normalizes-bboxes N
                        Normalizes bounding boxes, before giving them input to
                        K-Means, so that they have all an area of ​​1.
                        Default: True.
  --num-runs N          How many times to run K-Means. After the end of all
                        runs the best result is returned. Default: 1.
  --num-anchors-ratios N
                        The number of anchors ratios to generate. Default: 3.
  --max-iter N          Maximum number of iterations of the K-Means algorithm
                        for a single run. Default: 300.
  --min-size N          Size to which all bounding box sizes must be stricly
                        greater to be considered by K-Means. Filtering is
                        applied after rescaling the bounding boxes to the same
                        extent that the images are scaled to adapt them to the
                        input_size. min_size=32 implies that that all the
                        bounding boxes with an area less than or equal to 1024
                        (32 * 32) will be filtered. Default: 0.
  --iou-threshold N     Threshold above which anchors are assigned to ground-
                        truth object boxes. Default: 0.5.
  --decimals N          Number of decimals to use when rounding anchors
                        ratios. Default: 1.
  --default-anchors-ratios N
                        List of anchors ratios to be compared with those found
                        by K-Means. It must be passed as a string, e.g.
                        '[(0.7, 1.4), (1.0, 1.0), (1.4, 0.7)]'. Default:
                        [(0.7, 1.4), (1.0, 1.0), (1.4, 0.7)].
$ wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
$ unzip annotations_trainval2017.zip
$ python kmeans_anchors_ratios.py \
    --instances ./annotations/instances_train2017.json \
    --anchors-sizes 32 64 128 256 512 \
    --input-size 512 \
    --normalizes-bboxes True \
    --num-runs 3 \
    --num-anchors-ratios 3 \
    --max-iter 300 \
    --min-size 0 \
    --iou-threshold 0.5 \
    --decimals 1 \
    --default-anchors-ratios '[(0.7, 1.4), (1.0, 1.0), (1.4, 0.7)]'

output:

[06/13 12:57:38] Reading ./annotations/instances_train2017.json
[06/13 12:57:54] Starting the calculation of the optimal anchors ratios
[06/13 12:57:54] Extracting and preprocessing bounding boxes
[06/13 12:57:57] Discarding 2 bounding boxes with size lower or equal to 0
[06/13 12:57:57] K-Means (3 runs): 100%|██████████████████| 3/3 [00:33<00:00, 11.06s/it]
        Runs avg. IoU: 80.48% ± 0.00% (mean ± std. dev. of 3 runs, 0 skipped)
        Avg. IoU between bboxes and their most similar anchors after norm. them to make their area equal (only ratios matter):
80.48%
[06/13 12:58:33] Default anchors ratios: [(0.7, 1.4), (1.0, 1.0), (1.4, 0.7)]
        Avg. IoU between bboxes and their most similar default anchors, no norm. (both ratios and sizes matter): 55.16%
        Num. bboxes without similar default anchors (IoU < 0.5):  253049/860001 (29.42%)
[06/13 12:58:37] K-Means anchors ratios: [(0.6, 1.5), (1.0, 1.0), (1.4, 0.7)]
        Avg. IoU between bboxes and their most similar K-Means anchors, no norm. (both ratios and sizes matter): 55.72%
        Num. bboxes without similar K-Means anchors (IoU < 0.5):  240788/860001 (28.00%)
[06/13 12:58:37] K-Means anchors have an IoU < 50% with bboxes in 1.43% less cases than the default anchors, you should consider to use them

For more infos see the tutorial.

Updates

  • [2020-10-28] fixed error about EfficientDet0 anchors inside the tutorial (thanks @RomRoc) and added code for all EfficientDets
  • [2020-06-13] added a comparision with the default anchors ratios, as suggested by @zylo117
  • [2020-05-23] added avg. IoU between bounding boxes and anchors
  • [2020-05-23] added a function to get annotations whose bounding boxes don't have similar anchors
  • [2020-05-23] added a function to generate anchors given ratios and sizes
  • [2020-05-17] created this repository

Acknowledgement

The code of this repo is mainly an adaptation of https://github.com/zhouyuangan/K-Means-Anchors.

Compared to the original, the K-Means implementation of this repo is more than 50x faster and some additional features are provided.

kmeans-anchors-ratios's People

Contributors

mnslarcher-enel avatar mnslarcher avatar dude-dodda avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.