Takip et

YOLOv8’i GPU İçin Yapılandırma: Nesne Tespitini Hızlandırma

YOLOv8’i GPU İçin Yapılandırma: Nesne Tespitini Hızlandırma Derin öğrenme tabanlı nesne tespiti, otonom sürüşten güvenlik sistemlerine,

YOLOv8’i GPU İçin Yapılandırma: Nesne Tespitini Hızlandırma

Derin öğrenme tabanlı nesne tespiti, otonom sürüşten güvenlik sistemlerine, endüstriyel otomasyondan tıbbi görüntülemeye kadar pek çok alanda devrim yaratan bir teknolojidir. Bu alandaki en popüler ve etkili modellerden biri olan YOLO (You Only Look Once) serisi, hızı ve doğruluğu ile öne çıkmaktadır. Özellikle YOLOv8, geliştirilmiş mimarisi ve kullanıcı dostu Ultralytics çatısı altında sunduğu kolaylıklarla dikkat çekmektedir. Ancak, bu tür karmaşık modellerin tam potansiyelini ortaya çıkarmak ve gerçek zamanlı uygulamalarda yüksek performans elde etmek için GPU (Grafik İşlem Birimi) hızlandırması vazgeçilmezdir. Bu makale, YOLOv8’i GPU üzerinde etkin bir şekilde nasıl yapılandıracağınızı, kurulum adımlarını, optimizasyon tekniklerini ve karşılaşabileceğiniz olası sorunların çözümlerini detaylı bir şekilde ele alacaktır. Amacımız, okuyuculara YOLOv8 ile nesne tespitini GPU gücüyle maksimum seviyeye taşıma konusunda kapsamlı bir rehber sunmaktır.

YOLOv8 ve Derin Öğrenme Temelleri

Nesne tespiti, bir görüntü veya video içindeki nesnelerin konumunu (sınırlayıcı kutularla) ve sınıfını belirleme görevidir. Geleneksel yöntemler genellikle el yapımı özellikler ve sınıflandırıcılar kullanırken, derin öğrenme bu süreci baştan aşağı değiştirmiştir.

Derin Öğrenme ve Konvolüsyonel Sinir Ağları (CNN)

Derin öğrenme, çok katmanlı yapay sinir ağları kullanarak verilerden karmaşık desenleri öğrenen bir makine öğrenimi alt dalıdır. Görüntü işleme alanında ise Konvolüsyonel Sinir Ağları (CNN), bu alandaki en etkili mimarilerden biridir. CNN’ler, görüntüdeki hiyerarşik özellikleri (kenarlar, dokular, şekiller) otomatik olarak öğrenmek için konvolüsyon, havuzlama (pooling) ve tam bağlı katmanlar gibi özel katmanlar kullanır. Bu özellik öğrenme yeteneği, nesne tespiti gibi görsel görevlerde büyük başarı sağlamıştır.

YOLO Mimarisi ve Evrimi

YOLO (You Only Look Once), tek bir sinir ağı kullanarak bir görüntüdeki tüm nesneleri ve konumlarını aynı anda tahmin eden devrim niteliğinde bir nesne tespit modelidir. Geleneksel iki aşamalı dedektörlerin (örneğin R-CNN ailesi) aksine, YOLO, nesne tespiti problemini tek bir regresyon problemi olarak ele alır. Bu yaklaşım, YOLO’ya eşsiz bir hız kazandırır.

* YOLOv1: İlk versiyon, hızıyla dikkat çekse de küçük nesnelerde ve yoğun ortamlarda performansı düşüktü.
* YOLOv2 (YOLO9000): Daha iyi doğruluk ve daha geniş sınıf yelpazesi sunmak için anchor box’lar ve diğer iyileştirmeler eklendi.
* YOLOv3: Daha derin bir ağ yapısı, çoklu ölçekli tahminler ve daha iyi küçük nesne tespiti ile performansı artırdı.
* YOLOv4: Bag-of-freebies ve bag-of-specials tekniklerini kullanarak hem hızı hem de doğruluğu önemli ölçüde geliştirdi.
* YOLOv5: Ultralytics tarafından geliştirilen bu versiyon, PyTorch tabanlı olması, kolay kullanımı ve çeşitli boyutlarda (nano, small, medium, large, xlarge) modeller sunmasıyla popüler oldu.
* YOLOv6 ve YOLOv7: Çeşitli araştırmacılar tarafından geliştirilen bu versiyonlar da performans iyileştirmeleri sundu.
* YOLOv8: Ultralytics tarafından geliştirilen en son versiyon olan YOLOv8, daha modern bir mimari, gelişmiş eğitim stratejileri ve daha esnek bir yapı sunar. Modelin mimarisi, daha hafif ve hızlı çıkarım için tasarlanmıştır ve çeşitli boyutlarda (Nano, Small, Medium, Large, XLarge) önceden eğitilmiş modellerle birlikte gelir. Ayrıca, nesne tespiti dışında segmentasyon ve poz tahmini gibi görevleri de destekler. YOLOv8’in en büyük avantajlarından biri, Ultralytics kütüphanesi sayesinde kurulum ve kullanım kolaylığıdır.

GPU Hızlandırmanın Önemi

Derin öğrenme modelleri, özellikle YOLOv8 gibi büyük ve karmaşık modeller, milyonlarca parametreye sahip olabilir ve milyarlarca hesaplama işlemi gerektirebilir. Bu hesaplamaların verimli bir şekilde yapılması, modelin eğitilmesi ve çıkarım (tahmin) yapması için kritik öneme sahiptir. İşte bu noktada GPU’lar devreye girer.

CPU ve GPU Farkı

* CPU (Merkezi İşlem Birimi): Genel amaçlı işlemcilerdir. Az sayıda güçlü çekirdeğe sahiptirler ve her çekirdek karmaşık görevleri sırayla ve hızlı bir şekilde yerine getirebilir. Seri işlem yetenekleri yüksektir.
* GPU (Grafik İşlem Birimi): Başlangıçta grafik işleme için tasarlanmış olsalar da, paralel işlem yetenekleri sayesinde derin öğrenme için vazgeçilmez hale gelmişlerdir. Binlerce küçük, basit çekirdeğe sahiptirler ve bu çekirdekler aynı anda binlerce basit işlemi paralel olarak gerçekleştirebilir. Matris çarpımı gibi derin öğrenmenin temelini oluşturan işlemler için idealdirler.

Derin Öğrenmede GPU’nun Rolü

Derin öğrenme modelleri, özellikle eğitim aşamasında, büyük matris çarpımları ve toplama işlemleri gibi yoğun matematiksel operasyonlar gerektirir. Bu işlemlerin çoğu birbirinden bağımsız olarak paralel bir şekilde yürütülebilir. GPU’ların binlerce çekirdeği, bu paralel hesaplamaları CPU’lara kıyasla kat kat daha hızlı yapabilir.

* Eğitim (Training): Bir YOLOv8 modelini sıfırdan eğitmek veya önceden eğitilmiş bir modeli kendi veri setiniz üzerinde fine-tuning yapmak, binlerce veya milyonlarca iterasyon gerektirebilir. GPU olmadan bu süreç günler, haftalar sürebilirken, GPU ile saatlere veya dakikalara inebilir.
* Çıkarım (Inference): Model eğitildikten sonra, yeni görüntüler üzerinde nesne tespiti yapmak çıkarım olarak adlandırılır. Gerçek zamanlı uygulamalar (örneğin, otonom araçlar, canlı video analizi) için düşük gecikme süresi ve yüksek kare hızı (FPS) kritik öneme sahiptir. GPU’lar, saniyede onlarca hatta yüzlerce kareyi işleyerek bu gereksinimleri karşılayabilir.

YOLOv8 gibi modeller, özellikle büyük veri setleri üzerinde eğitilirken veya yüksek çözünürlüklü görüntülerde gerçek zamanlı tespit yaparken GPU gücüne mutlak suretle ihtiyaç duyarlar. GPU hızlandırması olmadan, bu modellerin pratik uygulamaları çoğu zaman imkansız hale gelir.

Gerekli Donanım ve Yazılım Altyapısı

YOLOv8’i GPU üzerinde başarılı bir şekilde çalıştırmak için belirli donanım ve yazılım bileşenlerine ihtiyacınız olacaktır. Bu bileşenlerin doğru sürümlerini ve uyumluluklarını sağlamak kritik öneme sahiptir.

Donanım Gereksinimleri

1. NVIDIA GPU:
* CUDA Uyumlu Olmalı: YOLOv8 ve PyTorch, NVIDIA’nın CUDA platformunu kullanarak GPU hızlandırması sağlar. Bu nedenle bir NVIDIA GPU’ya sahip olmanız şarttır. AMD veya Intel GPU’lar doğrudan CUDA ile uyumlu değildir.
* Bellek (VRAM): Derin öğrenme modelleri, özellikle yüksek çözünürlüklü görüntülerle çalışırken veya büyük batch size’lar kullanırken önemli miktarda GPU belleği (VRAM) tüketir. En az 8 GB VRAM’e sahip bir GPU önerilirken, 12 GB veya daha fazlası (örneğin NVIDIA RTX 3060/3070/3080/3090, RTX 40 serisi, Quadro veya Tesla serisi kartlar) daha büyük modeller ve veri setleri için idealdir. Yetersiz VRAM, “CUDA out of memory” hatalarına yol açar.
2. Sistem RAM: GPU VRAM’in yanı sıra, sistem RAM’i de önemlidir. Veri yükleme, ön işleme ve diğer CPU tabanlı işlemler için yeterli sistem belleği (en az 16 GB, tercihen 32 GB veya daha fazlası) performansı etkiler.
3. İşlemci (CPU): GPU’nun tüm yükü üstlenmesine rağmen, CPU hala veri yükleme, diskten okuma, ön işleme ve işletim sistemi görevleri için gereklidir. Modern bir çok çekirdekli CPU (Intel Core i5/i7/i9 veya AMD Ryzen 5/7/9) bu görevler için yeterli olacaktır.

Yazılım Gereksinimleri

Doğru yazılım ortamını kurmak, GPU hızlandırmasının sorunsuz çalışması için en karmaşık adımdır. Bileşenler arasındaki sürüm uyumluluğu çok önemlidir.

1. İşletim Sistemi:
* Linux (Ubuntu önerilir): Derin öğrenme geliştirme için en yaygın ve önerilen işletim sistemidir. Sürücü ve kütüphane kurulumu genellikle daha sorunsuz ve belgelidir.
* Windows: Windows üzerinde de kurulum mümkündür, ancak bazen sürücü ve CUDA/cuDNN yapılandırmalarında ek zorluklar yaşanabilir. WSL2 (Windows Subsystem for Linux 2) kullanmak, Windows üzerinde Linux benzeri bir deneyim sunarak kurulumu kolaylaştırabilir.
2. NVIDIA Sürücüleri: GPU’nuz için en güncel ve kararlı NVIDIA sürücülerinin kurulu olması gerekir. Sürücü sürümü, kullanacağınız CUDA Toolkit sürümüyle uyumlu olmalıdır. nvidia-smi komutu ile mevcut sürücü bilgilerinizi kontrol edebilirsiniz.
3. CUDA Toolkit: NVIDIA’nın paralel işlem platformudur. Derin öğrenme kütüphaneleri (PyTorch gibi) GPU’yu kullanmak için CUDA API’lerini çağırır. CUDA Toolkit’in sürümü, PyTorch ve diğer bağımlılıklarla uyumlu olmalıdır. Genellikle, en son PyTorch sürümü, belirli bir CUDA sürümüyle en iyi çalışır. PyTorch’un resmi web sitesindeki kurulum talimatları, hangi CUDA sürümünü kullanmanız gerektiğini belirtir.
4. cuDNN (CUDA Deep Neural Network Library): NVIDIA tarafından geliştirilen, derin öğrenme operasyonlarını (konvolüsyon, havuzlama vb.) hızlandırmak için optimize edilmiş bir kütüphanedir. CUDA Toolkit’in üzerine kurulur ve performansı önemli ölçüde artırır. cuDNN sürümü de CUDA Toolkit sürümüyle uyumlu olmalıdır.
5. Python: Python, derin öğrenme projeleri için standart bir programlama dilidir. Python 3.8 veya üzeri bir sürüm önerilir.
6. PyTorch: YOLOv8 (Ultralytics çatısı altında) PyTorch derin öğrenme çatısı üzerine inşa edilmiştir. GPU destekli PyTorch sürümünü kurmanız gerekmektedir.
7. Ultralytics Kütüphanesi: YOLOv8 modellerini çalıştırmak ve eğitmek için Ultralytics kütüphanesini kurmanız gerekecektir.
8. Diğer Bağımlılıklar: numpy, opencv-python, tqdm gibi yaygın Python kütüphaneleri de gerekecektir. Ultralytics kütüphanesi genellikle bu bağımlılıkları otomatik olarak yükler.

Bu bileşenlerin doğru bir şekilde kurulması ve yapılandırılması, YOLOv8’in GPU üzerinde optimum performansla çalışmasını sağlayacaktır.

Adım Adım Kurulum ve Yapılandırma

YOLOv8’i GPU üzerinde çalıştırmak için adım adım kurulum sürecini aşağıda bulabilirsiniz. Bu adımlar genellikle Linux (özellikle Ubuntu) için geçerlidir, ancak Windows’ta da benzer mantıkla ilerlenebilir.

NVIDIA Sürücü Kurulumu

1. Mevcut Sürücüleri Kontrol Etme:

nvidia-smi

Bu komut, eğer kuruluysa, NVIDIA GPU’nuzun ve sürücünüzün bilgilerini gösterir. Sürücü versiyonunu ve CUDA versiyonunu not alın. Eğer kurulu değilse veya hata veriyorsa, sürücü kurmanız gerekmektedir.

2. Eski Sürücüleri Kaldırma (Gerekiyorsa):
Yeni bir sürücü kurmadan önce eski sürücüleri kaldırmak iyi bir uygulamadır:

sudo apt-get purge nvidia*
    sudo apt-get autoremove
    sudo apt-get autoclean

3. Yeni Sürücü Kurulumu (Ubuntu Örneği):
* Önerilen Yöntem (PPA): Ubuntu’da en kolay yöntemlerden biri PPA (Personal Package Archive) kullanmaktır.

