Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
bob.pad.face
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
bob
bob.pad.face
Commits
e684c59d
There was a problem fetching the pipeline summary.
Commit
e684c59d
authored
7 years ago
by
Olegs NIKISINS
Browse files
Options
Downloads
Patches
Plain Diff
Added the unit tests for the VideoSvmPadAlgorithm algorithm
parent
93833890
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!8
Added unit tests for all preprocessors, extractors, algorithms, excluding qualitymeasure related stuff
Pipeline
#
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
bob/pad/face/algorithm/VideoSvmPadAlgorithm.py
+18
-11
18 additions, 11 deletions
bob/pad/face/algorithm/VideoSvmPadAlgorithm.py
bob/pad/face/test/test.py
+65
-5
65 additions, 5 deletions
bob/pad/face/test/test.py
with
83 additions
and
16 deletions
bob/pad/face/algorithm/VideoSvmPadAlgorithm.py
+
18
−
11
View file @
e684c59d
...
@@ -446,7 +446,8 @@ class VideoSvmPadAlgorithm(Algorithm):
...
@@ -446,7 +446,8 @@ class VideoSvmPadAlgorithm(Algorithm):
machine_type
=
'
C_SVC
'
,
kernel_type
=
'
RBF
'
,
machine_type
=
'
C_SVC
'
,
kernel_type
=
'
RBF
'
,
trainer_grid_search_params
=
{
'
cost
'
:
[
2
**
p
for
p
in
range
(
-
5
,
16
,
2
)],
'
gamma
'
:
[
2
**
p
for
p
in
range
(
-
15
,
4
,
2
)]},
trainer_grid_search_params
=
{
'
cost
'
:
[
2
**
p
for
p
in
range
(
-
5
,
16
,
2
)],
'
gamma
'
:
[
2
**
p
for
p
in
range
(
-
15
,
4
,
2
)]},
mean_std_norm_flag
=
False
,
mean_std_norm_flag
=
False
,
projector_file
=
""
):
projector_file
=
""
,
save_debug_data_flag
=
True
):
"""
"""
First, this function tunes the hyper-parameters of the SVM classifier using
First, this function tunes the hyper-parameters of the SVM classifier using
grid search on the sub-sets of training data. Train and cross-validation
grid search on the sub-sets of training data. Train and cross-validation
...
@@ -487,6 +488,10 @@ class VideoSvmPadAlgorithm(Algorithm):
...
@@ -487,6 +488,10 @@ class VideoSvmPadAlgorithm(Algorithm):
be save in this path. This file contains information, which might be
be save in this path. This file contains information, which might be
usefull for debugging.
usefull for debugging.
``save_debug_data_flag`` : :py:class:`bool`
Save the data, which might be usefull for debugging if ``True``.
Default: ``True``.
**Returns:**
**Returns:**
``machine`` : object
``machine`` : object
...
@@ -544,16 +549,18 @@ class VideoSvmPadAlgorithm(Algorithm):
...
@@ -544,16 +549,18 @@ class VideoSvmPadAlgorithm(Algorithm):
setattr
(
trainer
,
key
,
selected_params
[
key
])
# set the params of trainer
setattr
(
trainer
,
key
,
selected_params
[
key
])
# set the params of trainer
# Save the data, which is usefull for debugging.
# Save the data, which is usefull for debugging.
debug_file
=
os
.
path
.
join
(
os
.
path
.
split
(
projector_file
)[
0
],
"
debug_data.hdf5
"
)
if
save_debug_data_flag
:
debug_dict
=
{}
debug_dict
[
'
precisions_train
'
]
=
precisions_train
debug_file
=
os
.
path
.
join
(
os
.
path
.
split
(
projector_file
)[
0
],
"
debug_data.hdf5
"
)
debug_dict
[
'
precisions_cv
'
]
=
precisions_cv
debug_dict
=
{}
debug_dict
[
'
cost
'
]
=
selected_params
[
'
cost
'
]
debug_dict
[
'
precisions_train
'
]
=
precisions_train
debug_dict
[
'
gamma
'
]
=
selected_params
[
'
gamma
'
]
debug_dict
[
'
precisions_cv
'
]
=
precisions_cv
f
=
bob
.
io
.
base
.
HDF5File
(
debug_file
,
'
w
'
)
# open hdf5 file to save the debug data
debug_dict
[
'
cost
'
]
=
selected_params
[
'
cost
'
]
for
key
in
debug_dict
.
keys
():
debug_dict
[
'
gamma
'
]
=
selected_params
[
'
gamma
'
]
f
.
set
(
key
,
debug_dict
[
key
])
f
=
bob
.
io
.
base
.
HDF5File
(
debug_file
,
'
w
'
)
# open hdf5 file to save the debug data
del
f
for
key
in
debug_dict
.
keys
():
f
.
set
(
key
,
debug_dict
[
key
])
del
f
# training_features[0] - training features for the REAL class.
# training_features[0] - training features for the REAL class.
real
=
self
.
convert_list_of_frame_cont_to_array
(
training_features
[
0
])
# output is array
real
=
self
.
convert_list_of_frame_cont_to_array
(
training_features
[
0
])
# output is array
...
...
This diff is collapsed.
Click to expand it.
bob/pad/face/test/test.py
+
65
−
5
View file @
e684c59d
...
@@ -29,6 +29,10 @@ from ..extractor import FrameDiffFeatures
...
@@ -29,6 +29,10 @@ from ..extractor import FrameDiffFeatures
from
..extractor
import
VideoLBPHistogram
from
..extractor
import
VideoLBPHistogram
from
..algorithm
import
VideoSvmPadAlgorithm
import
random
#==============================================================================
#==============================================================================
def
test_lbp_histogram
():
def
test_lbp_histogram
():
lbp
=
LBPHistogram
()
lbp
=
LBPHistogram
()
...
@@ -257,37 +261,93 @@ def test_video_lbp_histogram():
...
@@ -257,37 +261,93 @@ def test_video_lbp_histogram():
assert
(
lbp_histograms
[
0
][
1
][
-
1
]
-
0.031737773152965658
)
<
0.000001
assert
(
lbp_histograms
[
0
][
1
][
-
1
]
-
0.031737773152965658
)
<
0.000001
#==============================================================================
def
convert_array_to_list_of_frame_cont
(
data
):
"""
Convert an input 2D array to a list of FrameContainers.
**Parameters:**
``data`` : 2D :py:class:`numpy.ndarray`
Input data array of the dimensionality (N_samples X N_features ).
**Returns:**
``frame_container_list`` : [FrameContainer]
A list of FrameContainers, see ``bob.bio.video.utils.FrameContainer``
for further details. Each frame container contains one feature vector.
"""
frame_container_list
=
[]
for
idx
,
vec
in
enumerate
(
data
):
frame_container
=
bob
.
bio
.
video
.
FrameContainer
()
# initialize the FrameContainer
frame_container
.
add
(
0
,
vec
)
frame_container_list
.
append
(
frame_container
)
# add current frame to FrameContainer
return
frame_container_list
#==============================================================================
def
test_video_svm_pad_algorithm
():
"""
Test the VideoSvmPadAlgorithm algorithm.
"""
random
.
seed
(
7
)
N
=
20000
mu
=
1
sigma
=
1
real_array
=
np
.
transpose
(
np
.
vstack
([[
random
.
gauss
(
mu
,
sigma
)
for
_
in
range
(
N
)],
[
random
.
gauss
(
mu
,
sigma
)
for
_
in
range
(
N
)]])
)
mu
=
5
sigma
=
1
attack_array
=
np
.
transpose
(
np
.
vstack
([[
random
.
gauss
(
mu
,
sigma
)
for
_
in
range
(
N
)],
[
random
.
gauss
(
mu
,
sigma
)
for
_
in
range
(
N
)]])
)
real
=
convert_array_to_list_of_frame_cont
(
real_array
)
attack
=
convert_array_to_list_of_frame_cont
(
attack_array
)
training_features
=
[
real
,
attack
]
MACHINE_TYPE
=
'
C_SVC
'
KERNEL_TYPE
=
'
RBF
'
N_SAMPLES
=
1000
TRAINER_GRID_SEARCH_PARAMS
=
{
'
cost
'
:
[
1
],
'
gamma
'
:
[
0.5
,
1
]}
MEAN_STD_NORM_FLAG
=
True
# enable mean-std normalization
FRAME_LEVEL_SCORES_FLAG
=
True
# one score per frame(!) in this case
algorithm
=
VideoSvmPadAlgorithm
(
machine_type
=
MACHINE_TYPE
,
kernel_type
=
KERNEL_TYPE
,
n_samples
=
N_SAMPLES
,
trainer_grid_search_params
=
TRAINER_GRID_SEARCH_PARAMS
,
mean_std_norm_flag
=
MEAN_STD_NORM_FLAG
,
frame_level_scores_flag
=
FRAME_LEVEL_SCORES_FLAG
)
machine
=
algorithm
.
train_svm
(
training_features
=
training_features
,
n_samples
=
algorithm
.
n_samples
,
machine_type
=
algorithm
.
machine_type
,
kernel_type
=
algorithm
.
kernel_type
,
trainer_grid_search_params
=
algorithm
.
trainer_grid_search_params
,
mean_std_norm_flag
=
algorithm
.
mean_std_norm_flag
,
projector_file
=
""
,
save_debug_data_flag
=
False
)
assert
machine
.
n_support_vectors
==
[
148
,
150
]
assert
machine
.
gamma
==
0.5
real_sample
=
algorithm
.
convert_frame_cont_to_array
(
real
[
0
])
prob
=
machine
.
predict_class_and_probabilities
(
real_sample
)[
1
]
assert
prob
[
0
,
0
]
>
prob
[
0
,
1
]
precision
=
algorithm
.
comp_prediction_precision
(
machine
,
real_array
,
attack_array
)
assert
precision
>
0.99
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment