-
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
-