NVIDIA DeepStream SDK API Reference

9.2 Release
sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef CUDCFLIB_FEATUREEXTRACTOR_HPP_
19 #define CUDCFLIB_FEATUREEXTRACTOR_HPP_
20 
21 #include <cuda_runtime.h>
22 #include <cuda_fp16.h>
23 #include <cuComplex.h>
24 
25 #if defined(VIZ_DEBUG)
26 #include <opencv2/core.hpp>
27 #endif
28 
29 // VPI.
30 #include "vpi/Stream.h"
31 #include "vpi/Image.h"
32 #include "vpi/experimental/ColorNames.h"
33 #include "vpi/experimental/HOG.h"
34 #include "vpi/CUDAInterop.h"
35 #include "modules/utility/cuda_common.hpp"
36 #include "modules/cuDCFv2/cuDCFFrameTransformTexture.hpp"
37 
40 {
41 public:
44 
46  virtual ~FeatureExtractor();
47 
49  {
50  COLOR_NAMES = 0x1,
51  HOG = 0x10
52  };
53  static const uint NUM_CHANNELS_COLORNAMES = 10;
54  static const uint NUM_CHANNELS_HOG_SENSITIVE = 18;
56 
58  bool isInitialized() { return m_initGpu; }
59 
62 
64  void initialize_ColorNames();
65 
75  const std::map<NvMOTStreamId, NvMOTFrame*> &nvFramesInBatch,
76  const std::map<NvMOTStreamId, std::vector<std::pair<uint, NvMotDataTypes::Rect2f> > > &roisInBatch,
77  const uint lastBboxInd, const bool doUpdateImages
78  );
79 
96  bool initialize(
97  const int debugVerboseLevel, const int maxStreamNum, const int maxBufSurfAddrSize, const int maxfeatureImgNum,
98  const NvMotDataTypes::Size srcImgSize, const uint srcImgPitch, const NvBufSurfaceColorFormat colorFormatType,
99  const NvMotDataTypes::Size templateImgSize, const int hogCellSize, const uint featureTypes,
100  const VPIBackend vpiDevType = VPI_BACKEND_CUDA, const VPIImageFormat vpiImgOutputType = VPI_IMAGE_FORMAT_U16
101  );
102 
114  uint &width, uint &height, uint2 &outBatchingGrid, uint &channels, uint &pitch, uint &imgNum
115  );
116 
117  #if defined(VIZ_DEBUG)
118 
122  std::vector<std::vector<cv::Mat> > getExtractedFeaturesAtHost_VPI() const;
123 
128  std::map<NvMOTStreamId, std::map<uint, cv::Mat > > getSrcImgPatches()
129  {
130  assert(m_subImageCropper2 != nullptr && m_subImageCropper2->isInitialized());
131 
133  {
134  return m_subImageCropper2->getImagePatches2Host_OCV_mosaic();
135  }
136  else
137  {
138  return m_subImageCropper2->getImagePatches2Host_OCV_batch();
139  }
140  }
141  #endif
142 
145 
147  uint2 getOutBatchingGrid() const { return m_outBatchingGrid; }
148 
151 
153  bool isVpiOutputInHighPrecision() const { return m_vpiImgOutputType == VPI_IMAGE_FORMAT_U16; }
154 
155  #ifdef VIZ_DEBUG
156 
157  const std::map<NvMOTStreamId, cv::Mat> &getSourceImagesAtHost() const
158  {
159  return m_subImageCropper2->getSourceImagesAtHost();
160  }
161  #endif
162 
163 protected:
164 
166  void initialize_VPI();
167 
168  const uint m_featureTypeHog = VPI_HOG_CONTRAST_SENSITIVE;
172  uint8_t *m_srcImgPatchPtr_d[2];
185  cuComplex *m_batch_ftrs_device;
188  std::shared_ptr<cuDCFFrameTransformTexture> m_subImageCropper2;
189  bool m_initGpu;
190 
191  // [Configuration parameters]
193  const int m_cudaBlockSize = 32;
194  const bool m_showGpuTiming = false;
196 
197  // [CUDA timer]
198  cudaEvent_t m_eventStart;
199  cudaEvent_t m_eventStop;
200 
201  // [VPI]
203  VPIImage m_vpiInputImage[2];
204  VPIImageData m_vpiInputImageData[2];
205  std::vector<VPIImage> m_vpiOutFeatures;
206  std::vector<VPIImageData> m_vpiOutFeaturesData;
207  VPIStream m_vpiStream;
208  VPIPayload m_vpiColorNames;
209  VPIPayload m_vpiHOG;
212  VPIBackend m_vpiDevType;
213  const int m_vpiImgFlags = VPI_BACKEND_CUDA | VPI_RESTRICT_MEM_USAGE;
214  VPIImageFormat m_vpiImgOutputType;
216 };
218 
219 #endif // CUDCFLIB_FEATUREEXTRACTOR_HPP_
FeatureExtractor::m_batch_vpi_ftrs
void * m_batch_vpi_ftrs
CUDA output buffer where VPI lib will write the extracted features.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:210
FeatureExtractor::m_cudaBlockSize
const int m_cudaBlockSize
Tile/block size.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:193
FeatureExtractor::m_maxfeatureImgNum
uint m_maxfeatureImgNum
Maximum number of feature images processed in a batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:181
FeatureExtractor::COLOR_NAMES
@ COLOR_NAMES
ColorNames feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:50
FeatureExtractor::initialize_VPI
void initialize_VPI()
Initialize and allocate the input/output memories for VPI.
width
JDIMENSION JDIMENSION * width
Definition: sources/libs/nvll_batch_jpeg_encode/oss/jpeglib.h:1001
FeatureExtractor::m_featureTypeHog
const uint m_featureTypeHog
Selected VPI HOG feature type.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:168
FeatureExtractor::isVpiOutputInHighPrecision
bool isVpiOutputInHighPrecision() const
Report whether VPI produces 16-bit feature values.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:153
FeatureExtractor::m_srcSubImgHeight
uint m_srcSubImgHeight[2]
Source image-patch heights for each plane, including the NV12 plane layout.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:174
FeatureExtractor::m_isVpiInitialized
bool m_isVpiInitialized
Indicates whether VPI resources are initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:202
FeatureExtractor::m_batch_vpi_ftrs_pitch
size_t m_batch_vpi_ftrs_pitch
Pitch of the VPI feature output buffer.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:211
FeatureExtractor::HOG
@ HOG
HOG feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:51
FeatureExtractor::getOutputFeaturePtrs_VPI
uchar * getOutputFeaturePtrs_VPI(uint &width, uint &height, uint2 &outBatchingGrid, uint &channels, uint &pitch, uint &imgNum)
Get the metadata for the extracted features by VPI.
FeatureExtractor::m_vpiColorNames
VPIPayload m_vpiColorNames
VPI ColorNames payload.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:208
FeatureExtractor::m_vpiInputImage
VPIImage m_vpiInputImage[2]
For input image source.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:203
FeatureExtractor::m_batch_ftrs_device_pitch
size_t m_batch_ftrs_device_pitch
Pitch of the device feature buffer.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:186
FeatureExtractor::m_numOfChannelsByHog
const uint m_numOfChannelsByHog
Number of output feature channels extracted by HOG.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:170
FeatureExtractor::m_srcImgPatchNum
uint m_srcImgPatchNum
Number of source image patches processed in a batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:180
FeatureExtractor::m_debugVerboseLevel
int m_debugVerboseLevel
Debug verbosity level.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:192
FeatureExtractor::isInitialized
bool isInitialized()
Report whether GPU feature extraction is initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:58
FeatureExtractor::initialize
bool initialize(const int debugVerboseLevel, const int maxStreamNum, const int maxBufSurfAddrSize, const int maxfeatureImgNum, const NvMotDataTypes::Size srcImgSize, const uint srcImgPitch, const NvBufSurfaceColorFormat colorFormatType, const NvMotDataTypes::Size templateImgSize, const int hogCellSize, const uint featureTypes, const VPIBackend vpiDevType=VPI_BACKEND_CUDA, const VPIImageFormat vpiImgOutputType=VPI_IMAGE_FORMAT_U16)
Initialize feature extraction and allocate its host and device memory.
FeatureExtractor::m_colorFormatType
NvBufSurfaceColorFormat m_colorFormatType
Source image color format.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:178
FeatureExtractor::m_srcImgPatchPitch
uint m_srcImgPatchPitch[2]
Source image-patch pitches for each plane.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:179
FeatureExtractor::extractFeatures_VPI
bool extractFeatures_VPI(const std::map< NvMOTStreamId, NvMOTFrame * > &nvFramesInBatch, const std::map< NvMOTStreamId, std::vector< std::pair< uint, NvMotDataTypes::Rect2f > > > &roisInBatch, const uint lastBboxInd, const bool doUpdateImages)
Extract batched visual features from source-image regions with VPI.
uchar
unsigned char uchar
Definition: sources/libs/nvmultiobjecttracker/include/modules/utility/dataTypes.hpp:29
uint
unsigned int uint
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:25
FeatureExtractor::getOutputFeatureChannelSize
uint getOutputFeatureChannelSize() const
Return the number of channels in each output feature vector.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:150
FeatureExtractor::m_showGpuTiming
const bool m_showGpuTiming
Controls whether GPU timing is displayed.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:194
FeatureExtractor::m_batch_array_host_real
void * m_batch_array_host_real
Host memory to download the extracted features.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:187
FeatureExtractor::m_vpiInputImageData
VPIImageData m_vpiInputImageData[2]
VPI metadata for input image planes.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:204
FeatureExtractor::m_vpiOutFeaturesData
std::vector< VPIImageData > m_vpiOutFeaturesData
Metadata for VPI output feature images.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:206
FeatureExtractor::NUM_CHANNELS_COLORNAMES
static const uint NUM_CHANNELS_COLORNAMES
Number of channels in the ColorNames feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:53
FeatureExtractor::FeatureExtractor
FeatureExtractor()
Construct an uninitialized feature extractor.
FeatureExtractor::~FeatureExtractor
virtual ~FeatureExtractor()
Release feature-extraction resources.
FeatureExtractor::m_srcImgColorChannels
uint m_srcImgColorChannels
Number of color channels in a source image patch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:177
NvMOTStreamId
uint64_t NvMOTStreamId
Definition: includes/nvdstracker.h:53
FeatureExtractor::m_numOfChannelsByColorNames
const uint m_numOfChannelsByColorNames
Number of output feature channels extracted by ColorNames.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:171
FeatureExtractor::m_featureTypes
uint m_featureTypes
The types of visual features to be used (e.g., ColorNames and/or HOG).
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:184
FeatureExtractor::m_initGpu
bool m_initGpu
Indicates whether GPU feature extraction is initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:189
FeatureExtractor::m_batch_ftrs_device
cuComplex * m_batch_ftrs_device
Device memory to hold the extracted features.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:185
FeatureExtractor::m_numFeatureChannelsOut
uint m_numFeatureChannelsOut
Total # of feature channels, including other types of features, so extra channel space can be reserve...
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:183
FeatureExtractor::m_outBatchingGrid
uint2 m_outBatchingGrid
Grid dimensions used to compose outputs in memory.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:176
FeatureExtractor::getOutBatchingGrid
uint2 getOutBatchingGrid() const
Return the two-dimensional output batching grid.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:147
FeatureExtractor::m_vpiImgFlags
const int m_vpiImgFlags
Flags used to wrap CUDA image memory for VPI.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:213
FeatureExtractor::NUM_CHANNELS_HOG_SENSITIVE
static const uint NUM_CHANNELS_HOG_SENSITIVE
Number of channels in the contrast-sensitive HOG feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:54
FeatureExtractor::getNumChannels
uint getNumChannels()
Return the number of channels in each extracted feature vector.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:61
FeatureExtractor::m_hogCellSize
int m_hogCellSize
Cell size of HOG feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:195
FeatureExtractor
Extracts batched ColorNames and HOG features with VPI.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:39
FeatureExtractor::m_vpiHOG
VPIPayload m_vpiHOG
VPI HOG payload.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:209
FeatureExtractor::FEATURE_TYPES
FEATURE_TYPES
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:48
FeatureExtractor::getSrcImgNum
uint getSrcImgNum()
Return the number of source image patches in the current batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:144
FeatureExtractor::initialize_ColorNames
void initialize_ColorNames()
Allocate the device memory for the LUT on the device memory and copy the LUT from host to device.
FeatureExtractor::NUM_CHANNELS_HOG_INSENSITIVE
static const uint NUM_CHANNELS_HOG_INSENSITIVE
Number of channels in the contrast-insensitive HOG feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:55
FeatureExtractor::m_eventStop
cudaEvent_t m_eventStop
Event stop point for GPU timers.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:199
FeatureExtractor::m_vpiDevType
VPIBackend m_vpiDevType
VPI backend used for feature extraction.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:212
NvMotDataTypes::Size
Represents a two-dimensional integer size.
Definition: sources/libs/nvmultiobjecttracker/include/modules/utility/dataTypes.hpp:52
NVBUF_COLOR_FORMAT_NV12
@ NVBUF_COLOR_FORMAT_NV12
Specifies BT.601 colorspace - Y/CbCr 4:2:0 multi-planar.
Definition: includes/nvbufsurface.h:125
FeatureExtractor::m_vpiStream
VPIStream m_vpiStream
Stream used for VPI operations.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:207
FeatureExtractor::m_vpiOutFeatures
std::vector< VPIImage > m_vpiOutFeatures
VPI output feature images.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:205
FeatureExtractor::m_srcImgPatchPtr_d
uint8_t * m_srcImgPatchPtr_d[2]
Device pointers to externally allocated source image storage.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:172
FeatureExtractor::m_vpiImgOutputType
VPIImageFormat m_vpiImgOutputType
VPI image format used for feature output.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:215
FeatureExtractor::m_eventStart
cudaEvent_t m_eventStart
Event start point for GPU timers.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:198
FeatureExtractor::m_dstSubImgHeight
uint m_dstSubImgHeight[2]
Destination image-patch heights for each plane.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:175
NvBufSurfaceColorFormat
NvBufSurfaceColorFormat
Defines color formats for NvBufSurface.
Definition: includes/nvbufsurface.h:110
FeatureExtractor::m_maxNumFramesInBatch
uint m_maxNumFramesInBatch
Maximum number of video streams processed in a batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:182
FeatureExtractor::m_subImageCropper2
std::shared_ptr< cuDCFFrameTransformTexture > m_subImageCropper2
Cropper & Scaler.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:188
FeatureExtractor::m_srcSubImgWidth
uint m_srcSubImgWidth[2]
Source image-patch widths for each plane.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/featureExtractor.hpp:173