Path: blob/master/modules/dnn/src/opencl/prior_box.cl
16337 views
/*M///////////////////////////////////////////////////////////////////////////////////////1//2// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.3//4// By downloading, copying, installing or using the software you agree to this license.5// If you do not agree to this license, do not download, install,6// copy or use the software.7//8//9// License Agreement10// For Open Source Computer Vision Library11//12// Copyright (c) 2016-2017 Fabian David Tschopp, all rights reserved.13// Third party copyrights are property of their respective owners.14//15// Redistribution and use in source and binary forms, with or without modification,16// are permitted provided that the following conditions are met:17//18// * Redistribution's of source code must retain the above copyright notice,19// this list of conditions and the following disclaimer.20//21// * Redistribution's in binary form must reproduce the above copyright notice,22// this list of conditions and the following disclaimer in the documentation23// and/or other materials provided with the distribution.24//25// * The name of the copyright holders may not be used to endorse or promote products26// derived from this software without specific prior written permission.27//28// This software is provided by the copyright holders and contributors "as is" and29// any express or implied warranties, including, but not limited to, the implied30// warranties of merchantability and fitness for a particular purpose are disclaimed.31// In no event shall the Intel Corporation or contributors be liable for any direct,32// indirect, incidental, special, exemplary, or consequential damages33// (including, but not limited to, procurement of substitute goods or services;34// loss of use, data, or profits; or business interruption) however caused35// and on any theory of liability, whether in contract, strict liability,36// or tort (including negligence or otherwise) arising in any way out of37// the use of this software, even if advised of the possibility of such damage.38//39//M*/4041#if defined(cl_khr_fp16)42#pragma OPENCL EXTENSION cl_khr_fp16 : enable43#endif4445__kernel void prior_box(const int nthreads,46const float stepX,47const float stepY,48__global const float* _offsetsX,49__global const float* _offsetsY,50const int offsetsX_size,51__global const float* _widths,52__global const float* _heights,53const int widths_size,54__global Dtype* dst,55const int _layerHeight,56const int _layerWidth,57const int imgHeight,58const int imgWidth)59{60for (int index = get_global_id(0); index < nthreads; index += get_global_size(0))61{62int w = index % _layerWidth;63int h = index / _layerWidth;64__global Dtype* outputPtr;6566outputPtr = dst + index * 4 * offsetsX_size * widths_size;6768float _boxWidth, _boxHeight;69Dtype4 vec;70for (int i = 0; i < widths_size; ++i)71{72_boxWidth = _widths[i];73_boxHeight = _heights[i];74for (int j = 0; j < offsetsX_size; ++j)75{76Dtype center_x = (w + _offsetsX[j]) * (Dtype)stepX;77Dtype center_y = (h + _offsetsY[j]) * (Dtype)stepY;7879vec.x = (center_x - _boxWidth * 0.5f) / imgWidth; // xmin80vec.y = (center_y - _boxHeight * 0.5f) / imgHeight; // ymin81vec.z = (center_x + _boxWidth * 0.5f) / imgWidth; // xmax82vec.w = (center_y + _boxHeight * 0.5f) / imgHeight; // ymax83vstore4(vec, 0, outputPtr);8485outputPtr += 4;86}87}88}89}9091__kernel void set_variance(const int nthreads,92const int offset,93const int variance_size,94__global const float* variance,95__global Dtype* dst)96{97for (int index = get_global_id(0); index < nthreads; index += get_global_size(0))98{99Dtype4 var_vec;100101if (variance_size == 1)102var_vec = (Dtype4)(variance[0]);103else104var_vec = convert_T(vload4(0, variance));105106vstore4(var_vec, 0, dst + offset + index * 4);107}108}109110__kernel void clip(const int nthreads,111__global Dtype* dst)112{113for (int index = get_global_id(0); index < nthreads; index += get_global_size(0))114{115Dtype4 vec = vload4(index, dst);116vstore4(clamp(vec, 0.0f, 1.0f), index, dst);117}118}119120121