Whatsapp Telegram Telegram Call Anrufen

Verständnis der YOLO-Architektur


1. YOLO-Netzwerkarchitektur

Die YOLO-Architektur ist darauf ausgelegt, Objekte in Bildern in Echtzeit zu erkennen. Dies wird durch die Verarbeitung des gesamten Bildes in einem einzigen Durchlauf durch das neuronale Netzwerk erreicht. Die Hauptkomponenten der YOLO-Architektur sind:

  • Eingabeschicht: Nimmt das gesamte Bild als Eingabe.
  • Convolutional Layers: Extrahieren Merkmale aus dem Bild durch eine Reihe von Faltungsoperationen.
  • Bounding Box Regression: Die Position und Größe der potenziellen Objekte werden als Bounding Boxes vorhergesagt.
  • Klassifizierung: Jedes vorhergesagte Objekt wird klassifiziert, um den Objekttyp zu bestimmen.


2. YOLO v1: Das Originalmodell

YOLOv1 wurde 2015 veröffentlicht und brachte das revolutionäre Konzept ein, die Objekterkennung als ein einziges Regressionsproblem zu betrachten. Das Modell teilt das Eingabebild in ein 7x7-Gitter und führt für jedes Gitter eine Vorhersage durch.

Merkmale von YOLOv1:

  • Einfache und schnelle Architektur.
  • Teilt das Bild in Zellen auf und führt pro Zelle Vorhersagen durch.
  • Benutzt eine Verlustfunktion, die sowohl die Klassifizierungs- als auch die Lokalisierungsfehler minimiert.

Beispielcode: Hier ein Beispiel, wie man ein Bild mit YOLOv1 vorhersagt:

import cv2
import numpy as np

# Laden Sie das YOLOv1-Modell
net = cv2.dnn.readNet("yolov1.weights", "yolov1.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# Laden Sie das Bild
image = cv2.imread("image.jpg")
height, width, channels = image.shape

# Bildvorverarbeitung
blob = cv2.dnn.blobFromImage(image, 0.00392, (448, 448), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)

# Verarbeiten der Vorhersagen
# (Beispielhafte Verarbeitung ohne detaillierte Implementierung)

# Ausgabe des Bildes
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()


3. YOLO v2 (YOLO9000)

YOLOv2, auch bekannt als YOLO9000, wurde 2016 veröffentlicht. Es brachte signifikante Verbesserungen hinsichtlich Genauigkeit und Geschwindigkeit. YOLOv2 führte Ankerboxen und die Fähigkeit ein, über 9000 Klassen zu erkennen.

Merkmale von YOLOv2:

  • Einführung von Ankerboxen zur besseren Erkennung von Objekten unterschiedlicher Größe.
  • Nutzung von Batch Normalization zur Stabilisierung des Trainings.
  • Multi-Scale-Training zur Verbesserung der Generalisierungsfähigkeit.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv2:

import cv2
import numpy as np

# Laden Sie das YOLOv2-Modell
net = cv2.dnn.readNet("yolov2.weights", "yolov2.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# Laden Sie das Bild
image = cv2.imread("image.jpg")
height, width, channels = image.shape

# Bildvorverarbeitung
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)

# Verarbeiten der Vorhersagen
# (Beispielhafte Verarbeitung ohne detaillierte Implementierung)

# Ausgabe des Bildes
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()


4. YOLO v3

YOLOv3 wurde 2018 veröffentlicht und brachte weitere Verbesserungen. Es verwendete ein tieferes und komplexeres Netzwerk, das Darknet-53 als Backbone nutzte.

Merkmale von YOLOv3:

  • Darknet-53 als Backbone, das 53 Convolutional Layers umfasst.
  • Nutzung eines Feature-Pyramid-Netzwerks zur Erkennung von Objekten auf verschiedenen Skalen.
  • Möglichkeit, Objekte auf drei verschiedenen Auflösungsebenen zu erkennen.

Beispiel: Die folgende Abbildung zeigt die Architektur von YOLOv3:

import cv2
import numpy as np

# Laden Sie das YOLOv3-Modell
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# Laden Sie das Bild
image = cv2.imread("image.jpg")
height, width, channels = image.shape

# Bildvorverarbeitung
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)

# Verarbeiten der Vorhersagen
# (Beispielhafte Verarbeitung ohne detaillierte Implementierung)

# Ausgabe des Bildes
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()



5. YOLO v4

YOLOv4, veröffentlicht 2020, optimierte die Performance und Genauigkeit weiter, indem es verschiedene Techniken zur Verbesserung der Trainings- und Inferenzeffizienz integrierte.

Merkmale von YOLOv4:

  • Nutzung von CSPDarknet53 als Backbone.
  • Einführung von SPP (Spatial Pyramid Pooling) und PAN (Path Aggregation Network).
  • Verwendung von Bag of Freebies (BoF) und Bag of Specials (BoS) zur Verbesserung der Genauigkeit ohne zusätzliche Inferenzkosten.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv4:

import cv2
import numpy as np

# Laden Sie das YOLOv4-Modell
net = cv2.dnn.readNet("yolov4.weights", "yolov4.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# Laden Sie das Bild
image = cv2.imread("image.jpg")
height, width, channels = image.shape

# Bildvorverarbeitung
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)

# Verarbeiten der Vorhersagen
# (Beispielhafte Verarbeitung ohne detaillierte Implementierung)

# Ausgabe des Bildes
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()



6. YOLOv5

YOLOv5 wurde von der Community entwickelt und ist weit verbreitet. Es bringt eine einfache Implementierung und hohe Effizienz mit sich.

Merkmale von YOLOv5:

  • Leicht zu verwenden und zu trainieren.
  • Unterstützung für benutzerdefinierte Datensätze.
  • Hohe Effizienz und Genauigkeit.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv5:

import torch
from PIL import Image
import matplotlib.pyplot as plt

# Laden Sie das YOLOv5-Modell
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Laden Sie das Bild
img = Image.open("image.jpg")

# Vorhersage
results = model(img)

# Ergebnisse anzeigen
results.show()
plt.imshow(results.render()[0])
plt.axis('off')
plt.show()

7. YOLOv6

YOLOv6 konzentriert sich auf mobile und Edge-Anwendungen, indem es die Modelle leichter und effizienter macht.

Merkmale von YOLOv6:

  • Optimiert für mobile Geräte und Edge-Computing.
  • Verbesserte Effizienz und Genauigkeit bei geringem Rechenaufwand.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv6:

import cv2
import numpy as np
from yolov6.core import YOLOv6

# Laden Sie das YOLOv6-Modell
model = YOLOv6('yolov6s.pt')

# Laden Sie das Bild
image = cv2.imread("image.jpg")

# Vorhersage
results = model.predict(image)

# Verarbeiten und Anzeigen der Ergebnisse
for result in results:
    x, y, w, h = result['box']
    label = result['class']
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

8. YOLOv7

YOLOv7 bringt weitere Optimierungen und Verbesserungen in der Architektur mit sich, um die Erkennungsgenauigkeit zu steigern und die Rechenzeit zu verkürzen.

Merkmale von YOLOv7:

  • Verbesserte Netzwerkarchitektur für höhere Genauigkeit.
  • Reduzierte Rechenzeit und gesteigerte Effizienz.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv7:

import cv2
import numpy as np
from yolov7.core import YOLOv7

# Laden Sie das YOLOv7-Modell
model = YOLOv7('yolov7.pt')

# Laden Sie das Bild
image = cv2.imread("image.jpg")

# Vorhersage
results = model.predict(image)

# Verarbeiten und Anzeigen der Ergebnisse
for result in results:
    x, y, w, h = result['box']
    label = result['class']
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

9. YOLOv8

YOLOv8 integriert Transformer-basierte Mechanismen, um die Fähigkeit zur Erkennung komplexerer Szenen und kleiner Objekte zu verbessern.

Merkmale von YOLOv8:

  • Nutzung von Transformer-Mechanismen.
  • Verbesserte Erkennung komplexer Szenen und kleiner Objekte.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv8:

import torch
from ultralytics import YOLO

# Laden Sie das YOLOv8-Modell
model = YOLO('yolov8.pt')

# Laden Sie das Bild
image = cv2.imread("image.jpg")

# Vorhersage
results = model.predict(image)

# Verarbeiten und Anzeigen der Ergebnisse
for result in results:
    x, y, w, h = result['box']
    label = result['class']
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

10. YOLOv9

YOLOv9 bringt verbesserte Algorithmen für höhere Präzision und Robustheit, einschließlich besserer Generalisierungsfähigkeiten bei variierenden Lichtverhältnissen und Hintergrundstörungen.

Merkmale von YOLOv9:

  • Verbesserte Präzision und Robustheit.
  • Bessere Generalisierungsfähigkeiten.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv9:

import cv2
import numpy as np
from yolov9.core import YOLOv9

# Laden Sie das YOLOv9-Modell
model = YOLOv9('yolov9.pt')

# Laden Sie das Bild
image = cv2.imread("image.jpg")

# Vorhersage
results = model.predict(image)

# Verarbeiten und Anzeigen der Ergebnisse
for result in results:
    x, y, w, h = result['box']
    label = result['class']
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

11. YOLOv10

YOLOv10 ist die aktuellste Version und bietet noch höhere Genauigkeitswerte und verbesserte Echtzeitfähigkeiten, unterstützt durch fortschrittliche Algorithmen und neue Techniken in der Bildverarbeitung.

Merkmale von YOLOv10:

  • Höchste Genauigkeitswerte.
  • Verbesserte Echtzeitfähigkeiten.

Beispiel: Die folgende Abbildung zeigt die Vorhersage eines Bildes mit YOLOv10:

import cv2
import numpy as np
from yolov10.core import YOLOv10

# Laden Sie das YOLOv10-Modell
model = YOLOv10('yolov10.pt')

# Laden Sie das Bild
image = cv2.imread("image.jpg")

# Vorhersage
results = model.predict(image)

# Verarbeiten und Anzeigen der Ergebnisse
for result in results:
    x, y, w, h = result['box']
    label = result['class']
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Fazit

Die YOLO-Architektur hat sich im Laufe der Jahre erheblich weiterentwickelt und bietet heute eine Vielzahl von Versionen, die jeweils spezifische Verbesserungen und Optimierungen bringen. Diese Übersicht gibt einen umfassenden Einblick in die verschiedenen Versionen und ihre jeweiligen Merkmale, unterstützt durch Beispiele und visuelle Darstellungen.


CEO Image

Ali Ajjoub

info@ajjoub.com

Adresse 0049-15773651670

Adresse Jacob-winter-platz,1 01239 Dresden

Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

Termin Buchen

Kontaktieren Sie uns

Lassen Sie uns K o n t a k t aufnehmen!