Đóng góp cho các dự án mã nguồn mở Ultralytics#
Chào mừng! Chúng tôi rất vui khi bạn cân nhắc đóng góp cho các dự án mã nguồn mở của Ultralytics. Sự tham gia của bạn không chỉ giúp nâng cao chất lượng các repository mà còn mang lại lợi ích cho toàn bộ cộng đồng computer vision. Hướng dẫn này cung cấp các chỉ dẫn rõ ràng và phương pháp tốt nhất để giúp bạn bắt đầu.
Xem: Cách đóng góp cho repository Ultralytics | Model, dataset và tài liệu Ultralytics 🚀
Quy tắc ứng xử#
Để đảm bảo môi trường thân thiện và hòa nhập cho mọi người, tất cả cộng tác viên phải tuân thủ Quy tắc ứng xử của chúng tôi. Tôn trọng, tử tế và tính chuyên nghiệp là những giá trị cốt lõi của cộng đồng.
Đóng góp thông qua Pull Request#
Chúng tôi rất trân trọng các đóng góp dưới dạng pull request (PR). Để quy trình review diễn ra suôn sẻ nhất có thể, vui lòng làm theo các bước sau:
- Fork repository: Bắt đầu bằng cách fork repository Ultralytics liên quan (ví dụ: ultralytics/ultralytics) vào tài khoản GitHub của bạn.
- Tạo branch: Tạo branch mới trong repository đã fork, đặt tên rõ ràng và mô tả các thay đổi của bạn (ví dụ:
fix-issue-123,add-feature-xyz). - Thực hiện thay đổi: Triển khai các cải tiến hoặc bản sửa lỗi. Đảm bảo code tuân thủ quy chuẩn định dạng của dự án và không gây ra lỗi hoặc cảnh báo mới.
- Kiểm thử thay đổi: Trước khi gửi, hãy kiểm thử các thay đổi trên máy cục bộ để xác nhận chúng hoạt động như mong đợi và không gây lỗi hồi quy. Hãy bổ sung bài kiểm thử nếu bạn thêm chức năng mới.
- Commit các thay đổi: Commit các thay đổi với thông điệp ngắn gọn, mô tả rõ nội dung. Nếu thay đổi giải quyết một issue cụ thể, hãy thêm số issue (ví dụ:
Fix #123: Corrected calculation error.). - Tạo pull request: Gửi pull request từ branch của bạn đến branch
maintrong repository Ultralytics gốc. Đặt tiêu đề rõ ràng và viết mô tả chi tiết về mục đích cũng như phạm vi thay đổi.
Cài đặt môi trường phát triển#
Clone fork của bạn (hoặc repository chính) và cài đặt ở chế độ editable (-e) để Python chạy các file cục bộ và nhận mọi thay đổi mà không cần cài đặt lại:
git clone https://github.com/YOUR_USERNAME/ultralytics.git
cd ultralytics
pip install -e .Để một dự án khác phụ thuộc vào fork thay vì package PyPI, hãy trỏ pip hoặc requirements.txt đến branch của fork:
git+https://github.com/YOUR_USERNAME/ultralytics.git@my-custom-branchThay đổi tài liệu#
Mã nguồn tài liệu nằm trong docs/en/. Từ thư mục gốc của repository, hãy cài đặt các dependency phát triển và chạy toàn bộ quy trình kiểm tra nghiêm ngặt trước khi mở PR:
uv pip install -e ".[dev]"
python docs/build_docs.pyQuy trình kiểm tra chuẩn bị các tài liệu tham chiếu, macro và trang so sánh được tạo tự động trước khi chạy zensical build --strict. Để xem trước trực tiếp nhanh hơn các trang không dùng macro, hãy chạy zensical serve.
Ký CLA#
Trước khi có thể merge pull request, bạn phải ký Thỏa thuận cấp phép cho người đóng góp (CLA). Thỏa thuận pháp lý này đảm bảo các đóng góp của bạn được cấp phép phù hợp, cho phép dự án tiếp tục được phân phối theo giấy phép AGPL-3.0.
Sau khi gửi pull request, bot CLA sẽ hướng dẫn bạn hoàn tất quy trình ký. Để ký CLA, chỉ cần thêm một comment vào PR với nội dung:
I have read the CLA Document and I sign the CLADocstring theo phong cách Google#
Khi thêm hàm hoặc class mới, hãy viết docstring theo phong cách Google để tài liệu rõ ràng và nhất quán. Luôn đặt cả types đầu vào và đầu ra trong dấu ngoặc đơn (ví dụ: (bool), (np.ndarray)).
Ví dụ này minh họa định dạng docstring tiêu chuẩn theo phong cách Google. Hãy chú ý cách mô tả hàm, tham số, giá trị trả về và ví dụ được tách riêng rõ ràng để dễ đọc nhất.
def example_function(arg1, arg2=4):
"""Example function demonstrating Google-style docstrings.
Args:
arg1 (int): The first argument.
arg2 (int): The second argument.
Returns:
(bool): True if arguments are equal, False otherwise.
Examples:
>>> example_function(4, 4) # True
>>> example_function(1, 2) # False
"""
return arg1 == arg2Kiểm thử CI bằng GitHub Actions#
Tất cả pull request phải vượt qua các bài kiểm thử Tích hợp liên tục (CI) chạy bằng GitHub Actions trước khi được merge. Các bài kiểm thử này bao gồm lint, unit test và những bước kiểm tra khác để đảm bảo thay đổi đáp ứng tiêu chuẩn chất lượng của dự án. Hãy xem kết quả CI và xử lý mọi vấn đề phát sinh.
Phương pháp tốt nhất khi đóng góp code#
Khi đóng góp code cho các dự án Ultralytics, hãy ghi nhớ các phương pháp tốt nhất sau:
- Tránh trùng lặp code: Tái sử dụng code hiện có bất cứ khi nào có thể và giảm thiểu các tham số không cần thiết.
- Thực hiện thay đổi nhỏ, tập trung: Ưu tiên các chỉnh sửa có mục tiêu thay vì thay đổi trên quy mô lớn.
- Đơn giản hóa khi có thể: Tìm cơ hội đơn giản hóa code hoặc loại bỏ các phần không cần thiết.
- Cân nhắc khả năng tương thích: Trước khi thay đổi, hãy cân nhắc liệu chúng có thể làm hỏng code hiện có đang sử dụng Ultralytics hay không.
- Định dạng nhất quán: Các công cụ như Ruff Formatter có thể giúp duy trì sự nhất quán về phong cách.
- Bổ sung bài kiểm thử phù hợp: Thêm bài kiểm thử cho các tính năng mới để đảm bảo chúng hoạt động như mong đợi.
Review Pull Request#
Review pull request là một cách đóng góp hữu ích khác. Khi review PR:
- Kiểm tra unit test: Xác minh PR có bài kiểm thử cho các tính năng hoặc thay đổi mới.
- Review các cập nhật tài liệu: Đảm bảo tài liệu được cập nhật để phản ánh các thay đổi.
- Đánh giá tác động đến hiệu năng: Cân nhắc các thay đổi có thể ảnh hưởng như thế nào đến hiệu năng.
- Xác minh các bài kiểm thử CI: Xác nhận tất cả bài kiểm thử Tích hợp liên tục đều thành công.
- Đưa ra phản hồi mang tính xây dựng: Nêu phản hồi cụ thể, rõ ràng về mọi vấn đề hoặc mối quan ngại.
- Ghi nhận nỗ lực: Ghi nhận công sức của tác giả để duy trì bầu không khí hợp tác tích cực.
Báo cáo lỗi#
Chúng tôi rất coi trọng các báo cáo lỗi vì chúng giúp cải thiện chất lượng và độ tin cậy của dự án. Khi báo cáo lỗi qua GitHub Issues:
- Kiểm tra các issue hiện có: Trước tiên, hãy tìm kiếm để xem lỗi đã được báo cáo chưa.
- Cung cấp Ví dụ tối thiểu có thể tái hiện: Tạo một đoạn mã nhỏ, độc lập có thể tái hiện lỗi một cách ổn định. Đây là điều thiết yếu để gỡ lỗi hiệu quả.
- Mô tả môi trường: Nêu hệ điều hành, phiên bản Python, phiên bản các thư viện liên quan (ví dụ:
torch,ultralytics) và phần cứng (CPU/GPU)。 - Giải thích hành vi mong đợi và thực tế: Nêu rõ điều bạn mong đợi sẽ xảy ra và điều thực sự đã xảy ra. Đính kèm mọi thông báo lỗi hoặc traceback.
Giấy phép#
Ultralytics sử dụng Giấy phép Công cộng GNU Affero phiên bản 3.0 (AGPL-3.0) cho các repository của mình. Giấy phép này thúc đẩy tính cởi mở, tính minh bạch và cải tiến hợp tác trong quá trình phát triển phần mềm. Giấy phép bảo đảm mọi người dùng đều có quyền sử dụng, sửa đổi và chia sẻ phần mềm, qua đó thúc đẩy một cộng đồng hợp tác và đổi mới vững mạnh.
Chúng tôi khuyến khích tất cả cộng tác viên tìm hiểu kỹ các điều khoản của giấy phép AGPL-3.0 để đóng góp hiệu quả và có trách nhiệm cho cộng đồng mã nguồn mở Ultralytics.
Phát hành dự án YOLO dưới dạng mã nguồn mở theo AGPL-3.0#
Bạn đang sử dụng model hoặc mã nguồn Ultralytics YOLO trong dự án của mình? Giấy phép AGPL-3.0 yêu cầu toàn bộ tác phẩm phái sinh của bạn cũng phải được phát hành dưới dạng mã nguồn mở theo AGPL-3.0. Điều này bảo đảm các sửa đổi và dự án lớn hơn được xây dựng trên nền tảng mã nguồn mở tiếp tục được duy trì ở dạng mở.
Vì sao việc tuân thủ AGPL-3.0 quan trọng#
- Giữ phần mềm ở dạng mở: Bảo đảm các cải tiến và tác phẩm phái sinh mang lại lợi ích cho cộng đồng.
- Yêu cầu pháp lý: Việc sử dụng mã nguồn được cấp phép theo AGPL-3.0 khiến dự án của bạn phải tuân theo các điều khoản của giấy phép.
- Thúc đẩy hợp tác: Khuyến khích chia sẻ và minh bạch.
Nếu không muốn phát hành dự án dưới dạng mã nguồn mở, hãy cân nhắc mua Giấy phép Enterprise.
Cách tuân thủ AGPL-3.0#
Tuân thủ nghĩa là công khai toàn bộ mã nguồn tương ứng của dự án theo giấy phép AGPL-3.0.
-
Chọn điểm khởi đầu:
- Fork Ultralytics YOLO: Fork trực tiếp repository Ultralytics YOLO nếu bạn đang xây dựng dựa sát trên repository này.
- Sử dụng template Ultralytics: Bắt đầu với repository template Ultralytics để có cấu trúc gọn gàng, mô-đun và tích hợp YOLO.
-
Cấp phép cho dự án:
- Thêm tệp
LICENSEchứa toàn văn giấy phép AGPL-3.0. - Thêm thông báo về giấy phép ở đầu mỗi tệp mã nguồn.
- Thêm tệp
-
Phát hành mã nguồn:
- Công khai toàn bộ mã nguồn dự án (ví dụ: trên GitHub). Nội dung này bao gồm:
- Ứng dụng hoặc hệ thống lớn hoàn chỉnh tích hợp model hoặc mã nguồn YOLO.
- Mọi sửa đổi đối với mã nguồn Ultralytics YOLO ban đầu.
- Các script huấn luyện, xác thực và suy luận.
- Trọng số model nếu đã được sửa đổi hoặc fine-tune.
- Tệp cấu hình, cấu hình môi trường (
requirements.txt,Dockerfiles). - Mã nguồn backend và frontend nếu thuộc một ứng dụng web.
- Mọi thư viện bên thứ ba mà bạn đã sửa đổi.
- Dữ liệu huấn luyện nếu cần để chạy/huấn luyện lại và được phép phân phối lại.
- Công khai toàn bộ mã nguồn dự án (ví dụ: trên GitHub). Nội dung này bao gồm:
-
Tài liệu rõ ràng:
- Cập nhật
README.mdđể nêu rõ dự án được cấp phép theo AGPL-3.0. - Cung cấp hướng dẫn rõ ràng về cách thiết lập, build và chạy dự án từ mã nguồn.
- Ghi công Ultralytics YOLO phù hợp và dẫn liên kết đến repository gốc. Ví dụ:
This project utilizes code from [Ultralytics YOLO](https://github.com/ultralytics/ultralytics), licensed under AGPL-3.0.
- Cập nhật
Cấu trúc repository mẫu#
Tham khảo Repository Template Ultralytics để xem một cấu trúc mẫu thực tế:
my-yolo-project/
│
├── LICENSE # Full AGPL-3.0 license text
├── README.md # Project description, setup, usage, license info & attribution
├── pyproject.toml # Dependencies (or requirements.txt)
├── scripts/ # Training/inference scripts
│ └── train.py
├── src/ # Your project's source code
│ ├── __init__.py
│ ├── data_loader.py
│ └── model_wrapper.py # Code interacting with YOLO
├── tests/ # Unit/integration tests
├── configs/ # YAML/JSON config files
├── docker/ # Dockerfiles, if used
│ └── Dockerfile
└── .github/ # GitHub specific files (e.g., workflows for CI)
└── workflows/
└── ci.ymlBằng cách tuân theo các hướng dẫn này, bạn bảo đảm tuân thủ AGPL-3.0 và hỗ trợ hệ sinh thái mã nguồn mở giúp tạo nên những công cụ mạnh mẽ như Ultralytics YOLO.
Kết luận#
Cảm ơn bạn đã quan tâm đóng góp cho các dự án YOLO Ultralytics mã nguồn mở. Sự tham gia của bạn đóng vai trò thiết yếu trong việc định hình tương lai phần mềm và xây dựng một cộng đồng đổi mới, hợp tác sôi nổi. Dù bạn cải tiến mã nguồn, báo cáo lỗi hay đề xuất tính năng mới, mọi đóng góp của bạn đều vô cùng quý giá.
Chúng tôi rất mong được thấy các ý tưởng của bạn thành hiện thực và trân trọng cam kết của bạn trong việc thúc đẩy công nghệ phát hiện đối tượng. Hãy cùng tiếp tục phát triển và đổi mới trong hành trình mã nguồn mở đầy hứng khởi này.
Câu hỏi thường gặp#
Đóng góp cho các repository YOLO mã nguồn mở của Ultralytics giúp cải thiện phần mềm, khiến phần mềm mạnh mẽ và giàu tính năng hơn cho toàn cộng đồng. Đóng góp có thể bao gồm cải tiến mã nguồn, sửa lỗi, cải thiện tài liệu và triển khai tính năng mới. Ngoài ra, việc đóng góp cho phép bạn cộng tác với các nhà phát triển và chuyên gia giàu kinh nghiệm trong lĩnh vực, qua đó nâng cao kỹ năng và uy tín của chính bạn. Để biết cách bắt đầu, hãy tham khảo phần Đóng góp thông qua Pull Request.
Để ký Thỏa thuận Cấp phép Cộng tác viên (CLA), hãy làm theo hướng dẫn do bot CLA cung cấp sau khi gửi pull request. Quy trình này bảo đảm các đóng góp của bạn được cấp phép đúng theo AGPL-3.0, duy trì tính toàn vẹn pháp lý của dự án mã nguồn mở. Thêm bình luận sau vào pull request của bạn:
I have read the CLA Document and I sign the CLAĐể biết thêm thông tin, hãy xem phần Ký CLA.
Docstring theo phong cách Google cung cấp tài liệu rõ ràng, súc tích cho các hàm và class, giúp mã nguồn dễ đọc và dễ bảo trì hơn. Các docstring này mô tả mục đích, đối số và giá trị trả về của hàm theo quy tắc định dạng cụ thể. Khi đóng góp cho Ultralytics YOLO, việc tuân theo phong cách docstring của Google giúp phần bổ sung được tài liệu hóa đầy đủ và dễ hiểu. Để xem ví dụ và hướng dẫn, hãy truy cập phần Docstring theo phong cách Google.
Trước khi pull request của bạn được merge, pull request phải vượt qua tất cả bài kiểm tra Tích hợp liên tục (CI) của GitHub Actions. Các bài kiểm tra này bao gồm lint, unit test và những bước kiểm tra khác nhằm bảo đảm mã nguồn đáp ứng tiêu chuẩn chất lượng của dự án. Xem kết quả CI và khắc phục mọi vấn đề. Để biết thông tin chi tiết về quy trình CI và mẹo khắc phục sự cố, hãy xem phần Bài kiểm tra CI của GitHub Actions.
Để báo cáo lỗi, hãy gửi kèm Ví dụ tối thiểu có thể tái hiện rõ ràng và súc tích trong báo cáo lỗi. Điều này giúp nhà phát triển nhanh chóng xác định và khắc phục vấn đề. Hãy bảo đảm ví dụ ngắn gọn nhưng vẫn đủ để tái hiện lỗi. Để biết hướng dẫn chi tiết hơn về cách báo cáo lỗi, hãy tham khảo phần Báo cáo lỗi.
Nếu sử dụng mã nguồn hoặc model Ultralytics YOLO (được cấp phép theo AGPL-3.0) trong dự án, giấy phép AGPL-3.0 yêu cầu toàn bộ dự án của bạn (tác phẩm phái sinh) cũng phải được cấp phép theo AGPL-3.0 và toàn bộ mã nguồn phải được công khai. Điều này bảo đảm tính chất mã nguồn mở của phần mềm được duy trì trong mọi sản phẩm phái sinh. Nếu không thể đáp ứng các yêu cầu này, bạn cần mua Giấy phép Enterprise. Xem phần Phát hành dự án dưới dạng mã nguồn mở để biết chi tiết.