sudo add-apt-repository ppa:graphics-drivers/ppa
        sudo apt update
        ubuntu-drivers devices # Önerilen sürücüleri listeler
        sudo apt install nvidia-driver-XXX # XXX yerine önerilen veya tercih ettiğiniz sürümü yazın (örneğin nvidia-driver-535)

* Manuel Kurulum: NVIDIA’nın web sitesinden (https://www.nvidia.com/drivers) GPU’nuza uygun .run dosyasını indirip manuel olarak kurabilirsiniz. Bu yöntem daha karmaşık olabilir ve X sunucusunu devre dışı bırakmayı gerektirebilir.

4. Sürücü Kurulumunu Doğrulama:
Yeniden başlattıktan sonra tekrar nvidia-smi komutunu çalıştırarak sürücülerin doğru bir şekilde kurulduğundan emin olun.

CUDA Toolkit Kurulumu

1. Uygun Sürümü Seçme: PyTorch’un resmi web sitesi (https://pytorch.org/get-started/locally/) hangi CUDA sürümünü kullanmanız gerektiğini belirten bir kurulum komutu sunar. Bu sürümle uyumlu CUDA Toolkit’i indirmelisiniz. Örneğin, PyTorch cu118 gerektiriyorsa, CUDA Toolkit 11.8’i indirmelisiniz.

2. CUDA Toolkit İndirme: NVIDIA’nın geliştirici web sitesinden (https://developer.nvidia.com/cuda-toolkit-archive) uygun sürümü ve işletim sisteminize göre indirme dosyasını seçin. Örneğin, Ubuntu 22.04 için deb (network) veya deb (local) seçeneğini kullanabilirsiniz.

3. Kurulum: İndirdiğiniz dosyaya göre kurulum talimatlarını takip edin. Örneğin, deb (local) için:

sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
    sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt-get update
    sudo apt-get -y install cuda

cuda yerine cuda-toolkit-11-8 gibi belirli bir sürümü de belirtebilirsiniz.

4. Ortam Değişkenlerini Ayarlama: CUDA’nın doğru çalışması için PATH ve LD_LIBRARY_PATH ortam değişkenlerini ayarlamanız gerekir. .bashrc dosyanıza aşağıdaki satırları ekleyin (CUDA sürümünüze göre yolu güncelleyin):

export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Değişiklikleri etkinleştirmek için source ~/.bashrc komutunu çalıştırın.

5. Kurulumu Doğrulama:

nvcc --version

Bu komut CUDA Compiler’ın (nvcc) sürümünü göstermelidir.

cuDNN Kurulumu

1. cuDNN İndirme: NVIDIA Developer hesabı gereklidir. cuDNN indirme sayfasından (https://developer.nvidia.com/cudnn-download-survey) CUDA Toolkit sürümünüzle uyumlu cuDNN sürümünü indirin. Genellikle bir .tgz dosyası olarak gelir.

2. Kurulum: İndirdiğiniz .tgz dosyasını açın ve içeriğini CUDA Toolkit’in kurulu olduğu dizine kopyalayın.

tar -xzvf cudnn-linux-x86_64-8.X.X.X_cudaX.Y-archive.tgz
    sudo cp cudnn-linux-x86_64-8.X.X.X_cudaX.Y-archive/include/* /usr/local/cuda/include/
    sudo cp cudnn-linux-x86_64-8.X.X.X_cudaX.Y-archive/lib/* /usr/local/cuda/lib64/
    sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

8.X.X.X ve cudaX.Y kısımlarını indirdiğiniz cuDNN ve CUDA sürümünüze göre güncelleyin. /usr/local/cuda yolu, CUDA Toolkit’inizin ana kurulum dizinidir.

Python ve Sanal Ortam Kurulumu

Python bağımlılık çakışmalarını önlemek için sanal ortam kullanmak şiddetle tavsiye edilir.

1. Conda (Anaconda/Miniconda) Kurulumu (Önerilir):
* Miniconda’yı indirip kurun: https://docs.conda.io/en/latest/miniconda.html
* Yeni bir sanal ortam oluşturun:

conda create -n yolov8_gpu python=3.9
        conda activate yolov8_gpu

2. venv Kurulumu (Alternatif):
*

python3 -m venv yolov8_gpu_env
        source yolov8_gpu_env/bin/activate

PyTorch Kurulumu (GPU Destekli)

Sanal ortamınızı etkinleştirdikten sonra PyTorch’u kurun. PyTorch’un resmi web sitesindeki talimatları izlemek en iyisidir. CUDA sürümünüze göre komutu özelleştirmeniz gerekir.

# Örnek: CUDA 11.8 için
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

Örnek: CUDA 12.1 için

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

Kurulumu Doğrulama:

import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))

Bu komutlar True döndürmeli, GPU sayısını göstermeli ve GPU’nuzun adını yazdırmalıdır.

Ultralytics YOLOv8 Kurulumu

PyTorch kurulduktan sonra Ultralytics kütüphanesini kurabilirsiniz:

pip install ultralytics

Bu kurulum, YOLOv8’i çalıştırmak için gerekli tüm bağımlılıkları otomatik olarak indirecektir.

Bu adımları tamamladıktan sonra, YOLOv8’i GPU’nuzda çalıştırmak için hazır olmalısınız.

YOLOv8 ile GPU Hızlandırmayı Kullanma

Kurulum tamamlandıktan sonra, YOLOv8’i GPU üzerinde kullanarak nesne tespiti ve eğitim süreçlerini hızlandırmaya başlayabilirsiniz.

Model Yükleme ve Çıkarım (Inference)

YOLOv8 ile çıkarım yapmak oldukça basittir. device parametresini kullanarak GPU’nuzu belirtebilirsiniz.

from ultralytics import YOLO

Bir YOLOv8 modeli yükleyin (örneğin yolov8n.pt - nano modeli)

Model otomatik olarak indirilecektir eğer yoksa

model = YOLO('yolov8n.pt')

Bir resim veya video üzerinde çıkarım yapın

device=0: İlk GPU'yu kullan

device='cpu': CPU kullanmak isterseniz

device='cuda': Mevcut ilk GPU'yu kullan

results = model.predict('path/to/your/image.jpg', device=0, conf=0.25)

Birden fazla GPU'nuz varsa, belirli bir GPU'yu seçebilirsiniz (örneğin device=1)

results = model.predict('path/to/your/image.jpg', device=1, conf=0.25)

Video dosyası üzerinde çıkarım

results = model.predict('path/to/your/video.mp4', device=0, conf=0.25, save=True)

Sonuçları işleme

for r in results: boxes = r.boxes # Bounding box'lar masks = r.masks # Segmentasyon maskeleri (eğer model segmentasyon destekliyorsa) keypoints = r.keypoints # Anahtar noktalar (eğer model poz tahmini destekliyorsa) names = r.names # Sınıf isimleri for box in boxes: cls = int(box.cls[0]) # Sınıf ID conf = float(box.conf[0]) # Güven skoru xyxy = box.xyxy[0].tolist() # [x1, y1, x2, y2] formatında koordinatlar print(f"Nesne: {names[cls]}, Güven: {conf:.2f}, Kutu: {xyxy}")

Sonuçları çizdirin ve kaydedin

predict metodu zaten sonuçları görselliştirebilir ve kaydedebilir (save=True ile)

Eğer save=False ise, sonuçları manuel olarak çizdirebilirsiniz:

r.show() # Görüntüleri göster

r.save(filename='result.jpg') # Kaydet

device=0 parametresi, PyTorch’a ilk kullanılabilir GPU’yu kullanmasını söyler. Eğer bu parametre belirtilmezse ve bir GPU mevcutsa, PyTorch genellikle otomatik olarak GPU’yu kullanır. Ancak, açıkça belirtmek en iyi uygulamadır.

Eğitim (Training)

Kendi veri setiniz üzerinde bir YOLOv8 modelini eğitmek için de GPU hızlandırmasını kullanabilirsiniz. Eğitim süreci, çıkarımdan çok daha fazla hesaplama gücü gerektirir ve GPU kullanımı burada hayati önem taşır.

1. Veri Seti Hazırlığı:
* YOLOv8, belirli bir klasör yapısı ve YAML dosyasında tanımlanmış veri yolu gerektirir. Genellikle train/images, train/labels, val/images, val/labels gibi klasörler bulunur.
* YAML dosyası (örneğin my_dataset.yaml) aşağıdaki gibi olmalıdır:

# Dataset root dir
        path: /path/to/your/dataset

        # Train/val/test images dirs
        train: images/train
        val: images/val
        test: images/test # isteğe bağlı

        # Classes
        nc: 2 # Sınıf sayısı
        names: ['class1', 'class2'] # Sınıf isimleri

2. Model Eğitimi:

from ultralytics import YOLO

    # Önceden eğitilmiş bir modeli yükleyin (fine-tuning için)
    # Ya da sıfırdan eğitmek için 'yolov8n.yaml' gibi bir yapılandırma dosyası kullanın
    model = YOLO('yolov8n.pt')

    # Kendi veri setiniz üzerinde modeli eğitin
    # data: Veri setinizin YAML dosyasının yolu
    # epochs: Eğitim döngüsü sayısı
    # imgsz: Giriş görüntü boyutu (örneğin 640x640)
    # batch: Her iterasyonda işlenecek görüntü sayısı (GPU belleğinize göre ayarlayın)
    # device: GPU kullanmak için 0 veya 'cuda'
    results = model.train(data='my_dataset.yaml', epochs=100, imgsz=640, batch=16, device=0)

    # Eğitim tamamlandıktan sonra en iyi model ağırlıkları genellikle 'runs/detect/trainX/weights/best.pt' konumunda bulunur.

batch parametresi, GPU belleğinin ne kadar kullanılacağını doğrudan etkiler. Daha büyük batch boyutları, daha hızlı eğitim sağlayabilir ancak daha fazla VRAM gerektirir. device=0 yine ilk GPU’yu kullanmayı belirtir.

Performans Karşılaştırması (CPU vs GPU)

GPU hızlandırmasının ne kadar fark yarattığını görmek için basit bir karşılaştırma yapabilirsiniz:

import time
from ultralytics import YOLO

Modeli yükle

model = YOLO('yolov8n.pt') image_path = 'path/to/your/image.jpg' # Kendi resminizin yolunu verin

CPU üzerinde çıkarım

start_time_cpu = time.time() results_cpu = model.predict(image_path, device='cpu') end_time_cpu = time.time() print(f"CPU üzerinde çıkarım süresi: {end_time_cpu - start_time_cpu:.4f} saniye")

GPU üzerinde çıkarım

start_time_gpu = time.time() results_gpu = model.predict(image_path, device=0) end_time_gpu = time.time() print(f"GPU üzerinde çıkarım süresi: {end_time_gpu - start_time_gpu:.4f} saniye")

Bu basit test, GPU’nun özellikle daha büyük görüntüler ve modeller için çok daha hızlı çıkarım yapabildiğini açıkça gösterecektir. Eğitim süreçlerindeki fark ise katlanarak artar.

Optimizasyon ve İpuçları

YOLOv8’i GPU üzerinde çalıştırırken performansı daha da artırmak için bazı optimizasyon teknikleri ve ipuçları mevcuttur.

1. Batch Size Ayarlaması:
* batch boyutu, bir eğitim adımında veya çıkarımda aynı anda işlenen görüntü sayısını belirler. Daha büyük batch boyutları genellikle GPU’yu daha verimli kullanır ve daha hızlı eğitim/çıkarım sağlar.
* Ancak, batch boyutu GPU VRAM’ine doğrudan bağlıdır. “CUDA out of memory” hatası alıyorsanız, batch boyutunu küçültmeniz gerekir.
* nvidia-smi komutu ile GPU kullanımınızı izleyerek ideal batch boyutunu bulabilirsiniz.

2. Yarım Hassasiyet (FP16) Kullanımı:
* Çoğu derin öğrenme modeli, varsayılan olarak 32-bit kayan nokta (FP32) hassasiyetinde çalışır. Ancak, NVIDIA’nın Tensor Core’larına sahip modern GPU’lar, 16-bit kayan nokta (FP16) hassasiyetinde çok daha hızlı işlem yapabilir.
* FP16, modelin bellek ayak izini azaltır ve daha hızlı hesaplamalar sağlar. Çoğu durumda, doğrulukta ihmal edilebilir bir düşüşle birlikte önemli hız artışı sağlar.
* YOLOv8’de model.train() veya model.predict() metotlarında half=True parametresini kullanarak FP16’yı etkinleştirebilirsiniz:

# Eğitimde FP16 kullanma
        model.train(data='my_dataset.yaml', epochs=100, imgsz=640, batch=32, device=0, half=True)

        # Çıkarımda FP16 kullanma
        results = model.predict('path/to/image.jpg', device=0, half=True)

3. TensorRT veya ONNX Runtime ile Çıkarım Optimizasyonu:
* TensorRT: NVIDIA’nın özel bir çıkarım optimizasyon kütüphanesidir. Model grafiklerini GPU’ya özel optimizasyonlarla derleyerek çıkarım hızını önemli ölçüde artırabilir. YOLOv8 modellerini ONNX formatına dışa aktarıp ardından TensorRT’ye dönüştürebilirsiniz.
* ONNX Runtime: ONNX (Open Neural Network Exchange) formatındaki modeller için optimize edilmiş bir çıkarım motorudur. Hem CPU hem de GPU üzerinde (CUDA veya DirectML ile) hızlı çıkarım sağlayabilir.
* Ultralytics, modelleri ONNX ve TensorRT gibi formatlara kolayca dışa aktarma yeteneği sunar:

model = YOLO('yolov8n.pt')
        model.export(format='onnx', imgsz=640, half=True, device=0) # ONNX'e aktar
        model.export(format='engine', imgsz=640, half=True, device=0) # TensorRT motoruna aktar

* Daha sonra bu optimize edilmiş motorları kullanarak çıkarım yapabilirsiniz.

4. Veri Yükleme Hızlandırması (Dataloader Workers):
* Eğitim sırasında, veri setinden görüntülerin okunması ve ön işlenmesi CPU’da gerçekleşir. Eğer bu süreç GPU’nun beklemesine neden oluyorsa, eğitim yavaşlar.
* PyTorch’un DataLoader‘ı, verileri paralel olarak yüklemek için birden fazla işçi (worker) kullanabilir. model.train() metodundaki workers parametresi bunu kontrol eder.
*

model.train(data='my_dataset.yaml', epochs=100, imgsz=640, batch=16, device=0, workers=8)

* workers sayısını CPU çekirdek sayınıza veya GPU’nuzun veri işleme hızına göre ayarlayabilirsiniz. Genellikle workers=0 (ana süreçte veri yükleme) veya CPU çekirdek sayısının yarısı gibi değerler iyi başlangıç noktalarıdır.

5. GPU Bellek Kullanımını İzleme:
* nvidia-smi komutunu düzenli olarak kullanarak GPU’nuzun bellek ve kullanım durumunu takip edin. Bu, özellikle “out of memory” hatalarını teşhis etmede yardımcı olur.
* Eğer bellek kullanımı çok yüksekse, batch boyutunu küçültmeyi, imgsz (görüntü boyutu) değerini düşürmeyi veya half=True kullanmayı deneyin.

6. Doğru Sürüm Uyumluluğu:
* En önemli ipucu, tüm bileşenlerin (NVIDIA Sürücüsü, CUDA Toolkit, cuDNN, PyTorch) birbiriyle uyumlu sürümlerini kullandığınızdan emin olmaktır. Sürüm uyumsuzlukları, en yaygın sorunların kaynağıdır. PyTorch’un resmi kurulum sayfasındaki yönergeleri dikkatlice takip edin.

Bu optimizasyonlar, YOLOv8’in GPU üzerindeki performansını önemli ölçüde artırarak daha hızlı eğitim ve daha akıcı gerçek zamanlı çıkarım deneyimi sağlayacaktır.

Potansiyel Sorunlar ve Çözümleri

YOLOv8’i GPU üzerinde yapılandırırken ve çalıştırırken karşılaşabileceğiniz bazı yaygın sorunlar ve bunların olası çözümleri aşağıda listelenmiştir.

1. “CUDA out of memory” Hatası:
* Sorun: GPU belleği yetersiz. Model, görüntü boyutu veya batch boyutu GPU’nuzun VRAM’ini aşıyor.
* Çözüm:
* batch boyutunu küçültün.
* Giriş görüntü boyutunu (imgsz) düşürün.
* half=True parametresiyle yarım hassasiyet (FP16) kullanmayı deneyin.
* Daha az VRAM tüketen daha küçük bir YOLOv8 modeli kullanın (örneğin yolov8n.pt yerine yolov8s.pt).
* Gereksiz diğer GPU kullanan uygulamaları kapatın.

2. torch.cuda.is_available() False Dönüyor:
* Sorun: PyTorch, GPU’nuzu algılayamıyor. Bu genellikle yanlış veya eksik CUDA/sürücü kurulumundan kaynaklanır.
* Çözüm:
* NVIDIA sürücülerinin doğru şekilde kurulu olduğundan emin olun (nvidia-smi çalışıyor mu?).
* CUDA Toolkit’in doğru sürümünün kurulu olduğundan ve ortam değişkenlerinin (PATH, LD_LIBRARY_PATH) doğru ayarlandığından emin olun (nvcc --version çalışıyor mu?).
* PyTorch’u CUDA destekli sürümünü indirdiğinizden emin olun (örneğin pip install torch...cuXXX).
* Sanal ortamınızın etkin olduğundan emin olun.

3. “cuDNN Error” veya “cuDNN not found” Hatası:
* Sorun: cuDNN kütüphanesi doğru kurulmamış veya CUDA Toolkit ile uyumsuz.
* Çözüm:
* cuDNN’nin CUDA Toolkit dizinine doğru şekilde kopyalandığından ve gerekli izinlere sahip olduğundan emin olun.
* cuDNN sürümünün CUDA Toolkit sürümünüzle uyumlu olduğundan emin olun. NVIDIA’nın sitesinden doğru sürümü indirin.
* Bazen cuDNN’i manuel olarak LD_LIBRARY_PATH‘e eklemek gerekebilir.

4. Sürücü Yüklenemiyor veya Çekirdek Modülü Hatası:
* Sorun: NVIDIA sürücüleri işletim sistemi çekirdeği ile uyumsuz veya kurulum sırasında bir hata oluştu.
* Çözüm:
* İşletim sisteminizin güncel olduğundan emin olun.
* Sürücüleri kurmadan önce eski sürücüleri tamamen kaldırın.
* Manuel sürücü kurulumu yapıyorsanız, X sunucusunu devre dışı bıraktığınızdan emin olun (sudo systemctl isolate multi-user.target).
* Kernel modülleri ile ilgili hatalar için, dkms paketinin kurulu olduğundan ve sürücü kurulumu sırasında doğru yapılandırıldığından emin olun.

5. Ortam Değişkenleri Hatası:
* Sorun: PATH veya LD_LIBRARY_PATH gibi ortam değişkenleri doğru ayarlanmamış veya etkinleştirilmemiş.
* Çözüm:
* .bashrc veya .profile dosyanızdaki ayarları kontrol edin.
* Değişiklikleri kaydettikten sonra source ~/.bashrc komutuyla etkinleştirdiğinizden emin olun.
* Sistemi yeniden başlatmak da ortam değişkenlerinin güncellenmesine yardımcı olabilir.

6. Python Bağımlılık Çakışmaları:
* Sorun: Farklı kütüphaneler aynı bağımlılığın farklı sürümlerini gerektiriyor.
* Çözüm:
* Her zaman sanal ortam (conda veya venv) kullanın. Bu, farklı projeler için izole edilmiş bağımlılık setleri oluşturmanıza olanak tanır.
* pip install -r requirements.txt veya conda install --file requirements.txt gibi gereksinim dosyalarını kullanarak bağımlılıkları yönetin.
* Ultralytics kütüphanesi kurulurken, gerekli bağımlılıkları otomatik olarak yükler. Eğer bir sorun yaşarsanız, pip list komutuyla kurulu paketleri kontrol edip çakışanları manuel olarak kaldırıp yeniden kurmayı deneyebilirsiniz.

7. Düşük Performans (GPU Kullanımı Düşük):
* Sorun: GPU algılanıyor ancak tam kapasiteyle kullanılmıyor.
* Çözüm:
* batch boyutunu artırın (eğer VRAM yeterliyse).
* half=True (FP16) kullanın.
* workers parametresini DataLoader‘da artırarak veri yükleme darboğazını giderin.
* Modeli ONNX veya TensorRT gibi optimize edilmiş formatlara dönüştürerek çıkarım yapın.
* nvidia-smi ile GPU kullanımını izleyin. Eğer GPU kullanımı düşük ve CPU kullanımı yüksekse, veri yükleme veya ön işleme bir darboğaz olabilir.

Bu sorun giderme adımları, YOLOv8’i GPU üzerinde başarılı bir şekilde yapılandırmanıza ve çalıştırmanıza yardımcı olacaktır. Unutmayın ki derin öğrenme ortamı kurulumu, sabır ve dikkat gerektiren bir süreçtir.

Sonuç

YOLOv8, nesne tespiti alanında sunduğu yüksek performans, doğruluk ve kullanım kolaylığı ile öne çıkan güçlü bir modeldir. Ancak bu modelin gerçek potansiyelini ortaya çıkarmak, özellikle gerçek zamanlı uygulamalar ve büyük veri setleri üzerinde eğitim yaparken, GPU hızlandırmasından tam olarak yararlanmayı gerektirir. Bu makalede, YOLOv8’i GPU üzerinde etkin bir şekilde yapılandırmak için gerekli olan donanım ve yazılım altyapısını, adım adım kurulum sürecini ve önemli optimizasyon tekniklerini detaylı bir şekilde ele aldık.

NVIDIA sürücüleri, CUDA Toolkit, cuDNN ve PyTorch gibi temel bileşenlerin doğru sürümlerini kurmak ve bunların birbiriyle uyumlu olmasını sağlamak, başarılı bir kurulumun anahtarıdır. Sanal ortamların kullanımı, Python bağımlılık çakışmalarını önleyerek geliştirme sürecini büyük ölçüde kolaylaştırır. Kurulum tamamlandıktan sonra, device parametresini kullanarak YOLOv8 modellerini GPU üzerinde çalıştırabilir, hem çıkarım hem de eğitim süreçlerinde CPU’ya kıyasla katlanarak artan bir performans elde edebilirsiniz.

Ayrıca, batch boyutunu ayarlamak, yarım hassasiyet (FP16) kullanmak ve TensorRT veya ONNX Runtime gibi çıkarım motorlarını entegre etmek gibi optimizasyon teknikleri, performansı daha da artırarak YOLOv8’den maksimum verimi almanızı sağlar. Karşılaşılabilecek potansiyel sorunlar ve bunların çözümlerine yönelik rehberlik, kurulum ve yapılandırma sürecindeki engelleri aşmanızda yardımcı olacaktır.

YOLOv8’i GPU gücüyle yapılandırmak, nesne tespiti projelerinizde hız, verimlilik ve ölçeklenebilirlik açısından büyük avantajlar sunar. Bu kapsamlı rehberin, derin öğrenme ve nesne tespiti alanındaki çalışmalarınızda size yol göstermesini ve projelerinizi bir üst seviyeye taşımanızı umuyoruz. Gelecekte, daha da optimize edilmiş modeller ve donanımlar sayesinde nesne tespiti uygulamalarının daha da yaygınlaşacağı ve günlük hayatımızın ayrılmaz bir parçası haline geleceği açıktır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.