Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
d18ebfa8
Commit
d18ebfa8
authored
Mar 21, 2014
by
Andrey Pavlenko
Committed by
OpenCV Buildbot
Mar 21, 2014
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2500 from akarsakov:hog_intel_fix
parents
3572ee27
b14c314f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
15 deletions
+24
-15
hog.cpp
modules/objdetect/src/hog.cpp
+9
-7
objdetect_hog.cl
modules/objdetect/src/opencl/objdetect_hog.cl
+14
-7
test_hogdetector.cpp
modules/objdetect/test/opencl/test_hogdetector.cpp
+1
-1
No files found.
modules/objdetect/src/hog.cpp
View file @
d18ebfa8
...
...
@@ -1085,8 +1085,8 @@ static bool ocl_compute_gradients_8UC1(int height, int width, InputArray _img, f
size_t
globalThreads
[
3
]
=
{
width
,
height
,
1
};
char
correctGamma
=
(
correct_gamma
)
?
1
:
0
;
int
grad_quadstep
=
(
int
)
grad
.
step
>>
3
;
int
qangle_
step_shift
=
0
;
int
qangle_step
=
(
int
)
qangle
.
step
>>
(
1
+
qangle_step_shift
);
int
qangle_
elem_size
=
CV_ELEM_SIZE1
(
qangle
.
type
())
;
int
qangle_step
=
(
int
)
qangle
.
step
/
(
2
*
qangle_elem_size
);
int
idx
=
0
;
idx
=
k
.
set
(
idx
,
height
);
...
...
@@ -1137,9 +1137,9 @@ static bool ocl_compute_hists(int nbins, int block_stride_x, int block_stride_y,
int
img_block_height
=
(
height
-
CELLS_PER_BLOCK_Y
*
CELL_HEIGHT
+
block_stride_y
)
/
block_stride_y
;
int
blocks_total
=
img_block_width
*
img_block_height
;
int
qangle_
step_shift
=
0
;
int
qangle_
elem_size
=
CV_ELEM_SIZE1
(
qangle
.
type
())
;
int
grad_quadstep
=
(
int
)
grad
.
step
>>
2
;
int
qangle_step
=
(
int
)
qangle
.
step
>>
qangle_step_shift
;
int
qangle_step
=
(
int
)
qangle
.
step
/
qangle_elem_size
;
int
blocks_in_group
=
4
;
size_t
localThreads
[
3
]
=
{
blocks_in_group
*
24
,
2
,
1
};
...
...
@@ -1316,11 +1316,12 @@ static bool ocl_extract_descrs_by_cols(int win_height, int win_width, int block_
static
bool
ocl_compute
(
InputArray
_img
,
Size
win_stride
,
std
::
vector
<
float
>&
_descriptors
,
int
descr_format
,
Size
blockSize
,
Size
cellSize
,
int
nbins
,
Size
blockStride
,
Size
winSize
,
float
sigma
,
bool
gammaCorrection
,
double
L2HysThreshold
)
{
Size
imgSize
=
_img
.
size
();
Size
imgSize
=
_img
.
size
();
Size
effect_size
=
imgSize
;
UMat
grad
(
imgSize
,
CV_32FC2
);
UMat
qangle
(
imgSize
,
CV_8UC2
);
int
qangle_type
=
ocl
::
Device
::
getDefault
().
isIntel
()
?
CV_32SC2
:
CV_8UC2
;
UMat
qangle
(
imgSize
,
qangle_type
);
const
size_t
block_hist_size
=
getBlockHistogramSize
(
blockSize
,
cellSize
,
nbins
);
const
Size
blocks_per_img
=
numPartsWithin
(
imgSize
,
blockSize
,
blockStride
);
...
...
@@ -1720,7 +1721,8 @@ static bool ocl_detect(InputArray img, std::vector<Point> &hits, double hit_thre
Size
imgSize
=
img
.
size
();
Size
effect_size
=
imgSize
;
UMat
grad
(
imgSize
,
CV_32FC2
);
UMat
qangle
(
imgSize
,
CV_8UC2
);
int
qangle_type
=
ocl
::
Device
::
getDefault
().
isIntel
()
?
CV_32SC2
:
CV_8UC2
;
UMat
qangle
(
imgSize
,
qangle_type
);
const
size_t
block_hist_size
=
getBlockHistogramSize
(
blockSize
,
cellSize
,
nbins
);
const
Size
blocks_per_img
=
numPartsWithin
(
imgSize
,
blockSize
,
blockStride
);
...
...
modules/objdetect/src/opencl/objdetect_hog.cl
View file @
d18ebfa8
...
...
@@ -50,6 +50,14 @@
#
define
NTHREADS
256
#
define
CV_PI_F
3.1415926535897932384626433832795f
#
ifdef
INTEL_DEVICE
#
define
QANGLE_TYPE
int
#
define
QANGLE_TYPE2
int2
#
else
#
define
QANGLE_TYPE
uchar
#
define
QANGLE_TYPE2
uchar2
#
endif
//----------------------------------------------------------------------------
//
Histogram
computation
//
12
threads
for
a
cell,
12x4
threads
per
block
...
...
@@ -59,7 +67,7 @@ __kernel void compute_hists_lut_kernel(
const
int
cnbins,
const
int
cblock_hist_size,
const
int
img_block_width,
const
int
blocks_in_group,
const
int
blocks_total,
const
int
grad_quadstep,
const
int
qangle_step,
__global
const
float*
grad,
__global
const
uchar
*
qangle,
__global
const
float*
grad,
__global
const
QANGLE_TYPE
*
qangle,
__global
const
float*
gauss_w_lut,
__global
float*
block_hists,
__local
float*
smem
)
{
...
...
@@ -86,7 +94,7 @@ __kernel void compute_hists_lut_kernel(
__global
const
float*
grad_ptr
=
(
gid
<
blocks_total
)
?
grad
+
offset_y
*
grad_quadstep
+
(
offset_x
<<
1
)
:
grad
;
__global
const
uchar
*
qangle_ptr
=
(
gid
<
blocks_total
)
?
__global
const
QANGLE_TYPE
*
qangle_ptr
=
(
gid
<
blocks_total
)
?
qangle
+
offset_y
*
qangle_step
+
(
offset_x
<<
1
)
:
qangle
;
__local
float*
hist
=
hists
+
12
*
(
cell_y
*
CELLS_PER_BLOCK_Y
+
cell_x
)
+
...
...
@@ -101,7 +109,7 @@ __kernel void compute_hists_lut_kernel(
for
(
int
dist_y
=
dist_y_begin
; dist_y < dist_y_begin + 12; ++dist_y)
{
float2
vote
=
(
float2
)
(
grad_ptr[0],
grad_ptr[1]
)
;
uchar2
bin
=
(
uchar
2
)
(
qangle_ptr[0],
qangle_ptr[1]
)
;
QANGLE_TYPE2
bin
=
(
QANGLE_TYPE
2
)
(
qangle_ptr[0],
qangle_ptr[1]
)
;
grad_ptr
+=
grad_quadstep
;
qangle_ptr
+=
qangle_step
;
...
...
@@ -133,9 +141,8 @@ __kernel void compute_hists_lut_kernel(
final_hist[
(
cell_x
*
2
+
cell_y
)
*
cnbins
+
bin_id]
=
hist_[0]
+
hist_[1]
+
hist_[2]
;
}
#
ifdef
CPU
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
#
endif
int
tid
=
(
cell_y
*
CELLS_PER_BLOCK_Y
+
cell_x
)
*
12
+
cell_thread_x
;
if
((
tid
<
cblock_hist_size
)
&&
(
gid
<
blocks_total
))
...
...
@@ -558,7 +565,7 @@ __kernel void extract_descrs_by_cols_kernel(
__kernel
void
compute_gradients_8UC4_kernel
(
const
int
height,
const
int
width,
const
int
img_step,
const
int
grad_quadstep,
const
int
qangle_step,
const
__global
uchar4
*
img,
__global
float
*
grad,
__global
uchar
*
qangle,
const
__global
uchar4
*
img,
__global
float
*
grad,
__global
QANGLE_TYPE
*
qangle,
const
float
angle_scale,
const
char
correct_gamma,
const
int
cnbins
)
{
const
int
x
=
get_global_id
(
0
)
;
...
...
@@ -660,7 +667,7 @@ __kernel void compute_gradients_8UC4_kernel(
__kernel
void
compute_gradients_8UC1_kernel
(
const
int
height,
const
int
width,
const
int
img_step,
const
int
grad_quadstep,
const
int
qangle_step,
__global
const
uchar
*
img,
__global
float
*
grad,
__global
uchar
*
qangle,
__global
const
uchar
*
img,
__global
float
*
grad,
__global
QANGLE_TYPE
*
qangle,
const
float
angle_scale,
const
char
correct_gamma,
const
int
cnbins
)
{
const
int
x
=
get_global_id
(
0
)
;
...
...
modules/objdetect/test/opencl/test_hogdetector.cpp
View file @
d18ebfa8
...
...
@@ -110,7 +110,7 @@ OCL_TEST_P(HOG, Detect)
OCL_OFF
(
hog
.
detectMultiScale
(
img
,
cpu_found
,
0
,
Size
(
8
,
8
),
Size
(
0
,
0
),
1.05
,
6
));
OCL_ON
(
hog
.
detectMultiScale
(
uimg
,
gpu_found
,
0
,
Size
(
8
,
8
),
Size
(
0
,
0
),
1.05
,
6
));
EXPECT_LT
(
checkRectSimilarity
(
img
.
size
(),
cpu_found
,
gpu_found
),
1.0
);
EXPECT_LT
(
checkRectSimilarity
(
img
.
size
(),
cpu_found
,
gpu_found
),
0.05
);
}
INSTANTIATE_TEST_CASE_P
(
OCL_ObjDetect
,
HOG
,
testing
::
Combine
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment