$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Zbiór danych użyty w tym artykule został pozyskany z działu AS/RS w Dziale Logistyki firmy Longyan Tobacco Industry Co., Ltd. Badanie to nie obejmowało uczestników ani zwierząt. Nie wymagała się etycznego zatwierdzenia.
Pozyskiwanie i konfiguracja zbioru danych
Konfiguracja sprzętowa: Zamontowanie przemysłowego aparatu (np. MV-CA013-A0GM) wyposażonego w obiektyw o ogniskowej 8 mm (np. MVL-HF0828M-6MPE) na platformie ładunkowej dźwigu stackera. Podłącz aparat do komputera sterującego za pomocą kabla GigE i bezprzewodowego AP (np. BH-ANT5158S-14HV, BH-MS-AC1600HWH). Umieść wokół kamery paskowe światło LED (np. MV-LLDS-1002-38-W), aby zapewnić równomierne oświetlenie.
Ustawienie parametrów aparatu: Konfiguruj kamerę za pomocą oprogramowania producenta (np. MVS). Ustaw rozdzielczość akwizycji na 1280 x 1024 pikseli. Ustaw tryb spustu na Hardware Trigger i zsynchronizuj go z systemem pozycjonowania dźwigu stackera. Ustaw czas naświetlania na 100 ms i wzmocnienie na 5 dB, aby zminimalizować rozmycie ruchu i szumy. Odległość robocze między aparatem a pudełkami papierosów wynosi około 550 mm.
Zbieranie zdjęć: Przemysłowa kamera z wyzwalaczem automatycznie rejestruje obraz za każdym razem, gdy taca jest ustawiana podczas przechowywania i wybierania pudełek po papierosach. Zebrać łącznie 4 835 zdjęć RAW; typowe obrazy pokazano na Rysunku 1.
Adnotacje do obrazów: Użyj otwartoźródłowego narzędzia LabelImg. Dla każdego zdjęcia narysuj ramki ograniczające każdą widoczną cechę marki papierosów. Przypisz właściwą nazwę marki (np. Hongzhuang, Gutian) jako etykietę klasy dla każdego ramki ograniczającej. Zapisz adnotacje w standardowym formacie detekcji jednostopniowej, z jednym plikiem txt na obraz.
Kontrola jakości: Drugi adnotator przegląda losowo wybrane 20% obrazów z adnotacjami. Wszelkie rozbieżności są omawiane i rozwiązywane, co zapewnia spójność etykietowania.
Strategia augmentacji danych
Ta sekcja opisuje zarówno tradycyjne, jak i zaawansowane techniki augmentacji stosowane do zbiorów danych. Dane początkowe i rozszerzone są łączone w nowy zbiór danych, który następnie dzieli się na zestaw treningowy, zbiór walidacyjny oraz zbiór testowy, aby zapewnić sprawiedliwość w ocenie.
Tradycyjne uzupełnianie danych32: Transformacje te są stosowane w czasie rzeczywistym przez potok treningowy (np. z wykorzystaniem bibliotek Albumentations lub PyTorch Transforms) z określonym prawdopodobieństwem dla każdej partii.
Transformacje geometryczne: Rotacja: Losowe obracanie obrazów o kąt od -45° do +45°. Skalowanie: Losowo skaluj obrazy o czynnik od 0,8 do 1,2. Flip poziomy: Losowe przewracanie obrazów poziomo z 100% prawdopodobieństwem. Losowe przycinanie: Losowo przycinaj fragment od 80% do 100% oryginalnego obszaru obrazu.
Transformacje fotometryczne: Jasność i kontrast: Dostosuj jasność i kontrast o czynnik losowo wybrany z [0.6, 1.4]. Szum Gaussa: Dodaj szum Gaussa o odchyleniu standardowym losowo wybranym od [0, 0,01 * 255] do 10% obrazów. Rozmycie Gaussa: Stosuj rozmycie Gaussa o rozmiarze jądra 3x3 do 10% obrazów.
Symulacja zasłony: Losowo umieść 1 do 3 prostokątnych łatek okluzji (pokrywających do 5% powierzchni obrazu każdy) na obrazach. Łatki wypełnione są losowym szumem lub średnimi wartościami pikseli obrazu.
Zaawansowane rozszerzanie danych: specyficzne dla regionu kopiuj i wklej
Motywacja i wpływ: Główną motywacją tej ukierunkowanej augmentacji było rozwiązanie kluczowego problemu danych: kilka marek papierosów miało bardzo mało przypadków (nawet jedno zdjęcie). Standardowy podział testów walidacji losowych trainów mógłby potencjalnie przydzielić wszystkie instancje rzadkiej marki do jednego zestawu (np. wszystkie do zestawu testowego), co skutkowałoby brakiem możliwości poznania lub weryfikacji tej marki. Ta metoda sztucznie zwiększała wielkość próby dla tych niedostatecznie reprezentowanych marek, zapewniając, że każda marka ma wystarczającą liczbę instancji rozproszonych w zbiorach szkoleniowych, walidacyjnych i testowych. Ten fundamentalny krok zapobiega katastrofalnym awariom w rzadkich kategoriach i jest warunkiem koniecznym dla jakiejkolwiek znaczącej wydajności modelu oraz uogólnienia na pełen zestaw marek.
Ten krok wymaga wstępnie wytrenowanego segmentalnego modelu bazowego na początkowym zbiorze danych oraz modelu Segment Anything (SAM)33.
Segmentuj obiekty źródłowe: Dla obrazów pudełek papierosowych z niedostatecznie reprezentowanych marek użyj modelu SAM do precyzyjnego generowania masek segmentacyjnych. Użyj trybu point prompt, klikając na Funkcję Marki pudełka papierosowego , aby rozpocząć segmentację. Ręcznie waliduj i doprecyzuj wygenerowane maski, aby zapewnić dokładność. Zapisz fragmentowane zdjęcia pudełek papierosów z przezroczystym tłem jako pliki PNG. Tworzy to bibliotekę izolowanych instancji obiektów.
Generuj maski tła: Użyj wstępnie wytrenowanego segmentalnego modelu bazowego do segmentacji instancji na zestawie obrazów tła (obrazy z dużą ilością wolnej przestrzeni lub proste tła). Model generuje maski binarne wskazujące obszary już zajmowane przez obiekty.
Maski procesowe i wklejanie obiektów: Dla każdej maski tła użyj biblioteki OpenCV (funkcja 'cv2.approxPolyDP' z współczynnikiem epsilon 0,02 * obwodu konturowego) do dopasowywania krzywych i linearyzacji krawędzi maski, uzyskując uproszczoną reprezentację wielokątową wolnej przestrzeni. Zidentyfikuj największy ciągły obszar wielokąta w masce tła jako docelowy obszar pasty. Losowo wybierz segmentowany obiekt źródłowy z biblioteki. Zmień rozmiar (zachowując proporcje obrazu) i zastosuj transformację afiniczną (niewielki obrót między -5° a +5° oraz niewielkie ścinanie), aby naturalnie dopasował się do docelowego obszaru pasty, zapewniając, że nie nakłada się na granice istniejących obiektów. Użyj alfa blendingu, aby płynnie wkleić przekształcony obiekt na obraz tła w obliczonej lokalizacji. Ogólne ramy technologii augmentacji danych opartej na technice kopiowania-wklejania w określonych obszarach przedstawiono na Rysunku 2. Programowo wygeneruj odpowiadający mu nowy plik adnotacji txt dla wklejonego obiektu, aktualizując współrzędne ramki ograniczającej i etykietę klasy.
Ostateczny zbiór danych rozszerzonych: Ten proces offline generuje 600 nowych syntetycznych obrazów. Połącz je z oryginalnymi 4 835 obrazami oraz dodatkowymi 1 167 obrazami powstałymi dzięki zastosowaniu tradycyjnych technik augmentacji opisanych powyżej, aby uzyskać ostateczny zbiór danych liczący 6 602 obrazy. Podziel ostateczny zbiór danych na zestawy treningowe (70%, 4 621 obrazów), walidacyjne (20%, 1 320 obrazów) oraz testowe (10%, 661 obrazów), zapewniając, że obrazy z tej samej oryginalnej sekwencji są przechowywane w tym samym podziale, aby zapobiec wyciekom danych.
Modyfikacja modelu do budowy proponowanego ulepszonego detektora
Zoptymalizowane algorytmy wykrywania obiektów34 osiągnęły znaczący postęp w inspekcji przemysłowej w ostatnich latach. Ta sekcja zawiera szczegółową, krok po kroku procedurę modyfikacji architektury modelu bazowego w celu stworzenia proponowanego modelu. Modyfikacje są realizowane poprzez edycję pliku konfiguracyjnego modelu (np. config.yaml) oraz zapewnienie uwzględnienia odpowiednich niestandardowych definicji modułów w bazie kodu. Uzasadnienie każdej modyfikacji przedstawiono w celu wyjaśnienia jej roli w rozwiązywaniu konkretnych wyzwań wykrywania. Struktura proponowanego modelu przedstawiona jest na Rysunku 3.
Zastąpienie modułów downsampling modułem ADown: Standardowy moduł Convolution-BatchNorm-SiLU (CBS) używany do downsampling wykorzystuje pojedynczą splot o przekroczeniu, który może działać jako wąskie gardłoinformacyjne 35, potencjalnie eliminując drobnoziarniste cechy kluczowe do rozpoznawania małych pudełek papierosowych i szczegółowych logotypów marek. Moduł ADown został zaprojektowany, aby to złagodzić poprzez implementację struktury z dwoma gałęziami, która przechwytuje i zachowuje bogatszy zestaw cech podczas redukcji rozdzielczości przestrzennej. Jedna gałąź priorytetowo traktuje zachowanie lokalnych szczegółów o wysokiej częstotliwości, podczas gdy druga obejmuje szerszy, kontekstowy przegląd. Fuzja tych komplementarnych cech skutkuje bardziej solidną i informacyjną reprezentacją dla kolejnych warstw.
Kroki działania i wdrożenia
Definicja modułu: Upewnij się, że niestandardowy moduł PyTorch o nazwie ADown jest zdefiniowany w plikach definicji modelu projektu. Ten moduł musi zawierać dwie równoległe gałęzie. Pierwsza gałąź powinna składać się z dwuwymiarowej warstwy splotu z jądrem 3x3 i krokiem 2. Druga gałąź powinna kolejno składać się z warstwy maksymalnej puli 2x2 (ze stride 2), po której następuje warstwa splotowa 1x1. Wyjścia tych dwóch gałęzi mają być łączone wzdłuż wymiaru kanału, a powstała mapa cech jest następnie przekazywana przez końcową warstwę splotową 1x1, aby zintegrować kanały i uzyskać wyjście. Struktura modułu ADown przedstawiona jest na rysunku 4.
Edycja pliku konfiguracyjnego: Otwórz plik konfiguracyjny modelu bazowego (config.yaml). Systematycznie zidentyfikuj każdą instancję modułu CBS skonfigurowaną do downsampling (czyli gdzie parametr kroku jest ustawiony na 2). Zamień każdy z tych wpisów modułów CBS nowym modułem ADown.
Motywacja projektowa: Projektowanie ADown wynika z potrzeby ograniczenia utraty informacji w standardowych splotach o przestrętnych przekroczach, co może być szkodliwe dla małych obiektów. Jego struktura dwugałęziowa inspirowana jest ideą przetwarzania równoległego do rejestrowania zarówno szczegółów przestrzennych o wysokiej częstotliwości (za pomocą splotu), jak i niskoczęstotliwościowych informacji kontekstowych (poprzez pooling), zapewniając tym samym bogatszą, wieloskalową reprezentację cech dla kolejnych warstw.
Integracja modułu iEMA
Uzasadnienie i zasada projektowania: Aby zwiększyć zdolność modelu do wykrywania małych celów oraz tych częściowo zasłoniętych, niezbędne jest wprowadzenie mechanizmu, który skutecznie modeluje wieloskalowy kontekst przestrzenny. Moduł iEMA osiąga to, osadzając komponent Efficient Multi-scale Attention (EMA)36 w strukturze odwróconego bloku rezydualnego (iRMB)37 . iRMB zapewnia wydajną bazę obliczeniową dzięki głęboko rozdzielalnym splotom, podczas gdy komponent EMA jawnie rejestruje interakcje przestrzenne na skali pomiędzy skalą poprzez równoległy projekt wielogałęziowy. Ta integracja pozwala modelu dynamicznie kalibrować wagi cech, koncentrując uwagę na najbardziej dyskryminacyjnych regionach przestrzennych w różnych skalach, co poprawia rozpoznawanie pod okluzją i dla małych obiektów.
Kroki działania i wdrażania
Definicja modułu: Upewnij się, że zdefiniowany jest niestandardowy moduł PyTorch o nazwie iEMA. Ten moduł powinien najpierw zaimplementować odwrócony blok resztowy. Ten blok zazwyczaj zaczyna się od splotu punktowego dla rozszerzenia kanału, następnie następuje splot głębokości (np. 3x3) do wyodrębniania cech przestrzennych, a na końcu splot punktowy dla rzutowania kanału. Bezpośrednio po tym bloku należy wdrożyć mechanizm uwagi EMA. Mechanizm EMA zazwyczaj wykorzystuje grupowane sploty i interakcje międzywymiarowe, aby efektywnie generować wieloskalową mapę uwagi przestrzennej bez nadmiernego narzutu obliczeniowego. Struktura modułu iEMA przedstawiona jest na Rysunku 5.
Edycja pliku konfiguracyjnego: W pliku konfiguracyjnym config.yaml znajdź sekcje definiujące sieć neck, a konkretnie warstwy bezpośrednio po modułach C2f. W tych strategicznych miejscach wstaw nową warstwę, która wywołuje moduł iEMA.
Motywacja projektowa: Moduł iEMA opiera się na zasadzie zwiększania rozróżnialności cech poprzez integrację lokalnej ekstrakcji cech (poprzez głęboką konwolucję) z lekkim, ale skutecznym mechanizmem globalnego modelowania kontekstu (EMA). To hybrydowe podejście pozwala modelu adaptacyjnie koncentrować się na informacyjnych regionach w różnych skalach, co jest kluczowe dla rozpoznawania częściowo widocznych logotyp i tekstów marek.
Zastąpienie głowicy detekcyjnej modułem DynamicHead
Uzasadnienie i zasada projektowania: Oryginalna głowica detekcyjna może nie być optymalnie do obsługi znacznej różnicy skali pudełek papierosowych oraz złożonej interakcji między lokalizacją a zadaniami klasyfikacji. Moduł DynamicHead rozwiązuje ten problem, łącząc trzy formy uwagi w spójną strukturę: świadomą skali, przestrzenną oraz świadomą zadania. Komponent świadomy skali dynamicznie łączy cechy z różnych poziomów piramidy cech, zapewniając efektywną reprezentację obiektów o wszelkich rozmiarach. Komponent świadomy przestrzennie wykorzystuje strategię rzadkiego próbkowania, aby skoncentrować zasoby obliczeniowe na najbardziej informacyjnych regionach w mapach cech. Komponent świadomości zadań dostosowuje reprezentację cech specjalnie do określonych celów, takich jak regresja ramek ograniczających i klasyfikacja kategorii. To jednolite podejście prowadzi do dokładniejszych i bardziej solidnych prognoz.
Kroki działania i wdrażania
Definicja modułu: Jest to złożony moduł obejmujący trzy mechanizmy uwagi opisane przez równania (1) do (4). Jego wewnętrzna struktura będzie obejmować warstwy do obliczania wag skalowych, wykonywania deformowalnej uwagi przestrzennej oraz stosowania transformacji cech specyficznych dla zadania.
(1)
(2)
(3)
(4)
Gdzie WL(F) oznacza końcową mapę cech udoskonalonych przez uwagę, uzyskaną przez kolejne zastosowanie mechanizmów πL(F), π przestrzennie S(F) oraz mechanizmów uwagi zadaniowej πC(F) do cechy wejściowej F. Konkretnie, w równaniu (2), πL(F) oblicza wagę uwagi skalowaną, najpierw uśredniając ją przez wymiary przestrzenne (S) i kanałowe (C), przekazując ją przez funkcję liniową f(⋅) oraz aktywację twardą sigmoidalną σ(⋅). W równaniu (3) πS(F) wykonuje rzadką uwagę przestrzenną, agregując cechy z K wybranych punktów kluczowych pk, z których każdy ma uczone przesunięcie Δpk, aby skupić się na regionach dyskryminacyjnych i skalarnej ważności Δmk. W równaniu (4) πC(F) implementuje uwagę świadomą zadania, stosując transformację liniową (zarządzaną przez wyuczone parametry (α1, β1, α,2 β2)) do każdego kanału i wybierając maksymalną odpowiedź, co pozwala szefowi specjalizować się w zadaniach klasyfikacyjnych i regresji. Struktura modułu DynamicHead pokazana jest na Rysunku 6.
Edycja pliku konfiguracyjnego: W pliku config.yaml znajdź sekcję definiującą głowę modelu, która pierwotnie zawiera moduł Detect. Zastąp go nowym wpisem, który wywołuje moduł DynamicHead.
Motywacja projektowa: Moduł DynamicHead opiera się na obserwacji, że głowice wykrywające obiekty powinny być adaptacyjne do skali, położenia przestrzennego i zadania. Jego jednolity system uwagi, sformalizowany w równaniach. (1-4) pozwala modelu dynamicznie rekalibrować odpowiedzi cech na podstawie tych trzech wymiarów, co prowadzi do bardziej solidnych prognoz wobec zmienności skali i tła zakłóceń.
Trening modelu
Upewnij się, że PyTorch 2.1.0, CUDA 12.1 oraz wszystkie zależności są zainstalowane.
Dowództwo szkoleniowe
Przed ponownym trenowaniem przygotuj podzielone dane obrazowe i dane adnotacji w standardowym formacie detekcji jednostopniowej. Stwórz plik .yaml zawierający ścieżkę obrazu i kategorię danych. Zgodnie z ulepszeniem modelu oryginalny plik detektora .yaml został zastąpiony proponowanym modelowym plikiem .yaml. Zapisz plik train.py, zaimportuj pakiet detektora jednostopniowego, załaduj model treningowy i ścieżkę danych oraz ustaw parametry treningowe, w tym imgze=640, epochs=100, batch=4, workers=0, device='0', optimizer='SGD', close_mosaic=10 itd.
Hiperparametry: Kluczowe parametry to: rozmiar obrazu wejściowego (640 x 640), rozmiar partii (4), początkowa szybkość uczenia (0,01) z harmonogramem wyżarzania kosinusowego, optymalizator SGD z pędem (0,937) oraz spadek wagi (0,0005). Mozaika jest domyślnie włączona.
Monitorowanie szkoleń: Proces szkoleniowy generuje metryki dla każdej epoki. Monitoruj krzywe pod kątem utraty treningowej/walidacyjnej oraz mAP na poziomie 0,5, aby zapewnić zbieżność i uniknąć nadmiernego dopasowania. Szkolenie przez 100 epok zazwyczaj wystarcza.
Ocena i wdrożenie modelu
Ocena: Po treningu najlepszy model zapisuje się jako runs/train/exp/weights/best.pt. Oceniaj to na zestawie wartości używając: bash python val.py --data cigarette_dataset.yaml --weights runs/train/exp/weights/best.pt. Skrypt wygeneruje Precision, Recall, mAP na 0,5 itd. Potwierdź, że mAP spełnia wymagany próg (np. 97,9%).
Wnioskowanie w celu weryfikacji: Wykonaj wnioskowanie na przykładowych obrazach, aby wizualnie zweryfikować wyniki wykrywania: bash python detect.py --wagi runs/train/exp/weights/best.pt --source path/to/test/images --conf 0.5. Poprzez weryfikację rozumowania można uzyskać wyniki detekcji każdego obrazu oraz szybkość detekcji modelu.
Wdrożenie: Aby wdrożyć w czasie rzeczywistym system dźwigu stackera, konwertuj model PyTorch (best.pt, ~4,7 MB) do formatu takiego jak TensorRT lub ONNX, aby zoptymalizować szybkość wnioskowania. Ostatecznym efektem są ramki ograniczone etykietami klas (nazwami marek) i ocenami pewności.