Skip to content

ROS_YOLO_MODEL Wiki

Attila Ötvös edited this page Nov 27, 2024 · 27 revisions

Áttekintés

A ros_yolo_model egy ROS 2 csomag, amely az AJR (GKNB_AUTM078) tárgyra, egy a DDC által kiadott feladat alapján készült. A projekt célja az, hogy megismerkedjünk a YOLO architektúra, azon belül is a Yolov5 működésével és használatával.

A YOLOv5 (You Only Look Once, Version 5) egy valós idejű objektumdetektáló algoritmus, amely a számítógépes látás területén kiemelkedő teljesítményt nyújt sebességben és pontosságban. A YOLO család ötödik generációjaként került kifejlesztésre, és a PyTorch keretrendszeren alapul. Gyorsaságát és hatékonyságát a könnyű súlyú architektúrájának és optimalizált kódstruktúrájának köszönheti.

Az alábbi alfeladatokat igyekeztünk teljesíteni:

  • Node készítése, amellyel a YOLO modell feltanítható saját képek felismerésére az alap objektumok mellett.
  • Node készítése, amely egy saját .pt állományt használva képes egy bemeneti képen vagy videón objektumok felismerésére. Az is beállítható, hogy a deketálás eredményét szeretnénk-e menteni.
  • YOLO modell feltanítása, ami képes felismerni az egyetemi hallgatói és alkalmazotti kártyákat, és az ehhez szükséges adathalmaz elkészítése.
  • A tanítást úgy elvégezni, hogy meg is különböztesse az említett kártyákat. Script írása "dummy kártyák" generálására, illetve azok véletlenszerű elhelyezésére képeken, valamint ezekből adathalmaz készítése.

A feladatunk alapjául a https://github.com/ultralytics/yolov5 szolgált.

Működése

1. teach_node

  • Célja:

    • YOLOv5 modell feltanítása egyedi adatkészlet alapján
  • Működése:

    • Paraméterek:

      • dataset_path: Az adatkészlet elérési útja, ami tartalmazza a YOLOv5 által megkövetelt data.yaml fájlt is.
      • model_output_path: Az eredményként kapott modell kimeneti útvonala, ahol a súlyokat és a tanítás eredményeit tárolja.
    • A YOLO modell tanítása:

      • A YOLOv5 hivatalos train.py scriptjét egy rendszerszintű parancs (std::system) segítségével hívja meg.
      • Ezt a parancsot az alábbiak szerint paraméterezi fel:
        • Kép méret: 640px széles képek használata alapértelmezetten
        • Batch-méret: 16 kép egyidejű feldolgozása (hardver és cél függően módosítandó)
        • Epoch-ok száma: 100 iteráció az optimális modell eléréséhez (hardver és cél függően módosítandó)
        • Korábbi súlyok használata: Kiindulási pontként a fifth_train[cards](vagy amelyiket éppen szeretnénk) előzőleg betanított modell súlyait használja
        • Hiperparaméterek: egyedi hyp.yaml fájl segítségével további finomhangolás végzése (hardver és cél függően módosítandó)
  • Főbb funkciók:

    • Node inicializálás
    • Tanítási folyamat
    • Hibaellenőrzés
  • Használat:

    Feltételezzük, hogy a workspace ~/ros2_ws/.

    cd ~/ros2_ws
    colcon build --packages-select ros_yolo_model --symlink-install
    Környezet source-olása a futtatás előtt!
    source ~/ros2_ws/install/setup.bash 

    A node indítása:

    ros2 run ros_yolo_model teach_node <dataset_path> <model_output_path>

    Példa:

    ros2 run ros_yolo_model teach_node /home/ajr/ros2_ws/src/ros_yolo_model/dataset /home/ajr/ros2_ws/src/ros_yolo_model/output

2. detector_node

  • Célja:

    • A node célja, hogy különböző forrásokból (kamera, kép, videó) objektumokat detektáljon egy YOLOv5 modell segítségével, és a detektált eredményeket ROS 2 topikon publikálja vagy fájlokba mentse további felhasználásra.
  • Működése:

    • Paraméterek:

      • weights_path: A detektáláshoz használt modell elérési útvonala
      • source_type: A forrás típusa (image, video, camera)
      • image_path, video_path, camera_id vagy camera_ip: Annak fügvényében kell megadni a megfelelő paramétert, hogy mit adtunk meg source_type-nak
      • save_results: Az eredmény mentésének helye. Amennyiben false, nem lehet publikálni a deteceted_objects topic-ra
      • save_dir: Ha a save_results paraméter true, akkor itt adhatjuk meg a mentés helyét, alapértelmezett értéke a /det_results
      • view_img: Eredmények közvetlen megjelenítése (true vagy false)
    • Források támogatása:

      • Kamera: Lokális vagy IP alapú kamera adatainak feldolgozása.
      • Kép: Egy adott kép gyors elemzése.
      • Videó: Folyamatos feldolgozás előre rögzített videók esetén.

      WSL-ben device id beállítása (pl.: /dev/video0 ) a usbipd package segítségével valósulhat meg, natív Linux rendszereken erre nincs szükség. A package elérhetősége: https://github.com/dorssel/usbipd-win/wiki/WSL-support

    • Objektumdetektálás:

      • A node a YOLOv5 detect.py scriptjét hívja meg a háttérben, miközben több szálon kezeli az adatfeldolgozást.
  • Főbb funkciók:

    • Objektumok detektálása:

      • Kép elemzése: Egy kép elemzése során elmenti az ideiglenes képet, majd meghívja a detektálási parancsot.
      • Videó elemzése: A teljes videót forrásként használja a YOLO detektáláshoz.
      • Kameraképek feldolgozása: Az Image üzenetek fogadása során egy feldolgozó hurok kerül végrehajtásra.
    • Aszinkron feldolgozás: A képkockákat és adatokat aszinkron módon kezeli, miközben biztosítja, hogy a jelenleg futó folyamat ne akadjon el.

    • Eredmények kezelése és publikálása: A detektálási eredményeket .txt fájlokból olvassa ki, amelyeket azután std_msgs::msg::String formájában publikál a /detected_objects topikon.

    • Kimeneti struktúra: Az eredményeket a mentett exp mappák alapján dolgozza fel, és azonosítja a legutóbb frissített eredményeket.


  • Használat:

    Feltételezzük, hogy a workspace ~/ros2_ws/.

    cd ~/ros2_ws
    colcon build --packages-select ros_yolo_model --symlink-install
    Környezet source-olása a futtatás előtt!
    source ~/ros2_ws/install/setup.bash 

    A node indítása:

    ros2 launch ros_yolo_model detector.launch.py <weights_path> <source_type> <image_path/video_path/camera_ip/camera_id> <save_results> <save_dir> <view_img>

    Példa:

    ros2 launch ros_yolo_model detector.launch.py weights_path:=/home/ajr/ros2_ws/src/ros_yolo_model/model/fifth_train[cards]/weights/best.pt source_type:=camera camera_ip:=https://192.168.0.168:4747 save_results:=true save_dir:=/home/ajr/ros2_ws/src/ros_yolo_model/det_results view_img:=true

3. video_publisher_node

  • Célja:

    • Egy helyi vagy IP-alapú kamera által biztosított videófolyamot olvas be, és az egyes képkockákat ROS 2 topikon keresztül publikálja sensor_msgs::msg::Image (bgr8) formátumban.
  • Működése:

    • Paraméterek:
      • use_camera: Meghatározza, hogy használjon-e a node kamerát
      • camera_id: A helyi kamera azonosítója
      • camera_ip: Egy IP-alapú kamera elérési útja
      • fps: A publikálás gyakorisága képkockák/másodpercben.
  • Főbb funkciók:

    • Node inicializálása:

      • A node betölti a fent említett paramétereket
      • Ha a use_camera hamis, a csomópont leáll
    • Forrás kiválasztás:

      • Ha a camera_ip paraméter meg van adva, akkor IP-alapú kamera lesz a forrás.
      • Ha az camera_ip üres, akkor helyi kamerát használ
    • Kapcsolódás a kamerához:

      • A node megpróbálja megnyitni a megadott forrást. Ha nem sikerül, a node logüzenetet küld, majd leáll
    • Időzített publikálás:

      • A node egy időzítőt állít be az fps alapján, amely rendszeresen meghívja a publishFrame() metódust
    • Képkocka publikálása:

      • A kamerától érkező képkockákat OpenCV segítségével dolgozza fel
      • A képkockát ROS formátumú üzenetté alakítja a cv_bridge könyvtárral
      • A képkockát publikálja az image nevű topikra
  • Használat:

    Ez automatikusan hívódik meg, amennyiben a detector_node-ban a source_type paraméter camera értéket kap

4. card_gen_node

  • Célja:

    • Dummy hallgatói- és alkalmazotti kártyák generálása
  • Működése:

    • Bemeneti adatok és sablonok kezelése: A node indulásakor betölti a szükséges adatokat és fájlokat, például:

      • Kártyák sablonjai (hallgatói- és alkalmazotti sablonok)
      • Igazolvénykép és vonalkód képek
      • Attribútumok, mint nevek, ID-k és egyedi kódok A fájlok és útvonalak kezelése a package_path() függvénnyel történik, ami dinamikusan meghatározza a csomagon belüli relatív elérési útvonalat
    • Kombinációk generálása:

      • A node nem használ hagyományos beágyazott ciklusokat, hanem a kombinációk számítását indexelési logika alapján oldja meg. Ez lehetővé teszi:
        • Az összes lehetséges kombináció gyors generálását a sablonok és attribútumok között
        • A kód egyszerűsítését és a skálázhatóság növelését
    • Attribútumok pozicionálása és megjelenítése: A cv::Mat és a cv::freetype könyvtárak segítségével a következő elemek kerülnek megjelenítésre a kártyákon:

      • Név: A megfelelő helyen jelenik meg a sablon típusától függően
      • Kártya- és ID-szám: Egyedi azonosítók a sablon típusához igazított pozíciókban
      • Igazolványkép: A sablon típusának megfelelő elhelyezéssel hallgatói- vagy alkalmazotti kártyákon
      • Vonalkód: Előre generált vonalkód képek pozicionálva

      A sablon és attribútum típusának ellenőrzése feltételes logikával történik, például a find("student") metódus segítségével

    • Kimenet mentése: A generált kártyákat a megadott kimeneti könyvtárba menti:

      • A kártyák neve card<number>.png formátumban kerül elmentésre, ahol <number> egy növekvő index
      • A kimeneti könyvtárat a rendszer automatikusan létrehozza, ha az nem létezik
    • Felhasználói értesítések: A node folyamatosan tájékoztatja a felhasználót a következőkről:

      • A generálás állapota és hibák (például hiányzó fájlok)
      • A generált kártyák elérési útjai
  • Főbb funkciók:

    • Dinamikus kombinációkezelés:

      • Egyedi algoritmus gondoskodik arról, hogy minden lehetséges attribútumkombináció kártyára kerüljön
    • Sablonok kezelése:

      • Külön diák- és dolgozói kártya elrendezések támogatottak
    • Skálázhatóság:

      • Új attribútumok vagy sablonok hozzáadása könnyedén bővíti a generált kártyák számát
    • Hibakezelés:

      • Hiányzó fájlok esetén a rendszer értesíti a felhasználót, és megakadályozza az érvénytelen kártyák generálását
  • Használat:

    Feltételezzük, hogy a workspace ~/ros2_ws/.

    cd ~/ros2_ws
    colcon build --packages-select ros_yolo_model --symlink-install
    Környezet source-olása a futtatás előtt!
    source ~/ros2_ws/install/setup.bash 

    A node indítása:

    ros2 run ros_yolo_model card_gen_node

5. card_augmenter_node

  • Célja:

    • Egy automatizált rendszer kialakítása, amely kártyaképeket kombinál véletlenszerű háttérképekkel
  • Fő feladatai:

    • Kártyaképek és háttérképek betöltése adott mappákból (A használt hátterek az img/background_samples mappában találhatóak.)
    • Kártyák átméretezése, elforgatása és véletlenszerű elhelyezése a háttéren
    • Az eredmény mentése új képfájlokba
  • Osztály fő elemei:

    • Konstruktor:

      • Paraméterek: cards_dir (kártyaképek mappa) és output_dir (kimeneti mappa)
      • A kártya- és háttérképek betöltése a megadott mappákból
      • Input mappa ürességének ellenőrzése
    • getter és setter metódusok:

      • Getterek a kártyák, hátterek és az output mappa eléréséhez.
      • setCardsDir: Kártyaképek újr betöltése, átalakítása RGBA formátumba, ha szükséges.
      • setOutputDir: Az output mappa frissítése.
    • Augmentáció:

      • augmentCard: Egy kártyakép véletlenszerű átméretezése, elforgatása, és egy háttérkép véletlenszerű pontjára helyezése.
        • Átlátszósági csatornával dolgozik, így csak a nem átlátszó pixelek kerülnek rá a háttérre
      • A kártyák és hátterek arányainak dinamikus kezelése, hogy minden generált kép egyedi legyen
    • Mentés:

      • saveGeneratedImage: A generált képeket JPEG formátumban történe mentése az output mappába, generated_image_new_X.jpg formátumú névvel
  • Több kártya kezelése:

    • A kártya augmentálása kiterjesztve: minden háttérre véletlenszerűen két kártya elhelyezése (csak egy is lehetséges)
    • A második kártya véletlenszerű kiválasztása a kártyák listájából
  • Főprogram:

    • Az input mappák érvényességének és létezésének ellenőrzése
    • Az ROS2 node létrehozása és a processAllCards függvény meghívása
    • Generált képek mentése az output mappába
  • Hibakezelés:

    • Az üres képek vagy hibás útvonalak esetén figyelmeztetések kiírása az RCLCPP_ERROR vagy RCLCPP_WARN segítségével
    • Bármelyik szükséges mappa üressége esetén a program leállítása
  • Használat:

    Feltételezzük, hogy a workspace ~/ros2_ws/.

    cd ~/ros2_ws
    colcon build --packages-select ros_yolo_model --symlink-install
    Környezet source-olása a futtatás előtt!
    source ~/ros2_ws/install/setup.bash 

    A node indítása:

    ros2 run ros_yolo_model card_augmenter_node <input_cards> <output_images>

    Példa:

    ros2 run ros_yolo_model card_augmenter_node /home/ajr/ros2_ws/src/ros_yolo_model/generated_cards /home/ajr/ros2_ws/src/ros_yolo_model/final_cards

6. get_package_path

  • Célja:

    • Egy olyan kiegészítő függvény, melynek segítségével a többi node-ban - ahol szükséges - megkaphatjuk a package-ünk elérési útvonalát
  • Működése:

    • Az ament_index_cpp könyvtár get_package_share_directory() függvényével megkapjuk a csomagunk megosztott elérési útját. Fájlrendszer navigációs parancsok segítségével innen eljutunk a csomagunk tényleges mappájába. Ezt az útvonalat adja vissza a függvény.
  • Használat:

    Ez nem egy tényleges node, hanem egy függvény, amely a többi node funkcióinak kibővítése miatt szükséges

Tanítási eredmények, tapasztalatok

Dataset

A roboflow segítségével történt a labeling, az alaposztályok a PASCAL VOC 2012 dataset-ből származnak, a többi képet is ezek segítségével generáltuk és raktuk rá a kártyákat. Tanítástól függően ~13.000-14.000 kép nagyságú datasetet használtunk, ettől csak pár esetben tértünk el tesztelés céljából. A főbb tanítások, amiket részletezni fogunk, 70% train és 30% valid splittel történtek, test set-et nem alkalmaztunk. A nagyon sikertelen tanításokat nem részletezzük, maximum említés szintjén, ha az tanulságos volt és hasznos információkat tudtunk meg belőlük.

Első tanítás:

Az alapobjektumokra irányuló első tanítás célja az volt, hogy jobban megértsük a tanítás menetét, a YOLOv5 modellel való munkát, valamint az egyedi hiperparaméterek beállításainak hatásait. Ezen kívül az optimális batch és epoch számok meghatározása, valamint az eredmények értékelésének elsajátítása is fontos része volt a folyamatnak. A tanítás során különös figyelmet fordítottunk az objektumok közötti megkülönböztetés finomhangolására. Itt még nem voltak se hallgatói, se alkalmazotti kártyák a datasetben.

labels.jpg F1_curve.png

Paraméterek

Batch méret: 16 Epoch: 100 Tanulási ráta: lr0: 0.001, lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 iou_t: 0.2 Augmentáció: mosaic: 1.0 fliplr: 0.5 translate: 0.1 scale: 0.5

Eredmények

Pontosság ([email protected]): 0.672 az összes osztályra

Kiválasztott objektumok felismerési metrikái:

Aeroplane: 0.73 Bird: 0.66 TV Monitor: 0.701 Train: 0.904 Sheep: 0.75

Megfigyelések

  • Confusion matrix: A mátrix alapján az alapobjektumok (pl. aeroplane, train) relatív pontossága kiemelkedő volt, ugyanakkor néhány osztály esetében, mint például a "chair" vagy "bottle", alacsonyabb felismerési pontosságot tapasztaltunk.
confusion_matrix.png
  • Precision-Recall görbe: Az egyes osztályok felismerése között eltérő teljesítmény mutatkozott meg. A Train osztály magas precízióval és recall értékkel rendelkezett, míg például a Chair alacsonyabb teljesítményt mutatott.
PR_curve
  • Tanulási görbék: Az opt.yaml és a hyp.yaml beállítások alapján gyors konvergenciát figyeltünk meg, ami arra utal, hogy a tanítás során a modell gyorsan alkalmazkodott az adatokhoz.

Második tanítás:

Ebben a tanítási lépésben az első modell további finomhangolására összpontosítottunk, kizárólag az alapobjektumokkal. Az új hiperparaméterek célja az volt, hogy javítsuk az általános teljesítményt és az osztályok közötti különbségtételt, különösen az alacsonyabb pontosságot mutató osztályok esetében.

Paraméterek

Batch méret: 16 Epoch: 20 Tanulási ráta: lr0: 0.001, lrf: 0.01 Momentum: 0.937 Weight decay: 0.0005 IOU threshold: iou_t: 0.2

Augmentációk:

Mosaic: 1.0 Flip horizontálisan (fliplr): 0.5 Eltolás (translate): 0.1 Skálázás (scale): 0.5

Eredmények

Pontosság ([email protected]): 0.656 az összes osztályra Kiválasztott objektumok felismerési metrikái: Aeroplane: 0.779 Bird: 0.664 TV Monitor: 0.671 Train: 0.894 Sheep: 0.728

Megfigyelések

  • Confusion Matrix: A mátrix alapján több osztályban tapasztaltunk előrelépést az első tanításhoz képest. Az "Aeroplane" és "Train" osztályok továbbra is magas teljesítményt mutattak, azonban a "Chair" és "Bottle" osztályok felismerése még mindig fejlesztést igényel.
confusion_matrix.png
  • Precision-Recall görbe: A PR-görbén jól látható, hogy bizonyos osztályok, például a "Train" és "Aeroplane", magas precízióval és recall értékekkel rendelkeztek, míg a "Chair" és "Sofa" osztályok teljesítménye alacsonyabb volt.
PR_curve
  • Tanulási görbék: Az opt.yaml és hyp.yaml beállítások módosítása után gyorsabb konvergencia figyelhető meg, jelezve a modell jobb alkalmazkodását az adatokhoz. Az augmentációk (mosaic és fliplr) jelentős hatást gyakoroltak a modell teljesítményére.

Következtetés

A második tanítás során a modell összteljesítménye ([email protected]: 0.656) enyhén csökkent az első tanításhoz képest ([email protected]: 0.672), valószínűleg az alacsonyabb epochszám miatt. Azonban bizonyos osztályok, mint például a "Train" és "Aeroplane", jelentős javulást mutattak. További finomhangolás szükséges az alacsonyabb teljesítményt mutató osztályok javítására.

Harmadik tanítás:

A harmadik tanítási lépés során tovább finomhangoltuk az első modellünket. A cél az volt, hogy javítsuk az általános felismerési teljesítményt az alacsonyabb pontosságot mutató osztályok esetében, valamint tovább csökkentsük a különböző objektumosztályok közötti összetévesztést. Ehhez módosítottunk néhány hiperparamétert és augmentációt, valamint növeltük az epoch számot a hosszabb tanítás érdekében.

Paraméterek

Batch méret: 16 Epoch: 50 Tanulási ráta: lr0: 0.001 lrf: 0.01 Momentum: 0.937 Weight decay: 0.0005 IOU threshold: iou_t: 0.2

Augmentációk

Mosaic: 1.0 Flip horizontálisan (fliplr): 0.5 Eltolás (translate): 0.1 Skálázás (scale): 0.5

Eredmények

Pontosság ([email protected]): 0.655 az összes osztályra

Kiválasztott objektumok felismerési metrikái:

Aeroplane: 0.73 Bird: 0.64 TV Monitor: 0.65 Train: 0.78 Sheep: 0.72

Megfigyelések

  • Confusion Matrix: A mátrix alapján jelentős fejlődést tapasztaltunk néhány osztály teljesítményében, például az Aeroplane és Train osztályokban, azonban néhány osztály, mint a Chair vagy Sofa, továbbra is fejlesztést igényel. Az osztályok közötti összetévesztések száma csökkent.
confusion_matrix.png
  • Precision-Recall görbe: A PR-görbén látható, hogy az osztályok teljesítménye változó. Az Aeroplane és Train osztályok továbbra is kiemelkedően teljesítenek, míg például a Bottle és Chair osztályok teljesítménye alacsonyabb maradt.
PR_curve.png
  • Tanulási görbék: Az opt.yaml és hyp.yaml módosítások után a tanulási görbék azt mutatják, hogy a modell konvergenciája javult. Az augmentációk, mint például a Mosaic és a Fliplr, pozitívan befolyásolták a tanítási folyamatot.
results.png

Következtetés

A harmadik tanítás során az epoch szám növelése elősegítette a modell stabilabb teljesítményét. Az összesített mAP érték (0.655) továbbra is megbízható eredményeket mutat, különösen az egyes osztályokra vetítve, mint például az Aeroplane és Train. Az osztályok közötti összetévesztések csökkentése és a gyengébben teljesítő osztályok további finomhangolása a következő lépések közé tartozik.

Negyedik tanítás:

A negyedik tanítás során két új osztályt, a hallgatói kártya és az alkalmazotti kártya osztályokat adtuk hozzá a modellhez. Ezekhez a card_augmenter_node és a card_gen_node segítségével készítettünk új adatokat, amelyeket hozzáfűztünk az alapobjektumokat tartalmazó datasethez. A cél az volt, hogy a modell megkülönböztesse a két kártyatípust, azonban a tanítás nem hozott kielégítő eredményeket, mivel a modell gyakran összekeverte a két osztályt.

Paraméterek

  • Batch méret: 16
  • Epoch: 30
  • Tanulási ráta:
    • lr0: 0.001
    • lrf: 0.01
  • Momentum: 0.937
  • Weight decay: 0.0005
  • IOU threshold: iou_t: 0.2

Augmentációk:

  • Mosaic: 1.0
  • Flip horizontálisan (fliplr): 0.5
  • Eltolás (translate): 0.1
  • Skálázás (scale): 0.5

Eredmények

  • Pontosság ([email protected]): 0.697 az összes osztályra
  • Kiválasztott objektumok felismerési metrikái:
    • Aeroplane: 0.75
    • Bird: 0.63
    • Train: 0.83
    • Hallgatói kártya: 1.0 (nem valós)
    • Alkalmazotti kártya: 1.0 (nem valós)

Megfigyelések

  • Confusion Matrix: A mátrix elemzéséből egyértelműen látható, hogy a modell nem tudta megfelelően megkülönböztetni az új kártyaosztályokat. Bár az alapobjektumok, például az "Aeroplane" és a "Train" osztályok felismerése továbbra is viszonylag jó maradt, a kártyák között jelentős átfedés tapasztalható.
