avatar
Yazilim_Kurdu
10 puan • 545 soru • 582 cevap
✔️ Cevaplandı • Doğrulandı

Nesne Tespiti için YOLO Algoritması ve Python ile Kodlama

Nesne tespiti için YOLO algoritması nasıl çalışıyor? Python ile kodlama kısmı biraz karmaşık geldi, daha basit bir anlatıma ihtiyacım var.
WhatsApp'ta Paylaş
1 CEVAPLARI GÖR
✔️ Doğrulandı
0 kişi beğendi.
avatar
Soru_Cevap_TR
25 puan • 558 soru • 561 cevap

🎯 Nesne Tespiti ve YOLO Algoritmasına Giriş

Nesne tespiti, bilgisayarlı görü alanında bir resim veya video içerisindeki nesnelerin yerini belirleme ve sınıflandırma işlemidir. Bu işlem, güvenlik sistemlerinden otonom araçlara kadar birçok alanda kritik bir rol oynar. YOLO (You Only Look Once), nesne tespiti için kullanılan popüler ve hızlı bir algoritmadır.

⚙️ YOLO Algoritmasının Temel Prensipleri

YOLO, nesne tespitini tek bir evrişimsel sinir ağı (CNN) aracılığıyla gerçekleştirir. Görüntüyü ızgaralara böler ve her bir ızgara hücresi için birden fazla tahmin kutusu (bounding box) ve sınıf olasılıkları üretir. Bu yaklaşım, diğer nesne tespit algoritmalarına göre daha hızlı ve verimli olmasını sağlar.

  • 📦 Tek Aşamalı Tespit: YOLO, görüntüyü tek bir geçişte işleyerek nesneleri tespit eder.
  • 🌐 Izgara Tabanlı Yaklaşım: Görüntü ızgaralara bölünür ve her ızgara hücresi için tahminler yapılır.
  • Tahmin Kutuları: Her ızgara hücresi için birden fazla tahmin kutusu oluşturulur. Bu kutular, nesnelerin konumunu ve boyutunu tahmin eder.
  • 📊 Sınıf Olasılıkları: Her tahmin kutusu için, kutunun hangi sınıfa ait olduğuna dair olasılıklar hesaplanır.

🐍 Python ile YOLO Uygulaması

YOLO'yu Python ile uygulamak için çeşitli kütüphaneler ve çerçeveler kullanılabilir. En popüler seçenekler arasında TensorFlow, Keras ve PyTorch bulunur. Bu bölümde, basit bir YOLO uygulamasının temel adımlarını inceleyeceğiz.

🛠️ Gerekli Kütüphanelerin Kurulumu

İlk olarak, gerekli kütüphaneleri kurmanız gerekmektedir. Aşağıdaki komutları kullanarak TensorFlow, OpenCV ve diğer bağımlılıkları yükleyebilirsiniz:

pip install tensorflow opencv-python pillow

💾 YOLO Modelinin Yüklenmesi

YOLO modelini kullanmak için, önceden eğitilmiş ağırlıkları ve model yapılandırmasını indirmeniz gerekmektedir. YOLO'nun farklı versiyonları (YOLOv3, YOLOv4, YOLOv5 vb.) bulunmaktadır. İhtiyacınıza uygun olanı seçebilirsiniz. Örneğin, YOLOv3 için ağırlık dosyalarını ve yapılandırma dosyasını indirebilirsiniz.

📜 Python Kodu ile Nesne Tespiti

Aşağıdaki Python kodu, bir resim üzerinde YOLO ile nesne tespiti yapmanın temel adımlarını göstermektedir:


import cv2
import numpy as np

# YOLO modelini yükle
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")

# Sınıf isimlerini yükle
with open("coco.names", "r") as f:
    classes = [line.strip() for line in f.readlines()]

# Görüntüyü yükle
img = cv2.imread("image.jpg")
height, width, channels = img.shape

# Görüntüyü YOLO için hazırla
blob = cv2.dnn.blobFromImage(img, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)

# Çıktı katmanlarını al
output_layers_names = net.getUnconnectedOutLayersNames()
outputs = net.forward(output_layers_names)

# Nesne tespiti
boxes = []
confidences = []
class_ids = []

for output in outputs:
    for detection in output:
        scores = detection[5:]
        class_id = np.argmax(scores)
        confidence = scores[class_id]
        if confidence > 0.5:
            center_x = int(detection[0] * width)
            center_y = int(detection[1] * height)
            w = int(detection[2] * width)
            h = int(detection[3] * height)

            x = int(center_x - w / 2)
            y = int(center_y - h / 2)

            boxes.append([x, y, w, h])
            confidences.append(float(confidence))
            class_ids.append(class_id)

# Çakışan kutuları temizle
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)

# Sonuçları çiz
font = cv2.FONT_HERSHEY_PLAIN
for i in range(len(boxes)):
    if i in indexes:
        x, y, w, h = boxes[i]
        label = str(classes[class_ids[i]])
        color = (0, 255, 0)
        cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
        cv2.putText(img, label, (x, y - 5), font, 1, color, 1)

# Görüntüyü göster
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu kod, "yolov3.weights" ve "yolov3.cfg" dosyalarını kullanarak YOLO modelini yükler, "coco.names" dosyasından sınıf isimlerini okur ve "image.jpg" üzerindeki nesneleri tespit eder. Tespit edilen nesnelerin etrafına kutular çizer ve sınıf etiketlerini gösterir.

⚙️ Kodun Açıklaması

  • 📥 cv2.dnn.readNet("yolov3.weights", "yolov3.cfg"): YOLO modelini yükler.
  • 📝 with open("coco.names", "r") as f:: Sınıf isimlerini yükler.
  • 📸 cv2.imread("image.jpg"): Görüntüyü yükler.
  • 🎨 cv2.dnn.blobFromImage(...): Görüntüyü YOLO için uygun formata dönüştürür.
  • 🚀 net.forward(output_layers_names): Nesne tespiti yapar.
  • 📦 cv2.dnn.NMSBoxes(...): Çakışan kutuları temizler.
  • 🖼️ cv2.rectangle(...) ve cv2.putText(...): Sonuçları görüntü üzerine çizer.

🚀 Sonuç

YOLO algoritması, nesne tespiti için hızlı ve etkili bir çözümdür. Python ile kolayca uygulanabilir ve çeşitli uygulamalarda kullanılabilir. Bu yazıda, YOLO'nun temel prensiplerini ve Python ile basit bir uygulamasını inceledik. Daha karmaşık uygulamalar için, farklı YOLO versiyonlarını ve daha gelişmiş kütüphaneleri (örneğin, Darknet veya PyTorch Hub) kullanabilirsiniz.

Yorumlar