$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
De dataset die in dit artikel wordt gebruikt, is verkregen uit het AS/RS-veld van de Logistics Department van Longyan Tobacco Industry Co., Ltd. Deze studie betrof geen menselijke deelnemers of dieren. Ethische goedkeuring was niet vereist.
Dataset-acquisitie en -installatie
Hardwareconfiguratie: Monter een industriële camera (bijv. MV-CA013-A0GM) uitgerust met een 8 mm brandpuntslens (bijv. MVL-HF0828M-6MPE) op het laadplatform van de stapelkraan. Verbind de camera met een controle-pc via een GigE-kabel en een draadloos AP-apparaat (bijv. BH-ANT5158S-14HV, BH-MS-AC1600HWH). Plaats een LED-strip (bijv. MV-LLDS-1002-38-W) rond de camera om een uniforme verlichting te garanderen.
Cameraparameters: Configureer de camera met de software van de fabrikant (bijv. MVS). Stel de opnameresolutie in op 1280 x 1024 pixels. Stel de triggermodus in op Hardware Trigger en synchroniseer deze met het positioneringssysteem van de stapelkraan. Stel de belichtingstijd in op 100 ms en de versterking op 5 dB om bewegingsonscherpte en ruis te minimaliseren. De werkafstand tussen de camera en de sigarettendoosjes is ongeveer 550 mm.
Beeldverzameling: Een industriële camera met een trigger maakt automatisch een beeld elke keer dat een tray wordt geplaatst tijdens het opbergen en terughalen van sigarettendoosjes. Verzamel in totaal 4.835 ruwe beelden; typische afbeeldingen zijn te zien in Figuur 1.
Afbeeldingsannotatie: Gebruik de open-source tool LabelImg. Teken voor elke afbeelding begrenzende vakjes rond elk zichtbaar kenmerk van sigarettenmerk. Wijs de juiste merknaam toe (bijv. Hongzhuang, Gutian) als klasselabel voor elke begrenzingsbox. Sla de annotaties op in een standaard enkelvoudig detectieformaat, met één txt-bestand per afbeelding.
Kwaliteitscontrole: Een tweede annotator beoordeelt willekeurig 20% van de geannoteerde afbeeldingen. Eventuele afwijkingen worden besproken en opgelost, zodat de etikettering consistent blijft.
Data-augmentatiestrategie
Deze sectie beschrijft zowel traditionele als geavanceerde augmentatietechnieken die op de datasets worden toegepast. De initiële data en de aangevulde data worden gecombineerd tot een nieuwe dataset, die vervolgens wordt verdeeld in trainingsset, validatieset en testset om eerlijkheid in de evaluatie te waarborgen.
Traditionele data-augmentatie32: Deze transformaties worden in realtime toegepast door de trainingspijplijn (bijvoorbeeld met behulp van de Albumentations- of PyTorch Transforms-bibliotheken) met een gedefinieerde kans voor elke batch.
Geometrische transformaties: Rotatie: Afbeeldingen willekeurig roteren met een hoek tussen -45° en +45°. Schaalvergelijking: Schaal afbeeldingen willekeurig met een factor tussen 0,8 en 1,2. Horizontale omdraai: Afbeeldingen willekeurig horizontaal omdraaien met een kans van 100%. Willekeurige bijsnijding: Snijd willekeurig een gedeelte bij tussen 80% en 100% van het oorspronkelijke beeldgebied.
Fotometrische transformaties: Helderheid en contrast: Pas helderheid en contrast aan met een factor die willekeurig wordt gekozen uit [0,6, 1,4]. Gaussiaanse ruis: Voeg Gaussiaanse ruis toe met een standaarddeviatie die willekeurig wordt gekozen van [0, 0,01 * 255] tot 10% van de beelden. Gaussische blur: Pas een Gaussian blur toe met een kernelgrootte van 3x3 tot 10% van de afbeeldingen.
Occlusiesimulatie: Plaats willekeurig 1 tot 3 rechthoekige occlusiepatches (die elk tot 5% van het beeldoppervlak bedekken) op de beelden. De patches zijn gevuld met willekeurige ruis of gemiddelde pixelwaarden van het beeld.
Geavanceerde data-augmentatie: regio-specifieke copy-paste
Motivatie en impact: De belangrijkste motivatie voor deze gerichte augmentatie was het aanpakken van een belangrijk dataprobleem: verschillende sigarettenmerken hadden zeer weinig gevallen (zo weinig als één afbeelding). Een standaard willekeurige treinvalidatietestsplitsing kan mogelijk alle instanties van een zeldzaam merk aan één set toewijzen (bijvoorbeeld allemaal aan de testset), waardoor het model geen kans krijgt om dat merk te leren of te valideren. Deze methode heeft de steekproefgrootte voor deze ondervertegenwoordigde merken kunstmatig vergroot, zodat elk merk een voldoende aantal gevallen verspreid heeft over de trainings-, validatie- en testsets. Deze fundamentele stap voorkomt catastrofale mislukkingen in zeldzame categorieën en is een voorwaarde voor elke betekenisvolle modelprestatie en generalisatie van de volledige set merken.
Deze stap vereist een vooraf getraind segmenteel basismodel op de initiële dataset en het Segment Anything Model (SAM)33.
Segmentele bronobjecten: Voor sigarettendoosafbeeldingen van ondervertegenwoordigde merken gebruik je het SAM-model om precieze segmentatiemaskers te genereren. Gebruik de puntpromptmodus en klik op de Merkfunctie van de sigarettendoos om segmentatie te starten. Valideer en verfijn handmatig gegenereerde maskers om de nauwkeurigheid te waarborgen. Bewaar de gesegmenteerde sigarettendoosjes met transparante achtergronden als PNG-bestanden. Dit creëert een bibliotheek van geïsoleerde objectinstanties.
Genereer achtergrondmaskers: Gebruik het vooraf getrainde segmentale baselinemodel om instance-segmentatie uit te voeren op een set achtergrondafbeeldingen (afbeeldingen met voldoende vrije ruimte of eenvoudige achtergronden). Het model zal binaire maskers uitvoeren die de gebieden aangeven die al door objecten worden bezet.
Procesmaskers en plakobjecten: Voor elk achtergrondmasker gebruik je de OpenCV-bibliotheek ('cv2.approxPolyDP'-functie met een epsilonfactor van 0,02 * contouromtrek) om curve fitting uit te voeren en de maskerranden te lineariseren, waardoor een vereenvoudigde polygonweergave van de vrije ruimte wordt verworven. Identificeer het grootste aaneengesloten polygongebied binnen het achtergrondmasker als het doel-pastagebied. Selecteer willekeurig een gesegmenteerd bronobject uit de bibliotheek. Verander de grootte (behoud van de beeldverhouding) en pas een affiene transformatie toe (kleine rotatie tussen -5° en +5°, en lichte schuif) zodat deze natuurlijk binnen het doelpastegebied past, zodat het niet overlapt met de grenzen van bestaande objecten. Gebruik alpha blending om het getransformeerde object naadloos op de achtergrondafbeelding op de berekende locatie te plakken. Het algemene kader van data-augmentatietechnologie gebaseerd op de copy-paste-techniek in specifieke gebieden wordt weergegeven in Figuur 2. Genereer programmatisch een bijpassend nieuw txt-annotatiebestand voor het geplakte object, waarbij de coördinaten van de begrenzingsbox en het klasselabel worden bijgewerkt.
Laatste uitgebreide dataset: Dit offline proces genereert 600 nieuwe synthetische afbeeldingen. Combineer deze met de oorspronkelijke 4.835 afbeeldingen en nog eens 1.167 beelden die zijn gegenereerd door de traditionele augmentatietechnieken zoals hierboven beschreven toe te passen, om de uiteindelijke dataset van 6.602 afbeeldingen te vormen. Splits de uiteindelijke dataset op in trainingssets (70%, 4.621 afbeeldingen), validatie (20%, 1.320 afbeeldingen) en testsets (10%, 661 afbeeldingen), zodat beelden uit dezelfde oorspronkelijke sequentie binnen dezelfde splitsing blijven om datalekken te voorkomen.
Modelaanpassing voor het bouwen van de voorgestelde verbeterde detector
Geoptimaliseerde algoritmen voor objectdetectie34 hebben de afgelopen jaren aanzienlijke vooruitgang geboekt in industriële inspectie. Deze sectie biedt een gedetailleerde, stapsgewijze procedure voor het aanpassen van de basismodelarchitectuur om het voorgestelde model te creëren. De aanpassingen worden geïmplementeerd door het configuratiebestand van het model (bijv. config.yaml) te bewerken en ervoor te zorgen dat overeenkomstige aangepaste moduledefinities in de codebase zijn opgenomen. De motivatie voor elke wijziging wordt gegeven om de rol ervan bij het aanpakken van specifieke detectieproblemen te verduidelijken. De structuur van het voorgestelde model is weergegeven in Figuur 3.
Vervanging van downsamplingmodules door de ADown-module: De standaard Convolution-BatchNorm-SiLU (CBS) module die wordt gebruikt voor downsampling gebruikt een single strided convolutie, die kan fungeren als een informatiebottleneck35, waarbij mogelijk fijnmazige kenmerken worden weggegooid die cruciaal zijn voor het herkennen van kleine sigarettendoosjes en gedetailleerde merklogo's. De ADown-module is ontworpen om dit te verlichten door een dual-branch structuur te implementeren die een rijkere set kenmerken vastlegt en behoudt tijdens het verminderen van de ruimtelijke resolutie. De ene tak geeft prioriteit aan het behouden van hoogfrequente lokale details, terwijl de andere een breder, contextrijk overzicht vastlegt. De samensmelting van deze complementaire kenmerken resulteert in een robuustere en informatievere representatie voor latere lagen.
Actie-implementatiestappen
Moduledefinitie: Zorg ervoor dat een aangepaste PyTorch-module genaamd ADown is gedefinieerd binnen de modeldefinitiebestanden van het project. Deze module moet twee parallelle vertakkingen bevatten. De eerste tak moet bestaan uit een tweedimensionale convolutielaag met een 3x3 kern en een stride van 2. De tweede tak moet sequentieel bestaan uit een 2x2 max-poolinglaag (met stride 2) gevolgd door een 1x1 convolutielaag. De uitgangen van deze twee takken worden langs de kanaaldimensie samengevoegd, waarna de resulterende featuremap door een laatste 1x1 convolutielaag wordt gestuurd om de kanalen te integreren en de output te produceren. De structuur van de ADown-module is weergegeven in Figuur 4.
Bewerking van configuratiebestand: Open het basismodelconfiguratiebestand (config.yaml). Identificeer systematisch elke instantie van de CBS-module die is geconfigureerd voor downsampling (d.w.z. waarbij de stride-parameter op 2 is gezet). Vervang elk van deze CBS-modulevermeldingen door de nieuwe ADown-module.
Ontwerpmotivatie: Het ontwerp van ADown wordt gemotiveerd door de noodzaak om informatieverlies in standaard getrapte convoluties te beperken, wat nadelig kan zijn voor kleine objecten. De dual-branch structuur is geïnspireerd op het idee van parallelle verwerking om zowel hoogfrequente ruimtelijke details (via convolutie) als laagfrequente contextuele informatie (via pooling) vast te leggen, waardoor een rijkere multi-scale feature-representatie voor volgende lagen mogelijk wordt.
Integratie van de iEMA-module
Redenering en ontwerpprincipe: Om het vermogen van het model te verbeteren om kleine doelen en gedeeltelijk verduisterde doelen te detecteren, is het essentieel een mechanisme te integreren dat effectief multischaal ruimtelijke context kan modelleren. De iEMA-module bereikt dit door een Efficient Multi-scale Attention (EMA)36-component in een omgekeerd residueel blok (iRMB)37-structuur in te betten. De iRMB biedt een computationeel efficiënte basis met behulp van diepte-separabele convoluties, terwijl de EMA-component expliciet ruimtelijke interacties op verschillende schaalniveaus vastlegt via een parallel multi-branch ontwerp. Deze integratie stelt het model in staat om featuregewichten dynamisch te herkalibreren, waarbij de aandacht wordt gericht op de meest onderscheidende ruimtelijke gebieden over verschillende schalen, waardoor de herkenning onder occlusie en voor kleine objecten verbetert.
Actie-implementatiestappen
Moduledefinitie: Zorg ervoor dat een aangepaste PyTorch-module genaamd iEMA is gedefinieerd. Deze module moet eerst een omgekeerd residueel blok implementeren. Dit blok begint doorgaans met een puntgewijze convolutie voor kanaalexpansie, gevolgd door een diepteconvolutie (bijv. 3x3) voor ruimtelijke feature-extractie, en tenslotte een puntgewijze convolutie voor kanaalprojectie. Direct na deze blokkade moet het EMA-aandachtsmechanisme worden ingevoerd. Het EMA-mechanisme maakt doorgaans gebruik van gegroepeerde convoluties en cross-dimensionale interacties om efficiënt een ruimtelijke aandachtskaart op meerdere schaalniveaus te genereren zonder overmatige rekenkundige overhead. De structuur van de iEMA-module is weergegeven in Figuur 5.
Bewerking van configuratiebestanden: In het configuratiebestand config.yaml vind je de secties die het neknetwerk definiëren, specifiek de lagen direct na de C2f-modules. Op deze strategische locaties voeg je een nieuwe laag in die de iEMA-module aanroept.
Ontwerpmotivatie: De iEMA-module is gebaseerd op het principe om de discriminatie van kenmerken te verbeteren door lokale feature-extractie (via diepteconvolutie) te integreren met een lichtgewicht maar effectief global context modeling mechanism (EMA). Deze hybride aanpak stelt het model in staat zich adaptief te richten op informatieve gebieden op verschillende schalen, wat cruciaal is voor het herkennen van gedeeltelijk zichtbare merklogo's en tekst.
Vervanging van de detectiekop door de DynamicHead-module
Redenering en ontwerpprincipe: De oorspronkelijke detectiekop kan mogelijk niet optimaal omgaan met de aanzienlijke schaalvariatie van sigarettendoosjes en de complexe wisselwerking tussen lokalisatie- en classificatietaken. De DynamicHead-module pakt dit aan door drie vormen van aandacht te verenigen tot een coherente structuur: schaalbewust, ruimtelijk bewust en taakbewuste aandacht. De schaalbewuste component fuseert dynamisch features van verschillende niveaus van de feature-piramide, zodat objecten van alle groottes effectief worden weergegeven. De ruimtelijk bewuste component gebruikt een sparse samplingstrategie om de rekenkracht te richten op de meest informatieve gebieden binnen de featuremaps. De taakbewuste component past de feature-representatie specifiek aan voor de specifieke doelstellingen van bounding box-regressie en categorieclassificatie. Deze uniforme aanpak leidt tot nauwkeurigere en robuustere voorspellingen.
Actie-implementatiestappen
Moduledefinitie: Dit is een complexe module die de drie aandachtsmechanismen omvat die worden beschreven door vergelijkingen (1) tot en met (4). De interne structuur zal lagen bevatten voor het berekenen van schaalgewijze gewichten, het uitvoeren van vervormbare ruimtelijke aandacht en het toepassen van taakspecifieke feature-transformaties.
(1)
(2)
(3)
(4)
Waar WL(F) de uiteindelijke aandacht-verfijnde featuremap aanduidt, verkregen door sequentieel de schaalbewuste πL(F), ruimtelijk-bewuste πS(F) en taakbewuste πC(F)-aandachtsmechanismen toe te passen op de invoerfunctie F. Specifiek, in vergelijking (2), πL(F)) berekent een schaalgewijze aandachtsgewicht door eerst te middelen over ruimtelijke (S) en kanaal (C) dimensies, dit door een lineaire functie f(⋅) en een hard-sigmoïde activatie σ(⋅) te laten gaan. In vergelijking (3) verricht πS(F) spaarzame ruimtelijke aandacht door kenmerken te aggregeren van K bemonsterde sleutelpunten pk, elk met een leerbare offset Δpk om zich te richten op discriminerende gebieden en een belangrijke scalair Δmk. In vergelijking (4) implementeert πC(F) een taakbewuste aandacht door een lineaire transformatie toe te passen (beheerst door geleerde parameters (α1, β1,α 2,β 2)) op elk kanaal en het maximale antwoord te selecteren, waardoor de hoofd zich kan specialiseren voor classificatie- en regressietaken. De structuur van de DynamicHead-module wordt weergegeven in Figuur 6.
Bewerking van configuratiebestanden: In het config.yaml-bestand vind je de sectie die het hoofd van het model definieert, dat oorspronkelijk de Detect-module bevat. Vervang het door een nieuwe invoer die de DynamicHead-module aanroept.
Ontwerpmotivatie: De DynamicHead-module is gebaseerd op de observatie dat objectdetectiekoppen adaptief moeten zijn voor schaal, ruimtelijke locatie en taak. Het eenheid van aandachtsraamwerk, geformaliseerd in Eqs. (1-4), stelt het model in staat om feature-responsen dynamisch te herkalibreren op basis van deze drie dimensies, wat leidt tot robuustere voorspellingen tegen schaalvariatie en achtergrondrommel.
Modeltraining
Zorg ervoor dat PyTorch 2.1.0, CUDA 12.1 en alle afhankelijkheden zijn geïnstalleerd.
Opleidingscommando
Bereid vóór de hertraining de verdeelde beeldgegevens en de annotatiegegevens voor in een standaard enkelvoudig detectieformaat. Maak een .yaml-bestand aan met het afbeeldingspad en de datacategorie. Volgens de modelverbetering wordt het oorspronkelijke detector .yaml-bestand vervangen door het voorgestelde model .yaml-bestand. Schrijf het train.py-bestand, importeer het single-stage detectorpakket, laad het trainingsmodel en het datapad, en stel enkele trainingsparameters in, waaronder imgze=640, epochs=100, batch=4, workers=0, device='0', optimizer='SGD', close_mosaic=10, enzovoort.
Hyperparameters: De belangrijkste parameters zijn: inputbeeldgrootte (640 x 640), batchgrootte (4), initiële leersnelheid (0,01) met cosinus-annealing scheduler, SGD-optimizer met impuls (0,937) en gewichtsafname (0,0005). Mozaïekaugmentatie is standaard ingeschakeld.
Trainingsmonitoring: Het trainingsproces levert metrieken voor elk tijdperk. Monitor de curves op trainings-/validatieverlies en mAP bij 0,5 om convergentie te waarborgen en overfitting te voorkomen. Training voor 100 epochs is doorgaans voldoende.
Modelevaluatie en -implementatie
Evaluatie: Na training wordt het beste model opgeslagen als runs/train/exp/weights/best.pt. Evalueer het op de valset met: bash python val.py --data cigarette_dataset.yaml --weights runs/train/exp/weights/best.pt. Het script geeft Precision, Recall, mAP op 0,5, enzovoort. Bevestig dat de mAP aan de vereiste drempel voldoet (bijv. 97,9%).
Inferentie voor verificatie: Voer inferentie uit op voorbeeldafbeeldingen om detectieresultaten visueel te verifiëren: bash python detect.py --weights runs/train/exp/weights/best.pt --source path/to/test/images --conf 0.5. Door de redenering te verifiëren, kunnen de detectieresultaten van elk beeld en de detectiesnelheid van het model worden verkregen.
Implementatie: Voor realtime implementatie op het systeem van de stapelkraan, converteer het PyTorch-model (best.pt, ~4,7 MB) naar een formaat zoals TensorRT of ONNX voor geoptimaliseerde inferentiesnelheid. De uiteindelijke output bestaat uit bounding boxes met klassenlabels (merknamen) en betrouwbaarheidsscores.