Accelerated Computer Vision Lab (ACCV-Lab) is a systematic collection of packages with the common goal to facilitate end-to-end efficient training in the ADAS domain, each package offering tools & best practices for a specific aspect/task in this domain.
This section provides a brief overview of the contained packages & evaluations performed on them. Please also
see the CONTAINED PACKAGES section in the documentation for a more detailed description of the packages,
their functionality and usage, as well as the API reference for each package and examples demonstrating the
usage of the packages. Evaluation results are also provided for some of the packages (On-Demand Video Decoder,
Batching Helpers, DALI Pipeline Framework).
ℹ️ Note: We are planning to add demos for packages contained in ACCV-Lab in the future. Apart from acting as tutorials show-casing real-world examples, they will include the implementation of the experiments which were used to obtain the evaluation results as shown in the documentation of the packages.
The contained packages are:
- On-Demand Video Decoder: Designed for efficiently obtaining video frames from video files. Focused on the ADAS training domain, implementing access patterns typical for training workloads to ensure high throughput and low latency. Enables training directly from videos with performance similar to image-based training.
- Batching Helpers: Facilitates easy-to-implement batching for non‑uniform sample sizes, a common issue in loss computation in the ADAS domain.
- DALI Pipeline Framework: Framework on top of NVIDIA DALI that simplifies creation of pipelines for typical ADAS use‑cases and enables integration into existing training implementations with minimal changes.
- Draw Heatmap: Utility for drawing Gaussian heatmaps (e.g. for object detection training) on the GPU. Optionally, this package can process data in the batched format defined in the Batching Helpers package.
- Optim Test Tools: Utilities for testing and profiling the optimizations. This functionality can be used during development and evaluation of optimizations.
For more details on the packages (including performance evaluation results), please see the documentation for
each package in the CONTAINED PACKAGES section of the documentation.
If you are reading this in the README.md file (and not in the HTML documentation), please also see
the following Quick Start section below for instructions on how to build the full documentation.
A docker file setting up the environment to install and use the ACCV-Lab package is available in the
docker/ directory. It allows building an image and using it as root (build without any parameters),
but also allows to configure a specific user (see the Dockerfile for the parameters).
The image can be built as follows (run from inside the docker/ directory):
# Build container to be used as root
docker build -t image_name:tag .
# Build container for the current user
docker build \
--build-arg USER_ID=$(id -u) \
--build-arg USER_NAME=$(id -un) \
--build-arg GROUP_ID=$(id -g) \
--build-arg GROUP_NAME=$(id -gn) \
-t image_name:tag .
⚠️ Important: If you want to run the On-Demand Video Decoder package inside the docker container, you need to install and use the Nvidia container runtime. Please see the Docker Guide for more details.
Before installing the packages, you need to make sure that git submodules are initialized. This can e.g. be done by running the following command in your cloned version of the repository:
git submodule update --init --recursiveThere are scripts available for the common tasks such as installing the contained packages or building the documentation. The basic commands are:
# Install all namespace packages
./scripts/install_local.sh
# Install in development mode (see "Important" note below)
./scripts/install_local.sh -e
# Build documentation. This needs to be done after installing the packages, as the generation of the API
# documentation relies on the installed packages.
./scripts/build_docs.sh
⚠️ Important: Note that for some of the contained namespace packages, an editable build (i.e. development mode) may not be possible. This is the case if the package usesscikit-build. In this case, the package will be installed, but the binaries will be missing, leading to import errors when using the package. It is recommended to only use the editable installation while working on specific packages.
⚠️ Important: Before generating the documentation, the package needs to be installed, as the generation of the API documentation relies on the package being available (i.e. it should be possible to import it during the generation). Note that installing the package also ensures that binaries of the used C++ extensions are available, so that any docstrings defined there can also be extracted.
packages/- Individual namespace packages (each with their ownsetup.py)build_config/- Shared build utilities and configurationdocs/- Documentation generation implementation & common (i.e. not package-specific) part of documentationscripts/- Development and build scriptsdocs/guides/- Guides on how to work with this repository (also included in the documentation)docker/- Dockerfile for setting up a container able to runACCV-Lab
ℹ️ Note: The following guides are also available in the documentation (in the
Guidessection). If you are reading this in theREADME.mdfile, we recommend building the documentation first (see theQuick Startsection above) for better formatting and navigation, as well as to have access to the full documentation.
The following guides provide comprehensive information for different aspects of the project:
Step-by-step installation instructions for users and developers.
Guide for setting up a container able to run accvlab from the provided Dockerfile and how to use it.
Complete guide for developers on project structure, adding new namespace packages, and working with the build system.
Guide to code formatting standards and tools. Explains how to use the unified formatting script and maintain consistent code style across all namespace packages.
Comprehensive guide for setting up and maintaining project documentation. Covers Sphinx configuration, automatic documentation generation, and best practices for documenting namespace packages.
Guide for contributors on how to contribute to the project.
The project includes several namespace packages, each providing specific functionality.
Please see the CONTAINED PACKAGES section in the documentation for details on the packages.
Each namespace package contains its own documentation, C++ extensions, etc. and can be installed independently (see the Installation Guide for details).
For development information, see the Development Guide which covers:
- Project architecture and namespace package structure
- Adding new namespace packages
- Build system configuration
- Testing and documentation workflows
- Follow the Development Guide for development environment setup
- Use the Formatting Guide to maintain code style
- Ensure documentation is updated following the Documentation Setup Guide
Please also see the Contribution Guide for more a more detailed description
This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.