Project Introduction: ppl.cv
Overview of ppl.cv
The ppl.cv
project emerges from the image processing needs of various teams within Sensetime, offering a high-performance collection of image algorithms frequently used in deep learning applications. As a lightweight and customizable framework, ppl.cv
addresses the challenges posed by the complexity and large volume of existing frameworks such as OpenCV. It aims to provide a more adaptable solution that only includes necessary algorithms when developing or deploying deep learning applications.
With this framework, developers can easily add support for new hardware platforms or implement new image processing algorithms to suit different applications. Users can also select specific image processing implementations for particular platforms, resulting in a tailored and compact library suitable for deployment.
Performance and Utility
ppl.cv
is designed to be highly efficient in image processing specifically for deep learning purposes. The project comes with several supported platforms and an extensive set of functions optimized for performance on hardware to ensure substantial speed improvements. Each function is accompanied by a brief usage example, a unittest to verify consistency with OpenCV counterparts, and a benchmark for performance comparison.
Comparisons and Targets
Functions within ppl.cv
are carefully aligned with OpenCV to minimize learning curves and maintain compatibility with established standards in the computer vision industry. Instead of abstract data types like those in OpenCV, ppl.cv
uses low-level C data types to make data more accessible across different hardware and programming languages. Despite platform differences, outputs from ppl.cv
functions strive to maintain consistency with CPU functions in OpenCV, adhering closely to mathematical principles.
Each function in ppl.cv
is independent, providing self-contained implementations with clear documentation. This approach simplifies the development and deployment process, allowing functions and platforms to be added or removed effortlessly. To achieve top performance, the framework employs various optimization techniques, including efficient memory access strategies and instruction parallelism, outperforming OpenCV where possible.
Moreover, ppl.cv
integrates seamlessly with ppl.nn, enabling effective collaboration in the deep learning application pipeline.
Supported Platforms
Currently, ppl.cv
supports several popular desktop and mobile CPU/GPU platforms, including:
- x86
- CUDA
- aarch64
- RISC-V
- OpenCL
Supported Algorithms
The framework's algorithm repertoire includes:
- Arithmetic operations
- Color space conversion
- Histograms
- Filtering
- Morphology
- Image pyramid sampling
- Image scaling and transformation
Future plans include adding image decoding and VSLAM (Visual Simultaneous Localization and Mapping) algorithms.
How to Build Quickly
For Linux
git clone https://github.com/openppl-public/ppl.cv.git
cd ppl.cv
./build.sh x86_64 # Linux x86_64
./build.sh aarch64 # Linux aarch64
./build.sh cuda # Linux x86_64 with CUDA
./build.sh riscv # Linux RISC-V
For Windows
Example using VS2015:
build.bat -G "Visual Studio 14 2015 Win64" -DPPLCV_USE_X86_64=ON
Documentation and Guides
Platform-specific documentation provides detailed guides on prerequisites, code building, unittests, benchmarks, and function customization. Here's a quick access point to the platform guides:
For API documentation, the framework uses doxygen
to generate detailed html docs.
Community and Contribution
The ppl.cv
project is open source, welcoming contributions and community engagement through GitHub Issues. Bug reports, feature suggestions, and coding contributions are encouraged. For new functions, the team suggests opening an issue first to discuss the contribution, reviewing platform-specific guidelines, and then submitting pull requests.
Contact
- WeChat Official Account: OpenPPL
- QQ Group: 627853444
Acknowledgements
The project acknowledges OpenCV as an inspiration and reference for its framework.
License
ppl.cv
is distributed under the Apache License, Version 2.0.