switch to L1 norm in hash_bow
This commit is contained in:
parent
0f613ef060
commit
9c9587ea54
|
@ -47,15 +47,14 @@ class HashBow {
|
||||||
|
|
||||||
bow_vector.clear();
|
bow_vector.clear();
|
||||||
|
|
||||||
double sum_squared = 0;
|
double l1_sum = 0;
|
||||||
for (const auto& kv : bow_map) {
|
for (const auto& kv : bow_map) {
|
||||||
bow_vector.emplace_back(kv);
|
bow_vector.emplace_back(kv);
|
||||||
sum_squared += kv.second * kv.second;
|
l1_sum += std::abs(kv.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
double norm = std::sqrt(sum_squared);
|
|
||||||
for (auto& kv : bow_vector) {
|
for (auto& kv : bow_vector) {
|
||||||
kv.second /= norm;
|
kv.second /= l1_sum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,13 +82,15 @@ class HashBow {
|
||||||
// if there is a maximum query time select only the frames that have
|
// if there is a maximum query time select only the frames that have
|
||||||
// timestamp below max_t_ns
|
// timestamp below max_t_ns
|
||||||
if (!max_t_ns || v.first.frame_id < (*max_t_ns))
|
if (!max_t_ns || v.first.frame_id < (*max_t_ns))
|
||||||
scores[v.first] += kv.second * v.second;
|
scores[v.first] += std::abs(kv.second - v.second) -
|
||||||
|
std::abs(kv.second) - std::abs(v.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
results.reserve(scores.size());
|
results.reserve(scores.size());
|
||||||
|
|
||||||
for (const auto& kv : scores) results.emplace_back(kv);
|
for (const auto& kv : scores)
|
||||||
|
results.emplace_back(kv.first, -kv.second / 2.0);
|
||||||
|
|
||||||
std::sort(results.begin(), results.end(),
|
std::sort(results.begin(), results.end(),
|
||||||
[](const auto& a, const auto& b) { return a.second > b.second; });
|
[](const auto& a, const auto& b) { return a.second > b.second; });
|
||||||
|
|
Loading…
Reference in New Issue