mirror of
https://github.com/THU-MIG/yolov10.git
synced 2025-05-23 21:44:22 +08:00
ultralytics 8.0.120
CLI support for SAM, RTDETR (#3273)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
2e8313b032
commit
d8701b42ca
@ -40,13 +40,12 @@ In this example, the first object is of class 0 (person), with its center at (0.
|
|||||||
|
|
||||||
The Ultralytics framework uses a YAML file format to define the dataset and model configuration for training Detection Models. Here is an example of the YAML format used for defining a detection dataset:
|
The Ultralytics framework uses a YAML file format to define the dataset and model configuration for training Detection Models. Here is an example of the YAML format used for defining a detection dataset:
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
train: <path-to-training-images>
|
train: <path-to-training-images>
|
||||||
val: <path-to-validation-images>
|
val: <path-to-validation-images>
|
||||||
|
|
||||||
nc: <number-of-classes>
|
nc: <number-of-classes>
|
||||||
names: [<class-1>, <class-2>, ..., <class-n>]
|
names: [<class-1>, <class-2>, ..., <class-n>]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The `train` and `val` fields specify the paths to the directories containing the training and validation images, respectively.
|
The `train` and `val` fields specify the paths to the directories containing the training and validation images, respectively.
|
||||||
@ -105,7 +104,7 @@ TODO
|
|||||||
|
|
||||||
### COCO dataset format to YOLO format
|
### COCO dataset format to YOLO format
|
||||||
|
|
||||||
```
|
```python
|
||||||
from ultralytics.yolo.data.converter import convert_coco
|
from ultralytics.yolo.data.converter import convert_coco
|
||||||
|
|
||||||
convert_coco(labels_dir='../coco/annotations/')
|
convert_coco(labels_dir='../coco/annotations/')
|
||||||
|
@ -104,7 +104,7 @@ names: [ 'person', 'car' ]
|
|||||||
|
|
||||||
### COCO dataset format to YOLO format
|
### COCO dataset format to YOLO format
|
||||||
|
|
||||||
```
|
```python
|
||||||
from ultralytics.yolo.data.converter import convert_coco
|
from ultralytics.yolo.data.converter import convert_coco
|
||||||
|
|
||||||
convert_coco(labels_dir='../coco/annotations/', use_segments=True)
|
convert_coco(labels_dir='../coco/annotations/', use_segments=True)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||||
|
|
||||||
__version__ = '8.0.119'
|
__version__ = '8.0.120'
|
||||||
|
|
||||||
from ultralytics.hub import start
|
from ultralytics.hub import start
|
||||||
from ultralytics.vit.rtdetr import RTDETR
|
from ultralytics.vit.rtdetr import RTDETR
|
||||||
|
@ -243,6 +243,8 @@ class DetectionModel(BaseModel):
|
|||||||
m.stride = torch.tensor([s / x.shape[-2] for x in forward(torch.zeros(1, ch, s, s))]) # forward
|
m.stride = torch.tensor([s / x.shape[-2] for x in forward(torch.zeros(1, ch, s, s))]) # forward
|
||||||
self.stride = m.stride
|
self.stride = m.stride
|
||||||
m.bias_init() # only run once
|
m.bias_init() # only run once
|
||||||
|
else:
|
||||||
|
self.stride = torch.Tensor([32]) # default stride for i.e. RTDETR
|
||||||
|
|
||||||
# Init weights, biases
|
# Init weights, biases
|
||||||
initialize_weights(self)
|
initialize_weights(self)
|
||||||
|
@ -5,6 +5,8 @@ RT-DETR model interface
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import torch.nn as nn
|
||||||
|
|
||||||
from ultralytics.nn.tasks import RTDETRDetectionModel, attempt_load_one_weight, yaml_model_load
|
from ultralytics.nn.tasks import RTDETRDetectionModel, attempt_load_one_weight, yaml_model_load
|
||||||
from ultralytics.yolo.cfg import get_cfg
|
from ultralytics.yolo.cfg import get_cfg
|
||||||
from ultralytics.yolo.engine.exporter import Exporter
|
from ultralytics.yolo.engine.exporter import Exporter
|
||||||
@ -37,7 +39,7 @@ class RTDETR:
|
|||||||
self.task = 'detect'
|
self.task = 'detect'
|
||||||
self.model = RTDETRDetectionModel(cfg_dict, verbose=verbose) # build model
|
self.model = RTDETRDetectionModel(cfg_dict, verbose=verbose) # build model
|
||||||
|
|
||||||
# Below added to allow export from yamls
|
# Below added to allow export from YAMLs
|
||||||
self.model.args = DEFAULT_CFG_DICT # attach args to model
|
self.model.args = DEFAULT_CFG_DICT # attach args to model
|
||||||
self.model.task = self.task
|
self.model.task = self.task
|
||||||
|
|
||||||
@ -125,6 +127,23 @@ class RTDETR:
|
|||||||
"""Get model info"""
|
"""Get model info"""
|
||||||
return model_info(self.model, verbose=verbose)
|
return model_info(self.model, verbose=verbose)
|
||||||
|
|
||||||
|
def _check_is_pytorch_model(self):
|
||||||
|
"""
|
||||||
|
Raises TypeError is model is not a PyTorch model
|
||||||
|
"""
|
||||||
|
pt_str = isinstance(self.model, (str, Path)) and Path(self.model).suffix == '.pt'
|
||||||
|
pt_module = isinstance(self.model, nn.Module)
|
||||||
|
if not (pt_module or pt_str):
|
||||||
|
raise TypeError(f"model='{self.model}' must be a *.pt PyTorch model, but is a different type. "
|
||||||
|
f'PyTorch models can be used to train, val, predict and export, i.e. '
|
||||||
|
f"'yolo export model=yolov8n.pt', but exported formats like ONNX, TensorRT etc. only "
|
||||||
|
f"support 'predict' and 'val' modes, i.e. 'yolo predict model=yolov8n.onnx'.")
|
||||||
|
|
||||||
|
def fuse(self):
|
||||||
|
"""Fuse PyTorch Conv2d and BatchNorm2d layers."""
|
||||||
|
self._check_is_pytorch_model()
|
||||||
|
self.model.fuse()
|
||||||
|
|
||||||
@smart_inference_mode()
|
@smart_inference_mode()
|
||||||
def export(self, **kwargs):
|
def export(self, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -19,7 +19,7 @@ workers: 8 # (int) number of worker threads for data loading (per RANK if DDP)
|
|||||||
project: # (str, optional) project name
|
project: # (str, optional) project name
|
||||||
name: # (str, optional) experiment name, results saved to 'project/name' directory
|
name: # (str, optional) experiment name, results saved to 'project/name' directory
|
||||||
exist_ok: False # (bool) whether to overwrite existing experiment
|
exist_ok: False # (bool) whether to overwrite existing experiment
|
||||||
pretrained: True # (bool) whether to use a pretrained model
|
pretrained: True # (bool | str) whether to use a pretrained model (bool) or a model to load weights from (str)
|
||||||
optimizer: auto # (str) optimizer to use, choices=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
|
optimizer: auto # (str) optimizer to use, choices=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
|
||||||
verbose: True # (bool) whether to print verbose output
|
verbose: True # (bool) whether to print verbose output
|
||||||
seed: 0 # (int) random seed for reproducibility
|
seed: 0 # (int) random seed for reproducibility
|
||||||
|
Loading…
x
Reference in New Issue
Block a user