$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Der in diesem Artikel verwendete Datensatz stammt aus dem AS/RS-Bereich der Logistikabteilung der Longyan Tobacco Industry Co., Ltd. Diese Studie umfasste weder menschliche Teilnehmer noch Tiere. Eine ethische Genehmigung war nicht erforderlich.
Datensatzerfassung und -einrichtung
Hardware-Konfiguration: Montage einer Industriekamera (z. B. MV-CA013-A0GM), ausgestattet mit einem 8-mm-Brennweitenobjektiv (z. B. MVL-HF0828M-6MPE), auf der Ladeplattform des Stapelkrans. Verbinden Sie die Kamera mit einem Steuer-PC über ein GigE-Kabel und ein kabelloses AP-Gerät (z. B. BH-ANT5158S-14HV, BH-MS-AC1600HWH). Positionieren Sie eine LED-Streifenlampe (z. B. MV-LLDS-1002-38-W) um die Kamera, um eine gleichmäßige Beleuchtung zu gewährleisten.
Kameraparametereinstellung: Konfigurieren Sie die Kamera mit der Software des Herstellers (z. B. MVS). Stellen Sie die Aufnahmeauflösung auf 1280 x 1024 Pixel ein. Stellen Sie den Trigger-Modus auf Hardware Trigger ein und synchronisieren Sie ihn mit dem Positionierungssystem des Stackerkrans. Stellen Sie die Belichtungszeit auf 100 ms und die Verstärkung auf 5 dB ein, um Bewegungsunschärfe und Rauschen zu minimieren. Der Arbeitsabstand zwischen der Kamera und den Zigarettenschachteln beträgt etwa 550 mm.
Bildsammlung: Eine Industriekamera mit Abzug nimmt jedes Mal automatisch ein Bild auf, wenn ein Tablett während der Lagerung und Abnahme von Zigarettenschachteln positioniert wird. Sammeln Sie insgesamt 4.835 Rohbilder; typische Bilder sind in Abbildung 1 dargestellt.
Bildannotation: Verwenden Sie das Open-Source-Tool LabelImg. Für jedes Bild zeichnen Sie Begrenzungsboxen um jedes sichtbare Merkmal der Zigarettenmarke. Weisen Sie für jedes Begrenzungsfeld den richtigen Markennamen (z. B. Hongzhuang, Gutian) als Klassenetikett zu. Speichere die Annotationen in einem standardisierten einstufigen Erkennungsformat, mit einer txt-Datei pro Bild.
Qualitätskontrolle: Ein zweiter Annotator überprüft zufällig ausgewählte 20 % der annotierten Bilder. Etwaige Unstimmigkeiten werden besprochen und behoben, um die Konsistenz der Beschriftung zu gewährleisten.
Datenaugmentationsstrategie
Dieser Abschnitt beschreibt sowohl traditionelle als auch fortgeschrittene Augmentationstechniken, die auf die Datensätze angewendet werden. Die Anfangsdaten und erweiterten Daten werden zu einem neuen Datensatz kombiniert, der dann in Trainings-, Validierungs- und Testset unterteilt wird, um Fairness in der Bewertung zu gewährleisten.
Traditionelle Datenerweiterung32: Diese Transformationen werden in Echtzeit von der Trainingspipeline (z. B. unter Verwendung der Albumentations- oder PyTorch-Transformations-Bibliotheken) mit einer definierten Wahrscheinlichkeit für jeden Batch angewendet.
Geometrische Transformationen: Rotation: Drehen Sie Bilder zufällig um einen Winkel zwischen -45° und +45°. Skalierung: Bilder werden zufällig um einen Faktor zwischen 0,8 und 1,2 skaliert. Horizontaler Flip: Bilder zufällig horizontal mit 100 % Wahrscheinlichkeit umdrehen. Zufälliges Zuschneiden: Schneiden Sie einen Abschnitt zufällig zwischen 80 % und 100 % des ursprünglichen Bildbereichs zu.
Photometrische Transformationen: Helligkeit und Kontrast: Helligkeit und Kontrast werden durch einen zufällig gewählten Faktor aus [0,6, 1,4] angepasst. Gaußsches Rauschen: Fügen Sie Gaußsches Rauschen mit einer zufällig gewählten Standardabweichung von [0, 0,01 * 255] auf 10 % der Bilder hinzu. Gaußsche Unschärfe: Wende eine Gaußsche Unschärfe mit einer Kerngröße von 3x3 auf 10 % der Bilder an.
Okklusionssimulation: Platzieren Sie zufällig 1 bis 3 rechteckige Okklusionsflecken (die jeweils bis zu 5 % der Bildfläche abdecken) auf die Bilder. Die Patches sind mit zufälligem Rauschen oder mittleren Bildpixelwerten gefüllt.
Fortgeschrittene Datenerweiterung: regionsspezifisches Copy-Paste
Motivation und Wirkung: Die Hauptmotivation für diese gezielte Erweiterung war es, ein kritisches Datenproblem anzugehen: Mehrere Zigarettenmarken hatten nur sehr wenige Fälle (so wenig wie ein Bild). Eine standardisierte Zufalls-Train-Validierungstest-Aufteilung könnte potenziell alle Instanzen einer seltenen Marke einer einzigen Menge zuordnen (z. B. alle dem Testsatz), sodass das Modell keine Möglichkeit hat, diese Marke zu lernen oder zu validieren. Diese Methode hat die Stichprobengröße dieser unterrepräsentierten Marken künstlich erhöht und sichergestellt, dass jede Marke eine ausreichende Anzahl von Beispielen über Trainings-, Validierungs- und Testsets verteilt hat. Dieser grundlegende Schritt verhindert katastrophale Fehlschläge in seltenen Kategorien und ist eine Voraussetzung für jede sinnvolle Modellleistung und Verallgemeinerung auf die gesamte Marke der Marken.
Dieser Schritt erfordert ein vortrainiertes segmentales Basismodell auf dem ursprünglichen Datensatz und dem Segment Anything Model (SAM)33.
Segmentiere Quellobjekte: Für Zigarettenschachtel-Bilder von unterrepräsentierten Marken verwenden Sie das SAM-Modell, um präzise Segmentierungsmasken zu erzeugen. Verwenden Sie den Punktprompt-Modus und klicken Sie auf die Markenfunktion der Zigarettenschachtel , um die Segmentierung zu starten. Validieren und verfeinern Sie generierte Masken manuell, um die Genauigkeit sicherzustellen. Speichere die segmentierten Zigarettenschachtel-Bilder mit transparentem Hintergrund als PNG-Dateien. Dies erzeugt eine Bibliothek isolierter Objektinstanzen.
Hintergrundmasken generieren: Verwenden Sie das vortrainierte segmentale Baseline-Modell, um eine Instanzsegmentierung an einer Reihe von Hintergrundbildern (Bilder mit ausreichend freiem Platz oder einfachen Hintergründen) durchzuführen. Das Modell gibt binäre Masken aus, die die bereits von Objekten besetzten Bereiche anzeigen.
Letzter erweiterter Datensatz: Dieser Offline-Prozess erzeugt 600 neue synthetische Bilder. Kombinieren Sie sie mit den ursprünglichen 4.835 Bildern und weiteren 1.167 Bildern, die durch Anwendung der oben beschriebenen traditionellen Augmentationstechniken erzeugt wurden, um den endgültigen Datensatz von 6.602 Bildern zu bilden. Teilen Sie den finalen Datensatz in Trainingssätze (70 %, 4.621 Bilder), Validierung (20 %, 1.320 Bilder) und Testsätze (10 %, 661 Bilder) auf, um sicherzustellen, dass Bilder aus derselben Originalsequenz innerhalb derselben Aufteilung bleiben, um Datenlecks zu vermeiden.
Modellmodifikation zum Bau des vorgeschlagenen verbesserten Detektors
Optimierte Objekterkennungsalgorithmen34 haben in den letzten Jahren bemerkenswerte Fortschritte in der industriellen Inspektion erzielt. Dieser Abschnitt bietet ein detailliertes, schrittweises Verfahren zur Änderung der Basismodellarchitektur, um das vorgeschlagene Modell zu erstellen. Die Änderungen werden durch die Bearbeitung der Konfigurationsdatei des Modells (z. B. config.yaml) umgesetzt und sichergestellt, dass entsprechende benutzerdefinierte Moduldefinitionen in der Codebasis enthalten sind. Die Begründung für jede Änderung wird angegeben, um ihre Rolle bei der Bewältigung spezifischer Erkennungsherausforderungen zu erläutern. Die Struktur des vorgeschlagenen Modells ist in Abbildung 3 dargestellt.
Ersatz von Downsampling-Modulen durch das ADown-Modul: Das Standardmodul Convolution-BatchNorm-SiLU (CBS), das für das Downsampling verwendet wird, verwendet eine einstufige Faltung, die als Informationsengpass35 fungieren kann und dabei feinkörnige Merkmale aufgibt, die für die Erkennung kleiner Zigarettenschachteln und detaillierte Markenlogos entscheidend sind. Das ADown-Modul ist darauf ausgelegt, dies zu lindern, indem eine Dual-Branch-Struktur implementiert wird, die während der räumlichen Auflösungsreduktion eine reichere Menge an Merkmalen erfasst und erhält. Ein Zweig priorisiert den Erhalt hochfrequenter lokaler Details, während der andere einen breiteren, kontextreicheren Überblick einfängt. Die Verschmelzung dieser komplementären Merkmale führt zu einer robusteren und informativeren Darstellung für nachfolgende Schichten.
Aktions-Implementierungsschritte
Moduldefinition: Stellen Sie sicher, dass ein benutzerdefiniertes PyTorch-Modul namens ADown in den Modelldefinitionsdateien des Projekts definiert ist. Dieses Modul muss zwei parallele Zweige enthalten. Der erste Zweig sollte aus einer zweidimensionalen Faltungsschicht mit einem 3x3-Kern und einem Schritt von 2 bestehen. Der zweite Ast sollte sequentiell aus einer 2x2 Max-Pooling-Schicht (mit Schritt 2) bestehen, gefolgt von einer 1x1 Faltungsschicht. Die Ausgaben dieser beiden Zweige werden entlang der Kanaldimension verkettet, und die resultierende Merkmalsabbildung wird dann durch eine abschließende 1x1-Faltungsschicht geleitet, um die Kanäle zu integrieren und die Ausgabe zu erzeugen. Die Struktur des ADown-Moduls ist in Abbildung 4 dargestellt.
Konfigurationsdatei-Bearbeitung: Öffnen Sie die Basismodell-Konfigurationsdatei (config.yaml). Identifizieren Sie systematisch jede Instanz des CBS-Moduls, die für Downsampling konfiguriert ist (d. h. bei der der Schrittparameter auf 2 gesetzt ist). Ersetze jeden dieser CBS-Moduleinträge durch das neue ADown-Modul.
Designmotivation: Das Design von ADown wird durch die Notwendigkeit motiviert, Informationsverluste bei Standard-Schritt-Faltungen zu mindern, was für kleine Objekte nachteilig sein kann. Seine Dual-Branch-Struktur ist inspiriert von der Idee der parallelen Verarbeitung, um sowohl hochfrequente räumliche Details (durch Faltung) als auch niederfrequente kontextuelle Informationen (durch Pooling) zu erfassen und so eine reichhaltigere mehrskalige Merkmalsrepräsentation für nachfolgende Schichten zu bieten.
Integration des iEMA-Moduls
Begründung und Designprinzip: Um die Fähigkeit des Modells zu verbessern, kleine Ziele und teilweise verdeckte Ziele zu erkennen, ist es unerlässlich, einen Mechanismus zu integrieren, der einen multiskaligen räumlichen Kontext effektiv modellieren kann. Das iEMA-Modul erreicht dies, indem es eine Efficient Multi-scale Attention (EMA)36-Komponente in eine invertierte Residualblock-(iRMB)37-Struktur einbettet. Das iRMB bietet eine recheneffiziente Grundlage mit tiefenseparablen Faltungen, während die EMA-Komponente explizit räumliche Interaktionen über mehrere Zweige erfasst. Diese Integration ermöglicht es dem Modell, Merkmalgewichte dynamisch neu zu kalibrieren und die Aufmerksamkeit auf die diskriminierendsten räumlichen Bereiche über verschiedene Skalen hinweg zu lenken, wodurch die Erkennung unter Okklusion und bei kleinen Objekten verbessert wird.
Aktions-Implementierungsschritte
Moduldefinition: Stellen Sie sicher, dass ein benutzerdefiniertes PyTorch-Modul namens iEMA definiert ist. Dieses Modul sollte zunächst einen invertierten Restblock implementieren. Dieser Block beginnt typischerweise mit einer punktweisen Faltung zur Kanalerweiterung, gefolgt von einer tiefenweisen Faltung (z. B. 3x3) zur räumlichen Merkmalsextraktion und schließlich einer punktweisen Faltung für die Kanalprojektion. Unmittelbar nach diesem Block sollte der EMA-Aufmerksamkeitsmechanismus eingeführt werden. Der EMA-Mechanismus verwendet typischerweise gruppierte Faltungen und dimensionsübergreifende Interaktionen, um effizient eine multiskalierte räumliche Aufmerksamkeitskarte ohne übermäßigen Rechenaufwand zu erzeugen. Die Struktur des iEMA-Moduls ist in Abbildung 5 dargestellt.
Konfigurationsdatei-Bearbeitung: In der config.yaml-Konfigurationsdatei finden Sie die Abschnitte, die das Neck-Netzwerk definieren, insbesondere die Schichten unmittelbar nach den C2f-Modulen. An diesen strategischen Stellen wird eine neue Ebene eingefügt, die das iEMA-Modul aufruft.
Designmotivation: Das iEMA-Modul basiert auf dem Prinzip, die Merkmale-Unterscheidbarkeit zu verbessern, indem lokale Merkmalsextraktion (durch tiefenweise Faltung) mit einem leichten, aber effektiven globalen Kontextmodellierungsmechanismus (EMA) integriert wird. Dieser hybride Ansatz ermöglicht es dem Modell, sich adaptiv auf informative Bereiche über verschiedene Maßstäbe hinweg zu konzentrieren, was entscheidend ist, um teilweise sichtbare Markenlogos und -texte zu erkennen.
Ersatz des Detektionskopfes durch das DynamicHead-Modul
Begründung und Designprinzip: Der ursprüngliche Detektionskopf kann möglicherweise nicht optimal die erhebliche Variation der Zigarettenschachteln und das komplexe Zusammenspiel zwischen Lokalisierungs- und Klassifizierungsaufgaben bewältigen. Das DynamicHead-Modul adressiert dies, indem es drei Formen der Aufmerksamkeit zu einer kohärenten Struktur vereint: maßstabsbewusst, räumlich bewusst und aufgabenbewusste Aufmerksamkeit. Die skalenbewusste Komponente fusioniert dynamisch Features aus verschiedenen Ebenen der Feature-Pyramide und stellt sicher, dass Objekte aller Größen effektiv dargestellt werden. Die räumlich bewusste Komponente verwendet eine Sparse-Sampling-Strategie, um die Rechenressourcen auf die informativsten Regionen innerhalb der Merkmalskarten zu konzentrieren. Die aufgabenbewusste Komponente passt die Merkmalsrepräsentation speziell für die unterschiedlichen Ziele der Begrenzungsbox-Regression und Kategorienklassifikation an. Dieser einheitliche Ansatz führt zu genaueren und robusteren Vorhersagen.
Aktions-Implementierungsschritte
Moduldefinition: Dies ist ein komplexes Modul, das die drei Aufmerksamkeitsmechanismen umfasst, die in den Gleichungen (1) bis (4) beschrieben werden. Seine interne Struktur wird Schichten zur Berechnung skalenweiser Gewichte, zur Durchführung deformierbarer räumlicher Aufmerksamkeit und zur Anwendung aufgabenspezifischer Merkmalstransformationen umfassen.
(1)
(2)
(3)
(4)
Wobei WL(F) die endgültige aufmerksamkeitsoptimierte Merkmalskarte bezeichnet, die durch sequentielle Anwendung der skalenbewussten πL(F), räumlich bewussten πS(F) und aufgabenbewussten πC(F)-Aufmerksamkeitsmechanismen auf das Eingabemerkmal F erhalten wird. Konkret π in Gleichung (2) L(F) berechnet ein skalenweise Aufmerksamkeitsgewicht, indem zunächst über räumliche (S) und Kanal-(C)-Dimensionen gemittelt wird, diese durch eine lineare Funktion f(⋅) und eine hart-sigmoide Aktivierung σ(⋅) geleitet wird. In Gleichung (3) führt π S(F) spärliche räumliche Aufmerksamkeit durch, indem es Merkmale aus K gesampelten Schlüsselpunkten pk aggregiert, jeweils mit einem lernbaren Offset Δpk, um sich auf diskriminierende Regionen und einen wichtigen Skalar Δmk zu konzentrieren. In Gleichung (4) implementiert πC(F) eine aufgabenbewusste Aufmerksamkeit, indem es auf jeden Kanal eine lineare Transformation (gesteuert durch gelernte Parameter (α1, β1,α 2,β 2)) anwendet und die maximale Antwort auswählt, sodass der Kopf sich auf Klassifikations- und Regressionsaufgaben spezialisieren kann. Die Struktur des DynamicHead-Moduls ist in Abbildung 6 dargestellt.
Bearbeitung der Konfigurationsdatei: In der config.yaml-Datei finden Sie den Abschnitt, der den Kopf des Modells definiert, der ursprünglich das Detect-Modul enthält. Ersetze es durch einen neuen Eintrag, der das DynamicHead-Modul aufruft.
Designmotivation: Das DynamicHead-Modul basiert auf der Beobachtung, dass Objekterkennungsköpfe anpassungsfähig an Skalierung, räumliche Lage und Aufgabe sein sollten. Sein einheitlicher Aufmerksamkeitsrahmen, formalisiert in Gleichungen. (1-4), ermöglicht es dem Modell, Merkmalsreaktionen dynamisch auf Basis dieser drei Dimensionen neu zu kalibrieren, was zu robusteren Vorhersagen gegen Skalenschwankungen und Hintergrundüberlastung führt.
Modelltraining
Stellen Sie sicher, dass PyTorch 2.1.0, CUDA 12.1 und alle Abhängigkeiten installiert sind.
Ausbildungskommando
Vor dem Umschulen bereiten Sie die geteilten Bilddaten und Annotationsdaten in einem standardisierten einstufigen Erkennungsformat vor. Erstellen Sie eine .yaml-Datei mit der Bildpfad- und Datenkategorie. Laut der Modellverbesserung wird die ursprüngliche Detektor-.yaml-Datei durch die vorgeschlagene Modell .yaml-Datei ersetzt. Schreiben Sie die train.py-Datei, importieren Sie das einstufige Detektorpaket, laden Sie das Trainingsmodell und den Datenpfad und setzen Sie einige Trainingsparameter, darunter imgze=640, epochs=100, batch=4, workers=0, device='0', optimierer='SGD', close_mosaic=10 usw.
Hyperparameter: Die wichtigsten Parameter sind: Eingabebildgröße (640 x 640), Batchgröße (4), initiale Lernrate (0,01) mit Kosinus-Annealing-Scheduler, SGD-Optimierer mit Impuls (0,937) und Gewichtsabfall (0,0005). Mosaik-Augmentation ist standardmäßig aktiviert.
Trainingsüberwachung: Der Trainingsprozess liefert für jede Epoche Metriken. Überwachen Sie die Kurven auf Trainings-/Validierungsverlust und mAP bei 0,5, um Konvergenz sicherzustellen und Überanpassungen zu vermeiden. Eine Ausbildung über 100 Epochen reicht in der Regel aus.
Modellbewertung und -einführung
Bewertung: Nach dem Training wird das beste Modell als Läufe/Training/Erfahrung/Gewichte/best.pt gespeichert. Evaluiere es am Valset mit: Bash Python val.py --data cigarette_dataset.yaml --weights runs/train/exp/weights/best.pt. Das Skript gibt Precision, Recall, mAP bei 0,5 usw. aus. Bestätigen Sie, dass der mAP die erforderliche Schwelle erfüllt (z. B. 97,9 %).
Inferenz zur Verifikation: Führen Sie Inferenz auf Beispielbildern durch, um die Erkennungsergebnisse visuell zu überprüfen: Bash Python detect.py --weights runs/train/exp/weights/best.pt --source path/to/test/images --conf 0,5. Durch Überprüfung der Argumentation können die Detektionsergebnisse jedes Bildes und die Erkennungsgeschwindigkeit des Modells ermittelt werden.
Bereitstellung: Für die Echtzeit-Bereitstellung auf dem System des Stackerkrans wird das PyTorch-Modell (best.pt, ~4,7 MB) in ein Format wie TensorRT oder ONNX umgewandelt, um eine optimale Inferenzgeschwindigkeit zu gewährleisten. Die endgültige Ausgabe sind Begrenzungsboxen mit Klassenlabels (Markennamen) und Vertrauenswerten.