Skip to content

Commit 74c0125

Browse files
committed
Merge remote-tracking branch 'origin/TLD_OpenCL_Support' into TLD_OpenCL_Support
Conflicts: modules/tracking/src/precomp.hpp modules/tracking/src/tldDetector.cpp modules/tracking/src/tldDetector.hpp modules/tracking/src/tldModel.cpp modules/tracking/src/tldModel.hpp
2 parents 8a5f113 + 3473d93 commit 74c0125

File tree

4 files changed

+188
-15
lines changed

4 files changed

+188
-15
lines changed

modules/tracking/src/precomp.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,5 @@
4646
#include "opencv2/core/utility.hpp"
4747
#include "opencv2/core/ocl.hpp"
4848

49-
namespace cv
50-
{
51-
extern const double ColorNames[][10];
52-
}
5349

5450
#endif

modules/tracking/src/tldDetector.cpp

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,191 @@ namespace cv
286286
//printf("Sr GPU: %f\n\n", t);
287287
}
288288

289+
<<<<<<< HEAD
290+
double TLDDetector::ocl_Sr(const Mat_<uchar>& patch)
291+
{
292+
//int64 e1, e2, e3, e4;
293+
//double t;
294+
//e1 = getTickCount();
295+
//e3 = getTickCount();
296+
double splus = 0.0, sminus = 0.0;
297+
298+
299+
UMat devPatch = patch.getUMat(ACCESS_READ, USAGE_ALLOCATE_DEVICE_MEMORY);
300+
UMat devPositiveSamples = posExp->getUMat(ACCESS_READ, USAGE_ALLOCATE_DEVICE_MEMORY);
301+
UMat devNegativeSamples = negExp->getUMat(ACCESS_READ, USAGE_ALLOCATE_DEVICE_MEMORY);
302+
UMat devNCC(1, 2*MAX_EXAMPLES_IN_MODEL, CV_32FC1, ACCESS_RW, USAGE_ALLOCATE_DEVICE_MEMORY);
303+
304+
305+
ocl::Kernel k;
306+
ocl::ProgramSource src = ocl::tracking::tldDetector_oclsrc;
307+
String error;
308+
ocl::Program prog(src, NULL, error);
309+
k.create("NCC", prog);
310+
if (k.empty())
311+
printf("Kernel create failed!!!\n");
312+
k.args(
313+
ocl::KernelArg::PtrReadOnly(devPatch),
314+
ocl::KernelArg::PtrReadOnly(devPositiveSamples),
315+
ocl::KernelArg::PtrReadOnly(devNegativeSamples),
316+
ocl::KernelArg::PtrWriteOnly(devNCC),
317+
posNum,
318+
negNum);
319+
320+
//e4 = getTickCount();
321+
//t = (e4 - e3) / getTickFrequency()*1000.0;
322+
//printf("Mem Cpy GPU: %f\n", t);
323+
324+
size_t globSize = 1000;
325+
size_t localSize = 128;
326+
//e3 = getTickCount();
327+
if (!k.run(1, &globSize, &localSize, true))
328+
printf("Kernel Run Error!!!");
329+
//e4 = getTickCount();
330+
//t = (e4 - e3) / getTickFrequency()*1000.0;
331+
//printf("Kernel Run GPU: %f\n", t);
332+
333+
//e3 = getTickCount();
334+
Mat resNCC = devNCC.getMat(ACCESS_READ);
335+
//e4 = getTickCount();
336+
//t = (e4 - e3) / getTickFrequency()*1000.0;
337+
//printf("Read Mem GPU: %f\n", t);
338+
339+
////Compare
340+
//Mat_<uchar> modelSample(STANDARD_PATCH_SIZE, STANDARD_PATCH_SIZE);
341+
//for (int i = 0; i < 200; i+=17)
342+
//{
343+
// modelSample.data = &(posExp->data[i * 225]);
344+
// printf("%f\t%f\n\n", resNCC.at<float>(i), NCC(modelSample, patch));
345+
//}
346+
347+
//for (int i = 0; i < 200; i+=23)
348+
//{
349+
// modelSample.data = &(negExp->data[i * 225]);
350+
// printf("%f\t%f\n", resNCC.at<float>(500+i), NCC(modelSample, patch));
351+
//}
352+
353+
354+
for (int i = 0; i < *posNum; i++)
355+
splus = std::max(splus, 0.5 * (resNCC.at<float>(i) + 1.0));
356+
357+
for (int i = 0; i < *negNum; i++)
358+
sminus = std::max(sminus, 0.5 * (resNCC.at<float>(i+500) +1.0));
359+
360+
//e2 = getTickCount();
361+
//t = (e2 - e1) / getTickFrequency()*1000.0;
362+
//printf("Sr GPU: %f\n\n", t);
363+
364+
if (splus + sminus == 0.0)
365+
return 0.0;
366+
return splus / (sminus + splus);
367+
}
368+
369+
void TLDDetector::ocl_batchSrSc(const Mat_<uchar>& patches, double *resultSr, double *resultSc, int numOfPatches)
370+
{
371+
//int64 e1, e2, e3, e4;
372+
//double t;
373+
//e1 = getTickCount();
374+
//e3 = getTickCount();
375+
376+
UMat devPatches = patches.getUMat(ACCESS_READ, USAGE_ALLOCATE_DEVICE_MEMORY);
377+
UMat devPositiveSamples = posExp->getUMat(ACCESS_READ, USAGE_ALLOCATE_DEVICE_MEMORY);
378+
UMat devNegativeSamples = negExp->getUMat(ACCESS_READ, USAGE_ALLOCATE_DEVICE_MEMORY);
379+
UMat devPosNCC(MAX_EXAMPLES_IN_MODEL, numOfPatches, CV_32FC1, ACCESS_RW, USAGE_ALLOCATE_DEVICE_MEMORY);
380+
UMat devNegNCC(MAX_EXAMPLES_IN_MODEL, numOfPatches, CV_32FC1, ACCESS_RW, USAGE_ALLOCATE_DEVICE_MEMORY);
381+
382+
ocl::Kernel k;
383+
ocl::ProgramSource src = ocl::tracking::tldDetector_oclsrc;
384+
String error;
385+
ocl::Program prog(src, NULL, error);
386+
k.create("batchNCC", prog);
387+
if (k.empty())
388+
printf("Kernel create failed!!!\n");
389+
k.args(
390+
ocl::KernelArg::PtrReadOnly(devPatches),
391+
ocl::KernelArg::PtrReadOnly(devPositiveSamples),
392+
ocl::KernelArg::PtrReadOnly(devNegativeSamples),
393+
ocl::KernelArg::PtrWriteOnly(devPosNCC),
394+
ocl::KernelArg::PtrWriteOnly(devNegNCC),
395+
posNum,
396+
negNum,
397+
numOfPatches);
398+
399+
//e4 = getTickCount();
400+
//t = (e4 - e3) / getTickFrequency()*1000.0;
401+
//printf("Mem Cpy GPU: %f\n", t);
402+
403+
// 2 -> Pos&Neg
404+
size_t globSize = 2 * numOfPatches*MAX_EXAMPLES_IN_MODEL;
405+
size_t localSize = 1024;
406+
//e3 = getTickCount();
407+
if (!k.run(1, &globSize, &localSize, true))
408+
printf("Kernel Run Error!!!");
409+
//e4 = getTickCount();
410+
//t = (e4 - e3) / getTickFrequency()*1000.0;
411+
//printf("Kernel Run GPU: %f\n", t);
412+
413+
//e3 = getTickCount();
414+
Mat posNCC = devPosNCC.getMat(ACCESS_READ);
415+
Mat negNCC = devNegNCC.getMat(ACCESS_READ);
416+
//e4 = getTickCount();
417+
//t = (e4 - e3) / getTickFrequency()*1000.0;
418+
//printf("Read Mem GPU: %f\n", t);
419+
420+
//Calculate Srs
421+
for (int id = 0; id < numOfPatches; id++)
422+
{
423+
double spr = 0.0, smr = 0.0, spc = 0.0, smc = 0;
424+
int med = getMedian((*timeStampsPositive));
425+
for (int i = 0; i < *posNum; i++)
426+
{
427+
spr = std::max(spr, 0.5 * (posNCC.at<float>(id * 500 + i) + 1.0));
428+
if ((int)(*timeStampsPositive)[i] <= med)
429+
spc = std::max(spr, 0.5 * (posNCC.at<float>(id * 500 + i) + 1.0));
430+
}
431+
for (int i = 0; i < *negNum; i++)
432+
smc = smr = std::max(smr, 0.5 * (negNCC.at<float>(id * 500 + i) + 1.0));
433+
434+
if (spr + smr == 0.0)
435+
resultSr[id] = 0.0;
436+
else
437+
resultSr[id] = spr / (smr + spr);
438+
439+
if (spc + smc == 0.0)
440+
resultSc[id] = 0.0;
441+
else
442+
resultSc[id] = spc / (smc + spc);
443+
}
444+
445+
////Compare positive NCCs
446+
/*Mat_<uchar> modelSample(STANDARD_PATCH_SIZE, STANDARD_PATCH_SIZE);
447+
Mat_<uchar> patch(STANDARD_PATCH_SIZE, STANDARD_PATCH_SIZE);
448+
for (int j = 0; j < numOfPatches; j++)
449+
{
450+
for (int i = 0; i < 1; i++)
451+
{
452+
modelSample.data = &(posExp->data[i * 225]);
453+
patch.data = &(patches.data[j * 225]);
454+
printf("%f\t%f\n", resultSr[j], Sr(patch));
455+
printf("%f\t%f\n", resultSc[j], Sc(patch));
456+
}
457+
}*/
458+
459+
//for (int i = 0; i < 200; i+=23)
460+
//{
461+
// modelSample.data = &(negExp->data[i * 225]);
462+
// printf("%f\t%f\n", resNCC.at<float>(500+i), NCC(modelSample, patch));
463+
//}
464+
465+
466+
467+
//e2 = getTickCount();
468+
//t = (e2 - e1) / getTickFrequency()*1000.0;
469+
//printf("Sr GPU: %f\n\n", t);
470+
}
471+
472+
=======
473+
>>>>>>> origin/TLD_OpenCL_Support
289474

290475
// Calculate Conservative similarity of the patch (NN-Model)
291476
double TLDDetector::Sc(const Mat_<uchar>& patch)
@@ -478,7 +663,10 @@ namespace cv
478663

479664
//e1 = getTickCount();
480665
//Detection part
666+
<<<<<<< HEAD
481667

668+
=======
669+
>>>>>>> origin/TLD_OpenCL_Support
482670
//Generate windows and filter by variance
483671
scaleID = 0;
484672
resized_imgs.push_back(img);

modules/tracking/src/tldModel.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -294,12 +294,5 @@ namespace cv
294294
dfprintf((port, "\tpositiveExamples.size() = %d\n", (int)positiveExamples.size()));
295295
dfprintf((port, "\tnegativeExamples.size() = %d\n", (int)negativeExamples.size()));
296296
}
297-
<<<<<<< HEAD
298-
299-
300-
301-
302-
=======
303-
>>>>>>> Fixing Warnings #2
304297
}
305298
}

modules/tracking/src/tldModel.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,6 @@ namespace cv
7979
void modelUpdateImpl(){}
8080
Rect2d boundingBox_;
8181
RNG rng;
82-
<<<<<<< HEAD
83-
84-
=======
85-
>>>>>>> Fixing Warnings #2
8682
};
8783

8884
}

0 commit comments

Comments
 (0)