From 19e019181c17391a94bf38fa8431834c6eab2976 Mon Sep 17 00:00:00 2001 From: JEFF Date: Mon, 20 Jan 2025 17:09:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 166 ++++++++++++++++++++++++++++ README.md | 283 ++++++++++++++++++++++++++++++++++++++++++++++++ bus.jpg | Bin 0 -> 137419 bytes json2txt.py | 95 ++++++++++++++++ predict.py | 32 ++++++ predict_mask.py | 66 +++++++++++ pyproject.toml | 187 ++++++++++++++++++++++++++++++++ rotate_image.py | 49 +++++++++ split_data.py | 73 +++++++++++++ 9 files changed, 951 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 README.md create mode 100644 bus.jpg create mode 100644 json2txt.py create mode 100644 predict.py create mode 100644 predict_mask.py create mode 100644 pyproject.toml create mode 100644 rotate_image.py create mode 100644 split_data.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..b3dbfe1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,166 @@ +--- +comments: true +description: Learn how to contribute to Ultralytics YOLO open-source repositories. Follow guidelines for pull requests, code of conduct, and bug reporting. +keywords: Ultralytics, YOLO, open-source, contribution, pull request, code of conduct, bug reporting, GitHub, CLA, Google-style docstrings +--- + +# Contributing to Ultralytics Open-Source Projects + +Welcome! We're thrilled that you're considering contributing to our [Ultralytics](https://www.ultralytics.com/) [open-source](https://github.com/ultralytics) projects. Your involvement not only helps enhance the quality of our repositories but also benefits the entire community. This guide provides clear guidelines and best practices to help you get started. + + +Ultralytics open-source contributors + +## Table of Contents + +1. [Code of Conduct](#code-of-conduct) +2. [Contributing via Pull Requests](#contributing-via-pull-requests) + - [CLA Signing](#cla-signing) + - [Google-Style Docstrings](#google-style-docstrings) + - [GitHub Actions CI Tests](#github-actions-ci-tests) +3. [Reporting Bugs](#reporting-bugs) +4. [License](#license) +5. [Conclusion](#conclusion) +6. [FAQ](#faq) + +## Code of Conduct + +To ensure a welcoming and inclusive environment for everyone, all contributors must adhere to our [Code of Conduct](https://docs.ultralytics.com/help/code_of_conduct/). Respect, kindness, and professionalism are at the heart of our community. + +## Contributing via Pull Requests + +We greatly appreciate contributions in the form of pull requests. To make the review process as smooth as possible, please follow these steps: + +1. **[Fork the repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo):** Start by forking the Ultralytics YOLO repository to your GitHub account. + +2. **[Create a branch](https://docs.github.com/en/desktop/making-changes-in-a-branch/managing-branches-in-github-desktop):** Create a new branch in your forked repository with a clear, descriptive name that reflects your changes. + +3. **Make your changes:** Ensure your code adheres to the project's style guidelines and does not introduce any new errors or warnings. + +4. **[Test your changes](https://github.com/ultralytics/ultralytics/tree/main/tests):** Before submitting, test your changes locally to confirm they work as expected and don't cause any new issues. + +5. **[Commit your changes](https://docs.github.com/en/desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop):** Commit your changes with a concise and descriptive commit message. If your changes address a specific issue, include the issue number in your commit message. + +6. **[Create a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request):** Submit a pull request from your forked repository to the main Ultralytics YOLO repository. Provide a clear and detailed explanation of your changes and how they improve the project. + +### CLA Signing + +Before we can merge your pull request, you must sign our [Contributor License Agreement (CLA)](https://docs.ultralytics.com/help/CLA/). This legal agreement ensures that your contributions are properly licensed, allowing the project to continue being distributed under the AGPL-3.0 license. + +After submitting your pull request, the CLA bot will guide you through the signing process. To sign the CLA, simply add a comment in your PR stating: + +``` +I have read the CLA Document and I sign the CLA +``` + +### Google-Style Docstrings + +When adding new functions or classes, please include [Google-style docstrings](https://google.github.io/styleguide/pyguide.html). These docstrings provide clear, standardized documentation that helps other developers understand and maintain your code. + +#### Example + +This example illustrates a Google-style docstring. Ensure that both input and output `types` are always enclosed in parentheses, e.g., `(bool)`. + +```python +def example_function(arg1, arg2=4): + """ + Example function demonstrating Google-style docstrings. + + Args: + arg1 (int): The first argument. + arg2 (int): The second argument, with a default value of 4. + + Returns: + (bool): True if successful, False otherwise. + + Examples: + >>> result = example_function(1, 2) # returns False + """ + if arg1 == arg2: + return True + return False +``` + +#### Example with type hints + +This example includes both a Google-style docstring and type hints for arguments and returns, though using either independently is also acceptable. + +```python +def example_function(arg1: int, arg2: int = 4) -> bool: + """ + Example function demonstrating Google-style docstrings. + + Args: + arg1: The first argument. + arg2: The second argument, with a default value of 4. + + Returns: + True if successful, False otherwise. + + Examples: + >>> result = example_function(1, 2) # returns False + """ + if arg1 == arg2: + return True + return False +``` + +#### Example Single-line + +For smaller or simpler functions, a single-line docstring may be sufficient. The docstring must use three double-quotes, be a complete sentence, start with a capital letter, and end with a period. + +```python +def example_small_function(arg1: int, arg2: int = 4) -> bool: + """Example function with a single-line docstring.""" + return arg1 == arg2 +``` + +### GitHub Actions CI Tests + +All pull requests must pass the GitHub Actions [Continuous Integration](https://docs.ultralytics.com/help/CI/) (CI) tests before they can be merged. These tests include linting, unit tests, and other checks to ensure that your changes meet the project's quality standards. Review the CI output and address any issues that arise. + +## Reporting Bugs + +We highly value bug reports as they help us maintain the quality of our projects. When reporting a bug, please provide a [Minimum Reproducible Example](https://docs.ultralytics.com/help/minimum_reproducible_example/)—a simple, clear code example that consistently reproduces the issue. This allows us to quickly identify and resolve the problem. + +## License + +Ultralytics uses the [GNU Affero General Public License v3.0 (AGPL-3.0)](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) for its repositories. This license promotes openness, transparency, and collaborative improvement in software development. It ensures that all users have the freedom to use, modify, and share the software, fostering a strong community of collaboration and innovation. + +We encourage all contributors to familiarize themselves with the terms of the AGPL-3.0 license to contribute effectively and ethically to the Ultralytics open-source community. + +## Conclusion + +Thank you for your interest in contributing to [Ultralytics](https://www.ultralytics.com/) [open-source](https://github.com/ultralytics) YOLO projects. Your participation is essential in shaping the future of our software and building a vibrant community of innovation and collaboration. Whether you're enhancing code, reporting bugs, or suggesting new features, your contributions are invaluable. + +We're excited to see your ideas come to life and appreciate your commitment to advancing object detection technology. Together, let's continue to grow and innovate in this exciting open-source journey. Happy coding! 🚀🌟 + +## FAQ + +### Why should I contribute to Ultralytics YOLO open-source repositories? + +Contributing to Ultralytics YOLO open-source repositories improves the software, making it more robust and feature-rich for the entire community. Contributions can include code enhancements, bug fixes, documentation improvements, and new feature implementations. Additionally, contributing allows you to collaborate with other skilled developers and experts in the field, enhancing your own skills and reputation. For details on how to get started, refer to the [Contributing via Pull Requests](#contributing-via-pull-requests) section. + +### How do I sign the Contributor License Agreement (CLA) for Ultralytics YOLO? + +To sign the Contributor License Agreement (CLA), follow the instructions provided by the CLA bot after submitting your pull request. This process ensures that your contributions are properly licensed under the AGPL-3.0 license, maintaining the legal integrity of the open-source project. Add a comment in your pull request stating: + +``` +I have read the CLA Document and I sign the CLA. +``` + +For more information, see the [CLA Signing](#cla-signing) section. + +### What are Google-style docstrings, and why are they required for Ultralytics YOLO contributions? + +Google-style docstrings provide clear, concise documentation for functions and classes, improving code readability and maintainability. These docstrings outline the function's purpose, arguments, and return values with specific formatting rules. When contributing to Ultralytics YOLO, following Google-style docstrings ensures that your additions are well-documented and easily understood. For examples and guidelines, visit the [Google-Style Docstrings](#google-style-docstrings) section. + +### How can I ensure my changes pass the GitHub Actions CI tests? + +Before your pull request can be merged, it must pass all GitHub Actions Continuous Integration (CI) tests. These tests include linting, unit tests, and other checks to ensure the code meets + +the project's quality standards. Review the CI output and fix any issues. For detailed information on the CI process and troubleshooting tips, see the [GitHub Actions CI Tests](#github-actions-ci-tests) section. + +### How do I report a bug in Ultralytics YOLO repositories? + +To report a bug, provide a clear and concise [Minimum Reproducible Example](https://docs.ultralytics.com/help/minimum_reproducible_example/) along with your bug report. This helps developers quickly identify and fix the issue. Ensure your example is minimal yet sufficient to replicate the problem. For more detailed steps on reporting bugs, refer to the [Reporting Bugs](#reporting-bugs) section. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d1e6bb5 --- /dev/null +++ b/README.md @@ -0,0 +1,283 @@ +
+

