diff --git a/openbr/plugins/cuda/copyfrom.cpp b/openbr/plugins/cuda/copyfrom.cpp index aada3c2..846b7ba 100644 --- a/openbr/plugins/cuda/copyfrom.cpp +++ b/openbr/plugins/cuda/copyfrom.cpp @@ -22,8 +22,6 @@ namespace br private: void project(const Template &src, Template &dst) const { - cout << "CUDACopyFrom Start" << endl << endl << endl; - // pull the data back out of the Mat void* const* dataPtr = src.m().ptr(); void* cudaMemPtr = dataPtr[0]; @@ -44,8 +42,6 @@ private: break; } dst = dstMat; - - cout << "CUDACopyFrom End" << endl; } }; diff --git a/openbr/plugins/cuda/cudacvtfloat.cpp b/openbr/plugins/cuda/cudacvtfloat.cpp index e8fcfa5..fada942 100644 --- a/openbr/plugins/cuda/cudacvtfloat.cpp +++ b/openbr/plugins/cuda/cudacvtfloat.cpp @@ -27,8 +27,6 @@ class CUDACvtFloatTransform : public UntrainableTransform public: void project(const Template &src, Template &dst) const { - cout << "CUDACvtFloat Start" << endl; - void* const* srcDataPtr = src.m().ptr(); void* srcMemPtr = srcDataPtr[0]; int rows = *((int*)srcDataPtr[1]); @@ -51,8 +49,6 @@ class CUDACvtFloatTransform : public UntrainableTransform br::cuda::cudacvtfloat::wrapper((const unsigned char*)srcMemPtr, &dstDataPtr[0], rows, cols); dst = dstMat; - - cout << "CUDACvtFloat End" << endl; } }; diff --git a/openbr/plugins/cuda/cudacvtfloat.cu b/openbr/plugins/cuda/cudacvtfloat.cu index 3cc44ef..93651e6 100644 --- a/openbr/plugins/cuda/cudacvtfloat.cu +++ b/openbr/plugins/cuda/cudacvtfloat.cu @@ -31,6 +31,9 @@ namespace br { namespace cuda { namespace cudacvtfloat { ); kernel<<>>(src, (float*)(*dst), rows, cols); + + // free the src memory since it is now in a newly allocated dst + cudaFree((void*)src); } }}} diff --git a/openbr/plugins/cuda/cudalbp.cpp b/openbr/plugins/cuda/cudalbp.cpp index ec6d71a..4cebf7c 100644 --- a/openbr/plugins/cuda/cudalbp.cpp +++ b/openbr/plugins/cuda/cudalbp.cpp @@ -166,8 +166,6 @@ class CUDALBPTransform : public UntrainableTransform //matManager->release(a); //matManager->release(b); - cout << "CUDALBP Start" << endl; - void* const* srcDataPtr = src.m().ptr(); void* cudaSrcPtr = srcDataPtr[0]; int rows = *((int*)srcDataPtr[1]); @@ -182,8 +180,6 @@ class CUDALBPTransform : public UntrainableTransform br::cuda::cudalbp_wrapper(cudaSrcPtr, &dstDataPtr[0], rows, cols); dst = dstMat; - - cout << "CUDALBP End" << endl; } }; diff --git a/openbr/plugins/cuda/cudalbp.cu b/openbr/plugins/cuda/cudalbp.cu index 69a3dd0..af4464c 100644 --- a/openbr/plugins/cuda/cudalbp.cu +++ b/openbr/plugins/cuda/cudalbp.cu @@ -47,6 +47,8 @@ namespace br { namespace cuda { cudaMalloc(dstPtr, rows*cols*sizeof(uint8_t)); cudalbp_kernel<<>>((uint8_t*)srcPtr, (uint8_t*)(*dstPtr), rows, cols, lut); + + cudaFree(srcPtr); } void cudalbp_init_wrapper(uint8_t* cpuLut) { diff --git a/openbr/plugins/cuda/cudapca.cpp b/openbr/plugins/cuda/cudapca.cpp index 7708454..1ede027 100644 --- a/openbr/plugins/cuda/cudapca.cpp +++ b/openbr/plugins/cuda/cudapca.cpp @@ -16,14 +16,23 @@ #include using namespace std; +#include + #include -#include +#include +using namespace cv; + +#include #include #include #include -#include "cudapca.hpp" +namespace br { namespace cuda { + void cudapca_loadwrapper(float* evPtr, int evRows, int evCols, float* meanPtr, int meanElems); + void cudapca_trainwrapper(const void* cudaDataPtr, float* dataPtr, int rows, int cols); + void cudapca_projectwrapper(void* src, void** dst); +}} namespace br { @@ -71,14 +80,30 @@ private: return (srcMap - mean).squaredNorm() - projMap.squaredNorm(); } - void train(const TemplateList &trainingSet) + void train(const TemplateList &cudaTrainingSet) { + const int instances = cudaTrainingSet.size(); // get the number of training set instances + QList