Best Practices für maschinelles Lernen und Tipps für das Modelltraining
Einführung
Einer der wichtigsten Schritte bei der Arbeit an einem Computer Vision Projekt ist das Modelltraining. Bevor du zu diesem Schritt kommst, musst du deine Ziele definieren und deine Daten sammeln und beschriften. Nachdem du die Daten vorverarbeitet hast, um sicherzustellen, dass sie sauber und konsistent sind, kannst du mit dem Training deines Modells fortfahren.
Pass auf: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and [Mixed Precision](https://www.ultralytics.com/glossary/mixed-precision)
Was ist also Modelltraining? Beim Modelltraining wird deinem Modell beigebracht, visuelle Muster zu erkennen und Vorhersagen auf der Grundlage deiner Daten zu treffen. Es wirkt sich direkt auf die Leistung und Genauigkeit deiner Anwendung aus. In diesem Leitfaden stellen wir dir Best Practices, Optimierungstechniken und Tipps zur Fehlerbehebung vor, damit du deine Computer Vision Modelle effektiv trainieren kannst.
How to Train a Machine Learning Model
Ein Computer-Vision-Modell wird trainiert, indem seine internen Parameter angepasst werden, um Fehler zu minimieren. Zu Beginn wird das Modell mit einer großen Anzahl von beschrifteten Bildern gefüttert. Es macht Vorhersagen darüber, was in diesen Bildern enthalten ist, und die Vorhersagen werden mit den tatsächlichen Beschriftungen oder Inhalten verglichen, um Fehler zu berechnen. Diese Fehler zeigen, wie weit die Vorhersagen des Modells von den tatsächlichen Werten abweichen.
During training, the model iteratively makes predictions, calculates errors, and updates its parameters through a process called backpropagation. In this process, the model adjusts its internal parameters (weights and biases) to reduce the errors. By repeating this cycle many times, the model gradually improves its accuracy. Over time, it learns to recognize complex patterns such as shapes, colors, and textures.
This learning process makes it possible for the computer vision model to perform various tasks, including object detection, instance segmentation, and image classification. The ultimate goal is to create a model that can generalize its learning to new, unseen images so that it can accurately understand visual data in real-world applications.
Nachdem wir nun wissen, was hinter den Kulissen passiert, wenn wir ein Modell trainieren, sehen wir uns die Punkte an, die beim Trainieren eines Modells zu berücksichtigen sind.
Training mit großen Datensätzen
Wenn du einen großen Datensatz zum Trainieren eines Modells verwenden willst, gibt es einige Aspekte, die du beachten solltest. Du kannst z. B. die Stapelgröße anpassen, die Nutzung von GPU steuern, das Multiskalentraining wählen usw. Gehen wir jede dieser Optionen im Detail durch.
Chargengröße und GPU Auslastung
Wenn du Modelle auf großen Datensätzen trainierst, ist es wichtig, deine GPU effizient zu nutzen. Die Batchgröße ist ein wichtiger Faktor. Sie ist die Anzahl der Datenproben, die ein maschinelles Lernmodell in einer einzigen Trainingsiteration verarbeitet. Wenn du die maximale Stapelgröße verwendest, die von deinem GPU unterstützt wird, kannst du seine Fähigkeiten voll ausschöpfen und die Zeit, die das Modelltraining benötigt, reduzieren. Du solltest jedoch vermeiden, dass dir der GPU Speicher ausgeht. Wenn du auf Speicherfehler stößt, reduziere die Stapelgröße schrittweise, bis das Modell reibungslos trainiert.
With respect to YOLO11, you can set the batch_size
Parameter in der Trainingskonfiguration um deine GPU Kapazität anzupassen. Auch die Einstellung batch=-1
in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.
Subset-Schulung
Das Training von Teilmengen ist eine intelligente Strategie, bei der das Modell mit einem kleineren Datensatz trainiert wird, der den größeren Datensatz darstellt. Es kann Zeit und Ressourcen sparen, insbesondere bei der anfänglichen Modellentwicklung und beim Testen. Wenn Sie wenig Zeit haben oder mit verschiedenen Modellkonfigurationen experimentieren, ist das Training von Teilmengen eine gute Option.
When it comes to YOLO11, you can easily implement subset training by using the fraction
Parameter. Mit diesem Parameter können Sie angeben, welcher Anteil des Datasets für das Training verwendet werden soll. Zum Beispiel das Setzen von fraction=0.1
trainiert Ihr Modell mit 10 % der Daten. Sie können diese Technik für schnelle Iterationen und die Optimierung Ihres Modells verwenden, bevor Sie ein Modell mit einem vollständigen Datensatz trainieren. Subset-Schulungen helfen Ihnen, schnelle Fortschritte zu erzielen und potenzielle Probleme frühzeitig zu erkennen.
Multiskaliges Training
Multiskalentraining ist eine Technik, die die Verallgemeinerungsfähigkeit deines Modells verbessert, indem du es auf Bildern unterschiedlicher Größe trainierst. Dein Modell kann lernen, Objekte in verschiedenen Maßstäben und Entfernungen zu erkennen und wird dadurch robuster.
For example, when you train YOLO11, you can enable multiscale training by setting the scale
Parameter. Dieser Parameter passt die Größe von Trainingsbildern um einen bestimmten Faktor an und simuliert Objekte in unterschiedlichen Entfernungen. Zum Beispiel das Setzen von scale=0.5
wird die Bildgröße um die Hälfte reduziert, während scale=2.0
wird es verdoppeln. Durch die Konfiguration dieses Parameters kann Ihr Modell eine Vielzahl von Bildmaßstäben anwenden und seine Erkennungsfunktionen für verschiedene Objektgrößen und Szenarien verbessern.
Caching
Caching ist eine wichtige Technik, um die Effizienz beim Training von Machine-Learning-Modellen zu verbessern. Durch die Speicherung vorverarbeiteter Bilder im Arbeitsspeicher reduziert das Caching die Zeit, die GPU auf das Laden der Daten von der Festplatte wartet. Das Modell kann kontinuierlich Daten empfangen, ohne dass es zu Verzögerungen durch E/A-Vorgänge auf der Festplatte kommt.
Caching can be controlled when training YOLO11 using the cache
Parameter:
cache=True
: Speichert Datensatzbilder im RAM und bietet die schnellste Zugriffsgeschwindigkeit, jedoch auf Kosten einer erhöhten Speichernutzung.cache='disk'
: Speichert die Bilder auf der Festplatte, langsamer als RAM, aber schneller als jedes Mal neue Daten zu laden.cache=False
: Deaktiviert das Caching und verlässt sich vollständig auf die Datenträger-E/A, was die langsamste Option ist.
Gemischtes Präzisionstraining
Mixed precision training uses both 16-bit (FP16) and 32-bit (FP32) floating-point types. The strengths of both FP16 and FP32 are leveraged by using FP16 for faster computation and FP32 to maintain precision where needed. Most of the neural network's operations are done in FP16 to benefit from faster computation and lower memory usage. However, a master copy of the model's weights is kept in FP32 to ensure accuracy during the weight update steps. You can handle larger models or larger batch sizes within the same hardware constraints.
To implement mixed precision training, you'll need to modify your training scripts and ensure your hardware (like GPUs) supports it. Many modern deep learning frameworks, such as Tensorflow, offer built-in support for mixed precision.
Mixed precision training is straightforward when working with YOLO11. You can use the amp
in Ihrer Trainingskonfiguration. Einstellung amp=True
ermöglicht das AMP-Training (Automatic Mixed Precision). Das Training mit gemischter Genauigkeit ist eine einfache, aber effektive Möglichkeit, Ihren Modelltrainingsprozess zu optimieren.
Vortrainierte Gewichte
Using pretrained weights is a smart way to speed up your model's training process. Pretrained weights come from models already trained on large datasets, giving your model a head start. Transfer learning adapts pretrained models to new, related tasks. Fine-tuning a pre-trained model involves starting with these weights and then continuing training on your specific dataset. This method of training results in faster training times and often better performance because the model starts with a solid understanding of basic features.
Die pretrained
parameter makes transfer learning easy with YOLO11. Setting pretrained=True
verwendet vortrainierte Standardgewichtungen, oder Sie können einen Pfad zu einem benutzerdefinierten vortrainierten Modell angeben. Die Verwendung von vortrainierten Gewichten und Transferlernen steigert effektiv die Fähigkeiten Ihres Modells und senkt die Trainingskosten.
Andere Techniken, die beim Umgang mit einem großen Datensatz zu berücksichtigen sind
Es gibt einige andere Techniken, die beim Umgang mit einem großen Datensatz zu berücksichtigen sind:
- Learning Rate Schedulers: Implementing learning rate schedulers dynamically adjusts the learning rate during training. A well-tuned learning rate can prevent the model from overshooting minima and improve stability. When training YOLO11, the
lrf
hilft bei der Verwaltung der Lernratenplanung, indem die endgültige Lernrate als Bruchteil der ursprünglichen Rate festgelegt wird. - Verteiltes Training: Bei der Verarbeitung großer Datensätze kann verteiltes Training eine entscheidende Rolle spielen. Du kannst die Trainingszeit verkürzen, indem du die Trainingslast auf mehrere GPUs oder Maschinen verteilst.
Die Anzahl der Epochen, für die trainiert werden muss
Beim Trainieren eines Modells bezieht sich eine Epoche auf einen vollständigen Durchlauf durch den gesamten Trainingsdatensatz. Während einer Epoche verarbeitet das Modell jedes Beispiel im Trainingssatz einmal und aktualisiert seine Parameter basierend auf dem Lernalgorithmus. In der Regel sind mehrere Epochen erforderlich, damit das Modell seine Parameter im Laufe der Zeit lernen und verfeinern kann.
A common question that comes up is how to determine the number of epochs to train the model for. A good starting point is 300 epochs. If the model overfits early, you can reduce the number of epochs. If overfitting does not occur after 300 epochs, you can extend the training to 600, 1200, or more epochs.
However, the ideal number of epochs can vary based on your dataset's size and project goals. Larger datasets might require more epochs for the model to learn effectively, while smaller datasets might need fewer epochs to avoid overfitting. With respect to YOLO11, you can set the epochs
-Parameter in Ihrem Trainingsskript.
Frühes Stoppen
Ein frühzeitiges Stoppen ist eine wertvolle Technik zur Optimierung des Modelltrainings. Durch Überwachen der Validierungsleistung können Sie das Training beenden, sobald sich das Modell nicht mehr verbessert. Sie können Rechenressourcen sparen und eine Überanpassung verhindern.
The process involves setting a patience parameter that determines how many epochs to wait for an improvement in validation metrics before stopping training. If the model's performance does not improve within these epochs, training is stopped to avoid wasting time and resources.
For YOLO11, you can enable early stopping by setting the patience parameter in your training configuration. For example, patience=5
bedeutet, dass das Training beendet wird, wenn sich die Validierungsmetriken für 5 aufeinanderfolgende Epochen nicht verbessern. Die Verwendung dieser Methode stellt sicher, dass der Trainingsprozess effizient bleibt und eine optimale Leistung ohne übermäßige Berechnungen erzielt wird.
Wahl zwischen Cloud- und lokalem Training
Es gibt zwei Optionen zum Trainieren Ihres Modells: Cloudtraining und lokales Training.
Cloud-Training bietet Skalierbarkeit und leistungsstarke Hardware und ist ideal für die Bearbeitung großer Datensätze und komplexer Modelle. Plattformen wie Google Cloud, AWS und Azure bieten On-Demand-Zugang zu leistungsstarken GPUs und TPUs, was die Trainingszeiten beschleunigt und Experimente mit größeren Modellen ermöglicht. Allerdings kann das Training in der Cloud teuer sein, vor allem über längere Zeiträume, und die Datenübertragung kann die Kosten und die Latenzzeit erhöhen.
Lokale Schulungen bieten mehr Kontrolle und Anpassung, sodass Sie Ihre Umgebung an spezifische Anforderungen anpassen und laufende Cloud-Kosten vermeiden können. Es kann für langfristige Projekte wirtschaftlicher sein, und da Ihre Daten vor Ort bleiben, sind sie sicherer. Lokale Hardware kann jedoch Ressourcenbeschränkungen aufweisen und Wartung erfordern, was bei großen Modellen zu längeren Trainingszeiten führen kann.
Auswahl eines Optimierers
An optimizer is an algorithm that adjusts the weights of your neural network to minimize the loss function, which measures how well the model is performing. In simpler terms, the optimizer helps the model learn by tweaking its parameters to reduce errors. Choosing the right optimizer directly affects how quickly and accurately the model learns.
Sie können auch Optimierungsparameter optimieren, um die Modellleistung zu verbessern. Durch Anpassen der Lernrate wird die Größe der Schritte beim Aktualisieren von Parametern festgelegt. Aus Gründen der Stabilität können Sie mit einer moderaten Lernrate beginnen und diese im Laufe der Zeit schrittweise verringern, um das langfristige Lernen zu verbessern. Darüber hinaus bestimmt das Festlegen des Momentums, wie viel Einfluss vergangene Updates auf aktuelle Updates haben. Ein üblicher Wert für das Momentum liegt bei etwa 0,9. Es sorgt im Allgemeinen für eine gute Balance.
Allgemeine Optimierer
Verschiedene Optimierer haben unterschiedliche Stärken und Schwächen. Werfen wir einen Blick auf einige gängige Optimierer.
-
SGD (Stochastischer Gradientenabstieg):
- Aktualisiert Modellparameter mithilfe des Gradienten der Verlustfunktion in Bezug auf die Parameter.
- Einfach und effizient, kann aber langsam konvergieren und in lokalen Minima stecken bleiben.
-
Adam (Adaptive Moment Estimation):
- Kombiniert die Vorteile von SGD mit Momentum und RMSProp.
- Passt die Lernrate für jeden Parameter basierend auf Schätzungen des ersten und zweiten Moments der Farbverläufe an.
- Gut geeignet für verrauschte Daten und spärliche Farbverläufe.
- Efficient and generally requires less tuning, making it a recommended optimizer for YOLO11.
-
RMSProp (Root Mean Square Propagation):
- Passt die Lernrate für jeden Parameter an, indem der Gradient durch einen laufenden Durchschnitt der Größen der letzten Gradienten dividiert wird.
- Helps in handling the vanishing gradient problem and is effective for recurrent neural networks.
For YOLO11, the optimizer
können Sie aus verschiedenen Optimierern wählen, darunter SGD, Adam, AdamW, NAdam, RAdam und RMSProp, oder Sie können ihn auf auto
für die automatische Auswahl basierend auf der Modellkonfiguration.
Verbindung mit der Gemeinschaft
Teil einer Community von Computer-Vision-Enthusiasten zu sein, kann Ihnen helfen, Probleme zu lösen und schneller zu lernen. Hier sind einige Möglichkeiten, sich zu vernetzen, Hilfe zu erhalten und Ideen auszutauschen.
Ressourcen der Gemeinschaft
- GitHub Issues: Visit the YOLO11 GitHub repository and use the Issues tab to ask questions, report bugs, and suggest new features. The community and maintainers are very active and ready to help.
- Ultralytics Discord Server: Tritt dem Ultralytics Discord-Server bei, um mit anderen Nutzern und Entwicklern zu chatten, Unterstützung zu erhalten und deine Erfahrungen zu teilen.
Offizielle Dokumentation
- Ultralytics YOLO11 Documentation: Check out the official YOLO11 documentation for detailed guides and helpful tips on various computer vision projects.
Die Verwendung dieser Ressourcen hilft Ihnen, Herausforderungen zu lösen und über die neuesten Trends und Praktiken in der Community für maschinelles Sehen auf dem Laufenden zu bleiben.
Wichtige Erkenntnisse
Training computer vision models involves following good practices, optimizing your strategies, and solving problems as they arise. Techniques like adjusting batch sizes, mixed precision training, and starting with pre-trained weights can make your models work better and train faster. Methods like subset training and early stopping help you save time and resources. Staying connected with the community and keeping up with new trends will help you keep improving your model training skills.
FAQ
Wie kann ich die Nutzung von GPU verbessern, wenn ich einen großen Datensatz mit Ultralytics YOLO trainiere?
Um die Auslastung von GPU zu verbessern, solltest du die batch_size
parameter in your training configuration to the maximum size supported by your GPU. This ensures that you make full use of the GPU's capabilities, reducing training time. If you encounter memory errors, incrementally reduce the batch size until training runs smoothly. For YOLO11, setting batch=-1
in deinem Trainingsskript wird automatisch die optimale Stapelgröße für eine effiziente Verarbeitung ermittelt. Weitere Informationen findest du in der Trainingskonfiguration.
What is mixed precision training, and how do I enable it in YOLO11?
Mixed precision training utilizes both 16-bit (FP16) and 32-bit (FP32) floating-point types to balance computational speed and precision. This approach speeds up training and reduces memory usage without sacrificing model accuracy. To enable mixed precision training in YOLO11, set the amp
Parameter zu True
in deiner Trainingskonfiguration. Dadurch wird das AMP-Training (Automatic Mixed Precision) aktiviert. Weitere Informationen zu dieser Optimierungstechnik findest du in der Trainingskonfiguration.
How does multiscale training enhance YOLO11 model performance?
Multiscale training enhances model performance by training on images of varying sizes, allowing the model to better generalize across different scales and distances. In YOLO11, you can enable multiscale training by setting the scale
Parameter in der Trainingskonfiguration. Zum Beispiel, scale=0.5
reduziert die Bildgröße um die Hälfte, während scale=2.0
verdoppelt sie. Diese Technik simuliert Objekte in unterschiedlichen Entfernungen und macht das Modell in verschiedenen Szenarien robuster. Die Einstellungen und weitere Details findest du in der Trainingskonfiguration.
How can I use pre-trained weights to speed up training in YOLO11?
Using pre-trained weights can significantly reduce training times and improve model performance by starting from a model that already understands basic features. In YOLO11, you can set the pretrained
Parameter zu True
oder gib in deiner Trainingskonfiguration einen Pfad zu benutzerdefinierten, vortrainierten Gewichten an. Bei diesem Ansatz, der als Transfer-Lernen bekannt ist, wird das Wissen aus großen Datensätzen genutzt, um es an deine spezielle Aufgabe anzupassen. Erfahre mehr über vortrainierte Gewichte und ihre Vorteile hier.
What is the recommended number of epochs for training a model, and how do I set this in YOLO11?
The number of epochs refers to the complete passes through the training dataset during model training. A typical starting point is 300 epochs. If your model overfits early, you can reduce the number. Alternatively, if overfitting isn't observed, you might extend training to 600, 1200, or more epochs. To set this in YOLO11, use the epochs
Parameter in deinem Trainingsskript. Weitere Hinweise zur Bestimmung der idealen Anzahl von Epochen findest du in diesem Abschnitt über Anzahl der Epochen.