Agronom nahraje ortofoto pole, služba v něm najde plevel a vyrobí aplikační mapu pro postřikovač. Na holé půdě stačí zelenost (ExG). V porostu, třeba v jetelu, je potřeba natrénovaný model, který se učí z rostlin označených ve /spot.
Buňka hustoty
0,5 m
Čtverec anotace
20 × 20 m
Ortofoto na devu
2 cm/px
Model v porostu
RT-DETRv2-r18 AP 0,70*
Potvrzené rostliny
0 z cíle 200–500 na plodinu
Nepotvrzené návrhy
1 084 v 68 čtvercích
Stavyhotovo = develop, běží na vari-dev.agdatasrvc.comna větvi 261005 = anotace, pushnutána větvi 261006 = ML, jen lokálně (6 commitů)chybíexperiment
* AP měřené proti nepotvrzeným návrhům, ne proti agronomovi. Skutečná přesnost bude známá až po fázi 1.
Schéma řešení
Vyber průchod a projdi ho po krocích (šipky ← →), nebo klikni na libovolný blok. Vpravo se ukáže, co blok dělá, s čím mluví a kde je jeho kód.
Schéma je široké, posuň ho do strany.
Prohlížeč a stroje
API agdata-vari · Node.js
Výpočty, modely a data
Mimo produkt · Mac, USB
Webové stránky
Všechny stránky servíruje přímo API (role api). Na devu jsou na vari-dev.agdatasrvc.com. Zákazníka určuje pole „Customer (X-Customer)“, výchozí hodnota je test.
Klávesy v kroku 5
A nový čtverecB boxP bodS výběr1–9 třídaEnter přijmoutDel smazatD čtverec hotovýN další čtverecM návrh modelemEsc konec
API
Cesty jsou relativní k základu skupiny. Zákazník se bere z hlavičky X-Customer (nebo ApiKey, ?customer=) a služba mu věří bez ověření.
Metoda
Cesta
Co dělá
Stav
Modely a metody
Co jsme vyzkoušeli, co je v produktu a proč. Všechna čísla kvality jsou zatím náhradní metrika (shoda s nepotvrzenými návrhy), protože agronom ještě nepotvrdil žádnou rostlinu.
Benchmark detektorů · AP na odložených čtvercích
16 odložených čtverců, 172 hodnocených návrhů, uvnitř týchž dvou letů. Jetel je těžší případ, holá půda jde všem. RT-DETRv2-r18 a YOLO11n jsou rovnocenné (rozdíl +0,01, interval −0,02 až +0,04), YOLO ale má licenci AGPL-3.0.
Proč tyhle modely
ExG zůstává výchozí na holé půdě. Je deterministický a nepotřebuje štítky, jen neodliší plevel od vzcházející plodiny.
DINOv2-small hledá podobné rostliny z pár potvrzených. Větší modely (DINOv2-base, DINOv3) nebyly průkazně lepší a jsou 3–7× pomalejší.
RT-DETRv2-r18 je detektor pro porost. Má licenci Apache-2.0, stejnou kvalitu jako YOLO11n a na CPU zvládne čtverec 20 m za 0,6 s.
Celé pole odhadem ≈ 4 min CPU na 15 ha při 2 cm/px. Je to extrapolace z testu 60 × 60 m (25 dlaždic za 6 s).
Model
K čemu
Licence
Kvalita (náhradní)
CPU, 4 vlákna
Rozhodnutí
Jak se model učí
Smyčka existuje celá, ale zatím ručně: trénuje se offline na Macu a nový model se do produktu dostane přes /admin. Automatické přetrénování na serveru chybí.
Anotace/spot krok 5: přijaté rostliny v hotových čtvercích
ExportZIP: výřezy PNG, YOLO štítky, původ každého štítku
Tréninktrain_detector.py na Macu, M3 Pro ≈ 18–20 min
Nahrání/admin → „Upload“ → stav registered
Bránaholdout po letech, srovnání se současným modelem
Aktivacezkušební dotaz do sidecaru, slot skupiny plodin
Použitídetekce v porostu a „Propose with model“
Automatickypřetrénování na serveru po ~100 nových rostlinách — chybí
Jak štítek vznikl
Jde do tréninku
Počítá se jako
Ruční box nebo bod
ano, z hotového čtverce
lidský
Přijatý návrh „Propose“ (anomálie)
ano
lidský
Přijatý návrh „Find similar“ (DINOv2)
ano
lidský
Přijatý návrh „Propose with model“
ano
s pomocí modelu, v holdoutu nejvýš 20 %
Nepotvrzený návrh (jakýkoli)
ne, export ho nebere
—
Oprava masky „✎ Edit weed mask“
ne pro rámečky
Vari.reviewLabels, pro hodnocení hustoty
Brána před aktivací
Aspoň 100 hodnocených štítků v holdoutu.
Precision i recall na holdoutu aspoň 0,5.
Štítků s pomocí modelu v holdoutu nejvýš 20 %.
Holdout lety nejsou v tréninku nového ani současného modelu. První aktivace je pro skupinu plodin zmrazí.
Proti současnému modelu nejvýš o 0,01 horší AP a o 0,02 horší buňkový záchyt.
force=1 bránu přebije (benchmarkový balíček jinak neprojde). Zkušební dotaz do sidecaru přebít nejde.
Lze se učit z nepotvrzených návrhů DINOv2?
Technicky ano, takhle vznikl benchmarkový model: z 1 084 nepotvrzených návrhů anomálie a DINOv2 dosáhl AP 0,70. Naučí se ale i jejich chyby a nedá se poctivě ověřit, protože holdout tvoří tytéž návrhy. Hodí se pro „Propose with model“, kde výsledek stejně potvrzuje člověk, ne pro postřikové mapy. Produktový export nepotvrzené návrhy nebere, a balíček z nich jde zapnout jen s force=1.
Nasazení na dev
Dev dnes běží develop ed9a5e42: kroky 1–4 /spot, ExG a exporty. Anotace, sidecar ani ML tam nejsou.
Swarm · dev101 (app-manager)
agdata-vari-api-develop · role api×1
agdata-vari-worker-develop · role worker×3
NodeODM 3.5.6 · limit RAM 16 GB×1
plant-similar · 3 GB, 4 CPU, privátní síťchybí
Kubernetes · Argo CD (app-of-apps)
agdata-vari-api · RAM 1–2 Gi×1
agdata-vari-worker×3
NodeODM · limit 8 Gi×1
plant-similar · vlastní soubor manifestuchybí
Hostname agdata-vari-dev.agdata.test. Obě prostředí mají v konfiguraci stejnou adresu vari-dev.agdatasrvc.com.
Push větve feature/261006_plant-detector (obsahuje i anotační větev), bez merge.Claude · tvoje OK
GitLab → „Run pipeline“ na větvi: build API, deploy DEV a automatický zápis image do app-manageru i app-of-apps.ty
V téže pipeline ruční job „build plant-similar“. Image sidecaru se ještě nikdy nestavěl, je to první test Dockerfilu.ty
app-manager compose: služba sidecaru (image v uvozovkách, replicas 1, 3 GB, 4 CPU, privátní overlay síť) a na API PLANT_SIMILAR_URL.Claude · diff, push na OK
Dev .env: ADMIN_TOKEN, PLANT_SIDECAR_TOKEN, PLANT_ML_CUSTOMERS.Claude · na OK
Push do app-manageru sám spustí redeploy devu.automaticky
/admin → „Upload“ balíčku pro jetel → „Force activate“ (benchmark). Pozor: zmrazí jeho dva trénovací lety jako odložené, takže první skutečný model pak projde jen s force a reset_holdout.Claude nebo ty
Ověření: /health, „Find similar plants“ v /spot, „Crop model“ u jetelového letu.Claude
Na co dát pozor
Další push do develop vrátí dev na develop a funkce zmizí. Natrvalo tam budou až po merge.
ADMIN_TOKEN zamkne i ostatní akce /admin (Abandon, Stop, Delete).
Nevíme, jestli má dev101 volné 3 GB a 4 CPU vedle NodeODM s limitem 16 GB.
V Kubernetes CI přepisuje image v deployment.yaml i v uvozovkách, proto sidecar potřebuje vlastní soubor.
Otevřená rozhodnutí
Pushnout větev (bez merge)?
Swarm, Kubernetes, nebo obojí?
Změna v app-manageru (diff předem)?
ML na devu jen pro testovacího zákazníka, nebo pro všechny?
Nahrát na dev lety z USB s 1 084 návrhy k potvrzení?
Co chybí do ostrého provozu
Seřazeno podle oblasti. První skupina blokuje vše ostatní.
Data a model
0 potvrzených rostlin. Cíl je 200–500 na plodinu ze 2 a více letů, plus záměrně negativní čtverce (okraje, cesty, kolejové řádky, stíny).
Druh (šťovík) agronom nepotvrdil.
Obilné lety nejsou složené. Celý jetelový let (472 snímků) na devu spadl na paměť.
Přetrénovat s holdoutem po letech a aktivovat bez force.
Provoz
Sidecar v compose, tokeny v .env, merge obou větví.
Detekce a stitch běží v procesu API a restart je ukončí. Přesun na workery chybí.
Ortofoto se nahrává přes API (≤ 5 GiB). Přímý upload do GCS chybí.
Čas tréninku na CPU serveru je neměřený.
Bezpečnost
/api/v2/files je bez ověření: kdo zná URL, stáhne ortofoto i mapu.
Zákazník je jen hlavička X-Customer, registr klíčů neexistuje.
Na develop jsou akce /admin bez tokenu.
Schválení v kroku 4 stahování neblokuje.
Později
Automatické přetrénování na serveru.
Ukládání odmítnutých návrhů, aby se šlo učit i z nich.
Zúžení rámečku na rostlinu nebo segmentace (rámeček hustotu nadhodnocuje).
Multispektrum pro ML; model místo ExG na holé půdě.
Konfigurace
Proměnné prostředí, které zapínají a ladí dronovou část. Chybná hodnota proměnných ML (větev 261006) nebo ANNOTATION_CLASSES shodí start služby. Ostatní číselné proměnné se při chybě tiše vrátí na výchozí hodnotu.