debug of cuda_tvl1 => pass tests succesfully
This commit is contained in:
parent
32707317fa
commit
693c4e5741
@ -209,7 +209,9 @@ namespace tvl1flow
|
||||
|
||||
__global__ void estimateUKernel(const PtrStepSzf I1wx, const PtrStepf I1wy,
|
||||
const PtrStepf grad, const PtrStepf rho_c,
|
||||
const PtrStepf p11, const PtrStepf p12, const PtrStepf p21, const PtrStepf p22, const PtrStepf p31, const PtrStepf p32,
|
||||
const PtrStepf p11, const PtrStepf p12,
|
||||
const PtrStepf p21, const PtrStepf p22,
|
||||
const PtrStepf p31, const PtrStepf p32,
|
||||
PtrStepf u1, PtrStepf u2, PtrStepf u3, PtrStepf error,
|
||||
const float l_t, const float theta, const float gamma, const bool calcError)
|
||||
{
|
||||
|
@ -235,9 +235,8 @@ void cv::cuda::OpticalFlowDual_TVL1_CUDA::procOneScale(const GpuMat& I0, const G
|
||||
{
|
||||
// some tweaks to make sum operation less frequently
|
||||
bool calcError = (epsilon > 0) && (n & 0x1) && (prevError < scaledEpsilon);
|
||||
|
||||
estimateU(I1wx, I1wy, grad, rho_c, p11, p12, p21, p22, p31, p32, u1, u2, u3, diff, l_t, gamma, static_cast<float>(theta), calcError);
|
||||
|
||||
cv::Mat m1(u3);
|
||||
estimateU(I1wx, I1wy, grad, rho_c, p11, p12, p21, p22, p31, p32, u1, u2, u3, diff, l_t, static_cast<float>(theta), gamma, calcError);
|
||||
if (calcError)
|
||||
{
|
||||
error = cuda::sum(diff, norm_buf)[0];
|
||||
@ -259,7 +258,8 @@ void cv::cuda::OpticalFlowDual_TVL1_CUDA::collectGarbage()
|
||||
I0s.clear();
|
||||
I1s.clear();
|
||||
u1s.clear();
|
||||
u2s.clear();
|
||||
u2s.clear();
|
||||
u3s.clear();
|
||||
|
||||
I1x_buf.release();
|
||||
I1y_buf.release();
|
||||
@ -274,7 +274,9 @@ void cv::cuda::OpticalFlowDual_TVL1_CUDA::collectGarbage()
|
||||
p11_buf.release();
|
||||
p12_buf.release();
|
||||
p21_buf.release();
|
||||
p22_buf.release();
|
||||
p22_buf.release();
|
||||
p31_buf.release();
|
||||
p32_buf.release();
|
||||
|
||||
diff_buf.release();
|
||||
norm_buf.release();
|
||||
|
@ -361,9 +361,21 @@ CUDA_TEST_P(OpticalFlowDual_TVL1, Accuracy)
|
||||
alg->calc(frame0, frame1, flow);
|
||||
cv::Mat gold[2];
|
||||
cv::split(flow, gold);
|
||||
cv::Mat mx(d_flowx);
|
||||
cv::Mat my(d_flowx);
|
||||
|
||||
EXPECT_MAT_SIMILAR(gold[0], d_flowx, 4e-3);
|
||||
EXPECT_MAT_SIMILAR(gold[1], d_flowy, 4e-3);
|
||||
d_alg.gamma = 1;
|
||||
alg->set("gamma", 1);
|
||||
d_alg(loadMat(frame0, useRoi), loadMat(frame1, useRoi), d_flowx, d_flowy);
|
||||
alg->calc(frame0, frame1, flow);
|
||||
cv::split(flow, gold);
|
||||
mx = cv::Mat(d_flowx);
|
||||
my = cv::Mat(d_flowx);
|
||||
|
||||
EXPECT_MAT_SIMILAR(gold[0], d_flowx, 4e-3);
|
||||
EXPECT_MAT_SIMILAR(gold[1], d_flowy, 4e-3);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(CUDA_OptFlow, OpticalFlowDual_TVL1, testing::Combine(
|
||||
|
@ -121,8 +121,8 @@ private:
|
||||
std::vector<Mat_<float> > I0s;
|
||||
std::vector<Mat_<float> > I1s;
|
||||
std::vector<Mat_<float> > u1s;
|
||||
std::vector<Mat_<float> > u2s;
|
||||
std::vector<Mat_<float> > u3s;
|
||||
std::vector<Mat_<float> > u2s;
|
||||
std::vector<Mat_<float> > u3s;
|
||||
|
||||
Mat_<float> I1x_buf;
|
||||
Mat_<float> I1y_buf;
|
||||
@ -138,26 +138,26 @@ private:
|
||||
Mat_<float> rho_c_buf;
|
||||
|
||||
Mat_<float> v1_buf;
|
||||
Mat_<float> v2_buf;
|
||||
Mat_<float> v3_buf;
|
||||
Mat_<float> v2_buf;
|
||||
Mat_<float> v3_buf;
|
||||
|
||||
Mat_<float> p11_buf;
|
||||
Mat_<float> p12_buf;
|
||||
Mat_<float> p21_buf;
|
||||
Mat_<float> p22_buf;
|
||||
Mat_<float> p31_buf;
|
||||
Mat_<float> p32_buf;
|
||||
Mat_<float> p22_buf;
|
||||
Mat_<float> p31_buf;
|
||||
Mat_<float> p32_buf;
|
||||
|
||||
Mat_<float> div_p1_buf;
|
||||
Mat_<float> div_p2_buf;
|
||||
Mat_<float> div_p3_buf;
|
||||
Mat_<float> div_p2_buf;
|
||||
Mat_<float> div_p3_buf;
|
||||
|
||||
Mat_<float> u1x_buf;
|
||||
Mat_<float> u1y_buf;
|
||||
Mat_<float> u2x_buf;
|
||||
Mat_<float> u2y_buf;
|
||||
Mat_<float> u3x_buf;
|
||||
Mat_<float> u3y_buf;
|
||||
Mat_<float> u2y_buf;
|
||||
Mat_<float> u3x_buf;
|
||||
Mat_<float> u3y_buf;
|
||||
} dm;
|
||||
struct dataUMat
|
||||
{
|
||||
@ -892,10 +892,6 @@ void CalcGradRhoBody::operator() (const Range& range) const
|
||||
|
||||
// compute the constant part of the rho function
|
||||
rhoRow[x] = (I1wRow[x] - I1wxRow[x] * u1Row[x] - I1wyRow[x] * u2Row[x] - I0Row[x]);
|
||||
//It = I1wRow[x] - I0Row[x]
|
||||
//(u - u0)*i_X = I1wxRow[x] * u1Row[x]
|
||||
//(v - v0)*i_Y = I1wyRow[x] * u2Row[x]
|
||||
// gamma * w = gamma * u3
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -970,7 +966,6 @@ void EstimateVBody::operator() (const Range& range) const
|
||||
float d1 = 0.0f;
|
||||
float d2 = 0.0f;
|
||||
float d3 = 0.0f;
|
||||
// add d3 for 3 cases
|
||||
if (rho < -l_t * gradRow[x])
|
||||
{
|
||||
d1 = l_t * I1wxRow[x];
|
||||
|
Loading…
x
Reference in New Issue
Block a user