mirror of https://github.com/davisking/dlib.git
updated examples
This commit is contained in:
parent
bfa7d1d73e
commit
8808006cf2
|
@ -199,7 +199,8 @@ int main()
|
|||
|
||||
typedef scan_image_pyramid<pyramid_down_5_4, very_simple_feature_extractor> image_scanner_type;
|
||||
image_scanner_type scanner;
|
||||
// Setup the sliding window box. Lets use a window with the same shape as the white boxes we
|
||||
// Instead of using setup_grid_detection_templates() like in object_detector_ex.cpp, lets manually
|
||||
// setup the sliding window box. We use a window with the same shape as the white boxes we
|
||||
// are trying to detect.
|
||||
const rectangle object_box = compute_box_dimensions(1, // width/height ratio
|
||||
70*70 // box area
|
||||
|
@ -234,10 +235,6 @@ int main()
|
|||
structural_object_detection_trainer<image_scanner_type> trainer(scanner);
|
||||
trainer.set_num_threads(4); // Set this to the number of processing cores on your machine.
|
||||
|
||||
// This line tells the algorithm that it is never OK for two detections to overlap. So
|
||||
// this controls how the non-max suppression is performed and in general you can set this up
|
||||
// any way you like.
|
||||
trainer.set_overlap_tester(test_box_overlap(0));
|
||||
|
||||
// The trainer will try and find the detector which minimizes the number of detection mistakes.
|
||||
// This function controls how it decides if a detection output is a mistake or not. The bigger
|
||||
|
@ -246,7 +243,7 @@ int main()
|
|||
// see that the detections aren't exactly on top of the white squares anymore. See the documentation
|
||||
// for the structural_object_detection_trainer and structural_svm_object_detection_problem objects
|
||||
// for a more detailed discussion of this parameter.
|
||||
trainer.set_overlap_eps(0.95);
|
||||
trainer.set_match_eps(0.95);
|
||||
|
||||
|
||||
object_detector<image_scanner_type> detector = trainer.train(images, object_locations);
|
||||
|
|
|
@ -78,6 +78,20 @@ void make_simple_test_data (
|
|||
temp.push_back(centered_rect(point(123,121), 70,70));
|
||||
fill_rect(images[2],temp.back(),255); // Paint the square white
|
||||
object_locations.push_back(temp);
|
||||
|
||||
// corrupt each image with random noise just to make this a little more
|
||||
// challenging
|
||||
dlib::rand rnd;
|
||||
for (unsigned long i = 0; i < images.size(); ++i)
|
||||
{
|
||||
for (long r = 0; r < images[i].nr(); ++r)
|
||||
{
|
||||
for (long c = 0; c < images[i].nc(); ++c)
|
||||
{
|
||||
images[i][r][c] = put_in_range(0,255,images[i][r][c] + 50*rnd.get_random_gaussian());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
|
@ -140,18 +154,22 @@ int main()
|
|||
typedef hashed_feature_image<hog_image<3,3,1,4,hog_signed_gradient,hog_full_interpolation> > feature_extractor_type;
|
||||
typedef scan_image_pyramid<pyramid_down, feature_extractor_type> image_scanner_type;
|
||||
image_scanner_type scanner;
|
||||
// Setup the sliding window box. Lets use a window with the same shape as the white boxes we
|
||||
// are trying to detect.
|
||||
const rectangle object_box = compute_box_dimensions(1, // width/height ratio
|
||||
70*70 // box area
|
||||
);
|
||||
// Setup the detection template so it contains 4 feature extraction zones inside the object_box. These
|
||||
// are the upper left, upper right, lower left, and lower right quadrants of object_box. (Note that
|
||||
// in general we can add more than one detection template. But in this case one is enough.)
|
||||
scanner.add_detection_template(object_box, create_grid_detection_template(object_box,2,2));
|
||||
|
||||
|
||||
// The hashed_feature_image feature extractor needs to be supplied with a hash function capable
|
||||
// of hashing the outputs of the hog_image. Calling this function will set it up for us. The 10
|
||||
// here indicates that the hash will hash hog vectors into the range [0, pow(2,10)). Therefore,
|
||||
// the feature vectors output by the hashed_feature_image will have dimension pow(2,10).
|
||||
setup_hashed_features(scanner, images, 10);
|
||||
|
||||
// We also need to setup the detection templates the scanner will use. It is important that
|
||||
// we add detection templates which are capable of matching all the output boxes we want to learn.
|
||||
// For example, if object_locations contained a rectangle with a height to width ratio of 10 but
|
||||
// we only added square detection templates then it would be impossible to detect this non-square
|
||||
// rectangle. The setup_grid_detection_templates() routine will take care of this for us by looking
|
||||
// at the contents of object_locations and automatically picking an appropriate set. Also, the final
|
||||
// arguments indicate that we want our detection templates to have 4 enveloping rectangles laid out
|
||||
// in a 2x2 regular grid inside each sliding window.
|
||||
setup_grid_detection_templates(scanner, object_locations, 2, 2);
|
||||
|
||||
|
||||
// Now that we have defined the kind of sliding window classifier system we want and stored
|
||||
|
@ -160,14 +178,10 @@ int main()
|
|||
structural_object_detection_trainer<image_scanner_type> trainer(scanner);
|
||||
trainer.set_num_threads(4); // Set this to the number of processing cores on your machine.
|
||||
|
||||
// This line tells the algorithm that it is never OK for two detections to overlap. So
|
||||
// this controls how the non-max suppression is performed and in general you can set this up
|
||||
// any way you like.
|
||||
trainer.set_overlap_tester(test_box_overlap(0));
|
||||
|
||||
// There are a variety of other useful parameters to the structural_object_detection_trainer.
|
||||
// Examples of the ones you are most likely to use follow (see dlib documentation for what they do):
|
||||
//trainer.set_overlap_eps(0.80);
|
||||
//trainer.set_match_eps(0.80);
|
||||
//trainer.set_c(1.0);
|
||||
//trainer.set_loss_per_missed_target(1);
|
||||
//trainer.set_loss_per_false_alarm(1);
|
||||
|
|
Loading…
Reference in New Issue