ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
cloudViewer::ml::contrib Namespace Reference

Classes

class  PointXYZ
 
struct  PointCloud
 
class  SampledData
 
struct  Point
 

Functions

PointXYZ max_point (std::vector< PointXYZ > points)
 
PointXYZ min_point (std::vector< PointXYZ > points)
 
PointXYZ operator+ (const PointXYZ A, const PointXYZ B)
 
PointXYZ operator- (const PointXYZ A, const PointXYZ B)
 
PointXYZ operator* (const PointXYZ P, const float a)
 
PointXYZ operator* (const float a, const PointXYZ P)
 
std::ostream & operator<< (std::ostream &os, const PointXYZ P)
 
bool operator== (const PointXYZ A, const PointXYZ B)
 
const core::Tensor KnnSearch (const core::Tensor &query_points, const core::Tensor &dataset_points, int knn)
 
const core::Tensor RadiusSearch (const core::Tensor &query_points, const core::Tensor &dataset_points, const core::Tensor &query_batches, const core::Tensor &dataset_batches, double radius)
 
int OptNumThreads (int work_size)
 
dim3 OptBlockConfig (int x, int y)
 
void grid_subsampling (std::vector< PointXYZ > &original_points, std::vector< PointXYZ > &subsampled_points, std::vector< float > &original_features, std::vector< float > &subsampled_features, std::vector< int > &original_classes, std::vector< int > &subsampled_classes, float sampleDl, int verbose)
 
void batch_grid_subsampling (std::vector< PointXYZ > &original_points, std::vector< PointXYZ > &subsampled_points, std::vector< float > &original_features, std::vector< float > &subsampled_features, std::vector< int > &original_classes, std::vector< int > &subsampled_classes, std::vector< int > &original_batches, std::vector< int > &subsampled_batches, float sampleDl, int max_p)
 
void IoUBevCPUKernel (const float *boxes_a, const float *boxes_b, float *iou, int num_a, int num_b)
 
void IoU3dCPUKernel (const float *boxes_a, const float *boxes_b, float *iou, int num_a, int num_b)
 
CLOUDVIEWER_HOST_DEVICE float Cross (const Point &a, const Point &b)
 
CLOUDVIEWER_HOST_DEVICE float Cross (const Point &p1, const Point &p2, const Point &p0)
 
CLOUDVIEWER_HOST_DEVICE int CheckRectCross (const Point &p1, const Point &p2, const Point &q1, const Point &q2)
 
CLOUDVIEWER_HOST_DEVICE int CheckInBox2D (const float *box, const Point &p)
 
CLOUDVIEWER_HOST_DEVICE int Intersection (const Point &p1, const Point &p0, const Point &q1, const Point &q0, Point &ans)
 
CLOUDVIEWER_HOST_DEVICE void RotateAroundCenter (const Point &center, const float angle_cos, const float angle_sin, Point &p)
 
CLOUDVIEWER_HOST_DEVICE int PointCmp (const Point &a, const Point &b, const Point &center)
 
CLOUDVIEWER_HOST_DEVICE float BoxOverlap (const float *box_a, const float *box_b)
 
CLOUDVIEWER_HOST_DEVICE float IoUBev2DWithMinAndMax (const float *box_a, const float *box_b, bool intersection_only=false)
 (x_min, z_min, x_max, z_max, y_rotate) More...
 
CLOUDVIEWER_HOST_DEVICE float IoUBev2DWithCenterAndSize (const float *box_a, const float *box_b, bool intersection_only=false)
 (x_center, z_center, x_size, z_size, y_rotate) More...
 
CLOUDVIEWER_HOST_DEVICE float IoU3DWithCenterAndSize (const float *box_a, const float *box_b)
 (x_center, y_max, z_center, x_size, y_size, z_size, y_rotate) More...
 
void brute_neighbors (std::vector< PointXYZ > &queries, std::vector< PointXYZ > &supports, std::vector< int > &neighbors_indices, float radius, int verbose)
 
void ordered_neighbors (std::vector< PointXYZ > &queries, std::vector< PointXYZ > &supports, std::vector< int > &neighbors_indices, float radius)
 
