2025-01-30 Weedbot Task 1

1. Situācijas apraksts

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:

  
image-20220215144344636image-20220215144349819

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

  
image-20220215150026755image-20220215150035175
  

 

🔴 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

 

image-20250115164605443

image-20250115164245129

image-20250115164151542

image-20250115163859901

image-20250115163431248

image-20250115163411833

 

 

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

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

Readme DOCX:

https://share.yellowrobot.xyz/quick/2025-2-4-E4D13A4A-014C-4FB9-8072-E3809120567B.docx

Datu kopu pieejas atsūtīšu Otrdien!

 

2. Vadlīnijas jauniem modeļiem

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

  2. 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).

    1. Instance segmentation problēma - nav zibens novedējs

    2. Semantic segmentation būtu iespējams - all other class

  3. Nedalīt klases, kuras marķētājam grūti atpazīt

    1. Ja marķētājs nevar atpazīt viss būs slikti

  4. ConvNets ir translation invariant, bet nav rotation, scale, color invatiant

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

    2. Jā, leņķis ir svarīgs, ja nevar atpazīt tikai no tekstūras, bet svarīga forma

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

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

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

  1. Intel i7 bare Z box, 24 cores

  2. RTX3070

    1. 550x550 modelis

    2. BackBone - ResNet 50, MobileNet V2

    3. YOLACT Edge - 1GB RAM

    4. YOLO11, nano versija

      1. nezāles ir centri ar rādiusiem

      2. burkāni kā detalizēti poligoni

  3. OpenCV -> Cuda pārnest

  4. 30ms sek

    1. 7ms inference

  5. TensorRT FP16

  6. Pārraksīts Rust

 

3. TODO

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

  2. Atkārtot apmācību rezultātus ar YoloAct

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

  4. Ar prediction mining atrast un dokumentēt slikti marķētos paraugus.

  5. Testēt dažādas rezolūcijas.

  6. Sagatavot datus esošos burkānu un nezāļu datus priekš YoloV11

  7. Sagatavot arī modeli uz Deeplab Semantic segmentation testiem

     

 

4. Nākotnes darbi

Ilgterminā intresē spinātu atpazīšana jauna datu kopa.Spinātu attēlu kopa - izplūdušos

  1. 1900x1090

  2. 50k spinātu attēlu

  3. 22k attēlu, 250k burkānu

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