34 width_ = feature_param.
width();
35 height_ = feature_param.
height();
38 CHECK_EQ(width_, height_)
39 <<
"Current implementation version requires input_width == input_height.";
44 log_table_.resize(kMaxLogNum);
45 for (
size_t i = 0; i < log_table_.size(); ++i) {
46 log_table_[i] = std::log(
static_cast<float>(1 + i));
50 float* out_blob_data =
nullptr;
54 float* log_table = log_blob_->mutable_gpu_data();
55 cudaMemcpy(log_table, log_table_.data(), log_table_.size() *
sizeof(
float),
56 cudaMemcpyHostToDevice);
63 int channel_index = 0;
64 max_height_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
65 mean_height_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
66 count_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
67 if (use_constant_feature_) {
68 direction_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
70 if (use_intensity_feature_) {
71 top_intensity_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
72 mean_intensity_data_ =
73 out_blob_data + out_blob_->
offset(0, channel_index++);
75 if (use_constant_feature_) {
76 distance_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
78 nonempty_data_ = out_blob_data + out_blob_->
offset(0, channel_index++);
79 CHECK_EQ(out_blob_->
offset(0, channel_index), out_blob_->
count());
82 if (use_constant_feature_) {
83 int map_size = height_ * width_;
84 std::vector<float> direction_data(map_size);
85 std::vector<float> distance_data(map_size);
86 for (
int row = 0; row < height_; ++row) {
87 for (
int col = 0; col < width_; ++col) {
88 int idx = row * width_ + col;
90 float center_x =
Pixel2Pc(row,
static_cast<float>(height_), range_);
91 float center_y =
Pixel2Pc(col,
static_cast<float>(width_), range_);
93 static_cast<float>(std::atan2(center_y, center_x) / (2.0 *
kPI));
95 static_cast<float>(std::hypot(center_x, center_y) / 60.0 - 0.5);
101 cudaMemcpy(direction_data_, direction_data.data(),
102 direction_data.size() *
sizeof(
float), cudaMemcpyHostToDevice);
103 cudaMemcpy(distance_data_, distance_data.data(),
104 distance_data.size() *
sizeof(
float), cudaMemcpyHostToDevice);
106 memcpy(direction_data_, direction_data.data(),
107 direction_data.size() *
sizeof(
float));
108 memcpy(distance_data_, distance_data.data(),
109 distance_data.size() *
sizeof(
float));