39 size_t input_rank = input.
dims().size();
40 if (!input_rank || !input.
dims().at(input_rank - 1))
42 size_t batchSize = input.
dims().at(input_rank - 1);
43 std::vector<unsigned> indexes(input.
size() / batchSize);
45 n =
static_cast<unsigned>(std::min<size_t>((size_t) n, input.
size()));
47 output.resize(n * batchSize);
49 for (
size_t i = 0; i < batchSize; i++) {
50 size_t offset = i * (input.
size() / batchSize);
51 T *batchData = input.
data();
54 std::iota(std::begin(indexes), std::end(indexes), 0);
55 std::partial_sort(std::begin(indexes), std::begin(indexes) + n, std::end(indexes),
56 [&batchData](
unsigned l,
unsigned r) {
57 return batchData[l] > batchData[r];
59 for (
unsigned j = 0; j < n; j++) {
60 output.at(i * n + j) = indexes.at(j);
65 #define TBLOB_TOP_RESULT(precision)\
66 case InferenceEngine::Precision::precision : {\
67 using myBlobType = InferenceEngine::PrecisionTrait<Precision::precision>::value_type;\
68 TBlob<myBlobType> &tblob = dynamic_cast<TBlob<myBlobType> &>(input);\
69 TopResults(n, tblob, output);\
79 inline void TopResults(
unsigned int n,
Blob &input, std::vector<unsigned> &output) {
81 TBLOB_TOP_RESULT(FP32);
82 TBLOB_TOP_RESULT(FP16);
83 TBLOB_TOP_RESULT(Q78);
84 TBLOB_TOP_RESULT(I16);
87 TBLOB_TOP_RESULT(U16);
88 TBLOB_TOP_RESULT(I32);
94 #undef TBLOB_TOP_RESULT
104 template<
typename data_t>
106 if (4 != blob->
dims().size())
107 THROW_IE_EXCEPTION <<
"Cannot write data to input blob! Blob has incorrect dimensions size "
108 << blob->
dims().size();
109 size_t num_channels = blob->
dims()[2];
110 size_t num_images = blob->
dims()[3];
111 size_t w = blob->
dims()[0];
112 size_t h = blob->
dims()[1];
113 size_t nPixels = w * h;
115 if (RGB8_size != w * h * num_channels * num_images)
116 THROW_IE_EXCEPTION <<
"input pixels mismatch, expecting " << w * h * num_channels * num_images
117 <<
" bytes, got: " << RGB8_size;
119 std::vector<data_t *> dataArray;
120 for (
unsigned int n = 0; n < num_images; n++) {
121 for (
unsigned int i = 0; i < num_channels; i++) {
122 if (!n && !i && dataArray.empty()) {
123 dataArray.push_back(blob->
data());
125 dataArray.push_back(dataArray.at(n * num_channels + i - 1) + nPixels);
129 for (
size_t n = 0; n < num_images; n++) {
130 size_t n_num_channels = n * num_channels;
131 size_t n_num_channels_nPixels = n_num_channels * nPixels;
132 for (
size_t i = 0; i < nPixels; i++) {
133 size_t i_num_channels = i * num_channels + n_num_channels_nPixels;
134 for (
size_t j = 0; j < num_channels; j++) {
135 dataArray.at(n_num_channels + j)[i] = RGB8[i_num_channels + j];
150 if (float_input !=
nullptr)
copyFromRGB8(imgBufRGB8, lengthbytesSize, float_input);
153 if (short_input !=
nullptr)
copyFromRGB8(imgBufRGB8, lengthbytesSize, short_input);
156 if (byte_input !=
nullptr)
copyFromRGB8(imgBufRGB8, lengthbytesSize, byte_input);
170 if (t_blob ==
nullptr) {
174 const T *srcPtr = t_blob->
readOnly();
175 if (srcPtr ==
nullptr) {
178 for (
size_t i = 0; i < t_blob->
size(); i++) dst[i] = srcPtr[i];
#define THROW_IE_EXCEPTION
A macro used to throw the exception with a notable description.
Definition: ie_exception.hpp:22
A header file that provides wrapper classes for IExecutableNetwork.
void copyToFloat(float *dst, const InferenceEngine::Blob *src)
Copies data from a certain precision to float.
Definition: inference_engine.hpp:165
const SizeVector dims() const noexcept
Returns the tensor dimensions vector with reversed order.
Definition: ie_blob.h:166
A header file that provides versioning information for the inference engine shared library...
A header file for a plugin logging mechanism.
void TopResults(unsigned int n, TBlob< T > &input, std::vector< unsigned > &output)
Gets the top n results from a tblob.
Definition: inference_engine.hpp:38
This is a header file for the Network reader class (wrapper) used to build networks from a given IR...
Definition: ie_argmax_layer.hpp:11
virtual LockedMemory< T > data() noexcept
Creates an new empty rvalue LockedMemory object.
Definition: ie_blob.h:413
A header file for Blob and generic TBlob<>
A header for a class to handle plugin loading.
This is a header file for the ICNNNetwork class.
size_t size() const noexcept
Returns the total number of elements (a product of all the dims)
Definition: ie_blob.h:180
Represents real host memory allocated for a Tensor/Blob per C type.
Definition: ie_blob.h:266
virtual LockedMemory< const T > readOnly() const noexcept
Creates a new empty rvalue read-only LockedMemory object.
Definition: ie_blob.h:421
a header file for internal Layers structure to describe layers information
a header for advanced hardware related properties for clDNN plugin To use in SetConfig() method of pl...
This is a header file for the ICNNNetworkStats class.
The macro defines a symbol import/export mechanism essential for Microsoft Windows(R) OS...
This class implements a container object that represents a tensor in memory (host and remote/accelera...
Definition: ie_blob.h:33
Precision precision() const noexcept
Returns the tensor precision of the current Blob object.
Definition: ie_blob.h:57
This header file contains aspects of working on different devices like CPU, GEN, FPGA, etc.
void copyFromRGB8(uint8_t *RGB8, size_t RGB8_size, InferenceEngine::TBlob< data_t > *blob)
Copies a 8-bit RGB image to the blob. Throws an exception in case of dimensions or input size mismatc...
Definition: inference_engine.hpp:105
This is a header file for the Inference Engine plugin C++ API.
void ConvertImageToInput(unsigned char *imgBufRGB8, size_t lengthbytesSize, Blob &input)
Splits the RGB channels to either I16 Blob or float blob. The image buffer is assumed to be packed wi...
Definition: inference_engine.hpp:148