+ + YOLO Vision banner +

+ +[中文](https://docs.ultralytics.com/zh) | [한국어](https://docs.ultralytics.com/ko) | [日本語](https://docs.ultralytics.com/ja) | [Русский](https://docs.ultralytics.com/ru) | [Deutsch](https://docs.ultralytics.com/de) | [Français](https://docs.ultralytics.com/fr) | [Español](https://docs.ultralytics.com/es) | [Português](https://docs.ultralytics.com/pt) | [Türkçe](https://docs.ultralytics.com/tr) | [Tiếng Việt](https://docs.ultralytics.com/vi) | [العربية](https://docs.ultralytics.com/ar)
+ +
+ Ultralytics CI + Ultralytics Downloads + Ultralytics YOLO Citation + Ultralytics Discord + Ultralytics Forums + Ultralytics Reddit +
+ Run Ultralytics on Gradient + Open Ultralytics In Colab + Open Ultralytics In Kaggle + Open Ultralytics In Binder +
+
+ +[Ultralytics](https://www.ultralytics.com/) [YOLO11](https://github.com/ultralytics/ultralytics) is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLO11 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks. + +We hope that the resources here will help you get the most out of YOLO. Please browse the Ultralytics Docs for details, raise an issue on GitHub for support, questions, or discussions, become a member of the Ultralytics Discord, Reddit and Forums! + +To request an Enterprise License please complete the form at [Ultralytics Licensing](https://www.ultralytics.com/license). + + + YOLO11 performance plots + + +
+ Ultralytics GitHub + space + Ultralytics LinkedIn + space + Ultralytics Twitter + space + Ultralytics YouTube + space + Ultralytics TikTok + space + Ultralytics BiliBili + space + Ultralytics Discord +
+
+ +##
Documentation
+ +See below for a quickstart install and usage examples, and see our [Docs](https://docs.ultralytics.com/) for full documentation on training, validation, prediction and deployment. + +
+Install + +Pip install the ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/). + +[![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics)](https://www.pepy.tech/projects/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/) + +```bash +pip install ultralytics +``` + +For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/). + +[![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics) [![Ultralytics Docker Pulls](https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics) + +
+ +
+Usage + +### CLI + +YOLO may be used directly in the Command Line Interface (CLI) with a `yolo` command: + +```bash +yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg' +``` + +`yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLO [CLI Docs](https://docs.ultralytics.com/usage/cli/) for examples. + +### Python + +YOLO may also be used directly in a Python environment, and accepts the same [arguments](https://docs.ultralytics.com/usage/cfg/) as in the CLI example above: + +```python +from ultralytics import YOLO + +# Load a model +model = YOLO("yolo11n.pt") + +# Train the model +train_results = model.train( + data="coco8.yaml", # path to dataset YAML + epochs=100, # number of training epochs + imgsz=640, # training image size + device="cpu", # device to run on, i.e. device=0 or device=0,1,2,3 or device=cpu +) + +# Evaluate model performance on the validation set +metrics = model.val() + +# Perform object detection on an image +results = model("path/to/image.jpg") +results[0].show() + +# Export the model to ONNX format +path = model.export(format="onnx") # return path to exported model +``` + +See YOLO [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples. + +
+ +##
Models
+ +YOLO11 [Detect](https://docs.ultralytics.com/tasks/detect/), [Segment](https://docs.ultralytics.com/tasks/segment/) and [Pose](https://docs.ultralytics.com/tasks/pose/) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset are available here, as well as YOLO11 [Classify](https://docs.ultralytics.com/tasks/classify/) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/) dataset. [Track](https://docs.ultralytics.com/modes/track/) mode is available for all Detect, Segment and Pose models. All [Models](https://docs.ultralytics.com/models/) download automatically from the latest Ultralytics [release](https://github.com/ultralytics/assets/releases) on first use. + + + Ultralytics YOLO supported tasks + +
+
+ +
Detection (COCO) + +See [Detection Docs](https://docs.ultralytics.com/tasks/detect/) for usage examples with these models trained on [COCO](https://docs.ultralytics.com/datasets/detect/coco/), which include 80 pre-trained classes. + +| Model | size
(pixels) | mAPval
50-95 | Speed
CPU ONNX
(ms) | Speed
T4 TensorRT10
(ms) | params
(M) | FLOPs
(B) | +| ------------------------------------------------------------------------------------ | --------------------- | -------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- | +| [YOLO11n](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt) | 640 | 39.5 | 56.1 ± 0.8 | 1.5 ± 0.0 | 2.6 | 6.5 | +| [YOLO11s](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt) | 640 | 47.0 | 90.0 ± 1.2 | 2.5 ± 0.0 | 9.4 | 21.5 | +| [YOLO11m](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m.pt) | 640 | 51.5 | 183.2 ± 2.0 | 4.7 ± 0.1 | 20.1 | 68.0 | +| [YOLO11l](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l.pt) | 640 | 53.4 | 238.6 ± 1.4 | 6.2 ± 0.1 | 25.3 | 86.9 | +| [YOLO11x](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x.pt) | 640 | 54.7 | 462.8 ± 6.7 | 11.3 ± 0.2 | 56.9 | 194.9 | + +- **mAPval** values are for single-model single-scale on [COCO val2017](https://cocodataset.org/) dataset.
Reproduce by `yolo val detect data=coco.yaml device=0` +- **Speed** averaged over COCO val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance.
Reproduce by `yolo val detect data=coco.yaml batch=1 device=0|cpu` + +
+ +
Segmentation (COCO) + +See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage examples with these models trained on [COCO-Seg](https://docs.ultralytics.com/datasets/segment/coco/), which include 80 pre-trained classes. + +| Model | size
(pixels) | mAPbox
50-95 | mAPmask
50-95 | Speed
CPU ONNX
(ms) | Speed
T4 TensorRT10
(ms) | params
(M) | FLOPs
(B) | +| -------------------------------------------------------------------------------------------- | --------------------- | -------------------- | --------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- | +| [YOLO11n-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-seg.pt) | 640 | 38.9 | 32.0 | 65.9 ± 1.1 | 1.8 ± 0.0 | 2.9 | 10.4 | +| [YOLO11s-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-seg.pt) | 640 | 46.6 | 37.8 | 117.6 ± 4.9 | 2.9 ± 0.0 | 10.1 | 35.5 | +| [YOLO11m-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-seg.pt) | 640 | 51.5 | 41.5 | 281.6 ± 1.2 | 6.3 ± 0.1 | 22.4 | 123.3 | +| [YOLO11l-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-seg.pt) | 640 | 53.4 | 42.9 | 344.2 ± 3.2 | 7.8 ± 0.2 | 27.6 | 142.2 | +| [YOLO11x-seg](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-seg.pt) | 640 | 54.7 | 43.8 | 664.5 ± 3.2 | 15.8 ± 0.7 | 62.1 | 319.0 | + +- **mAPval** values are for single-model single-scale on [COCO val2017](https://cocodataset.org/) dataset.
Reproduce by `yolo val segment data=coco.yaml device=0` +- **Speed** averaged over COCO val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance.
Reproduce by `yolo val segment data=coco.yaml batch=1 device=0|cpu` + +
+ +
Classification (ImageNet) + +See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usage examples with these models trained on [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/), which include 1000 pretrained classes. + +| Model | size
(pixels) | acc
top1 | acc
top5 | Speed
CPU ONNX
(ms) | Speed
T4 TensorRT10
(ms) | params
(M) | FLOPs
(B) at 640 | +| -------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | ------------------------------ | ----------------------------------- | ------------------ | ------------------------ | +| [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 3.3 | +| [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 12.1 | +| [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 39.3 | +| [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 49.4 | +| [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 110.4 | + +- **acc** values are model accuracies on the [ImageNet](https://www.image-net.org/) dataset validation set.
Reproduce by `yolo val classify data=path/to/ImageNet device=0` +- **Speed** averaged over ImageNet val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance.
Reproduce by `yolo val classify data=path/to/ImageNet batch=1 device=0|cpu` + +
+ +
Pose (COCO) + +See [Pose Docs](https://docs.ultralytics.com/tasks/pose/) for usage examples with these models trained on [COCO-Pose](https://docs.ultralytics.com/datasets/pose/coco/), which include 1 pre-trained class, person. + +| Model | size
(pixels) | mAPpose
50-95 | mAPpose
50 | Speed
CPU ONNX
(ms) | Speed
T4 TensorRT10
(ms) | params
(M) | FLOPs
(B) | +| ---------------------------------------------------------------------------------------------- | --------------------- | --------------------- | ------------------ | ------------------------------ | ----------------------------------- | ------------------ | ----------------- | +| [YOLO11n-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-pose.pt) | 640 | 50.0 | 81.0 | 52.4 ± 0.5 | 1.7 ± 0.0 | 2.9 | 7.6 | +| [YOLO11s-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-pose.pt) | 640 | 58.9 | 86.3 | 90.5 ± 0.6 | 2.6 ± 0.0 | 9.9 | 23.2 | +| [YOLO11m-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-pose.pt) | 640 | 64.9 | 89.4 | 187.3 ± 0.8 | 4.9 ± 0.1 | 20.9 | 71.7 | +| [YOLO11l-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-pose.pt) | 640 | 66.1 | 89.9 | 247.7 ± 1.1 | 6.4 ± 0.1 | 26.2 | 90.7 | +| [YOLO11x-pose](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-pose.pt) | 640 | 69.5 | 91.1 | 488.0 ± 13.9 | 12.1 ± 0.2 | 58.8 | 203.3 | + +- **mAPval** values are for single-model single-scale on [COCO Keypoints val2017](https://cocodataset.org/) dataset.
Reproduce by `yolo val pose data=coco-pose.yaml device=0` +- **Speed** averaged over COCO val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance.
Reproduce by `yolo val pose data=coco-pose.yaml batch=1 device=0|cpu` + +
+ +
OBB (DOTAv1) + +See [OBB Docs](https://docs.ultralytics.com/tasks/obb/) for usage examples with these models trained on [DOTAv1](https://docs.ultralytics.com/datasets/obb/dota-v2/#dota-v10/), which include 15 pre-trained classes. + +| Model | size
(pixels) | mAPtest
50 | Speed
CPU ONNX
(ms) | Speed
T4 TensorRT10
(ms) | params
(M) | FLOPs
(B) | +| -------------------------------------------------------------------------------------------- | --------------------- | ------------------ | ------------------------------ | ----------------------------------- | ------------------ | ----------------- | +| [YOLO11n-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-obb.pt) | 1024 | 78.4 | 117.6 ± 0.8 | 4.4 ± 0.0 | 2.7 | 17.2 | +| [YOLO11s-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-obb.pt) | 1024 | 79.5 | 219.4 ± 4.0 | 5.1 ± 0.0 | 9.7 | 57.5 | +| [YOLO11m-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-obb.pt) | 1024 | 80.9 | 562.8 ± 2.9 | 10.1 ± 0.4 | 20.9 | 183.5 | +| [YOLO11l-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-obb.pt) | 1024 | 81.0 | 712.5 ± 5.0 | 13.5 ± 0.6 | 26.2 | 232.0 | +| [YOLO11x-obb](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-obb.pt) | 1024 | 81.3 | 1408.6 ± 7.7 | 28.6 ± 1.0 | 58.8 | 520.2 | + +- **mAPtest** values are for single-model multiscale on [DOTAv1](https://captain-whu.github.io/DOTA/index.html) dataset.
Reproduce by `yolo val obb data=DOTAv1.yaml device=0 split=test` and submit merged results to [DOTA evaluation](https://captain-whu.github.io/DOTA/evaluation.html). +- **Speed** averaged over DOTAv1 val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance.
Reproduce by `yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu` + +
+ +##
Integrations
+ +Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [W&B](https://docs.wandb.ai/guides/integrations/ultralytics/), [Comet](https://bit.ly/yolov8-readme-comet), [Roboflow](https://roboflow.com/?ref=ultralytics) and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow. + + + Ultralytics active learning integrations + +
+
+ +
+ + Ultralytics HUB logo + space + + ClearML logo + space + + Comet ML logo + space + + NeuralMagic logo +
+ +| Ultralytics HUB 🚀 | W&B | Comet ⭐ NEW | Neural Magic | +| :--------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------: | +| Streamline YOLO workflows: Label, train, and deploy effortlessly with [Ultralytics HUB](https://www.ultralytics.com/hub). Try now! | Track experiments, hyperparameters, and results with [Weights & Biases](https://docs.wandb.ai/guides/integrations/ultralytics/) | Free forever, [Comet](https://bit.ly/yolov5-readme-comet) lets you save YOLO11 models, resume training, and interactively visualize and debug predictions | Run YOLO11 inference up to 6x faster with [Neural Magic DeepSparse](https://bit.ly/yolov5-neuralmagic) | + +##
Ultralytics HUB
+ +Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub) ⭐, the all-in-one solution for data visualization, YOLO11 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://www.ultralytics.com/app-install). Start your journey for **Free** now! + + +Ultralytics HUB preview image + +##
Contribute
+ +We love your input! Ultralytics YOLO would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors! + + + + +Ultralytics open-source contributors + +##
License
+ +Ultralytics offers two licensing options to accommodate diverse use cases: + +- **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license) open-source license is ideal for students and enthusiasts, promoting open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for more details. +- **Enterprise License**: Designed for commercial use, this license permits seamless integration of Ultralytics software and AI models into commercial goods and services, bypassing the open-source requirements of AGPL-3.0. If your scenario involves embedding our solutions into a commercial offering, reach out through [Ultralytics Licensing](https://www.ultralytics.com/license). + +##
Contact
+ +For Ultralytics bug reports and feature requests please visit [GitHub Issues](https://github.com/ultralytics/ultralytics/issues). Become a member of the Ultralytics [Discord](https://discord.com/invite/ultralytics), [Reddit](https://www.reddit.com/r/ultralytics/), or [Forums](https://community.ultralytics.com/) for asking questions, sharing projects, learning discussions, or for help with all things Ultralytics! + +
+
+ Ultralytics GitHub + space + Ultralytics LinkedIn + space + Ultralytics Twitter + space + Ultralytics YouTube + space + Ultralytics TikTok + space + Ultralytics BiliBili + space + Ultralytics Discord +
diff --git a/bus.jpg b/bus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40eaaf5c330d0c498fbe1dcacf9bb8bf566797fe GIT binary patch literal 137419 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

Yf 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 literal 0 HcmV?d00001 diff --git a/json2txt.py b/json2txt.py new file mode 100644 index 0000000..7d1250e --- /dev/null +++ b/json2txt.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +import json +import os +import argparse +from tqdm import tqdm +import chardet + +# 預定義標籤類別與對應編號 +PREDEFINED_CLASSES = { + "T7H": 0, + "T8H": 1, + "T10H": 2, + "T15H": 3, + "PH00": 4, + "PH0": 5, + "3/32": 6, + "1/8": 7 +} + + +def read_json_file(file_path): + with open(file_path, "rb") as f: + raw_data = f.read() + detected_encoding = chardet.detect(raw_data)['encoding'] + with open(file_path, "r", encoding=detected_encoding, errors="ignore") as f: + return json.load(f) + +def convert_label_json(json_dir, save_dir, classes): + json_paths = os.listdir(json_dir) + os.makedirs(save_dir, exist_ok=True) # 確保目錄存在 + for json_path in tqdm(json_paths, desc="Converting JSON files"): + json_path_full = os.path.join(json_dir, json_path) + try: + json_dict = read_json_file(json_path_full) + h, w = json_dict['imageHeight'], json_dict['imageWidth'] + except (KeyError, json.JSONDecodeError) as e: + print(f"Error reading file '{json_path}': {e}") + continue + + # Save txt path + txt_path = os.path.join(save_dir, json_path.replace('.json', '.txt')) + os.makedirs(os.path.dirname(txt_path), exist_ok=True) + with open(txt_path, 'w') as txt_file: + for shape_dict in json_dict['shapes']: + try: + label = shape_dict['label'] + label_index = classes.get(label, None) # 查找標籤對應的編號 + if label_index is None: + print(f"Label '{label}' not in predefined classes.") + continue + points = shape_dict['points'] + except ValueError as e: + print(f"Error processing shape in file '{json_path}': {e}") + continue + + points_nor_list = [] + for point in points: + points_nor_list.append(point[0] / w) + points_nor_list.append(point[1] / h) + + points_nor_list = list(map(lambda x: str(x), points_nor_list)) + points_nor_str = ' '.join(points_nor_list) + + label_str = str(label_index) + ' ' + points_nor_str + '\n' + txt_file.writelines(label_str) + +def extract_labels(json_dir): + labels = set() + json_paths = os.listdir(json_dir) + print(f"Found {len(json_paths)} JSON files to process.") + for json_path in json_paths: + json_path_full = os.path.join(json_dir, json_path) + try: + json_dict = read_json_file(json_path_full) + for shape_dict in json_dict['shapes']: + labels.add(shape_dict['label']) + except (KeyError, json.JSONDecodeError) as e: + print(f"Error reading file '{json_path}': {e}") + print(f"Extracted labels: {labels}") + return list(labels) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='json convert to txt params') + parser.add_argument('--json-dir', type=str, default='E:/code/image_segmentation/labelme_json_dir/', help='json path dir') + parser.add_argument('--save-dir', type=str, default='E:/code/image_segmentation/labelme_txt_dir/', help='txt save dir') + args = parser.parse_args() + + json_dir = args.json_dir + save_dir = args.save_dir + + # 使用預定義類別 + predefined_classes = PREDEFINED_CLASSES + + # 進行轉換 + convert_label_json(json_dir, save_dir, predefined_classes) diff --git a/predict.py b/predict.py new file mode 100644 index 0000000..e06110e --- /dev/null +++ b/predict.py @@ -0,0 +1,32 @@ +from ultralytics import YOLO +from tkinter import Tk, filedialog + +# 載入模型 +model = YOLO('E:/code/image_segmentation/runs/segment/train14/weights/best.pt') + +# 使用 tkinter 開啟檔案選擇對話框 +def select_files(): + root = Tk() + root.withdraw() # 隱藏主視窗 + file_paths = filedialog.askopenfilenames( + title="Select Images", + filetypes=[("Image files", "*.bmp;*.png;*.jpg;*.jpeg")] + ) + return file_paths + +# 選擇影像檔案 +image_paths = select_files() +if not image_paths: + print("No files selected.") +else: + # 執行推論 + for image_path in image_paths: + results = model( + source=image_path, # 輸入圖片路徑 + save=True, # 儲存推論結果 + device='0', # 使用 GPU 若發生錯誤改成CPU + # max_det=8, # 每個類別只保留一個檢測結果 + # iou=0.1, # 降低 IOU 閾值,進一步減少重複檢測 + # conf=0.7 # 可以根據需要調整置信度閾值 + ) + print("Inference completed!") diff --git a/predict_mask.py b/predict_mask.py new file mode 100644 index 0000000..d8d55db --- /dev/null +++ b/predict_mask.py @@ -0,0 +1,66 @@ +from ultralytics import YOLO +import os +from tkinter import Tk, filedialog +import cv2 +import numpy as np + +# 載入模型 +model = YOLO('E:/code/image_segmentation/runs/segment/train14/weights/best.pt') + +# 使用 tkinter 開啟檔案選擇對話框 +def select_files(): + root = Tk() + root.withdraw() # 隱藏主視窗 + file_paths = filedialog.askopenfilenames( + title="Select Images", + filetypes=[("Image files", "*.bmp;*.png;*.jpg;*.jpeg")] + ) + return file_paths + +# 選擇影像檔案 +image_paths = select_files() +if not image_paths: + print("No files selected.") +else: + # 執行推論 + for image_path in image_paths: + # 推論 + results = model( + source=image_path, + device='0', # 使用 GPU 若發生錯誤改成CPU + max_det=8, + iou=0.1, + conf=0.7 + ) + + # 取得圖片名稱和目錄 + img_name = os.path.basename(image_path) + output_dir = os.path.join(os.path.dirname(image_path), "segmented_results") + os.makedirs(output_dir, exist_ok=True) + + # 處理每張圖片的結果 + for result in results: + original_image = result.orig_img + masks = result.masks.data.cpu().numpy() if result.masks else None + + if masks is not None: + # 初始化遮罩影像 + mask_image = np.zeros_like(original_image) + + for mask in masks: + mask = mask.astype(np.uint8) * 255 + + # 調整遮罩大小與原始影像一致 + mask_resized = cv2.resize(mask, (original_image.shape[1], original_image.shape[0])) + + # 將單通道遮罩轉換為三通道 + mask_colored = cv2.merge([mask_resized, mask_resized, mask_resized]) + + # 疊加遮罩到影像 + mask_image = cv2.addWeighted(mask_image, 1, mask_colored, 1, 0) + + # 保存結果 + output_path = os.path.join(output_dir, f"segmented_{img_name}") + cv2.imwrite(output_path, mask_image) + print(f"Saved segmented result to: {output_path}") + print("Inference completed!") diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2545739 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,187 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + +# Overview: +# This pyproject.toml file manages the build, packaging, and distribution of the Ultralytics library. +# It defines essential project metadata, dependencies, and settings used to develop and deploy the library. + +# Key Sections: +# - [build-system]: Specifies the build requirements and backend (e.g., setuptools, wheel). +# - [project]: Includes details like name, version, description, authors, dependencies and more. +# - [project.optional-dependencies]: Provides additional, optional packages for extended features. +# - [tool.*]: Configures settings for various tools (pytest, yapf, etc.) used in the project. + +# Installation: +# The Ultralytics library can be installed using the command: 'pip install ultralytics' +# For development purposes, you can install the package in editable mode with: 'pip install -e .' +# This approach allows for real-time code modifications without the need for re-installation. + +# Documentation: +# For comprehensive documentation and usage instructions, visit: https://docs.ultralytics.com + +[build-system] +requires = ["setuptools>=70.0.0", "wheel"] +build-backend = "setuptools.build_meta" + +# Project settings ----------------------------------------------------------------------------------------------------- +[project] +name = "ultralytics" +dynamic = ["version"] +description = "Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification." +readme = "README.md" +requires-python = ">=3.8" +license = { "text" = "AGPL-3.0" } +keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "YOLOv9", "YOLOv10", "YOLO11", "HUB", "Ultralytics"] +authors = [ + { name = "Glenn Jocher", email = "glenn.jocher@ultralytics.com" }, + { name = "Jing Qiu", email = "jing.qiu@ultralytics.com" }, +] +maintainers = [ + { name = "Ultralytics", email = "hello@ultralytics.com" }, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Scientific/Engineering :: Image Recognition", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS", + "Operating System :: Microsoft :: Windows", +] + +# Required dependencies ------------------------------------------------------------------------------------------------ +dependencies = [ + "numpy>=1.23.0", + "numpy<2.0.0; sys_platform == 'darwin'", # macOS OpenVINO errors https://github.com/ultralytics/ultralytics/pull/17221 + "matplotlib>=3.3.0", + "opencv-python>=4.6.0", + "pillow>=7.1.2", + "pyyaml>=5.3.1", + "requests>=2.23.0", + "scipy>=1.4.1", + "torch>=1.8.0", + "torch>=1.8.0,!=2.4.0; sys_platform == 'win32'", # Windows CPU errors w/ 2.4.0 https://github.com/ultralytics/ultralytics/issues/15049 + "torchvision>=0.9.0", + "tqdm>=4.64.0", # progress bars + "psutil", # system utilization + "py-cpuinfo", # display CPU info + "pandas>=1.1.4", + "seaborn>=0.11.0", # plotting + "ultralytics-thop>=2.0.0", # FLOPs computation https://github.com/ultralytics/thop +] + +# Optional dependencies ------------------------------------------------------------------------------------------------ +[project.optional-dependencies] +dev = [ + "ipython", + "pytest", + "pytest-cov", + "coverage[toml]", + "mkdocs>=1.6.0", + "mkdocs-material>=9.5.9", + "mkdocstrings[python]", + "mkdocs-jupyter", # notebooks + "mkdocs-redirects", # 301 redirects + "mkdocs-ultralytics-plugin>=0.1.8", # for meta descriptions and images, dates and authors + "mkdocs-macros-plugin>=1.0.5" # duplicating content (i.e. export tables) in multiple places +] +export = [ + "onnx>=1.12.0", # ONNX export + "coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux + "scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.11'", # CoreML k-means quantization + "openvino>=2024.0.0", # OpenVINO export + "tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161 + "tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow + "tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports + "keras", # not installed automatically by tensorflow>=2.16 + "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'", # update old 'flatbuffers' included inside tensorflow package + "numpy==1.23.5; platform_machine == 'aarch64'", # fix error: `np.bool` was a deprecated alias for the builtin `bool` when using TensorRT models on NVIDIA Jetson + "h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release +] +solutions = [ + "shapely>=2.0.0", # shapely for point and polygon data matching + "streamlit", # for live inference on web browser i.e `yolo streamlit-predict` +] +logging = [ + "comet", # https://docs.ultralytics.com/integrations/comet/ + "tensorboard>=2.13.0", + "dvclive>=2.12.0", +] +extra = [ + "hub-sdk>=0.0.12", # Ultralytics HUB + "ipython", # interactive notebook + "albumentations>=1.4.6", # training augmentations + "pycocotools>=2.0.7", # COCO mAP +] + +[project.urls] +"Homepage" = "https://ultralytics.com" +"Source" = "https://github.com/ultralytics/ultralytics" +"Documentation" = "https://docs.ultralytics.com" +"Bug Reports" = "https://github.com/ultralytics/ultralytics/issues" +"Changelog" = "https://github.com/ultralytics/ultralytics/releases" + +[project.scripts] +yolo = "ultralytics.cfg:entrypoint" +ultralytics = "ultralytics.cfg:entrypoint" + +# Tools settings ------------------------------------------------------------------------------------------------------- +[tool.setuptools] # configuration specific to the `setuptools` build backend. +packages = { find = { where = ["."], include = ["ultralytics", "ultralytics.*"] } } +package-data = { "ultralytics" = ["**/*.yaml", "../tests/*.py"], "ultralytics.assets" = ["*.jpg"] } + +[tool.setuptools.dynamic] +version = { attr = "ultralytics.__version__" } + +[tool.pytest.ini_options] +addopts = "--doctest-modules --durations=30 --color=yes" +markers = [ + "slow: skip slow tests unless --slow is set", +] +norecursedirs = [".git", "dist", "build"] + +[tool.coverage.run] +source = ["ultralytics/"] +data_file = "tests/.coverage" +omit = ["ultralytics/utils/callbacks/*"] + +[tool.isort] +line_length = 120 +multi_line_output = 0 + +[tool.yapf] +based_on_style = "pep8" +spaces_before_comment = 2 +column_limit = 120 +coalesce_brackets = true +spaces_around_power_operator = true +space_between_ending_comma_and_closing_bracket = true +split_before_closing_bracket = false +split_before_first_argument = false + +[tool.ruff] +line-length = 120 + +[tool.ruff.format] +docstring-code-format = true + +[tool.docformatter] +wrap-summaries = 120 +wrap-descriptions = 120 +pre-summary-newline = true +close-quotes-on-newline = true +in-place = true + +[tool.codespell] +ignore-words-list = "crate,nd,ned,strack,dota,ane,segway,fo,gool,winn,commend,bloc,nam,afterall" +skip = '*.pt,*.pth,*.torchscript,*.onnx,*.tflite,*.pb,*.bin,*.param,*.mlmodel,*.engine,*.npy,*.data*,*.csv,*pnnx*,*venv*,*translat*,__pycache__*,*.ico,*.jpg,*.png,*.mp4,*.mov,/runs,/.git,./docs/??/*.md,./docs/mkdocs_??.yml' diff --git a/rotate_image.py b/rotate_image.py new file mode 100644 index 0000000..eedad73 --- /dev/null +++ b/rotate_image.py @@ -0,0 +1,49 @@ +import cv2 +import os + + +def rotate_image(image, angle): + """Rotate an image by a specific angle.""" + (h, w) = image.shape[:2] + center = (w // 2, h // 2) + M = cv2.getRotationMatrix2D(center, angle, 1.0) + rotated = cv2.warpAffine(image, M, (w, h)) + return rotated + + +def main(): + folder_path = r"E:\code\image_segmentation\pic" + start_idx = 101 # Start index for naming rotated images + + # Ensure the folder exists + if not os.path.exists(folder_path): + print(f"Folder '{folder_path}' does not exist.") + return + + for filename in os.listdir(folder_path): + if filename.endswith(".bmp"): + base_name = os.path.splitext(filename)[0] + try: + image_idx = int(base_name) # Convert filename to an integer + except ValueError: + print(f"Skipping invalid filename: {filename}") + continue + + # Load the image + file_path = os.path.join(folder_path, filename) + image = cv2.imread(file_path) + if image is None: + print(f"Failed to read image: {file_path}") + continue + + # Rotate and save images + for angle, offset in zip([90, 180, 270], [100, 200, 300]): + rotated_image = rotate_image(image, angle) + new_name = f"{image_idx + offset}.bmp" + new_path = os.path.join(folder_path, new_name) + cv2.imwrite(new_path, rotated_image) + print(f"Saved rotated image: {new_path}") + + +if __name__ == "__main__": + main() diff --git a/split_data.py b/split_data.py new file mode 100644 index 0000000..0ca745b --- /dev/null +++ b/split_data.py @@ -0,0 +1,73 @@ +import os +import shutil +import random + +# 設定資料夾路徑 +image_dir = r"E:\code\image_segmentation\pic" +label_dir = r"E:\code\image_segmentation\labelme_txt_dir" +output_dir = r"E:\code\image_segmentation\YOLODataset" + +# 設定輸出子資料夾 +image_output_dir = os.path.join(output_dir, "images") +label_output_dir = os.path.join(output_dir, "labels") +subsets = ["train", "test", "val"] + +# 清空輸出資料夾 +for subset in subsets: + image_subset_dir = os.path.join(image_output_dir, subset) + label_subset_dir = os.path.join(label_output_dir, subset) + + # 若資料夾存在,則清空 + if os.path.exists(image_subset_dir): + shutil.rmtree(image_subset_dir) + if os.path.exists(label_subset_dir): + shutil.rmtree(label_subset_dir) + + # 重新建立空資料夾 + os.makedirs(image_subset_dir, exist_ok=True) + os.makedirs(label_subset_dir, exist_ok=True) + +# 設定比例 +train_ratio = 0.8 +test_ratio = 0.1 +val_ratio = 0.1 + +# 獲取所有影像檔案名稱 +image_files = [f for f in os.listdir(image_dir) if f.endswith((".jpg", ".png", ".bmp"))] + +# 確保每個影像都有對應的標籤檔 +image_files = [f for f in image_files if os.path.exists(os.path.join(label_dir, f.replace(".bmp", ".txt").replace(".jpg", ".txt").replace(".png", ".txt")))] + +# 隨機打亂影像檔案列表 +random.shuffle(image_files) + +# 計算分配數量 +total_files = len(image_files) +train_count = int(total_files * train_ratio) +test_count = int(total_files * test_ratio) +val_count = total_files - train_count - test_count # 剩下的分到 val + +# 分配影像到子集 +train_files = image_files[:train_count] +test_files = image_files[train_count:train_count + test_count] +val_files = image_files[train_count + test_count:] + +# 定義一個函式來處理檔案複製 +def copy_files(files, subset): + for file in files: + # 複製影像檔案 + image_src = os.path.join(image_dir, file) + image_dest = os.path.join(image_output_dir, subset, file) + shutil.copy(image_src, image_dest) + + # 複製對應的標籤檔案 + label_src = os.path.join(label_dir, file.replace(".bmp", ".txt").replace(".jpg", ".txt").replace(".png", ".txt")) + label_dest = os.path.join(label_output_dir, subset, file.replace(".bmp", ".txt").replace(".jpg", ".txt").replace(".png", ".txt")) + shutil.copy(label_src, label_dest) + +# 執行檔案複製 +copy_files(train_files, "train") +copy_files(test_files, "test") +copy_files(val_files, "val") + +print("Dataset split completed! Existing files in the output directory were cleared.")