| |
|
| |
|
| | #include <torch/extension.h>
|
| | #include "ROIAlignRotated/ROIAlignRotated.h"
|
| | #include "box_iou_rotated/box_iou_rotated.h"
|
| | #include "cocoeval/cocoeval.h"
|
| | #include "deformable/deform_conv.h"
|
| | #include "nms_rotated/nms_rotated.h"
|
| |
|
| | namespace detectron2 {
|
| |
|
| | #if defined(WITH_CUDA) || defined(WITH_HIP)
|
| | extern int get_cudart_version();
|
| | #endif
|
| |
|
| | std::string get_cuda_version() {
|
| | #if defined(WITH_CUDA) || defined(WITH_HIP)
|
| | std::ostringstream oss;
|
| |
|
| | #if defined(WITH_CUDA)
|
| | oss << "CUDA ";
|
| | #else
|
| | oss << "HIP ";
|
| | #endif
|
| |
|
| |
|
| |
|
| | auto printCudaStyleVersion = [&](int v) {
|
| | oss << (v / 1000) << "." << (v / 10 % 100);
|
| | if (v % 10 != 0) {
|
| | oss << "." << (v % 10);
|
| | }
|
| | };
|
| | printCudaStyleVersion(get_cudart_version());
|
| | return oss.str();
|
| | #else
|
| | return std::string("not available");
|
| | #endif
|
| | }
|
| |
|
| | bool has_cuda() {
|
| | #if defined(WITH_CUDA)
|
| | return true;
|
| | #else
|
| | return false;
|
| | #endif
|
| | }
|
| |
|
| |
|
| |
|
| | std::string get_compiler_version() {
|
| | std::ostringstream ss;
|
| | #if defined(__GNUC__)
|
| | #ifndef __clang__
|
| |
|
| | #if ((__GNUC__ <= 4) && (__GNUC_MINOR__ <= 8))
|
| | #error "GCC >= 4.9 is required!"
|
| | #endif
|
| |
|
| | { ss << "GCC " << __GNUC__ << "." << __GNUC_MINOR__; }
|
| | #endif
|
| | #endif
|
| |
|
| | #if defined(__clang_major__)
|
| | {
|
| | ss << "clang " << __clang_major__ << "." << __clang_minor__ << "."
|
| | << __clang_patchlevel__;
|
| | }
|
| | #endif
|
| |
|
| | #if defined(_MSC_VER)
|
| | { ss << "MSVC " << _MSC_FULL_VER; }
|
| | #endif
|
| | return ss.str();
|
| | }
|
| |
|
| | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
|
| | m.def("get_compiler_version", &get_compiler_version, "get_compiler_version");
|
| | m.def("get_cuda_version", &get_cuda_version, "get_cuda_version");
|
| | m.def("has_cuda", &has_cuda, "has_cuda");
|
| |
|
| | m.def("deform_conv_forward", &deform_conv_forward, "deform_conv_forward");
|
| | m.def(
|
| | "deform_conv_backward_input",
|
| | &deform_conv_backward_input,
|
| | "deform_conv_backward_input");
|
| | m.def(
|
| | "deform_conv_backward_filter",
|
| | &deform_conv_backward_filter,
|
| | "deform_conv_backward_filter");
|
| | m.def(
|
| | "modulated_deform_conv_forward",
|
| | &modulated_deform_conv_forward,
|
| | "modulated_deform_conv_forward");
|
| | m.def(
|
| | "modulated_deform_conv_backward",
|
| | &modulated_deform_conv_backward,
|
| | "modulated_deform_conv_backward");
|
| |
|
| | m.def("COCOevalAccumulate", &COCOeval::Accumulate, "COCOeval::Accumulate");
|
| | m.def(
|
| | "COCOevalEvaluateImages",
|
| | &COCOeval::EvaluateImages,
|
| | "COCOeval::EvaluateImages");
|
| | pybind11::class_<COCOeval::InstanceAnnotation>(m, "InstanceAnnotation")
|
| | .def(pybind11::init<uint64_t, double, double, bool, bool>());
|
| | pybind11::class_<COCOeval::ImageEvaluation>(m, "ImageEvaluation")
|
| | .def(pybind11::init<>());
|
| | }
|
| |
|
| | TORCH_LIBRARY(detectron2, m) {
|
| | m.def("nms_rotated", &nms_rotated);
|
| | m.def("box_iou_rotated", &box_iou_rotated);
|
| | m.def("roi_align_rotated_forward", &ROIAlignRotated_forward);
|
| | m.def("roi_align_rotated_backward", &ROIAlignRotated_backward);
|
| | }
|
| | }
|
| |
|