Skip to content

Releases: Kitware/kwiver

KWIVER v1.1.0

19 Jul 14:10
Compare
Choose a tag to compare

Release Summary

This is a minor release of KWIVER that provides both new functionality and
fixes over the previous v1.0.0 release. There are numerous changes in this
release that have been motivated primarily by three different applications
of KWIVER. One is the use of KWIVER in MAP-Tk to provide 3D reconstruction
algorithms to the MAP-Tk tools and TeleSculptor GUI application. This
work has been largely sponsored by the US Air Force Research Laboratories.
A second driving factor is the use of KWIVER as an evaluation framework for
video surveillance applications in the upcoming IARPA DIVA program. The
third driving factor for improvements in this release is the use of KWIVER
as the basis for the VIAME toolkit for underwater image processing, supported
by NOAA. These project needs have improved the general processing framework
of KWIVER as well as specific algorithm improvements in 3D reconstruction
and object detection in video.

Vital, the core framework of KWIVER, has been updated in several ways in
this release. Previously there were multiple plugin loader mechanisms
stemming from the origins of KWIVER as the fusion of multiple projects.
In this release there is now a unified plugin loader framework that provides
a common mechanism for loading algorithm plugins (Arrows), process and cluster
plugins (Sprokit), loggers (Vital), and so on. There is also a single tool,
plugin_explorer, that allows introspection of these plugins of various types.
This release also has a new multi-threading API in Vital that provides an
interface for a thread pool with multiple back ends. The thread pool API
allows KWIVER algorithms to more easily leverage parallel processing without
being tied to a single thread management library. Additional back ends,
like Intel TBB, will be added in future releases. C and Python bindings for
Vital have also been extended considerably in this release.

Some other changes in Vital enhance the way image data is loaded and stored.
This release generalizes the image data structure to support images with
various pixel types. Previously Vital only supported 8-bit images. It now
supports many pixel types including 16 and 32 bit integers and single and
double precision floating point types. Also new in this release is a
video input API for reading image sequences directly from video sources.
There are implementations of this API in Arrows for reading video files
directly as well as lists of images. The video API also supports reading
video metadata that is encoded with the video.

In support of the MAP-Tk TeleSculptor application, many abstract algorithms
in Vital and their implementations in Arrows now support callbacks. These
callbacks allow the algorithms to report intermediate results or to signal the
algorithm to terminate early. These callback are used in GUI applications
to get live updates of processing results and to allow users to cancel
processing. This release also adds binary serialization for feature detectors
and descriptors, which allows algorithms to cache features and descriptors
on disk and load them back in later. The algorithms for matching features
have also been improved for better handling of very large images. Large images
are best matched by comparing features at a coarse scale before matching fine
scale features.

In support of the DIVA program, the Sprokit pipeline framework now supports
frame dropping and processing time-outs. These changes help prevent the
pipeline from falling behind in applications that need to keep up with real
team processing requirements. A pipeline can be configured to drop frames
if needed to catch up.

In support of the VIAME toolkit, this release adds new object detection
APIs and provides and implementation of those APIs use the Darknet YOLO
(You Only Look Once) network architecture.

There are many other smaller changes in this release. These are detailed in
the change log below.

Updates since v1.0.0

Arrows

  • Updated all algorithms to use the new plugin loader approach.

Arrows - Ceres

  • Added a Ceres implementation of the optimize_cameras abstract algorithm.
    This implementation is very similar to the bundle_adjust algorithm but
    does not modify the landmarks.

  • Refactored common config options and helper functions between
    optimize_cameras and bundle_adjust into new shared classes in options.h.
    This makes it much easer to create a new Ceres solver algorithm and
    reuse the same solver options or camera options.

  • Implemented callbacks for the Ceres bundle_adjust to emit the state of
    the optimization after each iteration if a callback is registered.

  • Added two forms of camera path regularization to the bundle_adjust and
    optimize_cameras algorithms. The first adds a cost that favors smooth
    camera paths; the camera location at time t should be close to the
    average of locations at t-1 and t+1. The second adds cost for cameras
    moving along the principal ray direction; this allows optimization to
    favor focal length change (zoom) over forward motion.

