mirror of
https://github.com/opencv/opencv.git
synced 2025-07-25 22:57:53 +08:00
Merge pull request #20480 from JulieBar:lstm_pytest
Add Python's test for LSTM layer * Add Python's test for LSTM layer * Set different test threshold for FP16 target * rename test to test_input_3d Co-authored-by: Julie Bareeva <julia.bareeva@xperience.ai>
This commit is contained in:
parent
d5f34cf34c
commit
633fedaa96
@ -62,6 +62,12 @@ def printParams(backend, target):
|
|||||||
}
|
}
|
||||||
print('%s/%s' % (backendNames[backend], targetNames[target]))
|
print('%s/%s' % (backendNames[backend], targetNames[target]))
|
||||||
|
|
||||||
|
def getDefaultThreshold(target):
|
||||||
|
if target == cv.dnn.DNN_TARGET_OPENCL_FP16 or target == cv.dnn.DNN_TARGET_MYRIAD:
|
||||||
|
return 4e-3
|
||||||
|
else:
|
||||||
|
return 1e-5
|
||||||
|
|
||||||
testdata_required = bool(os.environ.get('OPENCV_DNN_TEST_REQUIRE_TESTDATA', False))
|
testdata_required = bool(os.environ.get('OPENCV_DNN_TEST_REQUIRE_TESTDATA', False))
|
||||||
|
|
||||||
g_dnnBackendsAndTargets = None
|
g_dnnBackendsAndTargets = None
|
||||||
@ -305,5 +311,35 @@ class dnn_test(NewOpenCVTests):
|
|||||||
|
|
||||||
cv.dnn_unregisterLayer('CropCaffe')
|
cv.dnn_unregisterLayer('CropCaffe')
|
||||||
|
|
||||||
|
# check that dnn module can work with 3D tensor as input for network
|
||||||
|
def test_input_3d(self):
|
||||||
|
model = self.find_dnn_file('dnn/onnx/models/hidden_lstm.onnx')
|
||||||
|
input_file = self.find_dnn_file('dnn/onnx/data/input_hidden_lstm.npy')
|
||||||
|
output_file = self.find_dnn_file('dnn/onnx/data/output_hidden_lstm.npy')
|
||||||
|
if model is None:
|
||||||
|
raise unittest.SkipTest("Missing DNN test files (dnn/onnx/models/hidden_lstm.onnx). "
|
||||||
|
"Verify OPENCV_DNN_TEST_DATA_PATH configuration parameter.")
|
||||||
|
if input_file is None or output_file is None:
|
||||||
|
raise unittest.SkipTest("Missing DNN test files (dnn/onnx/data/{input/output}_hidden_lstm.npy). "
|
||||||
|
"Verify OPENCV_DNN_TEST_DATA_PATH configuration parameter.")
|
||||||
|
|
||||||
|
net = cv.dnn.readNet(model)
|
||||||
|
input = np.load(input_file)
|
||||||
|
# we have to expand the shape of input tensor because Python bindings cut 3D tensors to 2D
|
||||||
|
# it should be fixed in future. see : https://github.com/opencv/opencv/issues/19091
|
||||||
|
# please remove `expand_dims` after that
|
||||||
|
input = np.expand_dims(input, axis=3)
|
||||||
|
gold_output = np.load(output_file)
|
||||||
|
net.setInput(input)
|
||||||
|
|
||||||
|
for backend, target in self.dnnBackendsAndTargets:
|
||||||
|
printParams(backend, target)
|
||||||
|
|
||||||
|
net.setPreferableBackend(backend)
|
||||||
|
net.setPreferableTarget(target)
|
||||||
|
real_output = net.forward()
|
||||||
|
|
||||||
|
normAssert(self, real_output, gold_output, "", getDefaultThreshold(target))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
NewOpenCVTests.bootstrap()
|
NewOpenCVTests.bootstrap()
|
||||||
|
Loading…
Reference in New Issue
Block a user