ultralytics 8.3.61 Restore Python 3.8 compatibility (#18666)
Signed-off-by: Glenn Jocher <glenn.jocher@ultralytics.com> Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
This commit is contained in:
parent
ffd8df3751
commit
4922016901
7 changed files with 11 additions and 11 deletions
5
.github/workflows/ci.yaml
vendored
5
.github/workflows/ci.yaml
vendored
|
|
@ -39,8 +39,7 @@ on:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
HUB:
|
HUB:
|
||||||
# if: github.repository == 'ultralytics/ultralytics' && (github.event_name == 'schedule' || github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.hub == 'true'))
|
if: github.repository == 'ultralytics/ultralytics' && (github.event_name == 'schedule' || github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.hub == 'true'))
|
||||||
if: github.repository == 'ultralytics/ultralytics' && 'workflow_dispatch' && github.event.inputs.hub == 'true'
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
@ -165,7 +164,7 @@ jobs:
|
||||||
torch: [latest]
|
torch: [latest]
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
python-version: "3.9" # torch 1.8.0 requires python >=3.6, <=3.9
|
python-version: "3.8" # torch 1.8.0 requires python >=3.6, <=3.9
|
||||||
torch: "1.8.0" # min torch version CI https://pypi.org/project/torchvision/
|
torch: "1.8.0" # min torch version CI https://pypi.org/project/torchvision/
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||||
|
|
||||||
__version__ = "8.3.60"
|
__version__ = "8.3.61"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ class SAM(Model):
|
||||||
... print(f"Detected {len(r.masks)} masks")
|
... print(f"Detected {len(r.masks)} masks")
|
||||||
"""
|
"""
|
||||||
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024)
|
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024)
|
||||||
kwargs = overrides | kwargs
|
kwargs = {**overrides, **kwargs}
|
||||||
prompts = dict(bboxes=bboxes, points=points, labels=labels)
|
prompts = dict(bboxes=bboxes, points=points, labels=labels)
|
||||||
return super().predict(source, stream, prompts=prompts, **kwargs)
|
return super().predict(source, stream, prompts=prompts, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ def select_closest_cond_frames(frame_idx, cond_frame_outputs, max_cond_frame_num
|
||||||
(t for t in cond_frame_outputs if t not in selected_outputs),
|
(t for t in cond_frame_outputs if t not in selected_outputs),
|
||||||
key=lambda x: abs(x - frame_idx),
|
key=lambda x: abs(x - frame_idx),
|
||||||
)[:num_remain]
|
)[:num_remain]
|
||||||
selected_outputs |= ((t, cond_frame_outputs[t]) for t in inds_remain)
|
selected_outputs.update((t, cond_frame_outputs[t]) for t in inds_remain)
|
||||||
unselected_outputs = {t: v for t, v in cond_frame_outputs.items() if t not in selected_outputs}
|
unselected_outputs = {t: v for t, v in cond_frame_outputs.items() if t not in selected_outputs}
|
||||||
|
|
||||||
return selected_outputs, unselected_outputs
|
return selected_outputs, unselected_outputs
|
||||||
|
|
|
||||||
|
|
@ -243,9 +243,10 @@ class DETRLoss(nn.Module):
|
||||||
if len(gt_bboxes):
|
if len(gt_bboxes):
|
||||||
gt_scores[idx] = bbox_iou(pred_bboxes.detach(), gt_bboxes, xywh=True).squeeze(-1)
|
gt_scores[idx] = bbox_iou(pred_bboxes.detach(), gt_bboxes, xywh=True).squeeze(-1)
|
||||||
|
|
||||||
loss = {}
|
loss = {
|
||||||
loss |= self._get_loss_class(pred_scores, targets, gt_scores, len(gt_bboxes), postfix)
|
**self._get_loss_class(pred_scores, targets, gt_scores, len(gt_bboxes), postfix),
|
||||||
loss.update(self._get_loss_bbox(pred_bboxes, gt_bboxes, postfix))
|
**self._get_loss_bbox(pred_bboxes, gt_bboxes, postfix),
|
||||||
|
}
|
||||||
# if masks is not None and gt_mask is not None:
|
# if masks is not None and gt_mask is not None:
|
||||||
# loss.update(self._get_loss_mask(masks, gt_mask, match_indices, postfix))
|
# loss.update(self._get_loss_mask(masks, gt_mask, match_indices, postfix))
|
||||||
return loss
|
return loss
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class Inference:
|
||||||
self.selected_ind = [] # List of selected classes for detection or tracking
|
self.selected_ind = [] # List of selected classes for detection or tracking
|
||||||
self.model = None # Container for the loaded model instance
|
self.model = None # Container for the loaded model instance
|
||||||
|
|
||||||
self.temp_dict = {"model": None} | kwargs
|
self.temp_dict = {"model": None, **kwargs}
|
||||||
self.model_path = None # Store model file name with path
|
self.model_path = None # Store model file name with path
|
||||||
if self.temp_dict["model"] is not None:
|
if self.temp_dict["model"] is not None:
|
||||||
self.model_path = self.temp_dict["model"]
|
self.model_path = self.temp_dict["model"]
|
||||||
|
|
|
||||||
|
|
@ -1243,7 +1243,7 @@ class SettingsManager(JSONDict):
|
||||||
"""Updates settings, validating keys and types."""
|
"""Updates settings, validating keys and types."""
|
||||||
for arg in args:
|
for arg in args:
|
||||||
if isinstance(arg, dict):
|
if isinstance(arg, dict):
|
||||||
kwargs |= arg
|
kwargs.update(arg)
|
||||||
for k, v in kwargs.items():
|
for k, v in kwargs.items():
|
||||||
if k not in self.defaults:
|
if k not in self.defaults:
|
||||||
raise KeyError(f"No Ultralytics setting '{k}'. {self.help_msg}")
|
raise KeyError(f"No Ultralytics setting '{k}'. {self.help_msg}")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue