Yaygın YOLO Sorunlarını Giderme

YOLO common training and deployment issues

Giriş

Bu rehber, Ultralytics projelerinde YOLO26 ile çalışırken karşılaşılan yaygın sorunları gidermede kapsamlı bir yardımcı görevi görür. Doğru rehberlikle bu sorunların üstesinden gelmek çocuk oyuncağıdır; böylece projelerin gereksiz gecikmeler olmadan yolunda ilerlemesini sağlayabilirsin.



Watch: Ultralytics YOLO26 Common Issues | Installation Errors, Model Training Issues

Yaygın Sorunlar

Kurulum Hataları

Kurulum hataları; uyumsuz sürümler, eksik bağımlılıklar veya yanlış ortam yapılandırmaları gibi çeşitli nedenlerden dolayı ortaya çıkabilir. Öncelikle, aşağıdakileri yaptığından emin ol:

  • Önerildiği gibi Python 3.8 veya daha yeni bir sürümünü kullanıyorsun.
  • Doğru PyTorch sürümünün (1.8 veya sonrası) yüklü olduğundan emin ol.
  • Çakışmaları önlemek için sanal ortamlar kullanmayı düşün.
  • Resmi kurulum rehberini adım adım takip et.

Ayrıca, kullanıcıların karşılaştığı bazı yaygın kurulum sorunları ve bunların ilgili çözümleri aşağıdadır:

  • İçe Aktarma Hataları veya Bağımlılık Sorunları - YOLO26'yı içe aktarırken hatalar alıyorsan veya bağımlılıklarla ilgili sorunlar yaşıyorsan, şu sorun giderme adımlarını göz önünde bulundur:

    • Temiz Kurulum: Bazen temiz bir kurulumla başlamak beklenmedik sorunları çözebilir. Özellikle güncellemelerin dosya ağacı yapısında veya işlevlerde değişiklikler getirebildiği Ultralytics gibi kütüphanelerde bu önemlidir.

    • Düzenli Güncelleme: Kütüphanenin en son sürümünü kullandığından emin ol. Eski sürümler yakın zamandaki güncellemelerle uyumlu olmayabilir, bu da potansiyel çakışmalara veya sorunlara yol açabilir.

    • Bağımlılıkları Kontrol Et: Gerekli tüm bağımlılıkların doğru bir şekilde yüklendiğini ve uyumlu sürümlere sahip olduğunu doğrula.

    • Değişiklikleri İncele: Eğer başlangıçta daha eski bir sürümü kopyaladıysan veya yüklediysen, önemli güncellemelerin kütüphane yapısını veya işlevlerini etkileyebileceğini unutma. Büyük değişiklikleri anlamak için her zaman resmi belgelere veya değişiklik günlüklerine başvur.

    • Kütüphanelerini ve bağımlılıklarını güncel tutmanın sorunsuz ve hatasız bir deneyim için çok önemli olduğunu unutma.

  • YOLO26'yı GPU'da Çalıştırma - YOLO26'yı GPU'da çalıştırmakta sorun yaşıyorsan, şu sorun giderme adımlarını değerlendir:

    • CUDA Uyumluluğunu ve Kurulumunu Doğrula: GPU'nun CUDA ile uyumlu olduğundan ve CUDA'nın doğru kurulduğundan emin ol. NVIDIA GPU'nun durumunu ve CUDA sürümünü kontrol etmek için nvidia-smi komutunu kullan.

    • PyTorch ve CUDA Entegrasyonunu Kontrol Et: Bir Python terminalinde import torch; print(torch.cuda.is_available()) komutunu çalıştırarak PyTorch'un CUDA'yı kullanabildiğinden emin ol. Eğer 'True' dönerse, PyTorch CUDA'yı kullanacak şekilde ayarlanmış demektir.

    • GPU uyumluluğunu kontrol et: Turing'den önceki GPU mimarileri ve 7.5'ten küçük işlem yeteneği (SM) desteği, cuDNN 9.11.0 sürümünden beri kaldırılmıştır. Bu yüzden 1080Ti gibi eski bir GPU'n varsa, daha eski bir CUDA/cuDNN sürümüyle oluşturulmuş bir PyTorch sürümü kullanman gerekebilir. Bunu şu komutu çalıştırarak kontrol edebilirsin: import torch; cap = torch.cuda.get_device_capability(0) if torch.cuda.is_available() else (0, 0); cudnn = torch.backends.cudnn.version() or 0; ok = "not compatible" if cudnn >= 91100 and (cap[0] < 7 or (cap[0] == 7 and cap[1] < 5)) else "should be ok"; print(f"Compute capability: SM {cap[0]}.{cap[1]}, cuDNN: {cudnn} => {ok}")

    • Ortam Etkinleştirme: Gerekli tüm paketlerin yüklü olduğu doğru ortamda olduğundan emin ol.

    • Paketlerini Güncelle: Güncel olmayan paketler GPU'n ile uyumlu olmayabilir. Onları güncel tut.

    • Program Yapılandırması: Programın veya kodun GPU kullanımını belirtip belirtmediğini kontrol et. YOLO26'da bu, ayarlarda veya yapılandırmada olabilir.

Model Eğitimi Sorunları

Bu bölüm, eğitim sırasında karşılaşılan yaygın sorunları ve bunların açıklamalarını ve çözümlerini ele alacaktır.

Yapılandırma Ayarlarının Doğrulanması

Issue: You are unsure whether the configuration settings in the .yaml file are being applied correctly during model training.

Solution: The configuration settings in the .yaml file should be applied when using the model.train() function. To ensure that these settings are correctly applied, follow these steps:

  • Confirm that the path to your .yaml configuration file is correct.

  • Make sure you pass the path to your .yaml file as the data argument when calling model.train(), as shown below:

    model.train(data="/path/to/your/data.yaml", batch=4)

Eğitimi Çoklu GPU ile Hızlandırma

Sorun: Eğitim tek bir GPU üzerinde yavaş ve süreci çoklu GPU kullanarak hızlandırmak istiyorsun.

Çözüm: Batch size değerini artırmak eğitimi hızlandırabilir, ancak GPU bellek kapasitesini dikkate almak şarttır. Çoklu GPU ile eğitimi hızlandırmak için şu adımları izle:

  • Birden fazla GPU'nun mevcut olduğundan emin ol.

  • Modify your .yaml configuration file to specify the number of GPUs to use, e.g., gpus: 4.

  • Bellek sınırlarını aşmadan çoklu GPU'lardan tam olarak yararlanmak için batch size değerini uygun şekilde artır.

  • Eğitim komutunu çoklu GPU kullanacak şekilde değiştir:

    # Adjust the batch size and other settings as needed to optimize training speed
    model.train(data="/path/to/your/data.yaml", batch=32)

Sürekli İzleme Parametreleri

Sorun: Kayıp (loss) dışında, eğitim sırasında hangi parametrelerin sürekli izlenmesi gerektiğini bilmek istiyorsun.

Çözüm: Kayıp izlenmesi gereken kritik bir metrik olsa da, model performansı optimizasyonu için diğer metrikleri de takip etmek esastır. Eğitim sırasında izlenmesi gereken bazı temel metrikler şunlardır:

Bu metriklere eğitim günlüklerinden veya görselleştirme için TensorBoard veya wandb gibi araçları kullanarak erişebilirsin. Bu metriklere dayalı olarak erken durdurma (early stopping) uygulamak, daha iyi sonuçlar elde etmene yardımcı olabilir.

Eğitim İlerlemesini Takip Etme Araçları

Sorun: Eğitim ilerlemesini takip etmek için araç önerileri arıyorsun.

Çözüm: Eğitim ilerlemesini takip etmek ve görselleştirmek için şu araçları kullanmayı düşünebilirsin:

  • TensorBoard: TensorBoard, kayıp, doğruluk ve daha fazlası dahil olmak üzere eğitim metriklerini görselleştirmek için popüler bir seçimdir. Bunu YOLO26 eğitim sürecinle entegre edebilirsin.
  • Comet: Comet, deney takibi ve karşılaştırması için kapsamlı bir araç seti sağlar. Metrikleri, hiperparametreleri ve hatta model ağırlıklarını takip etmene olanak tanır. YOLO modelleriyle entegrasyonu da oldukça basittir ve deney döngünün tam bir genel görünümünü sunar.
  • Ultralytics Platform: Ultralytics Platform, YOLO modellerini takip etmek için özel bir ortam sunarak metrikleri, veri kümelerini yönetmen ve hatta ekibinle iş birliği yapman için tek duraklı bir platform sağlar. YOLO odaklı yapısıyla daha özelleştirilmiş takip seçenekleri sunar.

Bu araçların her birinin kendi avantajları vardır, bu yüzden bir seçim yaparken projenin özel ihtiyaçlarını göz önünde bulundurmak isteyebilirsin.

Eğitimin GPU üzerinde gerçekleşip gerçekleşmediği nasıl kontrol edilir?

Sorun: Eğitim günlüklerindeki 'device' değeri 'null' ve eğitimin GPU üzerinde gerçekleşip gerçekleşmediğinden emin değilsin.

Çözüm: 'device' değerinin 'null' olması, genellikle eğitim sürecinin varsayılan davranış olan mevcut bir GPU'yu otomatik olarak kullanacak şekilde ayarlandığı anlamına gelir. Eğitimin belirli bir GPU'da gerçekleştiğinden emin olmak için, .yaml yapılandırma dosyanızda 'device' değerini manuel olarak GPU indeksine (örneğin ilk GPU için '0') ayarlayabilirsin:

device: 0

Bu, eğitim sürecini açıkça belirtilen GPU'ya atayacaktır. Eğer CPU üzerinde eğitmek istersen, 'device' değerini 'cpu' olarak ayarla.

Eğitim ilerlemesini etkili bir şekilde izlemek için günlükler ve metrikler için 'runs' klasörünü takip et.

Etkili Model Eğitimi için Temel Hususlar

Model eğitimiyle ilgili sorunlar yaşıyorsan, aklında tutman gereken bazı şeyler şunlardır.

Veri Kümesi Formatı ve Etiketler

  • Önemi: Herhangi bir makine öğrenmesi modelinin temeli, eğitildiği verinin kalitesinde ve formatında yatar.
  • Öneri: Özel veri kümenin ve ilişkili etiketlerinin beklenen formata uygun olduğundan emin ol. Ek açıklamaların doğru ve yüksek kaliteli olduğunu doğrulamak çok önemlidir. Yanlış veya düşük kaliteli ek açıklamalar modelin öğrenme sürecini rayından çıkarabilir ve tahmin edilemez sonuçlara yol açabilir.

Model Yakınsaması

  • Önemi: Model yakınsamasına ulaşmak, modelin eğitim verilerinden yeterince öğrendiğinden emin olmanı sağlar.
  • Öneri: Bir modeli 'sıfırdan' eğitirken, modelin tatmin edici bir yakınsama düzeyine ulaştığından emin olmak hayati önem taşır. Bu, mevcut bir modelde ince ayar yapmaya kıyasla daha fazla epok ile daha uzun bir eğitim süresi gerektirebilir.

Öğrenme Oranı ve Batch Size

  • Önemi: Bu hiperparametreler, eğitim sırasında modelin ağırlıklarını nasıl güncelleyeceğini belirlemede çok önemli bir rol oynar.
  • Öneri: Seçilen öğrenme oranı ve batch size değerinin veri kümen için en uygun olup olmadığını düzenli olarak değerlendir. Veri kümesinin özellikleriyle uyumlu olmayan parametreler modelin performansını engelleyebilir.

Sınıf Dağılımı

  • Önemi: Veri kümindeki sınıfların dağılımı, modelin tahmin eğilimlerini etkileyebilir.
  • Öneri: Veri kümindeki sınıfların dağılımını düzenli olarak değerlendir. Bir sınıf dengesizliği varsa, modelin daha yaygın sınıfa karşı bir önyargı geliştirme riski vardır. Bu önyargı, modelin ağırlıklı olarak çoğunluk sınıfını tahmin edebileceği karmaşıklık matrisinde (confusion matrix) görülebilir.

Önceden Eğitilmiş Ağırlıklarla Çapraz Kontrol

  • Önemi: Önceden eğitilmiş ağırlıklardan yararlanmak, özellikle veri sınırlı olduğunda model eğitimi için sağlam bir başlangıç noktası sağlayabilir.
  • Öneri: Bir teşhis adımı olarak, modelini aynı verileri kullanarak ancak önceden eğitilmiş ağırlıklarla başlatmayı düşün. Bu yaklaşım iyi yapılandırılmış bir karmaşıklık matrisi verirse, bu 'sıfırdan' eğitilen modelin daha fazla eğitim veya ayarlamaya ihtiyaç duyabileceğini gösterebilir.

Model Tahminleriyle İlgili Sorunlar

Bu bölüm, model tahmini sırasında karşılaşılan yaygın sorunları ele alacaktır.

YOLO26 Özel Modelinle Sınırlayıcı Kutu Tahminleri Alma

Sorun: Özel bir YOLO26 modeliyle tahminler yaparken, sınırlayıcı kutu (bounding box) koordinatlarının formatı ve görselleştirilmesiyle ilgili zorluklar yaşanıyor.

Çözüm:

  • Koordinat Formatı: YOLO26, sınırlayıcı kutu koordinatlarını mutlak piksel değerleri olarak sağlar. Bunları göreceli koordinatlara (0 ile 1 arasında değişen) dönüştürmek için görüntü boyutlarına bölmen gerekir. Örneğin, görüntü boyutunun 640x640 olduğunu varsayalım. O zaman şunları yapmalısın:

    # Convert absolute coordinates to relative coordinates
    x1 = x1 / 640  # Divide x-coordinates by image width
    x2 = x2 / 640
    y1 = y1 / 640  # Divide y-coordinates by image height
    y2 = y2 / 640
  • Dosya Adı: Tahmin yaptığın görüntünün dosya adını elde etmek için, tahmin döngündeki sonuç nesnesinden doğrudan görüntü dosya yoluna eriş.

YOLO26 Tahminlerinde Nesneleri Filtreleme

Sorun: Ultralytics kütüphanesini kullanarak YOLO26 çalıştırırken tahmin sonuçlarında sadece belirli nesneleri nasıl filtreleyip görüntüleyeceğinle ilgili sorunlar yaşanıyor.

Çözüm: Belirli sınıfları tespit etmek için çıktıda dahil etmek istediğin sınıfları belirtmek üzere classes bağımsız değişkenini kullan. Örneğin, yalnızca arabaları tespit etmek için ('arabalar' sınıf indeksinin 2 olduğunu varsayarsak):

yolo task=detect mode=segment model=yolo26n-seg.pt source='path/to/car.mp4' show=True classes=2

YOLO26'da Kesinlik Metriklerini Anlama

Sorun: YOLO26'da kutu kesinliği (box precision), maske kesinliği (mask precision) ve karmaşıklık matrisi kesinliği arasındaki farkla ilgili kafa karışıklığı yaşanıyor.

Çözüm: Kutu kesinliği, IoU'yu (Intersection over Union) metrik olarak kullanarak tahmin edilen sınırlayıcı kutuların gerçek temel doğruluk kutularına kıyasla doğruluğunu ölçer. Maske kesinliği, piksel bazlı nesne sınıflandırmasında tahmin edilen segmentasyon maskeleri ile gerçek maskeler arasındaki uyumu değerlendirir. Öte yandan karmaşıklık matrisi kesinliği, tüm sınıflar genelinde genel sınıflandırma doğruluğuna odaklanır ve tahminlerin geometrik doğruluğunu dikkate almaz. Sınırlayıcı kutunun sınıf tahmini yanlış olsa bile geometrik olarak doğru (gerçek pozitif) olabileceğini ve bunun kutu kesinliği ile karmaşıklık matrisi kesinliği arasında farklılıklara yol açabileceğini belirtmek önemlidir. Bu metrikler, bir modelin performansının farklı yönlerini değerlendirir ve çeşitli görevlerde farklı değerlendirme metriklerine olan ihtiyacı yansıtır.

YOLO26'da Nesne Boyutlarını Çıkarma

Sorun: Özellikle bir görüntüde birden fazla nesne tespit edildiğinde, tespit edilen nesnelerin uzunluğunu ve yüksekliğini almada zorluk yaşanıyor.

Çözüm: Sınırlayıcı kutu boyutlarını almak için, önce bir görüntüdeki nesneleri tahmin etmek için Ultralytics YOLO26 modelini kullan. Ardından, tahmin sonuçlarından sınırlayıcı kutuların genişlik ve yükseklik bilgilerini çıkar.

from ultralytics import YOLO

# Load a pretrained YOLO26 model
model = YOLO("yolo26n.pt")

# Specify the source image
source = "https://ultralytics.com/images/bus.jpg"

# Make predictions
results = model.predict(source, save=True, imgsz=320, conf=0.25)

# Extract bounding box dimensions
boxes = results[0].boxes.xywh.cpu()
for box in boxes:
    x, y, w, h = box
    print(f"Width of Box: {w}, Height of Box: {h}")

Dağıtım Zorlukları

GPU Dağıtım Sorunları

Sorun: Modelleri çoklu GPU ortamında dağıtmak, bazen beklenmedik bellek kullanımı, GPU'lar arasında tutarsız sonuçlar vb. gibi beklenmedik davranışlara yol açabilir.

Çözüm: Varsayılan GPU başlatma durumunu kontrol et. PyTorch gibi bazı çerçeveler, belirlenen GPU'lara geçmeden önce varsayılan bir GPU üzerinde CUDA işlemlerini başlatabilir. Beklenmedik varsayılan başlatmaları atlamak için dağıtım ve tahmin sırasında GPU'yu doğrudan belirt. Ardından, anormallikleri gerçek zamanlı olarak belirlemek için GPU kullanımını ve bellek kullanımını izleyen araçlar kullan. Ayrıca, çerçevenin veya kütüphanenin en son sürümünü kullandığından emin ol.

Model Dönüştürme/Dışa Aktarma Sorunları

Sorun: Makine öğrenmesi modellerini farklı formatlara veya platformlara dönüştürme veya dışa aktarma sürecinde, hatalar veya beklenmedik davranışlarla karşılaşabilirsin.

Çözüm:

  • Uyumluluk Kontrolü: Birbiriyle uyumlu kütüphane ve çerçeve sürümleri kullandığından emin ol. Uyumsuz sürümler, dönüştürme sırasında beklenmedik hatalara yol açabilir.
  • Ortam Sıfırlama: Jupyter veya Colab gibi etkileşimli bir ortam kullanıyorsan, önemli değişiklikler veya kurulumlar yaptıktan sonra ortamını yeniden başlatmayı düşün. Temiz bir başlangıç bazen altta yatan sorunları çözebilir.
  • Resmi Belgeler: Dönüştürme için kullandığın aracın veya kütüphanenin resmi belgelerine her zaman başvur. Genellikle model dışa aktarma için özel yönergeler ve en iyi uygulamaları içerir.
  • Topluluk Desteği: Diğer kullanıcılar tarafından bildirilen benzer sorunlar için kütüphanenin veya çerçevenin resmi deposunu kontrol et. Bakımcılar veya topluluk, tartışma konularında çözümler veya geçici çözümler sağlamış olabilir.
  • Düzenli Güncelleme: Aracın veya kütüphanenin en son sürümünü kullandığından emin ol. Geliştiriciler, bilinen hataları düzelten veya işlevselliği geliştiren güncellemeleri sıklıkla yayınlarlar.
  • Artımlı Test Et: Tam bir dönüştürme gerçekleştirmeden önce, potansiyel sorunları erkenden belirlemek için süreci daha küçük bir model veya veri kümesiyle test et.

Topluluk ve Destek

Benzer düşüncelere sahip bir toplulukla etkileşim kurmak, YOLO26 ile çalışma konusundaki deneyimini ve başarını önemli ölçüde artırabilir. Aşağıda faydalı bulabileceğin bazı kanallar ve kaynaklar yer almaktadır.

Yardım Alabileceğin Forumlar ve Kanallar

GitHub Issues: YOLO26'nın GitHub deposunda, soru sorabileceğin, hataları bildirebileceğin ve yeni özellikler önerebileceğin bir Issues sekmesi bulunur. Topluluk ve geliştiriciler burada aktiftir; belirli sorunlarla ilgili yardım almak için harika bir yerdir.

Ultralytics Discord Sunucusu: Ultralytics'in diğer kullanıcılar ve geliştiricilerle etkileşime girebileceğin bir Discord sunucusu vardır.

Resmi Belgeler ve Kaynaklar

Ultralytics YOLO26 Dokümantasyonu: Resmi dokümantasyon, kurulum, kullanım ve sorun giderme konularındaki kılavuzlarla birlikte YOLO26'ya dair kapsamlı bir genel bakış sunar.

Bu kaynaklar, YOLO26 projelerinde sorun gidermek, projelerini geliştirmek ve YOLO26 topluluğundaki diğer kişilerle bağlantı kurmak için sağlam bir temel oluşturacaktır.

Sonuç

Sorun giderme, herhangi bir geliştirme sürecinin ayrılmaz bir parçasıdır ve doğru bilgiyle donanmak, sorunları çözmek için harcanan zamanı ve çabayı önemli ölçüde azaltabilir. Bu kılavuz, Ultralytics ekosistemindeki YOLO26 modelini kullanan kullanıcıların karşılaştığı en yaygın zorlukları ele almayı amaçlamıştır. Bu yaygın sorunları anlayıp çözümleyerek, daha sorunsuz bir proje ilerlemesi sağlayabilir ve bilgisayarlı görü görevlerinde daha iyi sonuçlar elde edebilirsin.

Unutma, Ultralytics topluluğu değerli bir kaynaktır. Diğer geliştiriciler ve uzmanlarla etkileşime geçmek, standart dokümantasyonda yer almayan ek içgörüler ve çözümler sağlayabilir. Topluluğun ortak bilgi birikimine katkıda bulunmak için her zaman öğrenmeye, denemeler yapmaya ve deneyimlerini paylaşmaya devam et.

SSS

YOLO26 ile ilgili kurulum hatalarını nasıl çözebilirim?

Kurulum hataları genellikle uyumluluk sorunlarından veya eksik bağımlılıklardan kaynaklanır. Python 3.8 veya daha yeni bir sürümünü kullandığından ve PyTorch 1.8 veya daha yeni bir sürümünün yüklü olduğundan emin ol. Çakışmaları önlemek için sanal ortamlar kullanman faydalıdır. Adım adım kurulum kılavuzu için resmi kurulum kılavuzumuzu takip et. Eğer içe aktarma (import) hatalarıyla karşılaşırsan, temiz bir kurulum yapmayı veya kütüphaneyi en son sürüme güncellemeyi dene.

YOLO26 model eğitimim neden tek bir GPU üzerinde yavaş?

Tek bir GPU üzerindeki eğitim, büyük yığın boyutları (batch size) veya yetersiz bellek nedeniyle yavaş olabilir. Eğitimi hızlandırmak için birden fazla GPU kullan. Sisteminde birden fazla GPU bulunduğundan emin ol ve .yaml yapılandırma dosyanı GPU sayısını belirtecek şekilde ayarla, örneğin: gpus: 4. Bellek sınırlarını aşmadan GPU'lardan tam olarak yararlanmak için yığın boyutunu buna göre artır. Örnek komut:

model.train(data="/path/to/your/data.yaml", batch=32)

YOLO26 modelimin GPU üzerinde eğitim aldığından nasıl emin olabilirim?

Eğitim günlüklerinde 'device' değeri 'null' olarak görünüyorsa, bu genellikle eğitim sürecinin mevcut bir GPU'yu otomatik olarak kullanacak şekilde ayarlandığı anlamına gelir. Belirli bir GPU'yu açıkça atamak için .yaml yapılandırma dosyanızdaki 'device' değerini ayarla. Örneğin:

device: 0

Bu, eğitim sürecini ilk GPU'ya ayarlar. CUDA kurulumunu doğrulamak için nvidia-smi komutuna başvur.

YOLO26 model eğitim sürecimi nasıl izleyebilir ve takip edebilirim?

Eğitim ilerlemesini takip etmek ve görselleştirmek, TensorBoard, Comet ve Ultralytics Platform gibi araçlar aracılığıyla verimli bir şekilde yönetilebilir. Bu araçlar, kayıp (loss), hassasiyet, duyarlılık ve mAP gibi metrikleri kaydetmene ve görselleştirmene olanak tanır. Bu metrikleri temel alarak erken durdurma uygulamak da daha iyi eğitim sonuçları elde etmene yardımcı olabilir.

YOLO26 veri seti formatımı tanımazsa ne yapmalıyım?

Veri setinin ve etiketlerinin beklenen formata uygun olduğundan emin ol. Ek açıklamaların (annotation) doğru ve yüksek kalitede olduğunu doğrula. Herhangi bir sorunla karşılaşırsan, en iyi uygulamalar için Veri Toplama ve Etiketleme kılavuzuna bak. Veri setine özgü daha fazla rehberlik için dokümantasyondaki Veri Setleri bölümüne göz at.

Yorumlar