Arrows - Core

  • Added an option to the PCA canonical transform estimator to shift the ground
    plane vertically to place a configurable percentile of the landmarks above
    the ground.

  • Implemented callbacks for the core initialize_cameras_landmarks algorithm
    to emit the set of cameras and landmarks after each camera is added if a
    callback is registered.

  • Added logic to compute changes in ground sample distance (GSD) as images are
    added in the camera_landmark_initialization algorithm. If GSD changes are
    above a threshold then assume the camera intrinsics have changed and create
    a new shared intrinsic model. This allows for shared intrinsics when the
    camera does not zoom but varying intrinsics when zoom is detected.

  • Changed the order of when Necker reversal correction is attempted in the
    initialize_cameras_landmarks algorithm. Previously it was attempted at the
    end after adding all cameras, often too late. Now it is attempted the
    first time the ratio of reversed to non-reversed RMSE is within a threshold.
    Necker reversal is only attempted once. It is either needed or not.

  • Added default version of dynamic_configuration which always returns
    an empty config block.

  • Added a core implementation of "filter_tracks" which applies filters based
    on track length or based on importance of the track in covering a match matrix.

  • Added a core implementation of "filter_features" which filters features
    based on key point scale.

  • Changed "match_features_homography" to apply feature filtering to both the
    source and destination frames. This seems to be more robust when the number
    of features is very large. Also adjusted the homography inlier scale with
    respect to the average scale of the features.

  • Added multi-threaded operation to close_loops_keyframe and
    close_loops_exhaustive algorithms. Frame matching tasks are added to the
    thread pool.

  • Added a video_input algorithm for image lists that treats a sequence of
    images files like a video, using an image_io algorithm to load each frame.

  • Added a video_input algorithm for POS files that produces a metadata-only
    stream out of POS files associated with a list of images. Each image file
    name is matched to a POS file with the same base name in a specified metadata
    directory.

  • Added a video_input algorithm that splits imagery and metadata between two
    other video_input sources. For example this implementation can combine the
    images from an image_list video_input and metadata from a POS video_input.

  • Added a video_input filter algorithm that reads data from another
    video_input instance and reduces the frame range or adjusts frame timing.

  • Updated hierarchical_bundle_adjust and initialize_cameras_landmarks to
    accept an optional metadata_map and pass it along to nested algorithms.

  • Generalized the track_features_core algorithm to handle tracking on frames
    that may come out of order and frames that have already been tracked. Also
    removed the caching of the next frame id in the algorithm and now retrieve it
    from the existing track set instead. These changes are to support the
    MAP-Tk GUI which allows users to stop tracking, change the active frame,
    and start a new tracker.

  • Loop closure is now an optional component algorithm of the core feature
    tracker. Leaving the loop closure algorithm unspecified will cause the
    tracker to skip loop closure.

  • Updated the core tracking algorithm to read and write features and
    descriptors to disk if a feature_descriptor_io algorithm is specified.

  • Changed the meaning of the final_reproj_thresh parameter of the core
    initialize_cameras_landmarks algorithm to be relative to the final median
    reprojection error rather than an absolute measure. This adaptive
    threshold is more robust.

Arrows - OpenCV

  • Updated the OpenCV image container functions to handle conversions between
    vital::image and cv::Mat for all supported pixel types and memory layouts.

  • Updated the ocv::image_io algorithm to load images of various pixel types
    and to explicitly apply BGR to RGB conversions instead of hiding those
    color conversions elsewhere (see fixes below).

  • Added implementation for draw_detected_object_set.

Arrows - VXL

  • Updated the VXL image container functions to handle conversions between
    vital::image and vil_image_view_base_sptr for all supported pixel types and
    memory layouts.

  • Generalized the vxl::image_io algorithm to read and write images with
    different pixel formats (bool, uint8, uint16, float, etc.). Added a
    "force_byte" option to always load or save as u...

Read more

KWIVER v1.0.0

19 Jul 14:21
Compare
Choose a tag to compare

Release Summary

This is the first formal release of KWIVER. The features in this
initial release are summarized below. Future release notes will
describe modifications since the previous release.

Vital is a result of refactoring the common support functionality,
basic types and abstract algorithms from the MAP-Tk package combined
with some core capabilities from the Vibrant package.

Library Features

Package Configuration, Build System, & Documentation

  • Build system uses CMake as a meta build system for easy build configuration,
    cross-platform compiling, and dashboard regression testing.

  • A unit testing framework using CTest is provided in the 'test' directory.
    This makes writing unit tests easy.

  • CMake scripts are provided to make it very easy to build the Vital code
    documentation using Doxygen. Just turn on the "VITAL_ENABLE_DOCS" option
    in CMake to create a documentation build target (if you have Doxygen).
    Turn on "VITAL_INSTALL_DOCS" to have to built documentation installed.

Common Support Functionality

  • The Logger supports a general purpose logging facility that
    interfaces to some well known logging packages.

  • Config management converts config files to internal configuration
    structures. These config blocks are used to specify the behavior of
    algorithms and other software components.

  • Video metadata parsing can be used to decode the metadata stream
    in video files.

  • Algorithm Plugin loader loads and makes algorithms packaged as
    shared objects available to be instantiated and executed.

Common algorithm data types

This is a collection of data types used by the algorithms and
tools. These data types are needed to interface with the
algorithms. There are also C and python bindings for some of these
types.

Abstract Algorithms

The abstract algorithms provide an interface with which to interact
with the concrete algorithms.

KWIVER v0.2

01 Feb 14:08
Compare
Choose a tag to compare
KWIVER v0.2 Pre-release
Pre-release

End to End Video Analytics

Release corresponding January 2016 Kitware Source Article An End to End Video Analytics Toolkit