Ultralytics Refactor https://ultralytics.com/actions (#17701)
Co-authored-by: UltralyticsAssistant <web@ultralytics.com> Co-authored-by: Glenn Jocher <glenn.jocher@ultralytics.com>
This commit is contained in:
parent
77c3c0aaac
commit
d670bcc2b9
8 changed files with 32 additions and 44 deletions
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
||||||
<a href="https://www.pepy.tech/projects/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
|
<a href="https://pepy.tech/projects/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
|
||||||
<a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
|
<a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
|
||||||
<a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
|
<a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
|
||||||
<a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
|
<a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
||||||
<a href="https://www.pepy.tech/projects/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
|
<a href="https://pepy.tech/projects/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
|
||||||
<a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
|
<a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
|
||||||
<a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
|
<a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
|
||||||
<a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
|
<a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ In this step, you have to choose the project in which you want to create your mo
|
||||||
|
|
||||||
!!! info
|
!!! info
|
||||||
|
|
||||||
You can read more about the available [YOLO models](https://docs.ultralytics.com/models) and architectures in our documentation.
|
You can read more about the available [YOLO models](https://docs.ultralytics.com/models/) and architectures in our documentation.
|
||||||
|
|
||||||
By default, your model will use a pre-trained model (trained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset) to reduce training time. You can change this behavior and tweak your model's configuration by opening the **Advanced Model Configuration** accordion.
|
By default, your model will use a pre-trained model (trained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset) to reduce training time. You can change this behavior and tweak your model's configuration by opening the **Advanced Model Configuration** accordion.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ keywords: Ultralytics, YOLO, YOLO11, object detection, image segmentation, deep
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
||||||
<a href="https://www.pepy.tech/projects/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
|
<a href="https://pepy.tech/projects/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
|
||||||
<a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
|
<a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
|
||||||
<a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
|
<a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
|
||||||
<a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
|
<a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ checkAutoTheme();
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
const autoThemeInput = document.getElementById("__palette_1");
|
const autoThemeInput = document.getElementById("__palette_1");
|
||||||
autoThemeInput?.addEventListener("click", () => {
|
autoThemeInput?.addEventListener("click", () => {
|
||||||
if (autoThemeInput.checked) setTimeout(checkAutoTheme);
|
if (autoThemeInput.checked) {
|
||||||
|
setTimeout(checkAutoTheme);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -960,10 +960,8 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
||||||
m = getattr(torch.nn, m[3:]) if "nn." in m else globals()[m] # get module
|
m = getattr(torch.nn, m[3:]) if "nn." in m else globals()[m] # get module
|
||||||
for j, a in enumerate(args):
|
for j, a in enumerate(args):
|
||||||
if isinstance(a, str):
|
if isinstance(a, str):
|
||||||
try:
|
with contextlib.suppress(ValueError):
|
||||||
args[j] = locals()[a] if a in locals() else ast.literal_eval(a)
|
args[j] = locals()[a] if a in locals() else ast.literal_eval(a)
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
n = n_ = max(round(n * depth), 1) if n > 1 else n # depth gain
|
n = n_ = max(round(n * depth), 1) if n > 1 else n # depth gain
|
||||||
if m in {
|
if m in {
|
||||||
Classify,
|
Classify,
|
||||||
|
|
@ -1141,24 +1139,16 @@ def guess_model_task(model):
|
||||||
|
|
||||||
# Guess from model cfg
|
# Guess from model cfg
|
||||||
if isinstance(model, dict):
|
if isinstance(model, dict):
|
||||||
try:
|
with contextlib.suppress(Exception):
|
||||||
return cfg2task(model)
|
return cfg2task(model)
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Guess from PyTorch model
|
# Guess from PyTorch model
|
||||||
if isinstance(model, nn.Module): # PyTorch model
|
if isinstance(model, nn.Module): # PyTorch model
|
||||||
for x in "model.args", "model.model.args", "model.model.model.args":
|
for x in "model.args", "model.model.args", "model.model.model.args":
|
||||||
try:
|
with contextlib.suppress(Exception):
|
||||||
return eval(x)["task"]
|
return eval(x)["task"]
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
for x in "model.yaml", "model.model.yaml", "model.model.model.yaml":
|
for x in "model.yaml", "model.model.yaml", "model.model.model.yaml":
|
||||||
try:
|
with contextlib.suppress(Exception):
|
||||||
return cfg2task(eval(x))
|
return cfg2task(eval(x))
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
for m in model.modules():
|
for m in model.modules():
|
||||||
if isinstance(m, Segment):
|
if isinstance(m, Segment):
|
||||||
return "segment"
|
return "segment"
|
||||||
|
|
|
||||||
|
|
@ -80,9 +80,8 @@ class ObjectCounter(BaseSolution):
|
||||||
else: # Moving left
|
else: # Moving left
|
||||||
self.out_count += 1
|
self.out_count += 1
|
||||||
self.classwise_counts[self.names[cls]]["OUT"] += 1
|
self.classwise_counts[self.names[cls]]["OUT"] += 1
|
||||||
else:
|
|
||||||
# Horizontal region: Compare y-coordinates to determine direction
|
# Horizontal region: Compare y-coordinates to determine direction
|
||||||
if current_centroid[1] > prev_position[1]: # Moving downward
|
elif current_centroid[1] > prev_position[1]: # Moving downward
|
||||||
self.in_count += 1
|
self.in_count += 1
|
||||||
self.classwise_counts[self.names[cls]]["IN"] += 1
|
self.classwise_counts[self.names[cls]]["IN"] += 1
|
||||||
else: # Moving upward
|
else: # Moving upward
|
||||||
|
|
@ -94,23 +93,20 @@ class ObjectCounter(BaseSolution):
|
||||||
polygon = self.Polygon(self.region)
|
polygon = self.Polygon(self.region)
|
||||||
if polygon.contains(self.Point(current_centroid)):
|
if polygon.contains(self.Point(current_centroid)):
|
||||||
# Determine motion direction for vertical or horizontal polygons
|
# Determine motion direction for vertical or horizontal polygons
|
||||||
region_width = max([p[0] for p in self.region]) - min([p[0] for p in self.region])
|
region_width = max(p[0] for p in self.region) - min(p[0] for p in self.region)
|
||||||
region_height = max([p[1] for p in self.region]) - min([p[1] for p in self.region])
|
region_height = max(p[1] for p in self.region) - min(p[1] for p in self.region)
|
||||||
|
|
||||||
if region_width < region_height: # Vertical-oriented polygon
|
if (
|
||||||
if current_centroid[0] > prev_position[0]: # Moving right
|
region_width < region_height
|
||||||
|
and current_centroid[0] > prev_position[0]
|
||||||
|
or region_width >= region_height
|
||||||
|
and current_centroid[1] > prev_position[1]
|
||||||
|
): # Moving right
|
||||||
self.in_count += 1
|
self.in_count += 1
|
||||||
self.classwise_counts[self.names[cls]]["IN"] += 1
|
self.classwise_counts[self.names[cls]]["IN"] += 1
|
||||||
else: # Moving left
|
else: # Moving left
|
||||||
self.out_count += 1
|
self.out_count += 1
|
||||||
self.classwise_counts[self.names[cls]]["OUT"] += 1
|
self.classwise_counts[self.names[cls]]["OUT"] += 1
|
||||||
else: # Horizontal-oriented polygon
|
|
||||||
if current_centroid[1] > prev_position[1]: # Moving downward
|
|
||||||
self.in_count += 1
|
|
||||||
self.classwise_counts[self.names[cls]]["IN"] += 1
|
|
||||||
else: # Moving upward
|
|
||||||
self.out_count += 1
|
|
||||||
self.classwise_counts[self.names[cls]]["OUT"] += 1
|
|
||||||
self.counted_ids.append(track_id)
|
self.counted_ids.append(track_id)
|
||||||
|
|
||||||
def store_classwise_counts(self, cls):
|
def store_classwise_counts(self, cls):
|
||||||
|
|
|
||||||
|
|
@ -675,7 +675,7 @@ def profile(input, ops, n=10, device=None, max_num_obj=0):
|
||||||
torch.randn(
|
torch.randn(
|
||||||
x.shape[0],
|
x.shape[0],
|
||||||
max_num_obj,
|
max_num_obj,
|
||||||
int(sum([(x.shape[-1] / s) * (x.shape[-2] / s) for s in m.stride.tolist()])),
|
int(sum((x.shape[-1] / s) * (x.shape[-2] / s) for s in m.stride.tolist())),
|
||||||
device=device,
|
device=device,
|
||||||
dtype=torch.float32,
|
dtype=torch.float32,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue