diff options
author | Usama Arif <usama.arif@arm.com> | 2019-04-16 14:32:25 +0100 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-04-17 15:49:59 +0000 |
commit | 2899e00a6fa57242a9bcae1d08a9a7e1e80f14e7 (patch) | |
tree | 78f9ed1fa6fe5cde2acf9a47170e72b96418d730 /src/runtime/NEON/functions/NEDeconvolutionLayer.cpp | |
parent | dcd949d8c71d879ff656c13d068e8af3dd31eef1 (diff) | |
download | ComputeLibrary-2899e00a6fa57242a9bcae1d08a9a7e1e80f14e7.tar.gz |
COMPMID-2049: Add support for deconvolution for qasymm8 on NEON
Change-Id: I02890c7542f6036edad9cbba9fdcf2312c70070a
Signed-off-by: Usama Arif <usama.arif@arm.com>
Reviewed-on: https://review.mlplatform.org/c/1000
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'src/runtime/NEON/functions/NEDeconvolutionLayer.cpp')
-rw-r--r-- | src/runtime/NEON/functions/NEDeconvolutionLayer.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/runtime/NEON/functions/NEDeconvolutionLayer.cpp b/src/runtime/NEON/functions/NEDeconvolutionLayer.cpp index fdc959c4a9..aff335e5e3 100644 --- a/src/runtime/NEON/functions/NEDeconvolutionLayer.cpp +++ b/src/runtime/NEON/functions/NEDeconvolutionLayer.cpp @@ -51,8 +51,8 @@ Status NEDeconvolutionLayer::validate(const ITensorInfo *input, const ITensorInf unsigned int inner_border_right, unsigned int inner_border_top) { ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(input, weights, output); - ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::F32); - ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(weights, 1, DataType::F32); + ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::F32, DataType::QASYMM8); + ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(weights, 1, DataType::F32, DataType::QASYMM8); ARM_COMPUTE_RETURN_ERROR_ON(weights->dimension(0) != weights->dimension(1)); ARM_COMPUTE_RETURN_ERROR_ON(weights->dimension(0) < 1); ARM_COMPUTE_RETURN_ERROR_ON(!info.padding_is_symmetric()); @@ -68,7 +68,11 @@ Status NEDeconvolutionLayer::validate(const ITensorInfo *input, const ITensorInf ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DATA_TYPES(input, weights); - if(bias != nullptr) + if(is_data_type_quantized_asymmetric(input->data_type())) + { + ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(bias, 1, DataType::S32); + } + else { ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DATA_TYPES(input, bias); } @@ -111,10 +115,11 @@ void NEDeconvolutionLayer::configure(ITensor *input, const ITensor *weights, con _inner_border = std::make_pair(inner_border_right, inner_border_top); _is_prepared = false; - const unsigned int stride_x = info.stride().first; - const unsigned int stride_y = info.stride().second; + const DataLayout data_layout = input->info()->data_layout(); + const unsigned int stride_x = info.stride().first; + const unsigned int stride_y = info.stride().second; - _weights_flipped.allocator()->init(TensorInfo(weights->info()->tensor_shape(), 1, weights->info()->data_type())); + _weights_flipped.allocator()->init(weights->info()->clone()->set_data_layout(data_layout)); _flip_weights.configure(weights, &_weights_flipped); auto out_dims = deconvolution_output_dimensions(input->info()->dimension(0), input->info()->dimension(1), weights->info()->dimension(0), weights->info()->dimension(1), |