[IE PYTHON] optimize blob creation with numpy (#7813)
* Optimize blob constructor and remove user blobs * restore user_blobs * Rename helper function * add test * Remove empty line * Fix code style * add const * Add test for SCALAR layout
This commit is contained in:
parent
2a20d9a6e7
commit
0793290762
@ -206,10 +206,9 @@ cdef class Blob:
|
|||||||
elif tensor_desc is not None and self._array_data is not None:
|
elif tensor_desc is not None and self._array_data is not None:
|
||||||
c_tensor_desc = tensor_desc.impl
|
c_tensor_desc = tensor_desc.impl
|
||||||
precision = tensor_desc.precision
|
precision = tensor_desc.precision
|
||||||
size_arr = np.prod(array.shape)
|
size_td = C.product(c_tensor_desc.getDims())
|
||||||
size_td = np.prod(tensor_desc.dims)
|
if array.size != size_td:
|
||||||
if size_arr != size_td:
|
raise AttributeError(f"Number of elements in provided numpy array {array.size} and "
|
||||||
raise AttributeError(f"Number of elements in provided numpy array {size_arr} and "
|
|
||||||
f"required by TensorDesc {size_td} are not equal")
|
f"required by TensorDesc {size_td} are not equal")
|
||||||
if self._array_data.dtype != format_map[precision]:
|
if self._array_data.dtype != format_map[precision]:
|
||||||
raise ValueError(f"Data type {self._array_data.dtype} of provided numpy array "
|
raise ValueError(f"Data type {self._array_data.dtype} of provided numpy array "
|
||||||
|
@ -682,3 +682,7 @@ InferenceEngine::Blob::Ptr InferenceEnginePython::CVariableState::getState() {
|
|||||||
void InferenceEnginePython::CVariableState::setState(InferenceEngine::Blob::Ptr state) {
|
void InferenceEnginePython::CVariableState::setState(InferenceEngine::Blob::Ptr state) {
|
||||||
variableState.SetState(state);
|
variableState.SetState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const size_t InferenceEnginePython::product(const InferenceEngine::SizeVector& dims) {
|
||||||
|
return std::accumulate(dims.begin(), dims.end(), 1, std::multiplies<size_t>{});
|
||||||
|
}
|
||||||
|
@ -7,11 +7,13 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
#include <functional>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <numeric>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -203,4 +205,6 @@ InferenceEnginePython::IENetwork read_network(std::string path_to_xml, std::stri
|
|||||||
|
|
||||||
PyObject* getPartialShape_capsule(InferenceEngine::CDataPtr data);
|
PyObject* getPartialShape_capsule(InferenceEngine::CDataPtr data);
|
||||||
|
|
||||||
|
const size_t product(const InferenceEngine::SizeVector& dims);
|
||||||
|
|
||||||
}; // namespace InferenceEnginePython
|
}; // namespace InferenceEnginePython
|
||||||
|
@ -230,3 +230,5 @@ cdef extern from "ie_api_impl.hpp" namespace "InferenceEnginePython":
|
|||||||
cdef IENetwork read_network(string path_to_xml, string path_to_bin)
|
cdef IENetwork read_network(string path_to_xml, string path_to_bin)
|
||||||
|
|
||||||
cdef object getPartialShape_capsule(DataPtr)
|
cdef object getPartialShape_capsule(DataPtr)
|
||||||
|
|
||||||
|
cdef const size_t product(const SizeVector& dims)
|
||||||
|
@ -21,11 +21,16 @@ def test_init_with_tensor_desc():
|
|||||||
assert blob.tensor_desc == tensor_desc
|
assert blob.tensor_desc == tensor_desc
|
||||||
|
|
||||||
|
|
||||||
def test_init_with_numpy():
|
@pytest.mark.parametrize("shape, layout", [
|
||||||
tensor_desc = TensorDesc("FP32", [1, 3, 127, 127], "NCHW")
|
([1, 3, 127, 127], "NCHW"),
|
||||||
array = np.ones(shape=(1, 3, 127, 127), dtype=np.float32)
|
([], "SCALAR"),
|
||||||
|
])
|
||||||
|
def test_init_with_numpy(shape, layout):
|
||||||
|
tensor_desc = TensorDesc("FP32", shape, layout)
|
||||||
|
array = np.ones(shape=shape, dtype=np.float32)
|
||||||
blob = Blob(tensor_desc, array)
|
blob = Blob(tensor_desc, array)
|
||||||
assert isinstance(blob.buffer, np.ndarray)
|
assert isinstance(blob.buffer, np.ndarray)
|
||||||
|
assert np.shares_memory(blob.buffer, array)
|
||||||
assert blob.tensor_desc == tensor_desc
|
assert blob.tensor_desc == tensor_desc
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user