2025-01-30 Weedbot Task 11. Situācijas apraksts2. Vadlīnijas jauniem modeļiem3. TODO4. Nākotnes darbi
Apraksts: NN tīkla uzdevums ir atpazīt attēlos burkānus dažādās attīstības stadijās, apzīmējot visu burkāka auga zaļo daļu ar poligonu. Attēli tiek uzņemti +/- kontrolētos gaismas apstākļos, mainās fona (augsnes) krāsa un citu augu (nezāļu) daudzums un izskats. Nezāles netiek marķētas un atpazītas attēlos.
Burkāni ir dažādās attīstības stadijās un tāpēc var izskatīties ļoti atšķirīgi:
![]() | ![]() |
tāpēc esam izmēģinājuši dalīt burkānus vairākās klasēs pēc vizuālā izskata. Šobrīd kopā mums ir ~22`000 poligonu, sadalījums pa klasēm nav vienmērīgs. Šobrīd izmantojam instanču segmentēšanas tīklu YolactEdge (ir izmēģināti arī citi, bet atvērti mainīt modeli https://github.com/haotian-liu/yolact_edge). Attēla izšķirtspēja no kameras 1920x1080 tiek saspiesta uz 550x550 pirms padot uz NN.
Tā kā mums ir ierobežoti resusi lai daudz eksperimentētu vai strauji palielinātu datu kopu, tad meklējam labākos veidus uz kuriem koncentrēties lai uzlabotu augu atpazīšanas precizitāti un poligonu precizitāti (nepaliek ārpus poligona burkāna daļas) vienlaikus nepasliktinot ātrumu (tagad viss cikls NN + mūsu papildus kods ir 16-20ms uz datora ar RTX 2070 Super (ar TensorRT FP16) un ap 45ms uz Jetsona AGX Xavier (ar TensorRT int8).
Vizuāli marķēšanas piemēri
![]() | ![]() |
🔴 Galvenā potenciālā problēma ir, ka burkāni ir marķēti ar precīzām maskām, bet nezālēm ir marķēti tikai centri nevis visa nezāle. Segmentācijas modeļiem visticāmāk šis nāk ļoti par sliktu. 🔴 Iemesls kāpēc centri bija marķēti bija, jo vienai nezālei ir vairākas zarošanās vietas pa kurām tiek šauts ar lāzeru (nākotnē šīs zarošanās vietas vaarētu noteikt arī no ģeometrijas, kuru varētu iegūt no pilnas nezāles marķējuma) 🔴 Punkti nezālēm no modeļa nākot kā lielāki neregulāri blobi un test code pārveidojot par sfēriskiem objektiem
Pašlaik ir nopietna problēma, ka modeļi stabili neatpazīst objektus ar konsistentu confidence threshold, piemēram, lai atpazītu nezāļu centrus tiek lietots pat 1-10% confidence threshold. Burkāniem var būt ap 60% threshold tajā pašā laikā līdz pat 98%.
Nereti esot problēmas ar akmeņiem, kuri tiek iegūti kā False Positives.
Marķēšanas vadlīnijas
General Rules: https://share.yellowrobot.xyz/quick/2025-2-4-9DA39D46-0297-4863-9424-EDADD3653972.pdf
Test Code (🔴 ZIP satur apmācīto modeli, Modelis ir izveidots iz šī bazes, nav izmaiņas https://github.com/haotian-liu/yolact_edge) https://share.yellowrobot.xyz/quick/2025-2-4-AC8E8AC5-8AAD-4F99-904B-BB390E359875.zip
🔴 Šobrīd input ir 550x550
Mācot izmantojot “piebridnātas maskas”, kuras iekļauj apkārt smiltis, tas palīdzot uzlabot precizitāti - nav īsti skaidrs kāpēc
Readme DOCX:
https://share.yellowrobot.xyz/quick/2025-2-4-E4D13A4A-014C-4FB9-8072-E3809120567B.docx
Datu kopu pieejas atsūtīšu Otrdien!
Izmantot IoU kā metriku (smoothed vai inverse). Nepieciešams izstrādāt validācijas protokolu un sistemātiski salīdzināt un veikt hiper-parametru pārmeklēšanu
Ja modelis piedāvā (ja izmantota semantic segmentation) izmantot "zibens novedēja" klasi - viss cits izņemot target klasi - visticamāk noderētu tieši semantic segmentation gadījumā (UNet3+, DeepLab utt).
Instance segmentation problēma - nav zibens novedējs
Semantic segmentation būtu iespējams - all other class
Nedalīt klases, kuras marķētājam grūti atpazīt
Ja marķētājs nevar atpazīt viss būs slikti
ConvNets ir translation invariant, bet nav rotation, scale, color invatiant
nepieciešms pārvaudīt augmentāciju un sistemātiski testēt. Ja jums forma ir svarīga, varbūt nav nepieciešams RGB input, bet tikai grayscale
Jā, leņķis ir svarīgs, ja nevar atpazīt tikai no tekstūras, bet svarīga forma
Apmācībā nedrīkst iekļaut klases, kurām nav paraugu (apskatieties modeļa struktūru un kļūdas funkciju kāpēc tas nav vēlams). Atkarīgs no modeļa vai ir semantic segmentation daļa modelim, bet labāk ir ja ir pēc iespējas precīzāk, un tad post-processing var paplašināt meklēšanas lauku
Objektu blīvums instance segmentation, object detection gadījumā ir svarīgs (vēlams lai līdzīgs starp paraugiem), bet semantic segmentation nav svarīgs - tur per-pixel loss
Marķējumam vēlams būt pēc iespējas precīzākam, vēlams speciāli netaisīt malas vai iekšējās malas
Hardware uz kura jāspēj strādāt
Intel i7 bare Z box, 24 cores
RTX3070
550x550 modelis
BackBone - ResNet 50, MobileNet V2
YOLACT Edge - 1GB RAM
YOLO11, nano versija
nezāles ir centri ar rādiusiem
burkāni kā detalizēti poligoni
OpenCV -> Cuda pārnest
30ms sek
7ms inference
TensorRT FP16
Pārraksīts Rust
Ieviest priekš burkāniem Panoptic Quality, SQ, RQ metrikas nomērīt pašreizējā modeļa precizitāti. Test code satur pašreizējo modeli. Ja nevar no apmācību skirpta sapast validācijas kopu, izdalīt tādu un pa jaunu apmācīt un nomērīt rezultātus.
Atkārtot apmācību rezultātus ar YoloAct
Izpētīt vai nepieciešams iezīmēt nezāles pilnībā nevis punktus. Ja tas ir nepieciešams, kas visticamāk tā ir. Apskatīties vai no tiem punktiem izmantojot SAM2 (Segement Anything 2) nevar iegūt pilnīgākas maskas automātiski priekš apmācības. Dokumentēt rezultātus uzmanīgi, lai parādītu vai automātiskā metode strādā. Ja SAM2 neiet pamēgīna't vēl citas metodes.
Ar prediction mining atrast un dokumentēt slikti marķētos paraugus.
Testēt dažādas rezolūcijas.
Sagatavot datus esošos burkānu un nezāļu datus priekš YoloV11
Sagatavot arī modeli uz Deeplab Semantic segmentation testiem
Ilgterminā intresē spinātu atpazīšana jauna datu kopa.Spinātu attēlu kopa - izplūdušos
1900x1090
50k spinātu attēlu
22k attēlu, 250k burkānu
Pixel maska nāk
Varētu veidot sintētiskas datu kopas, ielīmējot kulturaugus, nezāles, akmeņus, mainot fonus. Pielietotjot GAN vai GenAI modeļus.