fine tuning SORT
This commit is contained in:
parent
b23ee6d509
commit
337ce02386
|
@ -195,6 +195,8 @@ void SORT::update(TargetsInFrame& tgts)
|
||||||
tracklet.age = 0;
|
tracklet.age = 0;
|
||||||
tracklet.hits = 1;
|
tracklet.hits = 1;
|
||||||
tracklet.misses = 0;
|
tracklet.misses = 0;
|
||||||
|
tracklet.frame_id=tgts.frame_id;
|
||||||
|
tracklet.tentative = true;
|
||||||
// initate the motion
|
// initate the motion
|
||||||
pair<Matrix<double, 8, 1>, Matrix<double, 8, 8> > motion = kf.initiate(tracklet.bbox);
|
pair<Matrix<double, 8, 1>, Matrix<double, 8, 8> > motion = kf.initiate(tracklet.bbox);
|
||||||
tracklet.mean = motion.first;
|
tracklet.mean = motion.first;
|
||||||
|
@ -243,12 +245,13 @@ void SORT::update(TargetsInFrame& tgts)
|
||||||
int detectionIndex = match.second;
|
int detectionIndex = match.second;
|
||||||
if (trackletIndex >= 0 && detectionIndex >= 0)
|
if (trackletIndex >= 0 && detectionIndex >= 0)
|
||||||
{
|
{
|
||||||
if (iouMatrix[match.first][match.second] >= 0)
|
if (iouMatrix[match.first][match.second] >= _iou_threshold)//iou_thrshold
|
||||||
{
|
{
|
||||||
sv::Box box;
|
sv::Box box;
|
||||||
tgts.targets[detectionIndex].getBox(box);
|
tgts.targets[detectionIndex].getBox(box);
|
||||||
this->_tracklets[trackletIndex].age = 0;
|
this->_tracklets[trackletIndex].age = 0;
|
||||||
this->_tracklets[trackletIndex].hits++;
|
this->_tracklets[trackletIndex].hits++;
|
||||||
|
this->_tracklets[trackletIndex].frame_id=tgts.frame_id;
|
||||||
this->_tracklets[trackletIndex].bbox << box.x1, box.y1, box.x2-box.x1, box.y2-box.y1;
|
this->_tracklets[trackletIndex].bbox << box.x1, box.y1, box.x2-box.x1, box.y2-box.y1;
|
||||||
|
|
||||||
auto[mean, covariance] = kf.update(this->_tracklets[trackletIndex].mean, this->_tracklets[trackletIndex].covariance, box);
|
auto[mean, covariance] = kf.update(this->_tracklets[trackletIndex].mean, this->_tracklets[trackletIndex].covariance, box);
|
||||||
|
@ -274,6 +277,8 @@ void SORT::update(TargetsInFrame& tgts)
|
||||||
tracklet.age = 0;
|
tracklet.age = 0;
|
||||||
tracklet.hits = 1;
|
tracklet.hits = 1;
|
||||||
tracklet.misses = 0;
|
tracklet.misses = 0;
|
||||||
|
tracklet.frame_id=tgts.frame_id;
|
||||||
|
tracklet.tentative = true;
|
||||||
|
|
||||||
auto[new_mean, new_covariance] = kf.initiate(tracklet.bbox);
|
auto[new_mean, new_covariance] = kf.initiate(tracklet.bbox);
|
||||||
tracklet.mean = new_mean;
|
tracklet.mean = new_mean;
|
||||||
|
@ -284,6 +289,19 @@ void SORT::update(TargetsInFrame& tgts)
|
||||||
this->_tracklets.push_back(tracklet);
|
this->_tracklets.push_back(tracklet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (auto& tracklet : this->_tracklets)
|
||||||
|
{
|
||||||
|
if (tracklet.hits >= _min_hits)
|
||||||
|
{
|
||||||
|
tracklet.tentative = false;
|
||||||
|
}
|
||||||
|
if ((tgts.frame_id-tracklet.frame_id <= _max_age) || (!tracklet.tentative && tracklet.frame_id==tgts.frame_id))
|
||||||
|
{
|
||||||
|
_new_tracklets.push_back(tracklet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_tracklets = _new_tracklets;
|
||||||
|
std::vector <Tracklet> ().swap(_new_tracklets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,8 @@ public:
|
||||||
int age;
|
int age;
|
||||||
int hits;
|
int hits;
|
||||||
int misses;
|
int misses;
|
||||||
|
int frame_id=0;
|
||||||
|
bool tentative;
|
||||||
std::vector<double> features;
|
std::vector<double> features;
|
||||||
Eigen::Matrix<double, 8, 1> mean;
|
Eigen::Matrix<double, 8, 1> mean;
|
||||||
Eigen::Matrix<double, 8, 8> covariance;
|
Eigen::Matrix<double, 8, 8> covariance;
|
||||||
|
@ -93,6 +95,7 @@ private:
|
||||||
int _min_hits;
|
int _min_hits;
|
||||||
int _next_tracklet_id;
|
int _next_tracklet_id;
|
||||||
std::vector <Tracklet> _tracklets;
|
std::vector <Tracklet> _tracklets;
|
||||||
|
std::vector <Tracklet> _new_tracklets;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue