From 22edb68d491c2efe7a2280957b94a939157f1398 Mon Sep 17 00:00:00 2001 From: NielsRogge <48327001+NielsRogge@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:11:48 +0200 Subject: [PATCH] Squash commits (#17981) Co-authored-by: Niels Rogge --- docs/source/en/serialization.mdx | 1 + src/transformers/models/yolos/__init__.py | 4 +-- .../models/yolos/configuration_yolos.py | 27 +++++++++++++++++++ src/transformers/onnx/features.py | 5 ++++ tests/onnx/test_onnx_v2.py | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/source/en/serialization.mdx b/docs/source/en/serialization.mdx index 7b21160085..e376721cc1 100644 --- a/docs/source/en/serialization.mdx +++ b/docs/source/en/serialization.mdx @@ -90,6 +90,7 @@ Ready-made configurations include the following architectures: - XLM - XLM-RoBERTa - XLM-RoBERTa-XL +- YOLOS In the next two sections, we'll show you how to: diff --git a/src/transformers/models/yolos/__init__.py b/src/transformers/models/yolos/__init__.py index 91cc0e7032..6ae73421a8 100644 --- a/src/transformers/models/yolos/__init__.py +++ b/src/transformers/models/yolos/__init__.py @@ -20,7 +20,7 @@ from typing import TYPE_CHECKING from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available -_import_structure = {"configuration_yolos": ["YOLOS_PRETRAINED_CONFIG_ARCHIVE_MAP", "YolosConfig"]} +_import_structure = {"configuration_yolos": ["YOLOS_PRETRAINED_CONFIG_ARCHIVE_MAP", "YolosConfig", "YolosOnnxConfig"]} try: if not is_vision_available(): @@ -45,7 +45,7 @@ else: if TYPE_CHECKING: - from .configuration_yolos import YOLOS_PRETRAINED_CONFIG_ARCHIVE_MAP, YolosConfig + from .configuration_yolos import YOLOS_PRETRAINED_CONFIG_ARCHIVE_MAP, YolosConfig, YolosOnnxConfig try: if not is_vision_available(): diff --git a/src/transformers/models/yolos/configuration_yolos.py b/src/transformers/models/yolos/configuration_yolos.py index cd3414a7f2..179d2833a1 100644 --- a/src/transformers/models/yolos/configuration_yolos.py +++ b/src/transformers/models/yolos/configuration_yolos.py @@ -14,7 +14,13 @@ # limitations under the License. """ YOLOS model configuration""" +from collections import OrderedDict +from typing import Mapping + +from packaging import version + from ...configuration_utils import PretrainedConfig +from ...onnx import OnnxConfig from ...utils import logging @@ -151,3 +157,24 @@ class YolosConfig(PretrainedConfig): self.bbox_loss_coefficient = bbox_loss_coefficient self.giou_loss_coefficient = giou_loss_coefficient self.eos_coefficient = eos_coefficient + + +class YolosOnnxConfig(OnnxConfig): + + torch_onnx_minimum_version = version.parse("1.11") + + @property + def inputs(self) -> Mapping[str, Mapping[int, str]]: + return OrderedDict( + [ + ("pixel_values", {0: "batch", 1: "num_channels", 2: "height", 3: "width"}), + ] + ) + + @property + def atol_for_validation(self) -> float: + return 1e-4 + + @property + def default_onnx_opset(self) -> int: + return 12 diff --git a/src/transformers/onnx/features.py b/src/transformers/onnx/features.py index 77a7632d92..35c52ed603 100644 --- a/src/transformers/onnx/features.py +++ b/src/transformers/onnx/features.py @@ -452,6 +452,11 @@ class FeaturesManager: "question-answering", onnx_config_cls="models.xlm_roberta.XLMRobertaOnnxConfig", ), + "yolos": supported_features_mapping( + "default", + "object-detection", + onnx_config_cls="models.yolos.YolosOnnxConfig", + ), } AVAILABLE_FEATURES = sorted(reduce(lambda s1, s2: s1 | s2, (v.keys() for v in _SUPPORTED_MODEL_TYPE.values()))) diff --git a/tests/onnx/test_onnx_v2.py b/tests/onnx/test_onnx_v2.py index 9f6cf9b3c5..3be3a34d9c 100644 --- a/tests/onnx/test_onnx_v2.py +++ b/tests/onnx/test_onnx_v2.py @@ -202,6 +202,7 @@ PYTORCH_EXPORT_MODELS = { ("data2vec-text", "facebook/data2vec-text-base"), ("perceiver", "deepmind/language-perceiver", ("masked-lm", "sequence-classification")), ("perceiver", "deepmind/vision-perceiver-conv", ("image-classification",)), + ("yolos", "hustvl/yolos-tiny"), } PYTORCH_EXPORT_WITH_PAST_MODELS = {