@@ -65,14 +65,19 @@ bool PriorBoxLayer::init(const LayerMap& layerMap,
65
65
std::copy (pbConf.aspect_ratio ().begin (),
66
66
pbConf.aspect_ratio ().end (),
67
67
std::back_inserter (tmp));
68
- // flip
69
- int inputRatioLength = tmp.size ();
70
- for (int index = 0 ; index < inputRatioLength; index++) {
71
- aspectRatio_.push_back (tmp[index]);
72
- aspectRatio_.push_back (1 / tmp[index]);
68
+
69
+ if (maxSize_.size () > 0 ) CHECK_EQ (minSize_.size (), maxSize_.size ());
70
+
71
+ // flip aspect ratios
72
+ for (int index = 0 ; index < tmp.size (); index++) {
73
+ real ar = tmp[index];
74
+ if (fabs (ar - 1 .) < 1e-6 ) continue ;
75
+ aspectRatio_.push_back (ar);
76
+ aspectRatio_.push_back (1 . / ar);
73
77
}
74
- numPriors_ = aspectRatio_.size ();
75
- if (maxSize_.size () > 0 ) numPriors_++;
78
+
79
+ numPriors_ = aspectRatio_.size () * minSize_.size () + maxSize_.size ();
80
+
76
81
return true ;
77
82
}
78
83
@@ -99,50 +104,39 @@ void PriorBoxLayer::forward(PassType passType) {
99
104
for (int w = 0 ; w < layerWidth; ++w) {
100
105
real centerX = (w + 0.5 ) * stepW;
101
106
real centerY = (h + 0.5 ) * stepH;
102
- real minSize = 0 ;
103
107
for (size_t s = 0 ; s < minSize_.size (); s++) {
104
- // first prior.
105
- minSize = minSize_[s];
108
+ real minSize = minSize_[s];
106
109
real boxWidth = minSize;
107
110
real boxHeight = minSize;
108
- // xmin, ymin, xmax, ymax.
109
- tmpPtr[idx++] = (centerX - boxWidth / 2 .) / imageWidth;
110
- tmpPtr[idx++] = (centerY - boxHeight / 2 .) / imageHeight;
111
- tmpPtr[idx++] = (centerX + boxWidth / 2 .) / imageWidth;
112
- tmpPtr[idx++] = (centerY + boxHeight / 2 .) / imageHeight;
113
- // set the variance.
114
- for (int t = 0 ; t < 4 ; t++) tmpPtr[idx++] = variance_[t];
111
+
112
+ // priors with different aspect ratios
113
+ for (size_t r = 0 ; r < aspectRatio_.size (); r++) {
114
+ real ar = aspectRatio_[r];
115
+ boxWidth = minSize * sqrt (ar);
116
+ boxHeight = minSize / sqrt (ar);
117
+ tmpPtr[idx++] = (centerX - boxWidth / 2 .) / imageWidth;
118
+ tmpPtr[idx++] = (centerY - boxHeight / 2 .) / imageHeight;
119
+ tmpPtr[idx++] = (centerX + boxWidth / 2 .) / imageWidth;
120
+ tmpPtr[idx++] = (centerY + boxHeight / 2 .) / imageHeight;
121
+ // set the variance.
122
+ for (int t = 0 ; t < 4 ; t++) tmpPtr[idx++] = variance_[t];
123
+ }
115
124
116
125
if (maxSize_.size () > 0 ) {
117
- CHECK_EQ (minSize_.size (), maxSize_.size ());
118
- // second prior.
119
- for (size_t s = 0 ; s < maxSize_.size (); s++) {
120
- real maxSize = maxSize_[s];
121
- boxWidth = boxHeight = sqrt (minSize * maxSize);
122
- tmpPtr[idx++] = (centerX - boxWidth / 2 .) / imageWidth;
123
- tmpPtr[idx++] = (centerY - boxHeight / 2 .) / imageHeight;
124
- tmpPtr[idx++] = (centerX + boxWidth / 2 .) / imageWidth;
125
- tmpPtr[idx++] = (centerY + boxHeight / 2 .) / imageHeight;
126
- // set the variance.
127
- for (int t = 0 ; t < 4 ; t++) tmpPtr[idx++] = variance_[t];
128
- }
126
+ // square prior with size sqrt(minSize * maxSize)
127
+ real maxSize = maxSize_[s];
128
+ boxWidth = boxHeight = sqrt (minSize * maxSize);
129
+ tmpPtr[idx++] = (centerX - boxWidth / 2 .) / imageWidth;
130
+ tmpPtr[idx++] = (centerY - boxHeight / 2 .) / imageHeight;
131
+ tmpPtr[idx++] = (centerX + boxWidth / 2 .) / imageWidth;
132
+ tmpPtr[idx++] = (centerY + boxHeight / 2 .) / imageHeight;
133
+ // set the variance.
134
+ for (int t = 0 ; t < 4 ; t++) tmpPtr[idx++] = variance_[t];
129
135
}
130
136
}
131
- // rest of priors.
132
- for (size_t r = 0 ; r < aspectRatio_.size (); r++) {
133
- real ar = aspectRatio_[r];
134
- if (fabs (ar - 1 .) < 1e-6 ) continue ;
135
- real boxWidth = minSize * sqrt (ar);
136
- real boxHeight = minSize / sqrt (ar);
137
- tmpPtr[idx++] = (centerX - boxWidth / 2 .) / imageWidth;
138
- tmpPtr[idx++] = (centerY - boxHeight / 2 .) / imageHeight;
139
- tmpPtr[idx++] = (centerX + boxWidth / 2 .) / imageWidth;
140
- tmpPtr[idx++] = (centerY + boxHeight / 2 .) / imageHeight;
141
- // set the variance.
142
- for (int t = 0 ; t < 4 ; t++) tmpPtr[idx++] = variance_[t];
143
- }
144
137
}
145
138
}
139
+
146
140
// clip the prior's coordidate such that it is within [0, 1]
147
141
for (int d = 0 ; d < dim * 2 ; ++d)
148
142
if ((d % 8 ) < 4 )
0 commit comments