Added knearest neighbor of OpenCL version.
It includes the accuracy/performance test and the implementation of KNN.
This commit is contained in:
parent
94966b38c0
commit
06c33df307
@ -3,5 +3,5 @@ if(NOT HAVE_OPENCL)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(the_description "OpenCL-accelerated Computer Vision")
|
set(the_description "OpenCL-accelerated Computer Vision")
|
||||||
ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_calib3d)
|
ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_calib3d opencv_ml)
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include "opencv2/imgproc/imgproc.hpp"
|
#include "opencv2/imgproc/imgproc.hpp"
|
||||||
#include "opencv2/objdetect/objdetect.hpp"
|
#include "opencv2/objdetect/objdetect.hpp"
|
||||||
#include "opencv2/features2d/features2d.hpp"
|
#include "opencv2/features2d/features2d.hpp"
|
||||||
|
#include "opencv2/ml/ml.hpp"
|
||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
@ -1892,6 +1893,29 @@ namespace cv
|
|||||||
{
|
{
|
||||||
return (total + grain - 1) / grain;
|
return (total + grain - 1) / grain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!***************K Nearest Neighbour*************!*/
|
||||||
|
class CV_EXPORTS KNearestNeighbour: public CvKNearest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KNearestNeighbour();
|
||||||
|
~KNearestNeighbour();
|
||||||
|
KNearestNeighbour(const Mat& trainData, const Mat& labels,
|
||||||
|
const Mat& sampleIdx = Mat().setTo(Scalar::all(0)), bool isRegression = false, int max_k = 32);
|
||||||
|
|
||||||
|
bool train(const Mat& trainData, Mat& labels, Mat& sampleIdx = Mat().setTo(Scalar::all(0)),
|
||||||
|
bool isRegression = false, int max_k = 32, bool updateBase = false);
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
void find_nearest(const oclMat& samples, int k, oclMat& lables);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int max_k, var_count;
|
||||||
|
int total;
|
||||||
|
bool regression;
|
||||||
|
oclMat samples_ocl;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined _MSC_VER && _MSC_VER >= 1200
|
#if defined _MSC_VER && _MSC_VER >= 1200
|
||||||
|
@ -167,6 +167,7 @@ namespace cv
|
|||||||
template<>
|
template<>
|
||||||
bool CV_EXPORTS queryDeviceInfo<IS_CPU_DEVICE, bool>(cl_kernel kernel);
|
bool CV_EXPORTS queryDeviceInfo<IS_CPU_DEVICE, bool>(cl_kernel kernel);
|
||||||
|
|
||||||
|
unsigned long CV_EXPORTS queryLocalMemInfo();
|
||||||
}//namespace ocl
|
}//namespace ocl
|
||||||
|
|
||||||
}//namespace cv
|
}//namespace cv
|
||||||
|
@ -1033,6 +1033,14 @@ namespace cv
|
|||||||
return impl->maxComputeUnits;
|
return impl->maxComputeUnits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long queryLocalMemInfo()
|
||||||
|
{
|
||||||
|
Info::Impl* impl = Context::getContext()->impl;
|
||||||
|
cl_ulong local_memory_size = 0;
|
||||||
|
clGetDeviceInfo(impl->devices[impl->devnum], CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), (void*)&local_memory_size, 0);
|
||||||
|
return local_memory_size;
|
||||||
|
}
|
||||||
|
|
||||||
void* Context::oclContext()
|
void* Context::oclContext()
|
||||||
{
|
{
|
||||||
return impl->oclcontext;
|
return impl->oclcontext;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user