confusion_matrix
  • Precision-Recall görbe: Az új kártyaosztályokhoz nem mutatható ki érdemi teljesítmény a görbén, mivel ezeknél az osztályoknál mind a precízió, mind a recall értékei nullák maradtak. Ez alacsony generalizációs képességre utal az új osztályok esetében.
PR_curve
  • Tanulási görbék: A tanulási görbék alapján a modell gyorsan konvergált, azonban az új osztályok nem lettek megfelelően tanítva. Az augmentációk ellenére az osztályok megkülönböztetése nem sikerült.

Következtetés

A negyedik tanítás azt mutatta, hogy az új osztályok felismeréséhez további adatminőségbeli fejlesztésekre van szükség. A hallgatói- és alkalmazotti kártyák esetében nagyobb mennyiségű, egyértelműen megcímkézett adatra lenne szükség. Az osztályok közötti megkülönböztetés érdekében fontolóra kell venni az augmentációk finomhangolását, valamint a tanulási hiperparaméterek további optimalizálását.

Ötödik tanítás:

Az ötödik tanítás során a korábbi modellek tanulságait alapul véve további finomhangolást végeztünk, különös tekintettel a hallgatói és alkalmazotti kártyák felismerésére. A dataset további augmentációval bővült, amely a kártyák pontosabb megkülönböztetésére fókuszált. Az osztályok közötti konzisztencia növelésére külön hangsúlyt fektettünk a hiperparaméterek optimalizálása során.

Paraméterek

Batch méret: 16 Epoch: 40 Tanulási ráta: `lr0`: 0.001, `lrf`: 0.01 Momentum: 0.937 Weight decay: 0.0005 IOU threshold: `iou_t`: 0.2

Augmentációk:

Mosaic: 1.0
Flip horizontálisan: 0.5
Eltolás: 0.1
Skálázás: 0.5

Eredmények

Pontosság ([email protected]): 0.668 az összes osztályra

Kiválasztott objektumok felismerési metrikái:

Aeroplane: 0.75 Bird: 0.63 TV Monitor: 0.70 Train: 0.83 Hallgatói kártya: 0.92

Megfigyelések

  • Confusion Matrix: A hallgatói és alkalmazotti kártyák osztályozása jelentősen javult a korábbi tanításokhoz képest. Bár az általános mAP enyhén emelkedett, bizonyos osztályok, mint például a "Chair" és "Bottle", továbbra is alacsony pontosságot mutattak.
confusion_matrix
  • Precision-Recall görbe: A PR-görbe alapján megfigyelhető, hogy a hallgatói és alkalmazotti kártyák felismerése a finomhangolásoknak köszönhetően kiemelkedő teljesítményt mutatott, ugyanakkor az általános objektumok, például a "Bottle" és "Chair", még mindig fejlesztést igényelnek.
PR_curve
  • Tanulási görbék: Az új augmentációk bevezetése pozitív hatást gyakorolt a modell konvergenciájára. A kártyák felismerési pontosságának javulását jól tükrözik a tanulási görbék.

Következtetés

A modell teljesítménye ([email protected]: 0.668) az előző tanításokhoz képest jelentős javulást mutatott, különösen a hallgatói és alkalmazotti kártyák osztályainak felismerésében. Bár az osztályok közötti teljesítmény különbsége továbbra is kihívás, az augmentációs technikák sikeresen növelték a modell pontosságát.

Hatodik tanítás:

Mivel az előző modelleken a hallgatói- és alkalmazotti kártyák megkülöböztetése kívánnivalót hagyott maga után, új koncepcióhoz fordultunk. A card_gen_node segítségével legenerált dummy kártyákból kettőt helyeztünk véletlenszerű képekre, véletlenszerű pozíciókban, akár egymást átfedve a card_augmenter_node segítségével. A cél a kártyák pontosabb felismerésének elérése volt, a többi általános objektum felismerési pontosságának megtartásával.

Paraméterek

Batch méret: 4 Epoch: 40 Tanulási ráta: lr0: 0.01 lrf: 0.01 Momentum: 0.937 Weight decay: 0.0005 IOU threshold: iou_t: 0.2

Augmentációk

Mosaic: 1.0 Flip horizontálisan : 0.5 Eltolás : 0.1 Skálázás : 0.5

Eredmények

Pontosság ([email protected]): 0.677 az összes osztályra

Kiválasztott objektumok felismerési metrikái:

Alkalmazotti kártya: 0.97 Hallgatói kártya: 0.98 Train: 0.81 Cat: 0.75 Bottle: 0.46 Chair: 0.45

Megfigyelések

  • Confusion Matrix: A mátrix alapján jelentős változás nem történt. Az osztályok közötti összetévesztések száma enyhén, de csökkent.
confusion_matrix.png
  • Precision-Recall görbe: A PR-görbén látható, hogy az osztályok teljesítménye változó. Az osztálygörbék nem különülnek el egymástól, mivel nem volt elég példány az egyes osztályokból.
PR_curve.png

Következtetés

A hatodik tanítás sikertelennek könyvelhető el. A modell nem fejlődött, már nem csak keveri a hallgatói- és alkalmazotti kártyákat, hanem mindkét címkét ráteszi. Ebből a konklúzió voható le, hogy kizárólag az új megközelítésből származó dataset-hez adott kártyás képek megfelelőek, tehát azok, amin minden szereplő osztály jelölve van. Így a következő tanítás során eltávolítjuk a dataset-ből ezen két kártyaosztály felismerését zavaró képhalmazt.

Hetedik tanítás:

Ebben a tanításban csak a Pascal VOC dataset képeit és az általunk generált kártyás képeket használtuk, amelyek mindegyikén minden osztály korrekt módon fel volt címkézve. Az új adathalmaz célja az volt, hogy a modell jobban meg tudja különböztetni a hallgatói és alkalmazotti kártyákat, valamint az általános Pascal VOC osztályok felismerése is optimalizálva legyen.

Paraméterek

Batch mére: 16 Epochok száma: 25 Tanulási ráta: lr0: 0.001, lrf: 0.01 Momentum: 0.937 Weight decay: 0.0005 IOU threshold: iou_t: 0.2

Augmentációk: Mosaic: 1.0
Flip horizontálisan (fliplr): 0.5
Eltolás (translate): 0.1
Skálázás (scale): 0.5

Eredmények

Pontosság ([email protected]): 0.704 az összes osztályra

Kiválasztott objektumok felismerési metrikái

Aeroplane: 0.74 Bird: 0.68 TV Monitor: 0.71 Train: 0.86 Hallgatói kártya: 0.80 Alkalmazotti kártya: 0.82

Megfigyelések

  • Confusion Matrix: A mátrix azt mutatta, hogy a kártyás osztályok megkülönböztetése jelentősen javult a korábbi tanításokhoz képest. Ugyanakkor néhány Pascal VOC osztály, mint például a "Chair" és "Sofa", még mindig alacsony pontossággal került felismerésre.
confusion_matrix
  • Precision-Recall görbe: Az általános PR-görbe azt mutatta, hogy a modell nagyjából kiegyensúlyozott teljesítményt nyújtott, különösen a kártyák osztályaira nézve. A "Train" és "Aeroplane" osztályok szintén kiváló teljesítményt értek el.
PR_curve
  • Tanulási görbék: Az új adathalmaz és a finomhangolt hiperparaméterek alapján a modell gyors konvergenciát mutatott, ami az augmentációk sikeres alkalmazására és az adatok minőségére utal.

Következtetés

A hetedik tanítás eredményei alapján elmondható, hogy a hallgatói és alkalmazotti kártyák felismerési képessége jelentősen javult (hallgatói kártya mAP: 0.80, alkalmazotti kártya mAP: 0.82). A Pascal VOC osztályoknál az általános [email protected]: 0.704 érték pozitív előrelépésnek számít, azonban további finomhangolás szükséges néhány alacsonyabb pontosságú osztály, például a "Chair" és "Sofa" javítása érdekében. Több képpel javítható lehetne az alulreprezentált osztályok teljesítése.

Példa a 7. model működésére:

example1.jpg example2.jpg example3.jpg