Skip to content

Commit bdd5016

Browse files
committed
Added options to input_rgb_image_pyramid that let the user set create_tiled_pyramid()'s padding parameters.
Also changed the default outer border padding from 0 to 11. This effects even previously trained models. So any model that doesn't explicitly set the outer patting to something else will have a padding of 11. This should be a more reasonable value for most networks.
1 parent cf77875 commit bdd5016

2 files changed

Lines changed: 66 additions & 5 deletions

File tree

dlib/dnn/input.h

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,12 @@ namespace dlib
521521
float get_avg_green() const { return avg_green; }
522522
float get_avg_blue() const { return avg_blue; }
523523

524+
unsigned long get_pyramid_padding () const { return pyramid_padding; }
525+
void set_pyramid_padding (unsigned long value) { pyramid_padding = value; }
526+
527+
unsigned long get_pyramid_outer_padding () const { return pyramid_outer_padding; }
528+
void set_pyramid_outer_padding (unsigned long value) { pyramid_outer_padding = value; }
529+
524530
bool image_contained_point (
525531
const tensor& data,
526532
const point& p
@@ -579,9 +585,9 @@ namespace dlib
579585
parallel_for(0, imgs.size(), [&](long i){
580586
std::vector<rectangle> rects;
581587
if (i == 0)
582-
create_tiled_pyramid<pyramid_type>(ibegin[i], imgs[i], data.annotation().get<std::vector<rectangle>>());
588+
create_tiled_pyramid<pyramid_type>(ibegin[i], imgs[i], data.annotation().get<std::vector<rectangle>>(), pyramid_padding, pyramid_outer_padding);
583589
else
584-
create_tiled_pyramid<pyramid_type>(ibegin[i], imgs[i], rects);
590+
create_tiled_pyramid<pyramid_type>(ibegin[i], imgs[i], rects, pyramid_padding, pyramid_outer_padding);
585591
});
586592
nr = imgs[0].nr();
587593
nc = imgs[0].nc();
@@ -611,38 +617,58 @@ namespace dlib
611617

612618
friend void serialize(const input_rgb_image_pyramid& item, std::ostream& out)
613619
{
614-
serialize("input_rgb_image_pyramid", out);
620+
serialize("input_rgb_image_pyramid2", out);
615621
serialize(item.avg_red, out);
616622
serialize(item.avg_green, out);
617623
serialize(item.avg_blue, out);
624+
serialize(item.pyramid_padding, out);
625+
serialize(item.pyramid_outer_padding, out);
618626
}
619627

620628
friend void deserialize(input_rgb_image_pyramid& item, std::istream& in)
621629
{
622630
std::string version;
623631
deserialize(version, in);
624-
if (version != "input_rgb_image_pyramid")
632+
if (version != "input_rgb_image_pyramid" && version != "input_rgb_image_pyramid2")
625633
throw serialization_error("Unexpected version found while deserializing dlib::input_rgb_image_pyramid.");
626634
deserialize(item.avg_red, in);
627635
deserialize(item.avg_green, in);
628636
deserialize(item.avg_blue, in);
637+
if (version == "input_rgb_image_pyramid2")
638+
{
639+
deserialize(item.pyramid_padding, in);
640+
deserialize(item.pyramid_outer_padding, in);
641+
}
642+
else
643+
{
644+
item.pyramid_padding = 10;
645+
item.pyramid_outer_padding = 11;
646+
}
629647
}
630648

631649
friend std::ostream& operator<<(std::ostream& out, const input_rgb_image_pyramid& item)
632650
{
633651
out << "input_rgb_image_pyramid("<<item.avg_red<<","<<item.avg_green<<","<<item.avg_blue<<")";
652+
out << " pyramid_padding="<<item.pyramid_padding;
653+
out << " pyramid_outer_padding="<<item.pyramid_outer_padding;
634654
return out;
635655
}
636656

637657
friend void to_xml(const input_rgb_image_pyramid& item, std::ostream& out)
638658
{
639-
out << "<input_rgb_image_pyramid r='"<<item.avg_red<<"' g='"<<item.avg_green<<"' b='"<<item.avg_blue<<"'/>";
659+
out << "<input_rgb_image_pyramid r='"<<item.avg_red<<"' g='"<<item.avg_green
660+
<<"' b='"<<item.avg_blue
661+
<<"' pyramid_padding='"<<item.pyramid_padding
662+
<<"' pyramid_outer_padding='"<<item.pyramid_outer_padding
663+
<<"'/>";
640664
}
641665

642666
private:
643667
float avg_red;
644668
float avg_green;
645669
float avg_blue;
670+
unsigned long pyramid_padding = 10;
671+
unsigned long pyramid_outer_padding = 11;
646672
};
647673

648674
// ----------------------------------------------------------------------------------------

dlib/dnn/input_abstract.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ namespace dlib
294294
- #get_avg_red() == 122.782
295295
- #get_avg_green() == 117.001
296296
- #get_avg_blue() == 104.298
297+
- #get_pyramid_padding() == 10
298+
- #get_pyramid_outer_padding() == 11
297299
!*/
298300

299301
input_rgb_image_pyramid (
@@ -306,6 +308,8 @@ namespace dlib
306308
- #get_avg_red() == avg_red
307309
- #get_avg_green() == avg_green
308310
- #get_avg_blue() == avg_blue
311+
- #get_pyramid_padding() == 10
312+
- #get_pyramid_outer_padding() == 11
309313
!*/
310314

311315
float get_avg_red(
@@ -329,6 +333,37 @@ namespace dlib
329333
- returns the value subtracted from the blue color channel.
330334
!*/
331335

336+
unsigned long get_pyramid_padding (
337+
) const;
338+
/*!
339+
ensures
340+
- When this object creates a pyramid it will call create_tiled_pyramid() and
341+
set create_tiled_pyramid's pyramid_padding parameter to get_pyramid_padding().
342+
!*/
343+
void set_pyramid_padding (
344+
unsigned long value
345+
);
346+
/*!
347+
ensures
348+
- #get_pyramid_padding() == value
349+
!*/
350+
351+
unsigned long get_pyramid_outer_padding (
352+
) const;
353+
/*!
354+
ensures
355+
- When this object creates a pyramid it will call create_tiled_pyramid()
356+
and set create_tiled_pyramid's pyramid_outer_padding parameter to
357+
get_pyramid_outer_padding().
358+
!*/
359+
void set_pyramid_outer_padding (
360+
unsigned long value
361+
);
362+
/*!
363+
ensures
364+
- #get_pyramid_outer_padding() == value
365+
!*/
366+
332367
template <typename forward_iterator>
333368
void to_tensor (
334369
forward_iterator ibegin,

0 commit comments

Comments
 (0)