v0.18.0
Release Highlights
CV-CUDA v0.18.0-beta includes the following changes:
New Features and Enhancements
- Added FP16 (F16) image support to the following operators, on the tensor,
var-shape, and planar paths alike:
AdjustContrast,AdjustHue,AdjustSaturation,AdjustSharpness,AutoContrast,AverageBlur,BilateralFilter,BrightnessContrast,ChannelReorder,ColorTwist,Conv2D,ConvertTo,CopyMakeBorder,CropFlipNormalizeReformat,CvtColor,Erase,Flip,GammaContrast,Gaussian,GaussianNoise,HQResize,Invert,JointBilateralFilter,Laplacian,MedianBlur,Morphology,Normalize,PadAndStack,RandomResizedCrop,Remap,Resize,ResizeCropConvertReformat,Rotate,Solarize,Threshold,WarpAffine, andWarpPerspective(issue [#260]).
Interpolating operators use native half storage with float arithmetic.
Exceptions: Conv2D kernels and the ColorTwist matrix stay 32-bit float,
Remap F16 is single-channel (matching F32), Threshold OTSU/TRIANGLE and
subsampled YUV420/422 conversions remain 8-bit only, and
ResizeCropConvertReformat gains F16 output only.
- Added the complete CIE L*a*b* conversion family to
CvtColorfor U8, F16, and F32 tensors and var-shape batches: sRGB and linear RGB/BGR in both directions, with interleaved and planar layouts and dedicated Lab formats (issue [#282]).
Performance Improvements
-
Vectorized
Morphologyplanar C3 dilate andReformatplanar RGB8 interleave. -
Added specialized fast paths for
GaussianNoiseplanar C3 var-shape,BilateralFilterplanar C3 radius-2,CLAHE8x8 tensor tiles, andThresholdplanar U8 binary var-shape. -
WarpAffinecubic with an integer inverse transform now uses the nearest specialization, where it is bit-exact. -
MedianBlurskips the sort when the center pixel already holds the median rank;Inpaintnarrows its source scan window;NonMaximumSuppressionscans by warp;BndBoxflattens dense image copies.
Bug Fixes
-
CUDA kernel launch errors are now reported as exceptions across the modern and legacy operators.
AdvCvtColorandCLAHEpreviously aborted the process instead of propagating the failure, and workspace allocation failures now surface as public exceptions. -
Made
cvcuda.Streamcurrent-stream contexts host-thread-local. A host thread without an active context now resolvescvcuda.Stream.currenttocvcuda.Stream.default. Invalid cross-thread or out-of-order__exit__calls raiseRuntimeErrorinstead of corrupting another context (issue [#274]). -
NonMaximumSuppressionno longer keeps duplicate boxes that tie on both score and area; a deterministic index tiebreak now retains exactly one (issue [#292]). -
Tightened input validation, replacing undefined behavior with errors:
PadAndStacktop/left tensor exports,FindHomographyreusable operator capsules and dimensions,MinMaxLoctensor layouts,MinAreaRectpoint-count rank, andStackoutput metadata. -
Fixed
Resizeper-column source coordinates, wide AREA resize types, partial OSD tiles, andFlipplanar float3 on CUDA 12 SM80. -
Python container and cache fixes:
Tensor/Imagebatches keep their state after a failed insert, and the cache accounting no longer drifts on eviction, thread-local clears, or interpreter shutdown.
Compatibility Changes
-
cvcuda.Streamcontexts no longer span host threads. Code that entered a stream context on one thread and submitted work from others—a worker pool inside awith cvcuda.Stream():block, for example—previously picked up that stream and now submits on the legacy default stream instead, without an error. Enter the context on each thread that submits work. -
Leaving a
cvcuda.Streamcontext raisesRuntimeErrorwhen the stream is not the entering thread's current stream. Contexts exited from another thread, or nested contexts exited out of order—including contexts interleaved by coroutines or generators on one thread—previously did so silently. The error is suppressed while an exception is already propagating out of the context body, so that exception still reaches the caller. -
cvcuda.Stream.defaultis read-only. Assigning it previously succeeded and changed nothing—cvcuda.Stream.currentresolves the default stream internally rather than through the attribute—so the two names disagreed from then on. Enter a stream's context or pass it as the operator's stream argument instead.
Compatibility and Known Limitations
For full details, see the main README's compatibility table and known limitations.
License
CV-CUDA is licensed under the Apache 2.0 license.
Resources
- CV-CUDA GitHub
- Optimizing Microsoft Bing Visual Search with NVIDIA Accelerated Libraries
- Accelerating AI Pipelines: Boosting Visual Search Efficiency
- Optimize Short-Form Video Processing Toward the Speed of Light
- CV-CUDA Increasing Throughput and Reducing Costs for AI-Based Computer Vision with CV-CUDA
- NVIDIA Announces Microsoft, Tencent, Baidu Adopting CV-CUDA for Computer Vision AI
- CV-CUDA Helps Tencent Cloud Audio and Video PaaS Platform Achieve Full-Process GPU Acceleration for Video Enhancement AI
Acknowledgements
CV-CUDA originated as a collaborative effort between NVIDIA and the ByteDance Machine Learning team.