"git@developer.sourcefind.cn:change/sglang.git" did not exist on "7c39e8a198a7552bc0dba06006543f77ffe3ea30"
Commit 3fff7f84 authored by Davis King's avatar Davis King
Browse files

Added more options to control how the feature pool region is defined.

parent b6dc0d8e
......@@ -21,6 +21,12 @@ namespace dlib
!*/
public:
enum padding_mode_t
{
bounding_box_relative,
landmark_relative
};
shape_predictor_trainer (
)
{
......@@ -35,6 +41,7 @@ namespace dlib
_feature_pool_region_padding = 0;
_verbose = false;
_num_threads = 0;
_padding_mode = landmark_relative;
}
unsigned long get_cascade_depth (
......@@ -165,6 +172,15 @@ namespace dlib
_num_test_splits = num;
}
void set_padding_mode (
padding_mode_t mode
)
{
_padding_mode = mode;
}
padding_mode_t get_padding_mode (
) const { return _padding_mode; }
double get_feature_pool_region_padding (
) const { return _feature_pool_region_padding; }
......@@ -172,6 +188,12 @@ namespace dlib
double padding
)
{
DLIB_CASSERT(padding > -0.5,
"\t void shape_predictor_trainer::set_feature_pool_region_padding()"
<< "\n\t Invalid inputs were given to this function. "
<< "\n\t padding: " << padding
);
_feature_pool_region_padding = padding;
}
......@@ -722,10 +744,23 @@ namespace dlib
// Figure out the bounds on the object shapes. We will sample uniformly
// from this box.
matrix<float> temp = reshape(initial_shape, initial_shape.size()/2, 2);
const double min_x = min(colm(temp,0))-padding;
const double min_y = min(colm(temp,1))-padding;
const double max_x = max(colm(temp,0))+padding;
const double max_y = max(colm(temp,1))+padding;
double min_x = min(colm(temp,0))-padding;
double min_y = min(colm(temp,1))-padding;
double max_x = max(colm(temp,0))+padding;
double max_y = max(colm(temp,1))+padding;
if (get_padding_mode() == bounding_box_relative)
{
min_x = std::min(0.0, min_x);
min_y = std::min(0.0, min_y);
max_x = std::max(1.0, max_x);
max_y = std::max(1.0, max_y);
}
min_x -= padding;
min_y -= padding;
max_x += padding;
max_y += padding;
std::vector<std::vector<dlib::vector<float,2> > > pixel_coordinates;
pixel_coordinates.resize(get_cascade_depth());
......@@ -749,6 +784,7 @@ namespace dlib
double _feature_pool_region_padding;
bool _verbose;
unsigned long _num_threads;
padding_mode_t _padding_mode;
};
// ----------------------------------------------------------------------------------------
......
......@@ -38,6 +38,7 @@ namespace dlib
- #get_feature_pool_region_padding() == 0
- #get_random_seed() == ""
- #get_num_threads() == 0
- #get_padding_mode() == landmark_relative
- This object will not be verbose
!*/
......@@ -180,16 +181,53 @@ namespace dlib
- #get_feature_pool_size() == size
!*/
enum padding_mode_t
{
bounding_box_relative,
landmark_relative
};
padding_mode_t get_padding_mode (
) const;
/*!
ensures
- returns the current padding mode. See get_feature_pool_region_padding()
for a discussion of the modes.
!*/
void set_padding_mode (
padding_mode_t mode
);
/*!
ensures
- #get_padding_mode() == mode
!*/
double get_feature_pool_region_padding (
) const;
/*!
ensures
- When we randomly sample the pixels for the feature pool we do so in a box
fit around the provided training landmarks. By default, this box is the
tightest box that contains the landmarks (i.e. this is what happens when
get_feature_pool_region_padding()==0). However, you can expand or shrink
the size of the pixel sampling region by setting a different value of
get_feature_pool_region_padding().
- This algorithm works by comparing the relative intensity of pairs of
pixels in the input image. To decide which pixels to look at, the
training algorithm randomly selects pixels from a box roughly centered
around the object of interest. We call this box the feature pool region
box.
Each object of interest is defined by a full_object_detection, which
contains a bounding box and a list of landmarks. If
get_padding_mode()==landmark_relative then the feature pool region box is
the tightest box that contains the landmarks inside the
full_object_detection. In this mode the full_object_detection's bounding
box is ignored. Otherwise, if the padding mode is bounding_box_relative
then the feature pool region box is the tightest box that contains BOTH
the landmarks and the full_object_detection's bounding box.
Additionally, you can adjust the size of the feature pool padding region
by setting get_feature_pool_region_padding() to some value. If
get_feature_pool_region_padding()==0 then the feature pool region box is
unmodified and defined exactly as stated above. However, you can expand
the size of the box by setting the padding > 0 or shrink it by setting it
to something < 0.
To explain this precisely, for a padding of 0 we say that the pixels are
sampled from a box of size 1x1. The padding value is added to each side
......@@ -203,11 +241,12 @@ namespace dlib
double padding
);
/*!
requires
- padding > -0.5
ensures
- #get_feature_pool_region_padding() == padding
!*/
double get_lambda (
) const;
/*!
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment