Skip to content

Latest commit

 

History

History
69 lines (54 loc) · 2.94 KB

README.md

File metadata and controls

69 lines (54 loc) · 2.94 KB

FiftyOne Tile

Tile your images to squares (e.g. 960x960 pixels) in FiftyOne directly. Tested with with bounding boxes (without orientation) only.

Tiles will be saved to destination-dataset. As detections might be split over tiles boundaries, they might need refinement.

  • intersecting label tag marks affected detections.
  • intersection sample field stores average detection intersection.
  • intersection detection field stores label intersections.

Where 1 means detection is not split and 0.1 means detection is visible only by 10% on this tile:

dataset.filter_labels("ground_truth", F("intersection") < 0.95)
dataset.sort_by(F("intersection"), reverse=False)

Walkthrough

  1. If resize is set: Resize image to given width and keep aspect ratio before tileing
  2. Add space around the image to make it a multiple of tiles size and place image in a random within the new boundaries.
  3. Make tiles with the given tile_size and transfer available detections to the tiles.
    • Overlap tiles by padding value (in pixels)
    • Omit labels at image's borders if the don't reach in the image by threshold value (in pixels)
  4. If save_empty is set, tiles without detections will be kept, if not omited.
  5. If runs is > 1: repeat those steps n times and keep those with least detections being split by tileing.

Installation

Make sure OpenCV is installed

fiftyone plugins download https://github.com/mmoollllee/fiftyone-tile/

Python SDK

You can use the compute operators from the Python SDK!

import fiftyone as fo
import fiftyone.operators as foo

dataset = fo.load_dataset("existing-dataset")

make_tiles = foo.get_operator("@mmoollllee/tile/make_tiles")

make_tiles(
   dataset,
   output_dir="filepath/to/save/tiles", # Required
   name="task-title", # Optional identifier for this task's logs
   destination="destination_dataset_name", # defaults to current dataset name with '_tiled' suffix
   labels_field="ground_truth", # which labels to transfer to the tiles (Default: ground_truth)
   resize=1200, # resize the image before tiling (default: None)
   tile_size=960, # (default: 960)
   padding=20, # Overlap tiles by given value (default: 32),
   threshold=0.15, # Omit labels at the edged if smaller than given percentage (default: 0.15)
   save_empty=False, # Keep tiles without labels (default: False),
   test=False, # Run Tiling only for 5 samples and make destination dataset non-persistent
   runs=1, # repeat n times and keep only those with least detections being split by tileing.
   log_level=2 # 0 = no output, 1 = only total output, 2 = samples output, 3 = even more
)

Sources

Powered by code of these repos: