-
Notifications
You must be signed in to change notification settings - Fork 1
ROS_YOLO_MODEL Wiki
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.
-
- YOLOv5 modell feltanítása egyedi adatkészlet alapján
-
-
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ó)
- Kép méret:
- A YOLOv5 hivatalos
-
-
- Node inicializálás
- Tanítási folyamat
- Hibaellenőrzés
-
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
-
- 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.
-
-
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
vagycamera_ip
: Annak fügvényében kell megadni a megfelelő paramétert, hogy mit adtunk megsource_type
-nak -
save_results
: Az eredmény mentésének helye. Amennyibenfalse
, nem lehet publikálni adeteceted_objects
topic-ra -
save_dir
: Ha asave_results
paramétertrue
, 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
vagyfalse
)
-
-
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.
-
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.
- A node a YOLOv5
-
-
-
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ánstd_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.
-
-
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 run 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
-
- 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.
- 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
-
- 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.
-
- Paraméterek:
-
-
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
- Ha a
-
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
- A node egy időzítőt állít be az fps alapján, amely rendszeresen meghívja a
-
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
- A kamerától érkező képkockákat
-
-
Ez automatikusan hívódik meg, amennyiben a
detector_node
-ban asource_type
paramétercamera
értéket kap
-
- Dummy hallgatói- és alkalmazotti kártyák generálása
-
-
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
- 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:
-
Attribútumok pozicionálása és megjelenítése: A
cv::Mat
és acv::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
- A kártyák neve
-
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
-
-
-
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
-
-
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