Files
kornia--kornia/tests/models/test_object_detector.py
wehub-resource-sync 3a2c66702c
Tests on CPU (scheduled) / check-skip (push) Has been cancelled
Tests on CPU (scheduled) / pre-tests (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-ubuntu (float32) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-ubuntu (float64) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.11, float32, 2.5.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.11, float32, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.11, float64, 2.5.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.11, float64, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.12, float32, 2.5.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.12, float32, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.12, float64, 2.5.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.12, float64, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.13, float32, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-windows (3.13, float64, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-mac (3.11, float32, 2.5.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-mac (3.11, float32, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-mac (3.12, float32, 2.5.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-mac (3.12, float32, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / tests-cpu-mac (3.13, float32, 2.9.1) (push) Has been cancelled
Tests on CPU (scheduled) / coverage (push) Has been cancelled
Tests on CPU (scheduled) / typing (push) Has been cancelled
Tests on CPU (scheduled) / tutorials (push) Has been cancelled
Tests on CPU (scheduled) / docs (push) Has been cancelled
Lint / TOML Format (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:49:27 +08:00

104 lines
4.0 KiB
Python

# LICENSE HEADER MANAGED BY add-license-header
#
# Copyright 2018 Kornia Team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import warnings
from pathlib import Path
import pytest
import torch
import kornia
from kornia.core._compat import torch_version_lt
from kornia.models.rt_detr import RTDETR, DETRPostProcessor, RTDETRConfig
from testing.base import BaseTester
class TestObjectDetector(BaseTester):
def test_smoke(self, device, dtype):
batch_size = 3
confidence = 0.3
config = RTDETRConfig("resnet50d", 10, head_num_queries=10)
model = RTDETR.from_config(config).to(device, dtype).eval()
pre_processor = kornia.models.processors.ResizePreProcessor(32, 32)
post_processor = DETRPostProcessor(confidence, num_top_queries=3).to(device, dtype).eval()
detector = kornia.contrib.object_detection.ObjectDetector(model, pre_processor, post_processor)
sizes = torch.randint(5, 10, (batch_size, 2)) * 32
imgs = [torch.randn(3, h, w, device=device, dtype=dtype) for h, w in sizes]
pre_processor_out = pre_processor(imgs)
detections = detector(imgs)
assert pre_processor_out[0].shape[-1] == 32
assert pre_processor_out[0].shape[-2] == 32
assert len(detections) == batch_size
for dets in detections:
assert dets.shape[1] == 6, dets.shape
assert torch.all(dets[:, 0].int() == dets[:, 0])
assert torch.all(dets[:, 1] >= 0.3)
@pytest.mark.slow
@pytest.mark.skipif(torch_version_lt(2, 0, 0), reason="Unsupported ONNX opset version: 16")
@pytest.mark.parametrize("variant", ("resnet50d", "hgnetv2_l"))
def test_onnx(self, device, dtype, tmp_path: Path, variant: str):
config = RTDETRConfig(variant, 1)
model = RTDETR.from_config(config).to(device=device, dtype=dtype).eval()
pre_processor = kornia.models.processors.ResizePreProcessor(640, 640)
post_processor = DETRPostProcessor(0.3, num_top_queries=3)
detector = kornia.contrib.object_detection.ObjectDetector(model, pre_processor, post_processor)
data = torch.rand(1, 3, 400, 640, device=device, dtype=dtype)
model_path = tmp_path / "rtdetr.onnx"
dynamic_axes = {"images": {0: "N"}}
# Suppress onnxscript deprecation warnings (Python 3.15 compatibility)
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=DeprecationWarning, module="onnxscript.converter")
torch.onnx.export(
detector,
data,
model_path,
input_names=["images"],
output_names=["detections"],
dynamic_axes=dynamic_axes,
opset_version=17,
)
assert model_path.is_file()
def test_results_from_detections(self, device, dtype):
# label_id, confidence, data
detections = torch.tensor(
[
[0, 0.9, 0.0, 0.0, 1.0, 1.0],
[1, 0.8, 0.0, 0.0, 1.0, 1.0],
[2, 0.7, 0.0, 0.0, 1.0, 1.0],
[3, 0.6, 0.0, 0.0, 1.0, 1.0],
[4, 0.5, 0.0, 0.0, 1.0, 1.0],
],
device=device,
dtype=dtype,
)
detector_results: list = kornia.contrib.object_detection.results_from_detections(detections, format="xywh")
assert len(detector_results) == 5
for j, det in enumerate(detector_results):
for i in range(4):
assert det.bbox.data[i] == float(detections[j, i + 2])