void batch_nanoflann_neighbors (std::vector< PointXYZ > &queries, std::vector< PointXYZ > &supports, std::vector< int > &q_batches, std::vector< int > &s_batches, std::vector< int > &neighbors_indices, float radius)
 
template<typename T >
static std::vector< int64_t > SortIndexes (const T *values, int64_t num, bool descending=false)
 
static void AllPairsSortedIoU (const float *boxes, const float *scores, const int64_t *sort_indices, uint64_t *mask, int n, double nms_overlap_thresh)
 
std::vector< int64_t > NmsCPUKernel (const float *boxes, const float *scores, int n, double nms_overlap_thresh)
 
void pybind_contrib (py::module &m)
 
void pybind_contrib_subsample (py::module &m_contrib)
 
void pybind_contrib_nns (py::module &m_contrib)
 
void pybind_contrib_iou (py::module &m_contrib)
 
const py::tuple SubsampleBatch (py::array points, py::array batches, utility::optional< py::array > features, utility::optional< py::array > classes, float sampleDl, const std::string &method, int max_p, int verbose)
 
const py::object Subsample (py::array points, utility::optional< py::array > features, utility::optional< py::array > classes, float sampleDl, int verbose)
 
py::array IouBevCPU (py::array boxes_a, py::array boxes_b)
 
py::array Iou3dCPU (py::array boxes_a, py::array boxes_b)
 

Variables

constexpr int NMS_BLOCK_SIZE = sizeof(uint64_t) * 8
 
constexpr float EPS = static_cast<float>(1e-8)
 

Function Documentation

◆ AllPairsSortedIoU()

static void cloudViewer::ml::contrib::AllPairsSortedIoU ( const float *  boxes,
const float *  scores,
const int64_t *  sort_indices,
uint64_t *  mask,
int  n,
double  nms_overlap_thresh 
)
static

Definition at line 44 of file Nms.cpp.

References cloudViewer::utility::DivUp(), and NMS_BLOCK_SIZE.

Referenced by NmsCPUKernel().

◆ batch_grid_subsampling()

void cloudViewer::ml::contrib::batch_grid_subsampling ( std::vector< PointXYZ > &  original_points,
std::vector< PointXYZ > &  subsampled_points,
std::vector< float > &  original_features,
std::vector< float > &  subsampled_features,
std::vector< int > &  original_classes,
std::vector< int > &  subsampled_classes,
std::vector< int > &  original_batches,
std::vector< int > &  subsampled_batches,
float  sampleDl,
int  max_p 
)

Definition at line 122 of file GridSubsampling.cpp.

References grid_subsampling().

Referenced by SubsampleBatch().

◆ batch_nanoflann_neighbors()

void cloudViewer::ml::contrib::batch_nanoflann_neighbors ( std::vector< PointXYZ > &  queries,
std::vector< PointXYZ > &  supports,
std::vector< int > &  q_batches,
std::vector< int > &  s_batches,
std::vector< int > &  neighbors_indices,
float  radius 
)

TOOD: This is a temporary function for 3DML repositiory use. In the future, the native CloudViewer Python API should be improved and used.

Nearest neighbours withing a radius with batching. queries and supports are sliced with their respective batch elements. Uses nanoflann to build a KDTree and find neighbors.

Definition at line 125 of file neighbors.cpp.

◆ BoxOverlap()

CLOUDVIEWER_HOST_DEVICE float cloudViewer::ml::contrib::BoxOverlap ( const float *  box_a,
const float *  box_b 
)
inline

◆ brute_neighbors()

void cloudViewer::ml::contrib::brute_neighbors ( std::vector< PointXYZ > &  queries,
std::vector< PointXYZ > &  supports,
std::vector< int > &  neighbors_indices,
float  radius,
int  verbose 
)

Definition at line 14 of file neighbors.cpp.

References size.

◆ CheckInBox2D()

CLOUDVIEWER_HOST_DEVICE int cloudViewer::ml::contrib::CheckInBox2D ( const float *  box,
const Point p 
)
inline

Definition at line 61 of file IoUImpl.h.

References cloudViewer::ml::contrib::Point::x_, and cloudViewer::ml::contrib::Point::y_.

Referenced by BoxOverlap().

◆ CheckRectCross()

CLOUDVIEWER_HOST_DEVICE int cloudViewer::ml::contrib::CheckRectCross ( const Point p1,
const Point p2,
const Point q1,
const Point q2 
)
inline

Definition at line 50 of file IoUImpl.h.

References cloudViewer::ml::contrib::Point::x_, and cloudViewer::ml::contrib::Point::y_.

Referenced by Intersection().

◆ Cross() [1/2]

CLOUDVIEWER_HOST_DEVICE float cloudViewer::ml::contrib::Cross ( const Point a,
const Point b 
)
inline

Definition at line 39 of file IoUImpl.h.

References cloudViewer::ml::contrib::Point::x_, and cloudViewer::ml::contrib::Point::y_.

Referenced by BoxOverlap(), and Intersection().

◆ Cross() [2/2]

CLOUDVIEWER_HOST_DEVICE float cloudViewer::ml::contrib::Cross ( const Point p1,
const Point p2,
const Point p0 
)
inline

◆ grid_subsampling()

void cloudViewer::ml::contrib::grid_subsampling ( std::vector< PointXYZ > &  original_points,
std::vector< PointXYZ > &  subsampled_points,
std::vector< float > &  original_features,
std::vector< float > &  subsampled_features,
std::vector< int > &  original_classes,
std::vector< int > &  subsampled_classes,
float  sampleDl,
int  verbose 
)

◆ Intersection()

CLOUDVIEWER_HOST_DEVICE int cloudViewer::ml::contrib::Intersection ( const Point p1,
const Point p0,
const Point q1,
const Point q0,
Point ans 
)
inline

◆ Iou3dCPU()

◆ IoU3dCPUKernel()

void cloudViewer::ml::contrib::IoU3dCPUKernel ( const float *  boxes_a,
const float *  boxes_b,
float *  iou,
int  num_a,
int  num_b 
)
Parameters
boxes_a(num_a, 7) float32.
boxes_b(num_b, 7) float32.
iou(num_a, num_b) float32, output iou values.
num_aNumber of boxes in boxes_a.
num_bNumber of boxes in boxes_b.

Definition at line 33 of file IoU.cpp.

Referenced by Iou3dCPU().

◆ IoU3DWithCenterAndSize()

CLOUDVIEWER_HOST_DEVICE float cloudViewer::ml::contrib::IoU3DWithCenterAndSize ( const float *  box_a,
const float *  box_b 
)
inline

(x_center, y_max, z_center, x_size, y_size, z_size, y_rotate)

Definition at line 268 of file IoUImpl.h.

References IoUBev2DWithCenterAndSize().

◆ IoUBev2DWithCenterAndSize()

CLOUDVIEWER_HOST_DEVICE float cloudViewer::ml::contrib::IoUBev2DWithCenterAndSize ( const float *  box_a,
const float *  box_b,
bool  intersection_only = false 
)
inline

(x_center, z_center, x_size, z_size, y_rotate)

Definition at line 247 of file IoUImpl.h.

References IoUBev2DWithMinAndMax().

Referenced by IoU3DWithCenterAndSize().

◆ IoUBev2DWithMinAndMax()

CLOUDVIEWER_HOST_DEVICE float cloudViewer::ml::contrib::IoUBev2DWithMinAndMax ( const float *  box_a,
const float *  box_b,
bool  intersection_only = false 
)
inline

(x_min, z_min, x_max, z_max, y_rotate)

Definition at line 230 of file IoUImpl.h.

References BoxOverlap(), EPS, and fmaxf().

Referenced by IoUBev2DWithCenterAndSize().

◆ IouBevCPU()

◆ IoUBevCPUKernel()

void cloudViewer::ml::contrib::IoUBevCPUKernel ( const float *  boxes_a,
const float *  boxes_b,
float *  iou,
int  num_a,
int  num_b 
)
Parameters
boxes_a(num_a, 5) float32.
boxes_b(num_b, 5) float32.
iou(num_a, num_b) float32, output iou values.
num_aNumber of boxes in boxes_a.
num_bNumber of boxes in boxes_b. intersection over union.

Definition at line 18 of file IoU.cpp.

Referenced by IouBevCPU().

◆ KnnSearch()

const core::Tensor cloudViewer::ml::contrib::KnnSearch ( const core::Tensor query_points,
const core::Tensor dataset_points,
int  knn 
)

TOOD: This is a temory wrapper for 3DML repositiory use. In the future, the native CloudViewer Python API should be improved and used.

Parameters
query_pointsTensor of shape {n_query_points, d}, dtype Float32.
dataset_pointsTensor of shape {n_dataset_points, d}, dtype Float32.
knnInt.
Returns
Tensor of shape (n_query_points, knn), dtype Int32.

Definition at line 18 of file contrib_nns.cpp.

References cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::Tensor::GetShape(), cloudViewer::core::Int32, cloudViewer::core::nns::NearestNeighborSearch::KnnIndex(), cloudViewer::core::nns::NearestNeighborSearch::KnnSearch(), LogError, cloudViewer::core::Tensor::NumDims(), cloudViewer::core::Tensor::To(), and cloudViewer::core::Dtype::ToString().

Referenced by pybind_contrib_nns().

◆ max_point()

PointXYZ cloudViewer::ml::contrib::max_point ( std::vector< PointXYZ points)

◆ min_point()

PointXYZ cloudViewer::ml::contrib::min_point ( std::vector< PointXYZ points)

◆ NmsCPUKernel()

std::vector< int64_t > cloudViewer::ml::contrib::NmsCPUKernel ( const float *  boxes,
const float *  scores,
int  n,
double  nms_overlap_thresh 
)
Parameters
boxes(n, 5) float32.
scores(n,) float32.
nNumber of boxes.
nms_overlap_threshWhen a high-score box is selected, other remaining boxes with IoU > nms_overlap_thresh will be discarded.
Returns
Selected box indices to keep.

Definition at line 113 of file Nms.cpp.

References AllPairsSortedIoU(), cloudViewer::utility::DivUp(), NMS_BLOCK_SIZE, and SortIndexes().

◆ operator*() [1/2]

PointXYZ cloudViewer::ml::contrib::operator* ( const float  a,
const PointXYZ  P 
)
inline

◆ operator*() [2/2]

PointXYZ cloudViewer::ml::contrib::operator* ( const PointXYZ  P,
const float  a 
)
inline

◆ operator+()

PointXYZ cloudViewer::ml::contrib::operator+ ( const PointXYZ  A,
const PointXYZ  B 
)
inline

◆ operator-()

PointXYZ cloudViewer::ml::contrib::operator- ( const PointXYZ  A,
const PointXYZ  B 
)
inline

◆ operator<<()

std::ostream& cloudViewer::ml::contrib::operator<< ( std::ostream &  os,
const PointXYZ  P 
)
inline

◆ operator==()

bool cloudViewer::ml::contrib::operator== ( const PointXYZ  A,
const PointXYZ  B 
)
inline

◆ OptBlockConfig()

dim3 cloudViewer::ml::contrib::OptBlockConfig ( int  x,
int  y 
)
inline

Definition at line 26 of file cuda_utils.h.

References max(), min(), OptNumThreads(), and TOTAL_THREADS.

◆ OptNumThreads()

int cloudViewer::ml::contrib::OptNumThreads ( int  work_size)
inline

Definition at line 20 of file cuda_utils.h.

References max(), min(), and TOTAL_THREADS.

Referenced by OptBlockConfig().

◆ ordered_neighbors()

void cloudViewer::ml::contrib::ordered_neighbors ( std::vector< PointXYZ > &  queries,
std::vector< PointXYZ > &  supports,
std::vector< int > &  neighbors_indices,
float  radius 
)

TOOD: This is a temporary function for 3DML repositiory use. In the future, the native CloudViewer Python API should be improved and used.

Nearest neighbours within a given radius. For each query point, finds a set of neighbor indices whose distance is less than given radius. Modifies the neighbors_indices inplace.

Definition at line 64 of file neighbors.cpp.

References size.

◆ PointCmp()

CLOUDVIEWER_HOST_DEVICE int cloudViewer::ml::contrib::PointCmp ( const Point a,
const Point b,
const Point center 
)
inline

Definition at line 125 of file IoUImpl.h.

