Loading...
Searching...
No Matches
detection_layer.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
9
10namespace opennn
11{
12
14{
16
17 Index grid_size = 0;
18 Index grid_width = 0;
19 Index boxes_per_cell = 0;
20 Index classes_number = 0;
21 ClassActivation class_activation = ClassActivation::Softmax;
22
23 vector<array<float, 2>> anchors;
25
26 void set(const Shape&, const vector<array<float, 2>>&);
27
29 void back_propagate(ForwardPropagation&, BackPropagation&, size_t) const override;
30};
31
32class Detection final : public Layer, public DetectionHeadEndpoint
33{
34public:
35
37
38 Detection(const Shape& = {},
39 const vector<array<float, 2>>& = {},
40 const string& = "detection_layer");
41
42 Shape get_output_shape() const override { return input_shape; }
43 const vector<array<float, 2>>& get_anchors() const { return detection.anchors; }
44 ClassActivation get_class_activation() const { return detection.class_activation; }
46 {
48 detection.boxes_per_cell,
49 detection.classes_number,
50 1,
51 detection.class_activation};
52 }
53
54 void set(const Shape&, const vector<array<float, 2>>&, const string&);
55 bool accepts_input_rank(Index rank) const override { return is_one_of(rank, 3); }
56
58 {
60 "{} layer supports FP32 activations only; compile the network with Type::FP32.",
61 get_name());
62 }
63
64 void apply_input_shape(const Shape& new_input_shape) override { set(new_input_shape, detection.anchors, label); }
65 void set_class_activation(ClassActivation new_class_activation) { detection.class_activation = new_class_activation; }
66
67 void read_JSON_body(const Json*) override;
68 void write_JSON_body(JsonWriter&) const override;
69
70private:
71
72 DetectionOperator detection;
73
74 void configure_operator();
75};
76
77}
Definition detection_head.h:60
void read_JSON_body(const Json *) override
Shape get_output_shape() const override
Definition detection_layer.h:42
bool accepts_input_rank(Index rank) const override
Definition detection_layer.h:55
DetectionHeadMetadata get_detection_head_metadata() const noexcept override
Definition detection_layer.h:45
ClassActivation get_class_activation() const
Definition detection_layer.h:44
Detection(const Shape &={}, const vector< array< float, 2 > > &={}, const string &="detection_layer")
DetectionOperator::ClassActivation ClassActivation
Definition detection_layer.h:36
void on_compute_dtype_changed() override
Definition detection_layer.h:57
const vector< array< float, 2 > > & get_anchors() const
Definition detection_layer.h:43
void write_JSON_body(JsonWriter &) const override
void apply_input_shape(const Shape &new_input_shape) override
Definition detection_layer.h:64
void set_class_activation(ClassActivation new_class_activation)
Definition detection_layer.h:65
void set(const Shape &, const vector< array< float, 2 > > &, const string &)
Definition json.h:92
Definition json.h:24
Type get_compute_dtype() const noexcept
Definition layer.h:157
string label
Definition layer.h:215
Layer(LayerType type, Trainability trainability=Trainability::Trainable)
Definition layer.h:210
const string & get_name() const
Shape input_shape
Definition layer.h:219
Definition configuration.h:10
@ CUDA
Definition configuration.h:12
Eigen::array< T, N > array
Definition tensor_types.h:736
constexpr bool is_one_of(const T &value, const Candidates &... candidates)
Definition opennn_types.h:273
@ FP32
Definition configuration.h:13
DetectionClassActivation
Definition detection_head.h:14
ForwardPropagationMode
Definition forward_propagation.h:33
@ AnchorBased
Definition detection_head.h:13
#define throw_if(condition,...)
Definition opennn_types.h:243
Definition back_propagation.h:19
Definition tensor_types.h:340
Definition detection_head.h:17
Definition detection_layer.h:14
Index boxes_per_cell
Definition detection_layer.h:19
ClassActivation class_activation
Definition detection_layer.h:21
Index grid_size
Definition detection_layer.h:17
DetectionClassActivation ClassActivation
Definition detection_layer.h:15
Index classes_number
Definition detection_layer.h:20
void set(const Shape &, const vector< array< float, 2 > > &)
Index grid_width
Definition detection_layer.h:18
void back_propagate(ForwardPropagation &, BackPropagation &, size_t) const override
vector< array< float, 2 > > anchors
Definition detection_layer.h:23
void forward_propagate(ForwardPropagation &, size_t, ForwardPropagationMode) override
Buffer device_anchors
Definition detection_layer.h:24
Definition forward_propagation.h:52
Definition operator.h:28
Definition tensor_types.h:172