Workspace Schema
VisData workspaces are designed for developers who are used to working directly with JSON files and images. There is no database or query language to learn. You just modify files and observe the changes in the user interface.
Note
Changes in the dataset detail view are instantly viewable, but search or filtering operation will require a re-indexing operation.
Key Terms
Term |
Definition |
---|---|
Data Link |
A settings file that defines how data is imported (and exported). VisData is designed with
the assumption that external data can frequently change and allows developers to re-import in a convenient way.
The dataset and results can be deleted without impacting the data link.
|
Dataset |
Encompasses all information about a data import including frames, ground truth, and frame metadata.
This excludes algorithm results.
|
Result |
Output from computer vision system / algorithm. A dataset can have many separate results.
|
Result ROI Layer |
A result can be divided into multiple parts called region of interest (ROI) layers. For example each could be a separate layer:
objects detections, motion detections, and tracks.
|
Dataset Data Link
A dataset data link is a configuration file that defines import behavior of a dataset. This file is auto-generated through the user interface, but it has many advanced features that can be leveraged by power users who wish to edit this file directly. The schema of this file is designed in a hierarchical way such that bulk operations can be performed on import. There is some overlap between this format and dataset meta format since many of the values specified here are applied directly to the dataset on import.
$WORKSPACE
/ repo / settings / datasets / {suite}
.jsonFull Examples
Frame-Based Minimal Example
In this example two datasets will be imported from a frame-based source (a folder of images and matching COCO formatted annotations):
$WORKSPACE
/ repo / settings / datasets / san-francisco.json{
"san-francisco": { // {suite}
"embarcadero": { // {group}
// NOTE: suite and group are implicit in the Data Link UI
"source": "coco",
"nominal_fps": "30.0",
"raw_frames": [
{
"name": "vid_val",
"dir": "$EXTERNAL_DATA/sf_rgb_vid_val/images",
"annotations": "$EXTERNAL_DATA/sf_rgb_vid_val/coco_annotations.json"
}
]
}
}
}
Frame-Based COCO Example
In this example two datasets will be imported from a frame-based source (a folder of images and matching COCO formatted annotations):
san-francisco / embarcadero / 1583908321 - the entire COCO dataset
san-francisco / embarcadero / 1583908321_segment1 - the first 10 frames from the source above
Both datasets come from the same COCO source. The first entry 1.
imports all frames whereas the second entry 2.
demonstrates importing only a select range of frames (only the first 10).
{
"san-francisco": { // {suite}
"embarcadero": { // {group}
// NOTE: suite and group are implicit in the Data Link UI
"source": "coco",
"comments": "Text you can search on",
"nominal_fps": "30.0",
"raw_frames": [
{
// EXAMPLE 1: Here we import all images
"name": "1583908321",
"dir": "$EXTERNAL_DATA/sf_rgb_vid_val/images",
"annotations": "$EXTERNAL_DATA/sf_rgb_vid_val/coco_annotations.json",
"overrides": {
"comments": "Replaces top-level comment", // Replaces comments from above
},
"resize": {
"mode": "none"
}
},
{
// EXAMPLE 2: Here we split by range and also resize frames
"dir": "$EXTERNAL_DATA/sf_rgb_vid_val/images",
"annotations": "$EXTERNAL_DATA/sf_rgb_vid_val/coco_annotations.json",
"split_by_index": [
{
"name": "1583908321_segment1", // Choose name for this split
"range": [0, 9], // Take frame 0 - 9 inclusive (index.json determines index values/order)
"overrides": { // Overrides are optional
"comments": "Replaces top-level comment", // Replaces comments from above
}
}
],
"resize": {
"mode": "height",
"max_height": 540
}
}
]
}
}
}
Conservator Dataset Example
In this example two datasets will be imported from a frame-based source using the Conservator format. The Conservator dataset will broken out into multiple datasets based on each of the videos contained in the dataset.
san-francisco / embarcadero / img_val
san-francisco / embarcadero / video_id_1
san-francisco / embarcadero / video_id_2
san-francisco / embarcadero / video_id_3
{
"san-francisco": { // {suite}
"embarcadero": { // {group}
// NOTE: suite and group are implicit in the Data Link UI
"source": "conservator",
"nominal_fps": "30",
"conditions": {},
"raw_frames": [
{
"name": "img_val",
"dir": "$EXTERNAL_DATA/datasets/img_val/data",
"annotations": "$EXTERNAL_DATA/datasets/img_val/index.json",
"resize": {
"mode": "none"
}
}
]
}
}
}
Video Import Example
In this example two datasets will be imported from a video file:
san-francisco / mission / 1583908321
san-francisco / mission / 1583872845_segment1
This is similar to the above example except these datasets come from two
different videos. In this example there are also "overrides"
applied to "conditions"
and "comments"
.
This presents a template for importing large amounts of data with
reduced manual data entry. Properties are inherited from the top level
and overridden when needed.
{
"san-francisco": { // {suite}
"mission": { // {group}
// NOTE: suite and group are implicit in the Data Link UI
"source": "video",
"comments": "Text you can search on",
"dataset_type": "video",
"sensor_mount": "stationary",
"sensor_type": "visible",
"nominal_fps": "30.0", // Determines activity plot resolution
"conditions": {
"environment": "urban",
"placement": "outdoor",
"time_of_day": "day",
"weather": {
"rain": "no",
"hail": "no",
"snow": "no",
"snowing": "no",
"fog": "no",
"glare": "no",
"wind": "no",
"overcast": "no"
}
},
"raw_video": [
{
// Example 1: import the entire video
"name": "1583908321",
"video": "$EXTERNAL_DATA/san-francisco/mission-street_2020-03-15_3.50.24_PM.mov",
"overrides": {
"conditions": { // Replace conditions defined above
"weather": {
"high_contrast": "yes"
},
"time_of_day": "dusk"
},
"comments": "This is a very interesting video clip"
}
},
{
// Example 2: split the video by range
"video": "$EXTERNAL_DATA/san-francisco/mission-street_2020-03-10_1.40.45_PM.mov",
"split_by_index": [
{
"name": "1583872845_segment1", // Choose name for this split
"range": [0, 100], // Take frame 0 - 100 inclusive
"overrides": {
"conditions": { // Replace conditions defined above
"weather": {
"overcast": "yes"
}
}
}
}
]
}
]
}
}
}
Top-level Fields
Key |
Type |
Example |
Description |
---|---|---|---|
{suite} |
key |
“sf”: {..} |
Required top-level dataset identifier (must match name of the file) |
{suite}.{group} |
key |
“embarcadero”: {..} |
Required mid-level dataset identifier.
All following keys are contained within this object (e.g. {suite}.{group}.”source”)
For example:
{ "sf": "embarcadero": { "source": "coco", .. } } |
“source” |
string |
“coco” |
Required that describes how to import the datasets in this
group .While initially it may seem like an artificial constraint to require all children in
the group to be of the same type, this has two key benefits:
1. Allows for batch import and tagging features which apply to the entire group
2. Requires to user to have intentional workspace organization to separate data
-
coco COCO Object Detection COCO format-
conservator Conservator dataset format-
images Simply a directory of image files. Order will be determined by alphanumerical sort.-
video Import from a video file-
mot Multi object tracking format-
nntc The import came from an NNTC (Teledyne FLIR’s Neural Network Target Classifier) |
“raw_video” |
list |
[ {..}, {..}, .. ] |
List of objects. Each object describes how the source is imported and corresponds
to one dataset. This is a conditional requirement such that if “raw_frames”
is not provided “raw_video” must be provided. See Raw Video
|
“raw_frames” |
list |
[ {..}, {..}, .. ] |
List of objects. Each object describes how the source is imported and corresponds
to one dataset. This is a conditional requirement such that if “raw_video”
is not provided “raw_frames” must be provided. See Raw Frames
|
“nominal_fps” |
string |
“30.0” |
Required field with the Approximate frames per second of the footage.
Represented as a string to prevent rounding of floating point numbers.
For a image dataset this controls the frequency of the sampling in the
activity plot on the search page.
|
“dataset_type” |
string |
“images” |
Optional field that determines the type of content that is stored in a dataset. A video dataset
means it’s a continuous set of frames at a specific frame rate.
An image dataset means it consists of discrete images that are not necessarily
temporally related and by definition do not have a consistent frame rate.
-
"unknown" unknown-
"video" video-
"images" imageNote: dataset metadata has a similar property which is represented by an integer enumeration
|
“conditions” |
object |
Optional. Conditions that describe the dataset including weather and environment.
May only be applicable for video / continuous datasets rather than image / discrete datasets
(however still allowed for image / discrete datasets). See Data Link Conditions
|
Conditions
Conditions are a predefined way to tag and filter data. For instance, suppose you tag the appropriate datasets with “night” time of data. This allows you to investigate your algorithm’s performance at night by simply searching for “night” in the primary dataset view and observing metrics in the right-most columns.
They are entirely optional and the values default to “unknown” when any of the keys are not provided.
Example
"conditions": {
"environment": "suburban",
"placement": "outdoor",
"time_of_day": "night",
"weather": {
"rain": "no",
"hail": "no",
"snow": "no",
"snowing": "no",
"fog": "no",
"glare": "no",
"wind": "unknown",
"overcast": "no"
}
}
Raw Frames
A frame-based dataset import is where the individual frames have already been extracted into image files (as opposed to a video file like an mp4).
"raw_frames": [
{
"name": "1583908321",
"dir": "$EXTERNAL_DATA/sf_rgb_vid_val/images",
"annotations": "$EXTERNAL_DATA/sf_rgb_vid_val/anno.json",
"overrides": {..},
"split_by_index": [..],
"resize": {..}
},
..
]
Supported frame data formats:
coco
COCO Object Detection formatmot_seq
Multi object tracking sequence formatconservator
Conservator dataset formatnntc
The import came from an NNTC (Teledyne FLIR Neural Network Target Classifier)images
Import from a directory of image files (order will be determined by alphanumerical sort)
Key |
Type |
Example |
Description |
---|---|---|---|
“name” |
string |
“1583908321” |
Low-level dataset identifier. This conditionally optional because if the source
is split up into segments (
"split_by_index" ) a name must be providedfor each segment.
|
“dir” |
string |
“$EXTERNAL_DATA/sf_rgb_vid_val/images” |
The directory that contains the the images. This must start with
$EXTERNAL_DATA (or
$WORKSPACE ) for two reasons:1. It ensures the Docker container understands the mounted location
2. It facilitates import across shared workspaces on machines
that do not necessary have the same directory structure
|
“annotations” |
string |
“$EXTERNAL/sf_rgb_vid_val/anno.json” |
The file that contains the annotations for this source.
This is optional for most sources.
|
“overrides” |
object |
{..} |
Optional. See examples
|
“split_by_index” |
list |
[..] |
Optional. A source can be split by any arbitrary number of segments.
Each object in this list defines a new dataset. See examples for more details.
|
“resize” |
object |
{..} |
Optional. See Resizing
|
Raw Video
A video-based dataset import is where the app extracts frames from a video file (e.g. mp4, mov, mkv, etc).
This is specifically for groups that have the “source” video
.
"raw_video": [
{
"name": "1583908321",
"video": "$EXTERNAL_DATA/sf/mission-street.mp4",
"overrides": {..},
"split_by_index": [..],
"resize": {..}
},
..
]
Key |
Type |
Example |
Description |
---|---|---|---|
“name” |
string |
“1583908321” |
Low-level dataset identifier. This conditionally optional because if the source
is split up into segments (
"split_by_index" ) a name must be providedfor each segment.
|
“video” |
string |
“$EXTERNAL_DATA/sf/mission-street.mp4” |
The directory that contains the the images. This must start with
$EXTERNAL_DATA (or
$WORKSPACE ) for two reasons:1. It ensures the Docker container understands the mounted location
2. It facilitates import across shared workspaces on machines
that do not necessary have the same directory structure
|
“overrides” |
object |
{..} |
Optional. See examples
|
“split_by_index” |
list |
[..] |
Optional. A source can be split by any arbitrary number of segments.
Each object in this list defines a new dataset. See examples for more details.
|
“resize” |
object |
{..} |
Optional. See Resizing
|
Supported video formats
FFMPEG is used internally to extract video frames and prepare them for the workspace with the following supported formats:
Resizing
Example 1 (Default)
No resizing
"resize": {
"mode": "none"
}
Example 2
Resize based on a height limit. This is the default setting when no resize settings are provided.
"resize": {
"mode": "height",
"max_height": 540
}
For backwards compatability this is the same as leaving off resize settings.
Example 3
Resize based on a width limit
"resize": {
"mode": "width",
"max_width": 960
}
Result Data Link
A data link for a results is a configuration file that defines import behavior of algorithm results, such as object detections, for a dataset. This file is auto-generated through the user interface, but it has many advanced feature that can be leveraged by power users who wish to edit this file directly.
Path structure: $WORKSPACE
/ repo / settings / results / {suite}
.json
Full Examples
Result Data Link Internal Format Example
Example path: $WORKSPACE
/ repo / settings / results / san-francisco.json
{
"embarcadero": { // {group}
"1593032867": { // {name}
"_results": { // All result import settings are stored under this key
"YoloV4 960x512": [ // {result_title}
{
"name": "Detections",
"roi_key": "roi_d",
"color": "rgba(255,0,0,0.95)",
"type": "internal",
"path": "$WORKSPACE/detections/yolov4_960x512/san-francisco/embarcadero/1593032867.json"
},
{
"name": "Tracks",
"roi_key": "roi_d",
"color": "blue",
"type": "internal",
"path": "$WORKSPACE/detections/yolov4_960x512/san-francisco/embarcadero/1593032867.json"
}
],
"YoloV5 960x512": [
{
"name": "Detections",
"roi_key": "roi_d",
"color": "rgba(255,0,0,0.95)",
"type": "internal",
"path": "$EXTERNAL_DATA/detections/yolov5_960x512/san-francisco/embarcadero/1593032867.json"
}
]
}
}
}
}
Top-Level Fields
Key |
Type |
Example |
Description |
---|---|---|---|
{group} |
object |
“embarcadero”: {..} |
Required mid-level dataset identifier. |
{group}.{name} |
object |
“1593032867”: {..} |
Required name of the dataset for this result. |
{group}.{name}.”_results” |
object |
All following result data link settings are stored under the “_results” key
For example:
{"embarcadero": "1593032867": {"_results": {..} } } |
|
{group}.{name}.”_results”.{result_title} |
list |
“2022 Q1”: [ {..}, {..}, .. ] |
Required list of objects that contains a Result Entry
|
Result Entry
- Result Entry Example
{ "name": "Detections", "roi_key": "roi_d", "color": "rgba(255,0,0,0.95)", "type": "internal", "path": "$WORKSPACE/detections/yolov4_960x512/san-francisco/embarcadero/1593032867.json" }
Key |
Type |
Example |
Description |
---|---|---|---|
“name” |
object |
“embarcadero”: {..} |
Required mid-level dataset identifier. |
“roi_key” |
object |
“roi_d”: {..} |
Required region of interest (ROI) key. IMPORTANT: this key must be unique within each list of result entries. |
“color” |
string |
“rgba(255,0,0,0.95)” |
Required color description (standard HTML/CSS format). See Web CSS Color Picker |
“type” |
string |
“formatted_detections” |
Required format type for the result import
-
"internal" Internal format. See Frame and Result Meta format documentation.-
"formatted_detections" Teledyne FLIR Formatted Detections format. See External Data Formats-
"nntc_motion_detector" Teledyne FLIR Motion Detection format-
"mot_seq" MOT Challenge sequence file (see MOT Challenge Docs) |
“label_vector_path” |
string |
“$WORKSPACE/file.json” |
|
Dataset Meta
A dataset file contains all of the high-level information about a dataset including dataset-level attributes and frame-level aggregates (but no other frame-level data).
Datasets come in two major varieties: asset (image, video, etc) and package. You can think of an asset dataset as a file and package as a folder that contains references to other (asset) datasets.
Path Structure: $WORKSPACE
/ repo / dataset_meta / {suite}
/ {group}
/ {name}
.json
Full Examples
Asset Example
This asset (dataset_type=1) was imported from a video and is referenced in several packages.
Example Asset Path: $WORKSPACE
/ repo / dataset_meta / san-francisco / embarcadero / 1583908321.json
{
"suite": "san-francisco", // Top-level dataset identifier
"group": "embarcadero", // Mid-level dataset identifier
"name": "1583908321", // Low-level dataset identifier (unix timestamp in this example)
"dataset_type": 1, // 1 / "video"
"sensor_type": 1, // 1 / "rgb" (taken with a visible camera)
"sensor_mount": 1, // 1 / "stationary" (the camera does not move)
"source": "video", // The footage was imported from a video file
"source_info": {
"video_path": "$EXTERNAL_DATA/videos/san-francisco-embarcadero.mov"
"index_end": 105,
"index_start": 0
},
"conditions": {
"environment": 1,
"placement": 0,
"time_of_day": 3,
"weather": {
"fog": 0,
"glare": 0,
"hail": 0,
"high_contrast": 0,
"overcast": 1,
"rain": 0,
"snow": 0,
"snowing": 0,
"wind": 0
}
},
"comments": "User specified full-text searchable comments",
"package_refs": [
// This asset is contained in the following package (ref is a dataset id)
{"suite": "san-francisco", "group": "embarcadero", "name": "1583908321"},
{"suite": "san-francisco", "group": "embarcadero", "name": "1583918321"},
{"suite": "san-francisco", "group": "embarcadero", "name": "1583928321"}
],
"height": 540,
"width": 962,
"flag_all_reviewed": 0,
"flag_cloud": 0,
"flag_done": 0,
"flag_flagged": 0,
"gps": "37.80004598897606, -122.3977882220308",
"highlights": [ .. ],
"location": "Pier 9, Embarcadero District, San Francisco, California, United States",
"nominal_fps": "30.0",
"preview_filename": "00335.jpg",
"searchroi_bike": 3836.0376,
"searchroi_dog": 0.0,
"searchroi_keywords": "urban morning low_light dawn overcast",
"searchroi_person": 4473.642,
"search_thumbnails": { .. },
"timezone": "Europe/Amsterdam",
"address": "Pier 9, #9, San Francisco, CA 94111, United States",
"brightness": 99
}
Package Example
This package (dataset_type=3) was imported from Conservator
Example Package Path: $WORKSPACE
/ repo / dataset_meta / san-francisco / embarcadero / all.json
{
"suite": "san-francisco",
"group": "embarcadero",
"name": "all",
"dataset_type": 3, // 3 / "package", PACKAGE dataset
"sensor_type": 1, // 1 / "rgb", ALL children datasets use a visible camera
"sensor_mount": 3, // 3 / "various", children have different values
"source": "conservator",
"source_info": { .. },
"comments": "User specified full-text searchable comments",
// This package Contains the following standard datasets (refs are dataset ids)
"package_refs": [
{"suite": "san-francisco", "group": "embarcadero", "name": "1583908321"},
{"suite": "san-francisco", "group": "embarcadero", "name": "1583918321"},
{"suite": "san-francisco", "group": "embarcadero", "name": "1583928321"}
]
}
Top-Level
Key |
Type |
Example |
Description |
---|---|---|---|
“suite” |
string |
“san-francisco” |
Required top-level dataset identifier. Must match |
“group” |
string |
“embarcadero” |
Required mid-level dataset identifier. Must match |
“name” |
string |
“1583908321” |
Required low-level dataset identifier. Must match |
“dataset_type” |
int / enum |
2 (“images”) |
Required dataset type to help filter and organize datasets.
This determines the type of content that is stored in a dataset.
A video dataset means it’s a continuous set of frames at a specific frame rate.
An image dataset means it consists of discrete images that are not necessarily temporally related.
A package dataset is a collection of other asset datasets (like a folder).
-
0 unknown (assumed asset)-
1 video (asset)-
2 images (asset)-
3 package |
“nominal_fps” |
string |
“30.0” |
Required approximate frames per second of the video.
This primarily controls the frequency of the sampling in the activity plot on the search page
and helps balance search relevance between datasets.
Represented as a string to prevent rounding of floating point numbers.
|
“conditions” |
object |
{ .. } |
Key and object are required, but can be empty.
Conditions that describe the dataset including weather and environment used for filtering.
|
“source” |
string |
“conservator” |
Optional descriptor of data source (defaults to unknown).
-
unknown undetermined source-
coco COCO Object Detection COCO format-
mot_seq Multi object tracking sequence format-
conservator Conservator dataset format-
nntc The import came from an NNTC (Teledyne FLIR Neural Network Target Classifier)-
images Import from a directory of image files (order will be determined by alphanumerical sort)-
video Import from from a video file |
“source_info” |
object |
{ .. } |
Optional object with additional contextual information about the source of data
|
“comments” |
string |
Optional free form comments from user. Used for full-text search.
|
|
“package_refs” |
list |
[ {..}, .. ] |
A list of dataset IDs (references) that describe package relationships.
If it is a package these will be the children (all of the datasets that are in this package).
If it is an asset then these will be the parents (all of the packages this dataset belongs to)
A Package Ref object is defined as:
{"suite": "{suite}", "group": "{group}", "name": "{name}"} |
“sensor_type” |
int / enum |
1 (“rgb”) |
Optional type to describe the sensor to help filter and organize datasets.
-
0 unknown-
1 rgb (visible)-
2 thermal (LWIR)-
3 various |
“sensor_mount” |
int / enum |
2 (“moving”) |
Optional type to describe the sensor mount to help filter and organize datasets.
-
0 unknown-
1 stationary-
2 moving-
3 various |
“flag_*” |
int |
-1 (unknown)
0 (no)
1 (yes)
|
The flags describe high-level attributes about each dataset and they can be set by
the user via the gui. These are top-level fields for technical reasons related to
full-text search indexing.
User-set
flag_flagged - dataset has been flagged by the userComputed
flag_all_reviewed auto-generated. Specifies all frames have annotationsflag_has_scores dataset has all available scoresflag_trainval the dataset is part of training / validationflag_is_package the dataset is part of training / validation |
“searchroi_{label}” |
float |
3836.0376 |
Computed fields for full-text search. Determines full-text search relevance boosting.
|
“search_thumbnails” |
object |
{ .. } |
Computed object for full-text search. Determines thumbnail to display while searching.
|
“highlights” |
object |
{ .. } |
Computed object for full-text search. Used to display the mini activity
plot in the datasets view.
|
Conditions
"conditions": {
"environment": 5, // Various
"placement": 0, // Outdoor
"time_of_day": 1, // Night
"weather": {
"rain": -1, // Unknown
"hail": 0, // No
"snow": 1, // Yes
"fog": 1,
"glare": 0,
"wind": 0,
"overcast": 0
}
}
-1
unknown0
no1
yes
Source Info
"source_info": {
"annotations_path": "$EXTERNAL/conservator/dataset_vid_val/index.json",
"frames_path": "$EXTERNAL/conservator/dataset_vid_val/data"
}
Frame and Result Meta
A frame meta file describes frame information for a dataset (which includes ground truth & pinned result) and the same format is used for results.
Only asset datasets have frame meta files while package datasets do not have frame information or results.They only include a Dataset Meta file.
There will always be at minimum one file that holds the frames information for a dataset (in repo/frame_meta/…) and there can be many result files for a single dataset (in results/…).
Dataset Meta Path structure:
$WORKSPACE
/ repo / frame_meta /{suite}
/{group}
/{name}
.jsonResult Meta Path structure:
$WORKSPACE
/ results /{suite}
/{group}
/{name}
/{result_title}
.json
General Structure
{
"_description": "Computer vision result...",
"_roi_schema": {
// Region of Interest Schema Object
"roi_{region_of_interest_name}": { .. }
},
"frames": [
// Frame Object
{
"roi_{region_of_interest_name}": [
// Region of Interest Object
{ .. }
],
"frame": 1, // "frame_number" (1 is the first frame)
"frame_time": 1000,
"qa_status": "approved",
"flagged": true,
"reviewed": true,
"extra_info": { .. },
"custom": { .. }
}
]
}
Top-Level
Key |
Type |
Example |
Description |
---|---|---|---|
“_roi_schema” |
list |
[ {..}, .. ] |
Required list of Region of Interest Schema objects that
describe high-level properties of region of interest
(“roi_{name}” key) objects in the “frames” list.
Starts with a _ so that it readily shows up at the head of the file.
|
“frames” |
list |
[ {..}, .. ] |
Required list of Frame objects in the dataset.
Dataset meta will only include the following keys:
-
roi_gt - Ground truth annotation layer-
roi_s - Pinned result layer |
“_description” |
string |
“QA dataset” |
Optional A human-readable description of the
meta file to help the developer/data scientist.
Shows up in UI as comment field. the “frames” list.
|
Frame
Key |
Type |
Example |
Description |
---|---|---|---|
“frame” |
int |
1 |
Required frame index that determines the order of the frame (starts from 1). |
“frame_time” |
int |
1000 |
Required relative time in milliseconds from the first frame. |
“qa_status” |
string |
“approved” |
Optional field that determines the QA status of the ground truth in the frame. |
“flagged” |
boolean |
true |
Optional field that keeps track of flagged status.
Frames can be flagged for a user-defined reason.
|
“roi_{name}” |
list |
[ {..}, .. ] |
List of Region of Interest objects.
Allowed characters for
{name} are a-z, A-Z, 0-9, and underscore. |
“reviewed” |
boolean |
true |
Optional field that determines if the frame has been annotated.
The name “reviewed” is a misnomer and there is a proposed rename.
|
“extra_info” |
object |
{ .. } |
Dictionary with additional frame information that is automatically adding during import.
For example the original input frame resolution is stored in this dictionary.
The content stored here is often source-specific.
|
“custom” |
object |
{ .. } |
Optional free-form object for storing custom frame metadata.
Accepts any valid JSON object, including nested objects and arrays.
|
Region of Interest
A object that describes a region of interest (ROI) for a given frame.
Key |
Type |
Example |
Description |
---|---|---|---|
“class” |
string |
“vehicle” |
Optional label name of the region of interest. |
“score” |
float |
0.896 |
Optional field that determines if the frame has been annotated.
The name “reviewed” is a misnomer and there is a proposed rename.
|
“bndbox” |
object |
{ .. } |
Determines the bounding box boundaries of the region of interest (ROI).
Example:
“bndbox”: {
“xmax”: 960,
“xmin”: 212,
“ymax”: 531,
“ymin”: 163
}
|
“custom” |
string |
{ .. } |
Optional free-form object for storing custom frame metadata.
Accepts any valid JSON object, including nested objects and arrays.
|
Region of Interest Schema
Describes how the region of interest (ROI) layer should be displayed. Also includes hints for the import process.
Key |
Type |
Example |
Description |
---|---|---|---|
“name” |
string |
“Detections” |
Required name that shows up for the layer in the user interface |
“color” |
string |
“rgba(255,0,0,0.95)” |
Required color description (standard HTML/CSS format).
|
“details” |
string |
“YoloV7” |
User-defined details.
|
“source_url” |
string |
“$EXTERNAL_DATA/path” |
Optional source path of the data imported.
|
“source_created_at” |
int |
1601582020 |
Unix timestamp which describes the time the source was created.
This helps when determining if a re-import is necessary.
|
“source_updated_at” |
int |
1601582020 |
Unix timestamp which describes the time the source was updated.
This helps when determining if a re-import is necessary.
|
“created_at” |
int |
1601582020 |
Unix timestamp that describes the time the ROI layer was created.
|
“updated_at” |
int |
1601582020 |
Unix timestamp that describes the time the ROI layer was last updated.
|
Score Settings
The score settings file determines scoring operations (when running score detections from workspace tools) and display of metrics in the search view. A display score file can by manually created by users.
$WORKSPACE
/ repo / settings / score.jsonSee Remap File definition for details on the
"remap"
format.See Label Vector definition for details on the
"labels"
format.
Example
{
"#description": "Metrics for two algorithms: Algorithm A (CSPNet) & Algorithm B (Yolo V4)",
"score": [
{
"#comment": "score file at: $WORKSPACE/score/scores_for_algorithm_a/score_map.json",
"display_score_file": "score_mAP.json",
"result_name": "scores_for_algorithm_a",
"display_name": "Algorithm A",
"description": "overall mAP using CSPnet Resnext50 960x512 model",
"labels": "primary_labels.json",
"remap": "primary_remap.json"
},
{
"#comment": "score file at: $WORKSPACE/score/scores_for_algorithm_b/score_map.json",
"display_score_file": "score_mAP.json",
"result_name": "scores_for_algorithm_b",
"display_name": "Algorithm B",
"description": "overall mAP using Yolo V4 960x512 model",
"labels": "primary_labels.json",
"remap": "primary_remap.json"
}
]
}
Display Score Map
This is format that maps a dataset to a score. The name of this file is user-defined to accommodate for various different metrics per result. In other words a single result may have mAP scores, framerate values, number of false positives, etc.
Path structure: $WORKSPACE
/ score / {result_name}
/ {score_dict_name}
.json
Object Structure
{
"{suite}_{group}_{name1}": 0.9993,
"{suite}_{group}_{name2}": 0.9226,
"{suite}_{group}_{name3}": 0.0904
}
Example
Example path: $WORKSPACE
/ score / scores_for_algorithm_a / score_mAP.json
{
"san-francisco_embarcadero_1487377316": 0.9993,
"san-francisco_embarcadero_1487381566": 0.9226,
"san-francisco_embarcadero_1487386550": 0.0904
}