Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
f69ccfa4
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f69ccfa4
编写于
9月 16, 2013
作者:
P
peng xiao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add opencl svm.
上级
178f0272
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
1426 addition
and
0 deletion
+1426
-0
modules/ocl/include/opencv2/ocl/ocl.hpp
modules/ocl/include/opencv2/ocl/ocl.hpp
+20
-0
modules/ocl/src/opencl/svm.cl
modules/ocl/src/opencl/svm.cl
+209
-0
modules/ocl/src/svm.cpp
modules/ocl/src/svm.cpp
+1197
-0
未找到文件。
modules/ocl/include/opencv2/ocl/ocl.hpp
浏览文件 @
f69ccfa4
...
...
@@ -1900,6 +1900,26 @@ namespace cv
private:
oclMat
samples_ocl
;
};
/*!*************** SVM *************!*/
class
CV_EXPORTS
CvSVM_OCL
:
public
CvSVM
{
public:
CvSVM_OCL
();
CvSVM_OCL
(
const
cv
::
Mat
&
trainData
,
const
cv
::
Mat
&
responses
,
const
cv
::
Mat
&
varIdx
=
cv
::
Mat
(),
const
cv
::
Mat
&
sampleIdx
=
cv
::
Mat
(),
CvSVMParams
params
=
CvSVMParams
());
CV_WRAP
float
predict
(
const
int
row_index
,
Mat
&
src
,
bool
returnDFVal
=
false
)
const
;
CV_WRAP
void
predict
(
cv
::
InputArray
samples
,
cv
::
OutputArray
results
)
const
;
CV_WRAP
float
predict
(
const
cv
::
Mat
&
sample
,
bool
returnDFVal
=
false
)
const
;
float
predict
(
const
CvMat
*
samples
,
CV_OUT
CvMat
*
results
)
const
;
protected:
float
predict
(
const
int
row_index
,
int
row_len
,
Mat
&
src
,
bool
returnDFVal
=
false
)
const
;
void
create_kernel
();
void
create_solver
();
};
/*!*************** END *************!*/
}
}
#if defined _MSC_VER && _MSC_VER >= 1200
...
...
modules/ocl/src/opencl/svm.cl
0 → 100644
浏览文件 @
f69ccfa4
//
License
Agreement
//
For
Open
Source
Computer
Vision
Library
//
//
Copyright
(
C
)
2010-2013,
Institute
Of
Software
Chinese
Academy
Of
Science,
all
rights
reserved.
//
Copyright
(
C
)
2010-2013,
Advanced
Micro
Devices,
Inc.,
all
rights
reserved.
//
Third
party
copyrights
are
property
of
their
respective
owners.
//
//
@Authors
//
Erping
Pang,
erping@multicorewareinc.com
//
//
Redistribution
and
use
in
source
and
binary
forms,
with
or
without
modification,
//
are
permitted
provided
that
the
following
conditions
are
met:
//
//
*
Redistribution
's
of
source
code
must
retain
the
above
copyright
notice,
//
this
list
of
conditions
and
the
following
disclaimer.
//
//
*
Redistribution
's
in
binary
form
must
reproduce
the
above
copyright
notice,
//
this
list
of
conditions
and
the
following
disclaimer
in
the
documentation
//
and/or
other
oclMaterials
provided
with
the
distribution.
//
//
*
The
name
of
the
copyright
holders
may
not
be
used
to
endorse
or
promote
products
//
derived
from
this
software
without
specific
prior
written
permission.
//
//
This
software
is
provided
by
the
copyright
holders
and
contributors
as
is
and
//
any
express
or
implied
warranties,
including,
but
not
limited
to,
the
implied
//
warranties
of
merchantability
and
fitness
for
a
particular
purpose
are
disclaimed.
//
In
no
event
shall
the
Intel
Corporation
or
contributors
be
liable
for
any
direct,
//
indirect,
incidental,
special,
exemplary,
or
consequential
damages
//
(
including,
but
not
limited
to,
procurement
of
substitute
goods
or
services
;
//
loss
of
use,
data,
or
profits
; or business interruption) however caused
//
and
on
any
theory
of
liability,
whether
in
contract,
strict
liability,
//
or
tort
(
including
negligence
or
otherwise
)
arising
in
any
way
out
of
//
the
use
of
this
software,
even
if
advised
of
the
possibility
of
such
damage.
//
//
#
if
defined
(
DOUBLE_SUPPORT
)
#
ifdef
cl_khr_fp64
#
pragma
OPENCL
EXTENSION
cl_khr_fp64:enable
#
elif
defined
(
cl_amd_fp64
)
#
pragma
OPENCL
EXTENSION
cl_amd_fp64:enable
#
endif
#
define
TYPE
double
#
else
#
define
TYPE
float
#
endif
#
if
defined
ADDEXP
#
define
EXP
(
X
)
exp
(
X
)
#
else
#
define
EXP
(
X
)
X
#
endif
#
if
defined
ADDPOW
#
define
POW
(
X,Y
)
pow
(
fabs
(
X
)
,
(
Y
))
#
else
#
define
POW
(
X,Y
)
X
#
endif
#
define
FLT_MAX
3.402823466e+38F
#
define
MAX_VAL
(
FLT_MAX*1e-3
)
__kernel
void
svm_linear
(
__global
float*
src,
int
src_step,
__global
float*
src2,
int
src2_step,
__global
TYPE*
dst,
int
dst_step,
int
src_rows,
int
src2_cols,
int
width,
TYPE
alpha,
TYPE
beta
)
{
const
int
col
=
get_global_id
(
0
)
;
const
int
row
=
get_global_id
(
1
)
;
if
(
row
<
src_rows
&&
col
<
src2_cols
)
{
int
t
=
0
;
TYPE
temp
=
0.0
;
for
(
t
=
0
; t < width - 16; t += 16)
{
float16
t0
=
vload16
(
0
,
src
+
row
*
src_step
+
t
)
;
float16
t1
=
vload16
(
0
,
src2
+
col
*
src2_step
+
t
)
;
t0
*=
t1
;
temp
+=
t0.s0
+
t0.s1
+
t0.s2
+
t0.s3
+
t0.s4
+
t0.s5
+
t0.s6
+
t0.s7
+
t0.s8
+
t0.s9
+
t0.sa
+
t0.sb
+
t0.sc
+
t0.sd
+
t0.se
+
t0.sf
;
}
for
(
; t < width; t++)
{
temp
+=
src[row
*
src_step
+
t]
*
src2[col
*
src2_step
+
t]
;
}
TYPE
temp1
=
(
TYPE
)
(
temp
*
alpha
+
beta
)
;
if
(
temp1
>
MAX_VAL
)
{
dst[row
*
dst_step
+
col]
=
MAX_VAL
;
}
else
{
dst[row
*
dst_step
+
col]
=
temp1
;
}
}
}
__kernel
void
svm_sigmod
(
__global
float*
src,
int
src_step,
__global
float*
src2,
int
src2_step,
__global
TYPE*
dst,
int
dst_step,
int
src_rows,
int
src2_cols,
int
width,
TYPE
alpha,
TYPE
beta
)
{
const
int
col
=
get_global_id
(
0
)
;
const
int
row
=
get_global_id
(
1
)
;
if
(
row
<
src_rows
&&
col
<
src2_cols
)
{
int
t
=
0
;
TYPE
temp
=
0.0
;
for
(
t
=
0
; t < width - 16; t += 16)
{
float16
t0
=
vload16
(
0
,
src
+
row
*
src_step
+
t
)
;
float16
t1
=
vload16
(
0
,
src2
+
col
*
src2_step
+
t
)
;
t0
*=
t1
;
temp
+=
t0.s0
+
t0.s1
+
t0.s2
+
t0.s3
+
t0.s4
+
t0.s5
+
t0.s6
+
t0.s7
+
t0.s8
+
t0.s9
+
t0.sa
+
t0.sb
+
t0.sc
+
t0.sd
+
t0.se
+
t0.sf
;
}
for
(
; t < width; t++)
{
temp
+=
src[row
*
src_step
+
t]
*
src2[col
*
src2_step
+
t]
;
}
TYPE
tp
=
(
TYPE
)
(
temp
*
alpha
+
beta
)
;
TYPE
e
=
exp
(
-fabs
(
tp
))
;
TYPE
temp1
;
if
(
tp
>
0
)
{
temp1
=
(
TYPE
)((
1.
-
e
)
/
(
1.
+
e
))
;
}
else
{
temp1
=
(
TYPE
)((
e
-
1.
)
/
(
e
+
1.
))
;
}
if
(
temp1
>
MAX_VAL
)
{
dst[row
*
dst_step
+
col]
=
MAX_VAL
;
}
else
{
dst[row
*
dst_step
+
col]
=
temp1
;
}
}
}
__kernel
void
svm_poly
(
__global
float*
src,
int
src_step,
__global
float*
src2,
int
src2_step,
__global
TYPE*
dst,
int
dst_step,
int
src_rows,
int
src2_cols,
int
width,
TYPE
alpha,
TYPE
beta,
TYPE
degree
)
{
const
int
col
=
get_global_id
(
0
)
;
const
int
row
=
get_global_id
(
1
)
;
if
(
row
<
src_rows
&&
col
<
src2_cols
)
{
int
t
=
0
;
TYPE
temp
=
0.0
;
for
(
t
=
0
; t < width - 16; t += 16)
{
float16
t0
=
vload16
(
0
,
src
+
row
*
src_step
+
t
)
;
float16
t1
=
vload16
(
0
,
src2
+
col
*
src2_step
+
t
)
;
t0
*=
t1
;
temp
+=
t0.s0
+
t0.s1
+
t0.s2
+
t0.s3
+
t0.s4
+
t0.s5
+
t0.s6
+
t0.s7
+
t0.s8
+
t0.s9
+
t0.sa
+
t0.sb
+
t0.sc
+
t0.sd
+
t0.se
+
t0.sf
;
}
for
(
; t < width; t++)
{
temp
+=
src[row
*
src_step
+
t]
*
src2[col
*
src2_step
+
t]
;
}
TYPE
temp1
=
(
TYPE
)(
POW
((
temp
*
alpha
+
beta
)
,
degree
))
;
if
(
temp1
>
MAX_VAL
)
{
dst[row
*
dst_step
+
col]
=
MAX_VAL
;
}
else
{
dst[row
*
dst_step
+
col]
=
temp1
;
}
}
}
__kernel
void
svm_rbf
(
__global
float*
src,
int
src_step,
__global
float*
src2,
int
src2_step,
__global
TYPE*
dst,
int
dst_step,
int
src_rows,
int
src2_cols,
int
width,
TYPE
gamma
)
{
const
int
col
=
get_global_id
(
0
)
;
const
int
row
=
get_global_id
(
1
)
;
if
(
row
<
src_rows
&&
col
<
src2_cols
)
{
int
t
=
0
;
TYPE
temp
=
0.0
;
for
(
t
=
0
; t < width - 16; t += 16)
{
float16
t0
=
vload16
(
0
,
src
+
row
*
src_step
+
t
)
;
float16
t1
=
vload16
(
0
,
src2
+
col
*
src2_step
+
t
)
;
t0
=
(
t0
-
t1
)
*
(
t0
-
t1
)
;
temp
+=
t0.s0
+
t0.s1
+
t0.s2
+
t0.s3
+
t0.s4
+
t0.s5
+
t0.s6
+
t0.s7
+
t0.s8
+
t0.s9
+
t0.sa
+
t0.sb
+
t0.sc
+
t0.sd
+
t0.se
+
t0.sf
;
}
for
(
; t < width; t++)
{
temp
+=
(
src[row
*
src_step
+
t]
-
src2[col
*
src2_step
+
t]
)
*
(
src[row
*
src_step
+
t]
-
src2[col
*
src2_step
+
t]
)
;
}
TYPE
temp1
=
EXP
((
TYPE
)(
temp
*
gamma
))
;
if
(
temp1
>
MAX_VAL
)
{
dst[row
*
dst_step
+
col]
=
MAX_VAL
;
}
else
{
dst[row
*
dst_step
+
col]
=
temp1
;
}
}
}
\ No newline at end of file
modules/ocl/src/svm.cpp
0 → 100644
浏览文件 @
f69ccfa4
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录