Commit 02cf246d authored by Davis King's avatar Davis King

Changed the functions that transform between input tensor coordinates and

output tensor coordinates to use dpoint instead of point.  This way, we can
obtain sub-pixel coordinates if we need them.
parent 2883650b
......@@ -90,8 +90,8 @@ namespace dlib
void set_bias_learning_rate_multiplier(double val) { bias_learning_rate_multiplier = val; }
void set_bias_weight_decay_multiplier(double val) { bias_weight_decay_multiplier = val; }
inline point map_input_to_output (
point p
inline dpoint map_input_to_output (
dpoint p
) const
{
p.x() = (p.x()+padding_x()-nc()/2)/stride_x();
......@@ -99,8 +99,8 @@ namespace dlib
return p;
}
inline point map_output_to_input (
point p
inline dpoint map_output_to_input (
dpoint p
) const
{
p.x() = p.x()*stride_x() - padding_x() + nc()/2;
......@@ -187,7 +187,7 @@ namespace dlib
void backward(const tensor& gradient_input, SUBNET& sub, tensor& params_grad)
{
conv.get_gradient_for_data (true, gradient_input, filters(params,0), sub.get_gradient_input());
// no point computing the parameter gradients if they won't be used.
// no dpoint computing the parameter gradients if they won't be used.
if (learning_rate_multiplier != 0)
{
auto filt = filters(params_grad,0);
......@@ -374,8 +374,8 @@ namespace dlib
void set_bias_learning_rate_multiplier(double val) { bias_learning_rate_multiplier = val; }
void set_bias_weight_decay_multiplier(double val) { bias_weight_decay_multiplier = val; }
inline point map_output_to_input (
point p
inline dpoint map_output_to_input (
dpoint p
) const
{
p.x() = (p.x()+padding_x()-nc()/2)/stride_x();
......@@ -383,8 +383,8 @@ namespace dlib
return p;
}
inline point map_input_to_output (
point p
inline dpoint map_input_to_output (
dpoint p
) const
{
p.x() = p.x()*stride_x() - padding_x() + nc()/2;
......@@ -646,13 +646,13 @@ namespace dlib
tt::resize_bilinear_gradient(sub.get_gradient_input(), gradient_input);
}
inline point map_input_to_output (point p) const
inline dpoint map_input_to_output (dpoint p) const
{
p.x() = p.x()*scale_x;
p.y() = p.y()*scale_y;
return p;
}
inline point map_output_to_input (point p) const
inline dpoint map_output_to_input (dpoint p) const
{
p.x() = p.x()/scale_x;
p.y() = p.y()/scale_y;
......@@ -746,8 +746,8 @@ namespace dlib
long padding_y() const { return padding_y_; }
long padding_x() const { return padding_x_; }
inline point map_input_to_output (
point p
inline dpoint map_input_to_output (
dpoint p
) const
{
p.x() = (p.x()+padding_x()-nc()/2)/stride_x();
......@@ -755,8 +755,8 @@ namespace dlib
return p;
}
inline point map_output_to_input (
point p
inline dpoint map_output_to_input (
dpoint p
) const
{
p.x() = p.x()*stride_x() - padding_x() + nc()/2;
......@@ -943,8 +943,8 @@ namespace dlib
long padding_y() const { return padding_y_; }
long padding_x() const { return padding_x_; }
inline point map_input_to_output (
point p
inline dpoint map_input_to_output (
dpoint p
) const
{
p.x() = (p.x()+padding_x()-nc()/2)/stride_x();
......@@ -952,8 +952,8 @@ namespace dlib
return p;
}
inline point map_output_to_input (
point p
inline dpoint map_output_to_input (
dpoint p
) const
{
p.x() = p.x()*stride_x() - padding_x() + nc()/2;
......@@ -1155,8 +1155,8 @@ namespace dlib
void set_bias_learning_rate_multiplier(double val) { bias_learning_rate_multiplier = val; }
void set_bias_weight_decay_multiplier(double val) { bias_weight_decay_multiplier = val; }
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
template <typename SUBNET>
......@@ -1696,8 +1696,8 @@ namespace dlib
tt::multiply(true, data_grad, mask, gradient_input);
}
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
const tensor& get_layer_params() const { return params; }
tensor& get_layer_params() { return params; }
......@@ -1781,8 +1781,8 @@ namespace dlib
tt::affine_transform(output, input, val);
}
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
void backward_inplace(
const tensor& gradient_input,
......@@ -1889,8 +1889,8 @@ namespace dlib
layer_mode get_mode() const { return mode; }
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
template <typename SUBNET>
void setup (const SUBNET& sub)
......@@ -2256,8 +2256,8 @@ namespace dlib
tt::relu_gradient(data_grad, computed_output, gradient_input);
}
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
const tensor& get_layer_params() const { return params; }
tensor& get_layer_params() { return params; }
......@@ -2336,8 +2336,8 @@ namespace dlib
gradient_input, params, params_grad);
}
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
const tensor& get_layer_params() const { return params; }
tensor& get_layer_params() { return params; }
......@@ -2411,8 +2411,8 @@ namespace dlib
tt::sigmoid_gradient(data_grad, computed_output, gradient_input);
}
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
const tensor& get_layer_params() const { return params; }
tensor& get_layer_params() { return params; }
......@@ -2464,8 +2464,8 @@ namespace dlib
{
}
inline point map_input_to_output (const point& p) const { return p; }
inline point map_output_to_input (const point& p) const { return p; }
inline dpoint map_input_to_output (const dpoint& p) const { return p; }
inline dpoint map_output_to_input (const dpoint& p) const { return p; }
void forward_inplace(const tensor& input, tensor& output)
{
......@@ -2678,8 +2678,8 @@ namespace dlib
impl::concat_helper_impl<TAG_TYPES...>::split(gradient_input, sub, 0);
}
point map_input_to_output(point p) const { return p; }
point map_output_to_input(point p) const { return p; }
dpoint map_input_to_output(dpoint p) const { return p; }
dpoint map_output_to_input(dpoint p) const { return p; }
const tensor& get_layer_params() const { return params; }
tensor& get_layer_params() { return params; }
......
......@@ -349,8 +349,8 @@ namespace dlib
!*/
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
/*!
These two functions are optional. If provided, they should map between
(column,row) coordinates in input and output tensors of forward(). Providing
......@@ -857,8 +857,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1070,8 +1070,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1129,8 +1129,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1184,8 +1184,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1238,8 +1238,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1449,8 +1449,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1559,8 +1559,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& computed_output, const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1695,8 +1695,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& computed_output, const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1840,8 +1840,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& computed_output, const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1887,8 +1887,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& computed_output, const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1942,8 +1942,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& computed_output, const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -1975,8 +1975,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& computed_output, const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -2010,8 +2010,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
void forward_inplace(const tensor& input, tensor& output);
void backward_inplace(const tensor& computed_output, const tensor& gradient_input, tensor& data_grad, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......@@ -2235,8 +2235,8 @@ namespace dlib
template <typename SUBNET> void setup (const SUBNET& sub);
template <typename SUBNET> void forward(const SUBNET& sub, resizable_tensor& output);
template <typename SUBNET> void backward(const tensor& gradient_input, SUBNET& sub, tensor& params_grad);
point map_input_to_output(point p) const;
point map_output_to_input(point p) const;
dpoint map_input_to_output(dpoint p) const;
dpoint map_output_to_input(dpoint p) const;
const tensor& get_layer_params() const;
tensor& get_layer_params();
/*!
......
......@@ -131,9 +131,9 @@ namespace dlib
{
public:
visitor_net_map_input_to_output(point& p_) : p(p_) {}
visitor_net_map_input_to_output(dpoint& p_) : p(p_) {}
point& p;
dpoint& p;
template<typename input_layer_type>
void operator()(const input_layer_type& net)
......@@ -191,9 +191,9 @@ namespace dlib
class visitor_net_map_output_to_input
{
public:
visitor_net_map_output_to_input(point& p_) : p(p_) {}
visitor_net_map_output_to_input(dpoint& p_) : p(p_) {}
point& p;
dpoint& p;
template<typename input_layer_type>
void operator()(const input_layer_type& net)
......@@ -250,9 +250,9 @@ namespace dlib
}
template <typename net_type>
inline point input_tensor_to_output_tensor(
inline dpoint input_tensor_to_output_tensor(
const net_type& net,
point p
dpoint p
)
{
impl::visitor_net_map_input_to_output temp(p);
......@@ -261,9 +261,9 @@ namespace dlib
}
template <typename net_type>
inline point output_tensor_to_input_tensor(
inline dpoint output_tensor_to_input_tensor(
const net_type& net,
point p
dpoint p
)
{
impl::visitor_net_map_output_to_input temp(p);
......
......@@ -74,17 +74,17 @@ namespace dlib
// ----------------------------------------------------------------------------------------
template <typename net_type>
point input_tensor_to_output_tensor(
dpoint input_tensor_to_output_tensor(
const net_type& net,
point p
dpoint p
);
/*!
requires
- net_type is an object of type add_layer, add_skip_layer, or add_tag_layer.
- All layers in the net must provide map_input_to_output() functions.
ensures
- Given a point (i.e. a row,column coordinate) in the input tensor given to
net, this function returns the corresponding point in the output tensor
- Given a dpoint (i.e. a row,column coordinate) in the input tensor given to
net, this function returns the corresponding dpoint in the output tensor
net.get_output(). This kind of mapping is useful when working with fully
convolutional networks as you will often want to know what parts of the
output feature maps correspond to what parts of the input.
......@@ -104,9 +104,9 @@ namespace dlib
// ----------------------------------------------------------------------------------------
template <typename net_type>
point output_tensor_to_input_tensor(
dpoint output_tensor_to_input_tensor(
const net_type& net,
point p
dpoint p
);
/*!
requires
......@@ -114,7 +114,7 @@ namespace dlib
- All layers in the net must provide map_output_to_input() functions.
ensures
- This function provides the reverse mapping of input_tensor_to_output_tensor().
That is, given a point in net.get_output(), what is the corresponding point
That is, given a dpoint in net.get_output(), what is the corresponding dpoint
in the input tensor?
!*/
......
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