, m_StrideX(0)
, m_StrideY(0)
, m_BiasEnabled(false)
+ , m_DataLayout(DataLayout::NCHW)
{}
- uint32_t m_PadLeft;
- uint32_t m_PadRight;
- uint32_t m_PadTop;
- uint32_t m_PadBottom;
- uint32_t m_StrideX;
- uint32_t m_StrideY;
- bool m_BiasEnabled;
+ uint32_t m_PadLeft;
+ uint32_t m_PadRight;
+ uint32_t m_PadTop;
+ uint32_t m_PadBottom;
+ uint32_t m_StrideX;
+ uint32_t m_StrideY;
+ bool m_BiasEnabled;
+ DataLayout m_DataLayout;
};
DepthwiseConvolution2dQueueDescriptor descriptor;
descriptor.m_Weight = m_Weight.get();
+
+ descriptor.m_DataLayout = GetParameters().m_DataLayout;
+
if (m_Param.m_BiasEnabled)
{
BOOST_ASSERT_MSG(m_Bias != nullptr, "DepthwiseConvolution2dLayer: Bias data should not be null.");
const TensorInfo& weights,
const boost::optional<TensorInfo>& biases)
{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
- const arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights);
+ const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
+ const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
+ const arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);
arm_compute::TensorInfo aclBiasesInfo;
arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr;
{
BOOST_ASSERT(biases.is_initialized());
- aclBiasesInfo = BuildArmComputeTensorInfo(biases.get());
+ aclBiasesInfo = BuildArmComputeTensorInfo(biases.get(), descriptor.m_DataLayout);
optionalAclBiasesInfo = &aclBiasesInfo;
}
const boost::optional<TensorInfo>& biases)
{
const arm_compute::TensorInfo aclInputInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(input);
+ armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
const arm_compute::TensorInfo aclOutputInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(output);
+ armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
const arm_compute::TensorInfo aclWeightsInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(weights);
+ armcomputetensorutils::BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);
arm_compute::TensorInfo aclBiasesInfo;
arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr;
{
BOOST_ASSERT(biases.is_initialized());
- aclBiasesInfo = armcomputetensorutils::BuildArmComputeTensorInfo(biases.get());
+ aclBiasesInfo = armcomputetensorutils::BuildArmComputeTensorInfo(biases.get(), descriptor.m_DataLayout);
optionalAclBiasesInfo = &aclBiasesInfo;
}
const TensorInfo& weightInfo = m_Data.m_Weight->GetTensorInfo();
m_KernelTensor = std::make_unique<arm_compute::Tensor>();
- BuildArmComputeTensor(*m_KernelTensor, weightInfo);
+ BuildArmComputeTensor(*m_KernelTensor, weightInfo, descriptor.m_DataLayout);
if (m_Data.m_Parameters.m_BiasEnabled)
{
m_BiasTensor = std::make_unique<arm_compute::Tensor>();
- BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo());
+ BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo(), descriptor.m_DataLayout);
}
arm_compute::PadStrideInfo padStrideInfo(m_Data.m_Parameters.m_StrideX,
const TensorInfo& weightInfo = m_Data.m_Weight->GetTensorInfo();
m_KernelTensor = std::make_unique<arm_compute::Tensor>();
- BuildArmComputeTensor(*m_KernelTensor, weightInfo);
+ BuildArmComputeTensor(*m_KernelTensor, weightInfo, descriptor.m_DataLayout);
if (m_Data.m_Parameters.m_BiasEnabled)
{
m_BiasTensor = std::make_unique<arm_compute::Tensor>();
- BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo());
+ BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo(), descriptor.m_DataLayout);
}
arm_compute::PadStrideInfo padStrideInfo(m_Data.m_Parameters.m_StrideX,
DepthwiseConvolution2dQueueDescriptor()
: m_Weight(nullptr)
, m_Bias(nullptr)
+ , m_DataLayout(DataLayout::NCHW)
{
}
const ConstCpuTensorHandle* m_Weight;
const ConstCpuTensorHandle* m_Bias;
+ DataLayout m_DataLayout;
void Validate(const WorkloadInfo& workloadInfo) const;
};