References cloudViewer::ml::contrib::Point::x_, and cloudViewer::ml::contrib::Point::y_.

Referenced by BoxOverlap().

◆ pybind_contrib()

void cloudViewer::ml::contrib::pybind_contrib ( py::module &  m)

◆ pybind_contrib_iou()

void cloudViewer::ml::contrib::pybind_contrib_iou ( py::module &  m_contrib)

Definition at line 121 of file iou.cpp.

References Iou3dCPU(), and IouBevCPU().

Referenced by pybind_contrib().

◆ pybind_contrib_nns()

void cloudViewer::ml::contrib::pybind_contrib_nns ( py::module &  m_contrib)

Definition at line 19 of file contrib_nns.cpp.

References KnnSearch(), and RadiusSearch().

Referenced by pybind_contrib().

◆ pybind_contrib_subsample()

void cloudViewer::ml::contrib::pybind_contrib_subsample ( py::module &  m_contrib)

Definition at line 346 of file contrib_subsample.cpp.

References Subsample(), and SubsampleBatch().

Referenced by pybind_contrib().

◆ RadiusSearch()

const core::Tensor cloudViewer::ml::contrib::RadiusSearch ( const core::Tensor query_points,
const core::Tensor dataset_points,
const core::Tensor query_batches,
const core::Tensor dataset_batches,
double  radius 
)

TOOD: This is a temory wrapper for 3DML repositiory use. In the future, the native CloudViewer Python API should be improved and used.

Parameters
query_pointsTensor of shape {n_query_points, d}, dtype Float32.
dataset_pointsTensor of shape {n_dataset_points, d}, dtype Float32.
query_batchesTensor of shape {n_batches,}, dtype Int32. It is required that sum(query_batches) == n_query_points.
dataset_batchesTensor of shape {n_batches,}, dtype Int32. It is required that that sum(dataset_batches) == n_dataset_points.
radiusThe radius to search.
Returns
Tensor of shape {n_query_points, max_neighbor}, dtype Int32, where max_neighbor is the maximum number neighbor of neighbors for all query points. For query points with less than max_neighbor neighbors, the neighbor index will be padded by -1.

Definition at line 51 of file contrib_nns.cpp.

References cloudViewer::core::Tensor::Add(), cloudViewer::core::Tensor::AsRvalue(), cloudViewer::core::nns::NearestNeighborSearch::FixedRadiusIndex(), cloudViewer::core::nns::NearestNeighborSearch::FixedRadiusSearch(), cloudViewer::core::Tensor::Full(), cloudViewer::core::Tensor::GetDataPtr(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::Tensor::GetShape(), cloudViewer::core::Int32, cloudViewer::core::Int64, cloudViewer::core::Tensor::Item(), LogError, max(), cloudViewer::core::Tensor::NumDims(), result, cloudViewer::core::Tensor::Slice(), cloudViewer::core::Tensor::Sub(), cloudViewer::core::Tensor::Sum(), cloudViewer::core::Tensor::To(), cloudViewer::core::Dtype::ToString(), and cloudViewer::core::Tensor::View().

Referenced by pybind_contrib_nns().

◆ RotateAroundCenter()

CLOUDVIEWER_HOST_DEVICE void cloudViewer::ml::contrib::RotateAroundCenter ( const Point center,
const float  angle_cos,
const float  angle_sin,
Point p 
)
inline

◆ SortIndexes()

template<typename T >
static std::vector<int64_t> cloudViewer::ml::contrib::SortIndexes ( const T *  values,
int64_t  num,
bool  descending = false 
)
static

Definition at line 25 of file Nms.cpp.

Referenced by NmsCPUKernel().

◆ Subsample()

◆ SubsampleBatch()

Variable Documentation

◆ EPS

constexpr float cloudViewer::ml::contrib::EPS = static_cast<float>(1e-8)
constexpr

◆ NMS_BLOCK_SIZE

constexpr int cloudViewer::ml::contrib::NMS_BLOCK_SIZE = sizeof(uint64_t) * 8
constexpr

Definition at line 19 of file IoUImpl.h.

Referenced by AllPairsSortedIoU(), and NmsCPUKernel().