‹ Reports
The Dispatch

The Dispatch Demo - THU-MIG/yolov10


Executive Summary

The YOLOv10 project, developed by THU-MIG, is a cutting-edge real-time object detection system implemented in PyTorch. It aims to enhance both efficiency and accuracy by eliminating non-maximum suppression (NMS) during post-processing, thereby reducing inference latency and computational overhead. The project has gained significant traction, evidenced by its 4308 stars and 267 forks on GitHub. Created on May 23, 2024, the repository has seen consistent updates, with the latest push on May 28, 2024. The project is active and rapidly evolving, with a strong focus on further optimization and integration into various platforms.

Notable Elements

Recent Activity

Team Members and Contributions

Wang Ao (jameslahm)

Ikko Eltociear Ashimine (eltociear)

Daniel Sarmiento (DanielSarmiento04)

Thomas Friedel (tfriedel)

Prashant Dixit (PrashantDixit0)

Piotr Skalski (SkalskiP)

Collaboration Patterns

The team exhibits a collaborative environment with frequent code updates, bug fixes, and documentation improvements. Wang Ao stands out as the most active contributor, focusing on core functionalities and performance enhancements. Other contributors provide valuable inputs through documentation updates, bug fixes, and feature integrations.

Issues and Pull Requests

Recent issues highlight performance discrepancies, optimizer support queries, detection accuracy concerns for small or distant objects, and hardware compatibility issues. Closed pull requests reflect a mix of bug fixes, documentation updates, and new feature integrations.

Risks

Performance Discrepancies

Detection Accuracy

Hardware Compatibility

Unmerged Pull Requests

Of Note

  1. Integration Efforts

    • PR #70 successfully integrated OpenCV C++ ONNX runtime, broadening YOLOv10's applicability across different environments.
  2. Performance Logging

    • Recent addition of comprehensive logs suggests an emphasis on monitoring performance metrics, crucial for continuous improvement.
  3. Documentation Updates

    • Frequent updates to README and other documentation files indicate a focus on improving user experience and onboarding.

Conclusion

The YOLOv10 project is in an active development phase with frequent contributions from multiple team members focusing on optimization, bug fixes, and feature enhancements. However, performance discrepancies and detection accuracy issues pose significant risks that need addressing. The project's trajectory remains positive with ongoing efforts towards integration and community engagement.

Quantified Commit Activity Over 14 Days

Developer Avatar Branches PRs Commits Files Changes
Wang Ao 1 0/0/0 21 54 9793
Thomas Friedel 1 2/2/0 2 2 8
Piotr Skalski 1 1/1/0 1 1 2
Ikko Eltociear Ashimine 1 1/1/0 1 1 2
Prashant Dixit 1 1/1/0 1 1 2
Daniel Sarmiento 1 1/1/0 1 1 1
Kai CHEN (ckmessi) 0 1/0/1 0 0 0
Houang869 (Houangnt) 0 1/0/1 0 0 0
Laugh (laugh12321) 0 1/0/1 0 0 0
None (dependabot[bot]) 0 3/0/3 0 0 0

PRs: created by that dev and opened/merged/closed-unmerged during the period

Detailed Reports

Report On: Fetch commits



YOLOv10: Real-Time End-to-End Object Detection

The YOLOv10 project, developed by THU-MIG, is an advanced real-time object detection system implemented in PyTorch. It aims to optimize both the efficiency and accuracy of object detection models by eliminating the need for non-maximum suppression (NMS) during post-processing. This results in lower inference latency and reduced computational overhead. The project has garnered significant attention, with 4308 stars and 267 forks on GitHub. The repository was created on May 23, 2024, and has seen consistent updates, with the latest push on May 28, 2024. The overall state of the project is active and rapidly evolving, with a strong trajectory towards further optimization and integration into various platforms.

Team Members and Recent Activities

Wang Ao (jameslahm)

Ikko Eltociear Ashimine (eltociear)

