Ultralytics Açık Kaynak Projelerine Katkıda Bulunma
Hoş geldiniz! Ultralytics açık kaynaklı projelerimize katkıda bulunmayı düşündüğünüz için çok heyecanlıyız. Katılımınız yalnızca depolarımızın kalitesini artırmaya yardımcı olmakla kalmaz, aynı zamanda tüm bilgisayar görüşü topluluğuna da fayda sağlar. Bu kılavuz, başlamanıza yardımcı olacak açık yönergeler ve en iyi uygulamalar sunar.
İzle: Ultralytics Deposu'na Katkıda Bulunma | Ultralytics Modelleri, Veri Kümeleri ve Dokümantasyonu 🚀
🤝 Davranış Kuralları
Herkes için davetkar ve kapsayıcı bir ortam sağlamak için, tüm katkıda bulunanlar Davranış Kurallarımıza uymalıdır. Saygı, nezaket ve profesyonellik topluluğumuzun özünde yer alır.
🚀 Çekme İstekleri Yoluyla Katkıda Bulunma
Çekme istekleri (PR'ler) şeklinde katkıları büyük ölçüde takdir ediyoruz. İnceleme sürecini olabildiğince sorunsuz hale getirmek için lütfen şu adımları izleyin:
- Depoyu çatallayın: İlgili Ultralytics deposunu (örneğin, ultralytics/ultralytics) GitHub hesabınıza çatallayarak başlayın.
- Bir dal oluşturun: Çatalını oluşturduğunuz depoda, değişikliklerinizi yansıtan açık ve açıklayıcı bir ada sahip yeni bir dal oluşturun (örneğin,
fix-issue-123
,add-feature-xyz
). - Değişikliklerinizi yapın: İyileştirmelerinizi veya düzeltmelerinizi uygulayın. Kodunuzun projenin stil yönergelerine uyduğundan ve yeni hatalar veya uyarılar getirmediğinden emin olun.
- Değişikliklerinizi test edin: Göndermeden önce, değişikliklerinizin beklendiği gibi çalıştığını ve gerilemelere neden olmadığını doğrulamak için yerel olarak test edin. Yeni işlevler ekliyorsanız testler ekleyin.
- Değişikliklerinizi işleyin: Değişikliklerinizi özlü ve açıklayıcı commit mesajlarıyla commit edin. Değişiklikleriniz belirli bir sorunu ele alıyorsa, sorun numarasını ekleyin (örneğin,
Fix #123: Corrected calculation error.
). - Çekme isteği oluştur: Şubenizden bir çekme isteği gönderin:
main
orijinal Ultralytics deposunun bir dalı. Değişikliklerinizin amacını ve kapsamını açıklayan net bir başlık ve ayrıntılı bir açıklama sağlayın.
📝 CLA İmzası
Çekme isteğinizi birleştirebilmemiz için, Katkıda Bulunan Lisans Sözleşmemizi (CLA) imzalamanız gerekir. Bu yasal sözleşme, katkılarınızın uygun şekilde lisanslanmasını sağlayarak projenin AGPL-3.0 lisansı altında dağıtılmaya devam etmesini sağlar.
Çekme isteğinizi gönderdikten sonra, CLA botu imzalama sürecinde size yol gösterecektir. CLA'yı imzalamak için PR'nize şu ifadeyi içeren bir yorum eklemeniz yeterlidir:
I have read the CLA Document and I sign the CLA
✍️ Google-Stili Docstring'ler
Yeni fonksiyonlar veya sınıflar eklerken şunları dahil edin: Google stilinde docstring'ler açık, standartlaştırılmış belgeler için. Her zaman hem girdi hem de çıktıyı çevreleyin types
parantez içinde (örn. (bool)
, (np.ndarray)
).
Örnek Belge Dizeleri
Bu örnek, standart Google stili doküman dizesi biçimini gösterir. Maksimum okunabilirlik için işlev açıklaması, bağımsız değişkenler, dönüş değeri ve örneklerin nasıl açıkça ayrıldığına dikkat edin.
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 == arg2
Bu örnek, adlandırılmış dönüş değişkenlerinin nasıl belgeleneceğini gösterir. Adlandırılmış dönüşler kullanmak, özellikle karmaşık işlevler için kodunuzu daha anlaşılır ve anlaşılması daha kolay hale getirebilir.
def example_function(arg1, arg2=4):
"""
Example function demonstrating Google-style docstrings.
Args:
arg1 (int): The first argument.
arg2 (int): The second argument.
Returns:
equals (bool): True if arguments are equal, False otherwise.
Examples:
>>> example_function(4, 4) # True
"""
equals = arg1 == arg2
return equals
Bu örnek, birden çok değer döndüren işlevlerin nasıl belgeleneceğini gösterir. Her dönüş değeri, netlik için kendi türü ve açıklamasıyla ayrı ayrı belgelenmelidir.
def example_function(arg1, arg2=4):
"""
Example function demonstrating Google-style docstrings.
Args:
arg1 (int): The first argument.
arg2 (int): The second argument.
Returns:
equals (bool): True if arguments are equal, False otherwise.
added (int): Sum of both input arguments.
Examples:
>>> equals, added = example_function(2, 2) # True, 4
"""
equals = arg1 == arg2
added = arg1 + arg2
return equals, added
Not: Python birden çok değeri demet olarak döndürmesine rağmen (örneğin, return masks, scores
), her değeri netlik ve daha iyi araç entegrasyonu için her zaman ayrı ayrı belgeleyin. Birden çok değer döndüren fonksiyonları belgelendirirken:
✅ İyi - Her dönüş değerini ayrı ayrı belgeleyin:
Returns:
(np.ndarray): Predicted masks with shape HxWxN.
(list): Confidence scores for each instance.
❌ Kötü - İç içe öğelerle bir demet olarak belgelemeyin:
Returns:
(tuple): Tuple containing:
- (np.ndarray): Predicted masks with shape HxWxN.
- (list): Confidence scores for each instance.
Bu örnek, Google stili doküman dizelerini python tür ipuçlarıyla birleştirir. Tür ipuçlarını kullanırken, işlev imzasında zaten belirtildiği için doküman dizesi bağımsız değişkenleri bölümündeki tür bilgilerini atlayabilirsiniz.
def example_function(arg1: int, arg2: int = 4) -> bool:
"""
Example function demonstrating Google-style docstrings.
Args:
arg1: The first argument.
arg2: The second argument.
Returns:
True if arguments are equal, False otherwise.
Examples:
>>> example_function(1, 1) # True
"""
return arg1 == arg2
Daha küçük veya daha basit işlevler için, tek satırlık bir belge dizisi yeterli olabilir. Bunlar, büyük harfle başlayan ve nokta ile biten özlü ancak eksiksiz cümleler olmalıdır.
def example_small_function(arg1: int, arg2: int = 4) -> bool:
"""Example function with a single-line docstring."""
return arg1 == arg2
✅ GitHub Actions CI Testleri
Tüm çekme istekleri birleştirilmeden önce GitHub Actions Sürekli Entegrasyon (CI) testlerini geçmelidir. Bu testler, değişikliklerinizin projenin kalite standartlarını karşıladığından emin olmak için linting, birim testleri ve diğer kontrolleri içerir. CI çıktısını inceleyin ve ortaya çıkan sorunları giderin.
✨ Kod Katkıları için En İyi Uygulamalar
Ultralytics projelerine kod katkısında bulunurken, bu en iyi uygulamaları aklınızda bulundurun:
- Kod tekrarından kaçının: Mümkün olduğunca mevcut kodu yeniden kullanın ve gereksiz argümanları en aza indirin.
- Daha küçük, odaklı değişiklikler yapın: Büyük ölçekli değişikliklerden ziyade hedeflenen değişikliklere odaklanın.
- Mümkün olduğunca basitleştirin: Kodu basitleştirmek veya gereksiz kısımları kaldırmak için fırsatlar arayın.
- Uyumluluğu göz önünde bulundurun: Değişiklik yapmadan önce, Ultralytics kullanan mevcut kodu bozup bozmayacağını düşünün.
- Tutarlı biçimlendirme kullanın: Ruff Formatter gibi araçlar, stilistik tutarlılığı korumanıza yardımcı olabilir.
- Uygun testler ekleyin: Yeni özelliklerin beklendiği gibi çalıştığından emin olmak için testler ekleyin.
👀 Çekme İsteklerini İnceleme
Çekme isteklerini incelemek, katkıda bulunmanın bir başka değerli yoludur. Çekme isteklerini incelerken:
- Birim testlerini kontrol edin: PR'ın yeni özellikler veya değişiklikler için testler içerdiğini doğrulayın.
- Belge güncellemelerini inceleyin: Değişiklikleri yansıtmak için belgelerin güncellendiğinden emin olun.
- Performans etkisini değerlendirin: Değişikliklerin performansı nasıl etkileyebileceğini göz önünde bulundurun.
- CI testlerini doğrulayın: Tüm Sürekli Entegrasyon testlerinin geçtiğini doğrulayın.
- Yapıcı geri bildirim sağlayın: Herhangi bir sorun veya endişe hakkında belirli ve net geri bildirimler sunun.
- Çabayı Takdir Edin: Olumlu bir işbirliği ortamı sürdürmek için yazarın çalışmasını takdir edin.
🐞 Hata Bildirme
Hata raporlarını, projelerimizin kalitesini ve güvenilirliğini artırmamıza yardımcı oldukları için çok değerli buluyoruz. GitHub Sorunları aracılığıyla bir hata bildirirken:
- Mevcut sorunları kontrol edin: Hatanın zaten bildirilip bildirilmediğini görmek için önce arama yapın.
- Minimum Yeniden Üretilebilir Örnek Sağlayın: Sorunu sürekli olarak yeniden üreten küçük, bağımsız bir kod parçacığı oluşturun. Bu, verimli hata ayıklama için çok önemlidir.
- Ortamı tanımlayın: İşletim sisteminizi, Python sürümünüzü, ilgili kütüphane sürümlerinizi (örn.
torch
,ultralytics
) ve donanım (CPU/GPU). - Beklenen ve gerçekleşen davranışı açıklayın: Ne olmasını beklediğinizi ve gerçekte ne olduğunu açıkça belirtin. Herhangi bir hata mesajı veya geri izleme ekleyin.
📜 Lisans
Ultralytics, depoları için GNU Affero Genel Kamu Lisansı v3.0 (AGPL-3.0)'ı kullanır. Bu lisans, yazılım geliştirmede açıklığı, şeffaflığı ve işbirlikçi iyileştirmeyi teşvik eder. Tüm kullanıcıların yazılımı kullanma, değiştirme ve paylaşma özgürlüğüne sahip olmasını sağlayarak güçlü bir işbirliği ve inovasyon topluluğunu teşvik eder.
Tüm katkıda bulunanları, Ultralytics açık kaynak topluluğuna etkin ve etik bir şekilde katkıda bulunmak için AGPL-3.0 lisansının şartlarını öğrenmeye teşvik ediyoruz.
🌍 YOLO Projenizi AGPL-3.0 Lisansı Altında Açık Kaynak Yapmak
Projenizde Ultralytics YOLO modellerini veya kodunu mu kullanıyorsunuz? AGPL-3.0 lisansı, türetilmiş çalışmanızın tamamının da AGPL-3.0 altında açık kaynaklı olmasını gerektirir. Bu, açık kaynak temelleri üzerine inşa edilen değişikliklerin ve daha büyük projelerin açık kalmasını sağlar.
Neden AGPL-3.0 Uyumluluğu Önemlidir?
- Yazılımı Açık Tutma: İyileştirmelerin ve türev çalışmaların topluluğa fayda sağlamasını sağlar.
- Yasal Zorunluluk: AGPL-3.0 lisanslı kodu kullanmak, projenizi bu lisansın şartlarına bağlar.
- İşbirliğini Teşvik Eder: Paylaşımı ve şeffaflığı teşvik eder.
Projenizi açık kaynaklı hale getirmek istemiyorsanız, bir Kurumsal Lisans almayı düşünebilirsiniz.
AGPL-3.0 ile Nasıl Uyum Sağlanır
Uyum sağlamak, projenizin tam karşılık gelen kaynak kodunu AGPL-3.0 lisansı altında herkese açık hale getirmek anlamına gelir.
-
Başlangıç Noktanızı Seçin:
- Ultralytics YOLO'yu Fork Edin: Yakından üzerine inşa ediyorsanız, doğrudan Ultralytics YOLO deposunu fork edin.
- Ultralytics Şablonunu Kullanın: YOLO'yu entegre eden temiz, modüler bir kurulum için Ultralytics şablon deposu ile başlayın.
-
Projenizi Lisanslayın:
- Bir tane ekle
LICENSE
dosyasının tam metnini içeren AGPL-3.0 lisansı. - Her kaynak dosyanın en üstüne lisansı belirten bir not ekleyin.
- Bir tane ekle
-
Kaynak Kodunuzu Yayınlayın:
- Şunları yapın: projenin tüm kaynak kodu herkese açık bir şekilde erişilebilir (örneğin, GitHub'da). Buna şunlar dahildir:
- YOLO modelini veya kodunu içeren daha büyük uygulamanın veya sistemin tamamı.
- Orijinal Ultralytics YOLO kodunda yapılan herhangi bir değişiklik.
- Eğitim, doğrulama, çıkarım için komut dosyaları.
- Değiştirilmiş veya ince ayar yapılmışsa Model ağırlıkları.
- Yapılandırma dosyaları, ortam kurulumları (
requirements.txt
,Dockerfiles
). - Web uygulamasının bir parçasıysa arka uç ve ön uç kodu.
- Değiştirdiğiniz herhangi bir üçüncü taraf kütüphane.
- Eğitim verileri, eğer ve yeniden dağıtılabilir ise çalıştırmak/yeniden eğitmek için gereklidir.
- Şunları yapın: projenin tüm kaynak kodu herkese açık bir şekilde erişilebilir (örneğin, GitHub'da). Buna şunlar dahildir:
-
Açıkça Belgeleyin:
- Şunu güncelle:
README.md
projenin AGPL-3.0 altında lisanslandığını belirtmek için. - Projenizi kaynak kodundan nasıl kuracağınız, oluşturacağınız ve çalıştıracağınız hakkında net talimatlar ekleyin.
- Ultralytics YOLO'ya uygun şekilde atıfta bulunun, geri bağlantı vererek orijinal depo. Örnek:
This project utilizes code from [Ultralytics YOLO](https://github.com/ultralytics/ultralytics), licensed under AGPL-3.0.
- Şunu güncelle:
Örnek Depo Yapısı
Pratik bir örnek yapı için Ultralytics Şablon Deposuna bakın:
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.yml
Bu yönergeleri izleyerek, Ultralytics YOLO gibi güçlü araçları mümkün kılan açık kaynak ekosistemini destekleyerek AGPL-3.0 ile uyumluluğu sağlarsınız.
🎉 Sonuç
Ultralytics açık kaynaklı YOLO projelerine katkıda bulunduğunuz için teşekkür ederiz. Katılımınız, yazılımımızın geleceğini şekillendirmede ve canlı bir inovasyon ve işbirliği topluluğu oluşturmada çok önemlidir. İster kodu geliştiriyor, ister hataları bildiriyor, ister yeni özellikler öneriyor olun, katkılarınız çok değerlidir.
Fikirlerinizin hayata geçtiğini görmek ve nesne algılama teknolojisini geliştirme konusundaki kararlılığınızı takdir ediyoruz. Birlikte, bu heyecan verici açık kaynak yolculuğunda büyümeye ve yenilik yapmaya devam edelim. Mutlu kodlamalar! 🚀🌟
SSS
Neden Ultralytics YOLO açık kaynaklı depolara katkıda bulunmalıyım?
Ultralytics YOLO açık kaynaklı depolara katkıda bulunmak, yazılımı geliştirerek tüm topluluk için daha sağlam ve özellik açısından zengin hale getirir. Katkılar, kod geliştirmeleri, hata düzeltmeleri, dokümantasyon iyileştirmeleri ve yeni özellik uygulamalarını içerebilir. Ek olarak, katkıda bulunmak, alanında yetenekli diğer geliştiriciler ve uzmanlarla işbirliği yapmanıza olanak tanıyarak kendi becerilerinizi ve itibarınızı artırır. Nasıl başlayacağınızla ilgili ayrıntılar için Çekme İstekleri Yoluyla Katkıda Bulunma bölümüne bakın.
Ultralytics YOLO için Katkıda Bulunma Lisans Sözleşmesi'ni (CLA) nasıl imzalarım?
Katkıda Bulunan Lisans Sözleşmesi'ni (CLA) imzalamak için, çekme isteğinizi gönderdikten sonra CLA botu tarafından sağlanan talimatları izleyin. Bu işlem, katkılarınızın AGPL-3.0 lisansı altında uygun şekilde lisanslanmasını sağlayarak açık kaynak projesinin yasal bütünlüğünü korur. Çekme isteğinize şu yorumu ekleyin:
I have read the CLA Document and I sign the CLA
Daha fazla bilgi için CLA İmzalama bölümüne bakın.
Google tarzı doküman dizeleri nelerdir ve Ultralytics YOLO katkıları için neden gereklidir?
Google tarzı belge dizeleri, fonksiyonlar ve sınıflar için açık ve özlü dokümantasyon sağlayarak kodun okunabilirliğini ve sürdürülebilirliğini artırır. Bu belge dizeleri, fonksiyonun amacını, argümanlarını ve dönüş değerlerini belirli biçimlendirme kurallarıyla özetler. Ultralytics YOLO'ya katkıda bulunurken, Google tarzı belge dizelerini takip etmek, eklemelerinizin iyi belgelenmesini ve kolayca anlaşılmasını sağlar. Örnekler ve yönergeler için Google-Style Docstrings bölümünü ziyaret edin.
Değişikliklerimin GitHub Actions CI testlerini geçtiğinden nasıl emin olabilirim?
Çekme isteğinizin birleştirilebilmesi için, tüm GitHub Actions Sürekli Entegrasyon (CI) testlerini geçmesi gerekir. Bu testler, kodun projenin kalite standartlarını karşıladığından emin olmak için linting, birim testleri ve diğer kontrolleri içerir. CI çıktısını inceleyin ve sorunları giderin. CI süreci ve sorun giderme ipuçları hakkında ayrıntılı bilgi için GitHub Actions CI Testleri bölümüne bakın.
Ultralytics YOLO depolarında bir hatayı nasıl rapor ederim?
Bir hatayı bildirmek için, hata raporunuzla birlikte açık ve özlü bir Minimum Yeniden Üretilebilir Örnek sağlayın. Bu, geliştiricilerin sorunu hızlı bir şekilde tanımlamasına ve düzeltmesine yardımcı olur. Örneğinizin, sorunu yeniden oluşturmak için minimal ancak yeterli olduğundan emin olun. Hataları bildirme hakkında daha ayrıntılı adımlar için Hata Bildirme bölümüne bakın.
Ultralytics YOLO'yu kendi projemde kullanırsam AGPL-3.0 lisansı ne anlama gelir?
Projenizde Ultralytics YOLO kodunu veya modellerini (AGPL-3.0 lisansı altında) kullanıyorsanız, AGPL-3.0 lisansı, tüm projenizin (türetilmiş çalışma) de AGPL-3.0 altında lisanslanmasını ve kaynak kodunun tamamının kamuya açık hale getirilmesini gerektirir. Bu, yazılımın açık kaynaklı yapısının türevleri boyunca korunmasını sağlar. Bu gereksinimleri karşılayamıyorsanız, bir Kurumsal Lisans almanız gerekir. Ayrıntılar için Projenizi Açık Kaynak Yapma bölümüne bakın.