mirror of https://github.com/open-mmlab/mmcv.git
[Fix] Force bbox_overlaps calculation with FP32 for ascend device (#2697)
* modify bbox_overlaps op adapter * updatepull/2700/head
parent
5f1d55885e
commit
4c4ba6cb17
|
@ -12,23 +12,33 @@ void bbox_overlaps_npu(const Tensor bboxes1, const Tensor bboxes2, Tensor ious,
|
||||||
if (mode == 1) {
|
if (mode == 1) {
|
||||||
modeStr = "iof";
|
modeStr = "iof";
|
||||||
}
|
}
|
||||||
float offset_ = 1;
|
at::Tensor bboxesFP32 = bboxes2;
|
||||||
if (offset == 0) {
|
at::Tensor gtboxesFP32 = bboxes1;
|
||||||
offset_ = 0.01;
|
if (bboxes2.scalar_type() != at::ScalarType::Float) {
|
||||||
|
bboxesFP32 = NPUNativeFunctions::npu_dtype_cast(bboxes2, at::kFloat);
|
||||||
|
gtboxesFP32 = NPUNativeFunctions::npu_dtype_cast(bboxes1, at::kFloat);
|
||||||
}
|
}
|
||||||
at::Tensor bboxes = at::ones_like(bboxes2);
|
c10::SmallVector<int64_t, SIZE> iousSize = {gtboxesFP32.size(0),
|
||||||
at::Tensor gtboxes = at::ones_like(bboxes1);
|
bboxesFP32.size(0)};
|
||||||
bboxes = aligned ? bboxes2.transpose(0, 1) : bboxes2;
|
if (aligned) {
|
||||||
gtboxes = aligned ? bboxes1.transpose(0, 1) : bboxes1;
|
iousSize = {gtboxesFP32.size(0), 1};
|
||||||
|
}
|
||||||
|
at::Tensor iousFP32 = OpPreparation::ApplyTensor(bboxesFP32, iousSize);
|
||||||
|
bboxesFP32 = aligned ? bboxesFP32.transpose(0, 1) : bboxesFP32;
|
||||||
|
gtboxesFP32 = aligned ? gtboxesFP32.transpose(0, 1) : gtboxesFP32;
|
||||||
OpCommand cmd;
|
OpCommand cmd;
|
||||||
cmd.Name("Iou")
|
cmd.Name("Iou")
|
||||||
.Input(bboxes)
|
.Input(bboxesFP32)
|
||||||
.Input(gtboxes)
|
.Input(gtboxesFP32)
|
||||||
.Output(ious)
|
.Output(iousFP32)
|
||||||
.Attr("mode", modeStr)
|
.Attr("mode", modeStr)
|
||||||
.Attr("eps", offset_)
|
.Attr("eps", (float)offset)
|
||||||
.Attr("aligned", aligned)
|
.Attr("aligned", aligned)
|
||||||
.Run();
|
.Run();
|
||||||
|
if (bboxes2.scalar_type() != at::ScalarType::Float) {
|
||||||
|
iousFP32 = NPUNativeFunctions::npu_dtype_cast(iousFP32, at::kHalf);
|
||||||
|
}
|
||||||
|
ious.copy_(iousFP32);
|
||||||
}
|
}
|
||||||
|
|
||||||
REGISTER_NPU_IMPL(bbox_overlaps_impl, bbox_overlaps_npu);
|
REGISTER_NPU_IMPL(bbox_overlaps_impl, bbox_overlaps_npu);
|
||||||
|
|
Loading…
Reference in New Issue