Daniel Sarmiento (DanielSarmiento04)

  • 1 day agoADD | opnecv c++ Onnx integration (#70) – Files: README.md (+1, −0) – Lines: +1

Thomas Friedel (tfriedel)

Prashant Dixit (PrashantDixit0)

  • 2 days agoadded badges (#45) – Files: README.md (+1, −1) – Lines: +1

Piotr Skalski (SkalskiP)

  • 3 days ago, Merge pull request #22 from SkalskiP/patch-1 – example Google Colab – Update README.md – README.md (+1,-1)

Patterns and Conclusions

The recent activities indicate a highly collaborative environment with frequent updates and improvements. Wang Ao is the most active contributor with multiple commits focusing on bug fixes and feature enhancements. Other contributors like Ikko Eltociear Ashimine and Daniel Sarmiento have also made significant contributions recently. There is a clear pattern of continuous integration and testing as seen from the frequent updates to the README files and validation scripts.

The team appears to be focused on enhancing the functionality and usability of YOLOv10 by integrating it with various platforms like TensorRT and ONNX. The addition of logs suggests an emphasis on monitoring performance metrics. Overall, the development activities reflect a robust effort towards making YOLOv10 more efficient and user-friendly.

Report On: Fetch issues



GitHub Issues Analysis

Recent Activity Analysis

Recent GitHub issue activity for the THU-MIG/yolov10 project shows a high volume of newly created issues, with 20 open issues and 82 closed issues. The issues cover a wide range of topics, including feature requests, bug reports, and questions about usage and performance.

Several issues exhibit notable anomalies or complications:

  • #102: Users report a significant difference in FLOPS between their tests and the documented performance.
  • #100 and #101: Multiple users report problems with detecting smaller objects or objects at a distance.
  • #103: A user inquires about AdamW optimizer support, noting significant speed differences compared to YOLOv8.
  • #86: A user encounters installation issues on a Mac with an M1 chip due to unsupported dependencies.
  • #78: A user reports that all validation images have 300 detection results, indicating potential issues with post-processing.

Common themes include performance discrepancies, optimizer support, object detection accuracy for small or distant objects, and compatibility issues with different hardware setups.

Issue Details

Most Recently Created Issues

  1. #104: Yolov10 Pose Estimation?

    • Priority: Unknown
    • Status: Open
    • Created: 0 days ago
  2. #103: AdamW Optimizer support

    • Priority: Unknown
    • Status: Open
    • Created: 0 days ago
  3. #102: Why can't I reproduce your results, and at the same time, there is a significant difference in FLOPS?

    • Priority: Unknown
    • Status: Open
    • Created: 0 days ago
  4. #101: Small objects unable to detect

    • Priority: Unknown
    • Status: Open
    • Created: 0 days ago
  5. #100: Problems with detecting smaller objects or objects in the distance

    • Priority: Unknown
    • Status: Open
    • Created: 0 days ago

Most Recently Updated Issues

  1. #104: Yolov10 Pose Estimation?

    • Priority: Unknown
    • Status: Open
    • Created/Updated: 0 days ago
  2. #103: AdamW Optimizer support

    • Priority: Unknown
    • Status: Open
    • Created/Updated: 0 days ago
  3. #102: Why can't I reproduce your results, and at the same time, there is a significant difference in FLOPS?

    • Priority: Unknown
    • Status: Open
    • Created/Updated: 0 days ago
  4. #101: Small objects unable to detect

    • Priority: Unknown
    • Status: Open
    • Created/Updated: 0 days ago
  5. #100: Problems with detecting smaller objects or objects in the distance

    • Priority: Unknown
    • Status: Open
    • Created/Updated: 0 days ago

Report On: Fetch pull requests



Pull Request Analysis for THU-MIG/yolov10

Open Pull Requests

There are currently no open pull requests.

Closed Pull Requests

A total of 12 pull requests have been closed recently. Here are the details and notable points:

PR #82: chore: update pyproject.toml and project version info

  • State: Closed (Not merged)
  • Created: 1 day ago
  • Closed: 1 day ago
  • Commits: 1 commit by Kai CHEN (ckmessi)
  • Files Changed:
    • pyproject.toml (+9, -13)
    • ultralytics/__init__.py (+1, -1)
    • ultralytics/utils/torch_utils.py (+1, -1)

Notable Points:

  • This PR was closed on the same day it was created without being merged. It aimed to update the project version information and the pyproject.toml file.
  • The reason for not merging is not documented, which could be a point of concern if this update was necessary.

PR #70: ADD | opnecv c++ Onnx integration

  • State: Closed (Merged)
  • Created: 1 day ago
  • Closed: 1 day ago
  • Merged by: Wang Ao (jameslahm)
  • Commits: 1 commit by Daniel Sarmiento (DanielSarmiento04)
  • Files Changed:
    • README.md (+1, -0)

Notable Points:

  • This PR was successfully merged and adds an example of integrating YOLOv10 using C++ with ONNX runtime and OpenCV dependencies.
  • This is a significant addition as it broadens the usability of YOLOv10 in different environments.

PR #66: docs: update view-results-in-terminal.md

  • State: Closed (Merged)
  • Created: 2 days ago
  • Closed: 1 day ago
  • Merged by: Wang Ao (jameslahm)
  • Commits: 1 commit by Ikko Eltociear Ashimine (eltociear)
  • Files Changed:
    • docs/en/guides/view-results-in-terminal.md (+1, -1)

Notable Points:

  • This PR makes a minor fix in the documentation, improving clarity.

PR #48: fix for KeyError: 'epoch'

  • State: Closed (Merged)
  • Created: 2 days ago
  • Closed: 2 days ago
  • Merged by: Wang Ao (jameslahm)
  • Commits: Multiple commits by Thomas Friedel (tfriedel) addressing the issue and reverting unrelated changes.
  • Files Changed:
    • ultralytics/engine/trainer.py (+1, -1)

Notable Points:

  • This PR fixes a critical bug related to resuming training from a checkpoint, which addresses issue #41.

PR #47: fix for predicting with batch_size > 1

  • State: Closed (Merged)
  • Created: 2 days ago
  • Closed: 2 days ago
  • Merged by: Wang Ao (jameslahm)
  • Commits: Multiple commits by Thomas Friedel (tfriedel) fixing batch prediction issues.
  • Files Changed:
    • ultralytics/models/yolov10/predict.py (+2, -4)

Notable Points:

  • This PR resolves errors encountered when predicting with a batch size greater than one, enhancing model usability.

PR #45: added badges in README

  • State: Closed (Merged)
  • Created: 3 days ago
  • Closed: 2 days ago
  • Merged by: Wang Ao (jameslahm)
  • Commits: 1 commit by Prashant Dixit (PrashantDixit0)
  • Files Changed:
    • README.md (+1, -1)

Notable Points:

  • This PR adds badges to the README file, improving its visual appeal and providing quick links to important resources.

PR #33: add ibynb file

  • State: Closed (Not merged)
  • Created: 3 days ago
  • Closed: 2 days ago

Notable Points:

  • This PR was closed without merging. It aimed to add a Jupyter Notebook file but was deemed too similar to an existing Colab demo.

PR #29: Added Support ONNX End2End (TRT EfficientNMS)

  • State: Closed (Not merged)
  • Created: 3 days ago
  • Closed: 3 days ago

Notable Points:

  • This PR proposed adding support for end-to-end ONNX export with TRT EfficientNMS. It was closed after detailed discussions about its necessity given YOLOv10's existing capabilities.

PR #22: example Google Colab

  • State: Closed (Merged)
  • Created: 4 days ago
  • Closed: 3 days ago
  • Merged by: Wang Ao (jameslahm)

Notable Points: This PR adds a Google Colab example demonstrating various functionalities of YOLOv10, which is useful for new users.

Dependabot Updates:

Several dependabot updates were closed without merging:

PR #3: Update duckdb requirement from <=0.9.2 to <=0.10.3
PR #2: Bump contributor-assistant/github-action from 2.3.1 to 2.4.0 in /.github/workflows
PR #1: Bump slackapi/slack-github-action from 1.25.0 to 1.26.0 in /.github/workflows

Notable Points for Dependabot Updates: These updates were closed without merging due to issues like non-collaborator review requests or label mismatches.

Summary:

The recent activity shows a healthy mix of bug fixes, documentation updates, and new feature integrations. However, there are some concerns regarding unmerged pull requests like #82 and several dependabot updates that were closed without merging due to procedural issues. These should be revisited to ensure that necessary updates are not missed.

Report On: Fetch PR 82 For Assessment



PR #82

Summary

This pull request aims to update the pyproject.toml and project version information for the THU-MIG/yolov10 repository. The changes include modifications to the project metadata, such as the project name, description, authors, maintainers, and URLs. Additionally, it updates the version number in the __init__.py file and modifies a string in torch_utils.py.

Changes

Files Modified

  1. pyproject.toml

    • Changed project name from "ultralytics" to "yolov10".
    • Updated description to reflect the new project name.
    • Changed required Python version from >=3.8 to >=3.9.
    • Updated authors and maintainers.
    • Updated URLs for bug reports and source code.
  2. ultralytics/init.py

    • Updated version number from 8.1.34 to 10.1.1.
  3. ultralytics/utils/torch_utils.py

    • Modified a string to reflect the new project name.

Diff Analysis

diff --git a/pyproject.toml b/pyproject.toml
index d42c3805..813e10c2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,4 +1,4 @@
-# Ultralytics YOLO 🚀, AGPL-3.0 license
+# THU-MIG YOLO v10 🚀, AGPL-3.0 license

 # Overview:
 # This pyproject.toml file manages the build, packaging, and distribution of the Ultralytics library.
@@ -24,22 +24,18 @@ build-backend = "setuptools.build_meta"

 # Project settings -----------------------------------------------------------------------------------------------------
 [project]
-name = "ultralytics"
+name = "yolov10"
 dynamic = ["version"]
-description = "Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification."
+description = "THU-MIG YOLOv10 for SOTA Real-Time End-to-End Object Detection, based on Ultralytics YOLOv8."
 readme = "README.md"
-requires-python = ">=3.8"
+requires-python = ">=3.9"
 license = { "text" = "AGPL-3.0" }
 keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "HUB", "Ultralytics"]
 authors = [
-    { name = "Glenn Jocher" },
-    { name = "Ayush Chaurasia" },
-    { name = "Jing Qiu" }
+    { name = "Ao Wang" },
 ]
 maintainers = [
-    { name = "Glenn Jocher" },
-    { name = "Ayush Chaurasia" },
-    { name = "Jing Qiu" }
+    { name = "Ao Wang" },
 ]
 classifiers = [
     "Development Status :: 4 - Beta",
@@ -124,9 +120,9 @@ extra = [
 ]

 [project.urls]
-"Bug Reports" = "https://github.com/ultralytics/ultralytics/issues"
-"Funding" = "https://ultralytics.com"
-"Source" = "https://github.com/ultralytics/ultralytics/"
+"Bug Reports" = "https://github.com/THU-MIG/yolov10/issues"
+# "Funding" = "https://ultralytics.com"
+"Source" = "https://github.com/THU-MIG/yolov10/"

 [project.scripts]
 yolo = "ultralytics.cfg:entrypoint"
diff --git a/ultralytics/__init__.py b/ultralytics/__init__.py
index 8ff1b4fb..1cd5eb5d 100644
--- a/ultralytics/__init__.py
+++ b/ultralytics/__init__.py
@@ -1,6 +1,6 @@
 # Ultralytics YOLO 🚀, AGPL-3.0 license

-__version__ = "8.1.34"
+__version__ = "10.1.1"

 from ultralytics.data.explorer.explorer import Explorer
 from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld, YOLOv10
diff --git a/ultralytics/utils/torch_utils.py b/ultralytics/utils/torch_utils.py
index d476e1f8..90a792a9 100644
--- a/ultralytics/utils/torch_utils.py
+++ b/ultralytics/utils/torch_utils.py
@@ -104,7 +104,7 @@ def select_device(device="", batch=0, newline=False, verbose=True):
     if isinstance(device, torch.device):
         return device

-    s = f"Ultralytics YOLOv{__version__} 🚀 Python-{PYTHON_VERSION} torch-{torch.__version__} "
+    s = f"THU-MIG YOLOv{__version__} 🚀 Python-{PYTHON_VERSION} torch-{torch.__version__} "
     device = str(device).lower()
     for remove in "cuda:", "none", "(", ")", "[", "]", "'", " ":
         device = device.replace(remove, "")  # to string, 'cuda:0' -> '0' and '(0, 1)' -> '0,1'

Assessment

Code Quality

  1. Consistency: The changes are consistent with the project's naming conventions and versioning practices.
  2. Clarity: The modifications are clear and straightforward; they primarily involve updating metadata and version information.
  3. Impact: These changes are crucial as they update the project's identity and ensure compatibility with newer Python versions (>=3.9).

Potential Issues

  1. Backward Compatibility: Changing the required Python version from >=3.8 to >=3.9 might affect users who are still on Python 3.8.
  2. Documentation: Ensure that all related documentation is updated to reflect these changes.

Conclusion

The PR effectively updates the project metadata and version information to align with its new identity under THU-MIG/yolov10. The changes are well-executed and maintain consistency across the codebase.

However, it is important to consider the impact of changing the required Python version on existing users who may be using Python 3.8.

Given that this PR was closed without merging, it would be beneficial to understand why it was not merged and address any concerns before re-submitting or implementing similar changes in future updates.


If you have any questions or need further assistance with this assessment or any other matter related to this PR or project in general, feel free to ask!

Report On: Fetch Files For Assessment



Source Code Assessment

File: ultralytics/models/yolo/model.py

Structure and Quality

  • Class Definitions: The file defines two classes, YOLO and YOLOWorld, which are both subclasses of Model.
  • Initialization:
    • The YOLO class constructor initializes the model based on the provided model path. It dynamically switches to YOLOWorld or YOLOv10 based on the model filename.
    • The YOLOWorld class constructor initializes with a default model path and sets default COCO class names if not provided.
  • Task Mapping:
    • Both classes have a task_map property that maps tasks (e.g., classify, detect) to their respective model, trainer, validator, and predictor classes.
  • Code Quality:
    • The code is clean and well-structured with clear class responsibilities.
    • Dynamic class switching based on the model filename is an advanced feature that enhances flexibility.
    • Proper use of properties for task mapping ensures encapsulation.

Improvements

  • Documentation: Adding docstrings to methods and properties would improve code readability and maintainability.
  • Error Handling: Consider adding error handling for file path checks and invalid task mappings.

File: ultralytics/models/yolov10/model.py

Structure and Quality

  • Class Definition: The file defines a single class, YOLOv10, which is a subclass of Model.
  • Initialization:
    • The constructor initializes the model using the superclass constructor.
  • Task Mapping:
    • The task_map property maps the "detect" task to its respective model, trainer, validator, and predictor classes specific to YOLOv10.
  • Code Quality:
    • The code is concise and focused on defining the YOLOv10 model architecture.
    • Proper use of inheritance from the base Model class ensures consistency with other model definitions.

Improvements

  • Documentation: Adding docstrings to methods and properties would improve code readability and maintainability.
  • Extensibility: If additional tasks are expected in the future, consider designing the task mapping to be more flexible.

File: ultralytics/nn/modules/block.py

Structure and Quality

  • File Length: The file is quite large (827 lines), indicating it contains multiple classes or functions related to neural network blocks.
  • Recent Commit Context: The recent commit fixed export to TensorRT with dynamic size, which is crucial for deployment flexibility.
  • Code Quality:
    • Given the file length, it likely contains various neural network modules or blocks used in YOLOv10.
    • Proper modularization of neural network components is expected for maintainability.

Improvements

  • Modularization: Ensure that each block or module is well-separated and documented within the file.
  • Documentation: Comprehensive docstrings for each class and function will significantly aid in understanding and maintaining the code.

Files: Performance Logs (logs/yolov10b.csv, logs/yolov10l.csv, etc.)

Structure and Quality

  • Content: Each CSV file contains performance logs for different YOLOv10 models (e.g., YOLOv10-B, YOLOv10-L).
  • Columns:
    • Metrics such as precision, recall, mAP50, mAP50-95 for both training and validation phases.
    • Learning rates for different parameter groups (lr/pg0, lr/pg1, lr/pg2).
    • Training loss components (train/box_om, train/cls_om, etc.).
  • Code Quality:
    • The logs are structured in a tabular format suitable for performance analysis.
    • Consistent column headers across files ensure ease of comparison between different models.

Improvements

  • Visualization: Consider providing scripts or tools to visualize these logs for better performance analysis.
  • Aggregation: Summarize key metrics (e.g., best mAP50) at the end of each log file for quick reference.

General Observations

  1. Consistency: The structure across different model files (model.py) is consistent, adhering to a common design pattern which aids in maintainability.
  2. Flexibility: Dynamic initialization based on model filenames in ultralytics/models/yolo/model.py showcases advanced flexibility in handling different model variants.
  3. Documentation Needs: Across all files, enhancing documentation through comprehensive docstrings will improve code readability and ease onboarding for new developers.

Summary

The source code files exhibit a high level of organization and adherence to object-oriented principles. Key areas for improvement include enhancing documentation, adding error handling where necessary, and providing tools for visualizing performance logs. Overall, the codebase demonstrates robustness suitable for maintaining complex deep learning models like YOLOv10.