5.1. Detectie witloof plantjes met Yolov5.
Kalibratie van de beelden bij manueel genomen foto’s
Het meest robuuste en eenvoudigste is bij het nemen van de foto een item toe te voegen als schaal. Bij gebruik van een meetstok geplaatst op de rug naast de rijen witloof en de foto genomen waarbij de lengte van de stok de volledige lengte van de foto overspant is de foto meteen gekalibreerd. Het resultaat # gedetecteerde plantjes gedeeld door het aantal rijen op de foto is dan de plantdichtheid per lopende meter.
Deze setup is relaties onafhankelijk van de lenseigenschappen van de camera, resolutie, wie de foto neemt etc.
Drone beelden.
Bij drone beelden kan geen referentie item als schaal in de foto worden toegevoegd, dus moet trigometrie gebruikt worden om de foto te kalibreren. De afmetingen van de foto zijn afhankelijk van de lenseigenschappen van de camera (e.g. theta) en de hoogte van de drone boven het veldoppervlak.
https://www.researchgate.net/figure/Field-of-view-of-each-UAV_fig1_323904610
Om deze foto’s te kunnen kalibreren moet de hoogte van de drone boven het veld gekend zijn en de lenseigenschappen van de camera.
Labellen van de beelden
Beelden werden ingeladen in label-studio en bouding boxes werden rond elk plantje getrokken. Daarna werden de gelabelde foto’s geëxporteerd naar Yolo formaat.
Overzicht Label-Studio labelling interface
Voorbeeld ingezoomde foto met gelabelde witloof plantjes (rechts onder vorige foto)
Herschalen beelden
In Yolov5 de standaard grootte van de beelden is 640 x 640 pixels. De originele grootte van de beelden is 4128 x 3096 pixels wat 31 keer kleiner is. Na herschalen naar 640 x 640 zou ongeveer één bounding box op de 3 minder dan 100 pixels bevatten (10 x 10 pixels).
GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite
Train # images | Test # images | Image size | Batch-size | Training model | Configuratie file |
58 | 10 | 400 | NA | OK | witloof.Yaml |
58 | 10 | 1200 | NA | OK | witloof.Yaml |
5 | 2 | 2500 | NA | OK | witloof.Yaml |
5 | 2 | 2750 | NA | NOK | witloof.Yaml |
5 | 2 | 3500 | 2 | OK | witloof.Yaml |
92 | 10 | 3500 | 2 | OK | witloof_2.yaml |
92 | 10 | 1200 | NA | OK | witloof_2.yaml |
92 | 10 | 800 | NA | OK | witloof_2.yaml |
Grootte van de bounding boxes na herschalen van de foto’s. De pixels eigen aan de witloof plantjes is echter maar een deel van de bounding box.
img_size | #images | #witloof labels | < 100 pixels | % | < 400 pixels | % |
400 | 5 | 118 | 64 | 54% | 108 | 92% |
640 | 5 | 118 | 31 | 26% | 84 | 71% |
800 | 5 | 118 | 22 | 19% | 64 | 54% |
1200 | 5 | 118 | 11 | 9% | 36 | 31% |
2500 | 5 | 118 | 3 | 3% | 10 | 8% |
2750 | 5 | 118 | 3 | 3% | 10 | 8% |
3500 | 5 | 118 | 2 | 2% | 8 | 7% |
Voorbeeld Yaml file (witloof_2.yaml)
train: /home/aaron/projecten/iSTorage4SME/Wit_mini_train/images
val: /home/aaron/projecten/iSTorage4SME/Wit_mini_val/images
nc: 3
names: ['schoen','witloof','onkruid']
Model 3500 pix
Getraind model
!python train.py --img 3500 --data /home/aaron/projecten/iSTorage4SME/witloof_2.yaml --batch-size 2 --epochs 20 --weights /home/aaron/projecten/iSTorage4SME/weights/3500_2_20.pt
model werd 3 keer getraind en vorige “best” weights werden meegenomen
- --img 3500 --batch-size 2 --epochs 20
- --img 3500 --batch-size 2 --epochs 20 --weights /home/aaron/projecten/iSTorage4SME/weights/3500_2_20.pt
De confusion matrix toont aan hoe goed het model werkt op de Test beelden. 75% van de manueel gelabelde witloof plantjes werden ook herkend door het model. Het model slaagt er niet in om onkruid in het 2 blad stadium te onderscheiden van witloof plantjes in het 2 blad stadium. Het model detecteerde ook witloof plantjes die manueel niet gelabeld werden. Onderstaande tabel geeft een visualisatie van de manueel gelabelde foto’s (links) en de predicties van het model (rechts)
Evalueren van de gedetecteerde plantjes die niet manueel gelabeld werden
Het getrainde model vindt ook plantjes terug die niet manueel gelabeld werden. Bij nazicht op een foto bleken dit inderdaad witloof plantjes te zijn.
Detection
!python detect.py --source /home/aaron/projecten/iSTorage4SME/Witloof/images/check_2.jpg --weights /home/aaron/projecten/iSTorage4SME/weights/3500_20_2.pt --img 3500
Witloof plantjes werden gedetecteerd op een foto die niet tot de train en validatie set behoorde.
Het model slaagt er in om de rijen witloof op de foto’s terug te vinden en individuele plantjes te detecteren.
Vergelijking modellen 800 pix, 1200 pix en 3500 pix
De modellen getraind op gebinde beelden naar 800 , 1200 en 3500 pixels slagen er allemaal in om witloof plantjes te detecteren. Het model waarin beelden van 800 x 800 pixel gebruikt worden detecteerd wel minder witloof plantjes dan de modellen die beelden van 1200 x 1200 en 3500 x 3500 pixels gebruiken.
Om plantjes te detecteren op nieuwe beelden moet de geschaalde beeldgrootte overeen komen met de beeldgrootte van het getrainde model.
Detectie van plantjes op grotere beelden is trager dan op kleinere beelden. Willen we gaan naar video detectie van plantjes, dan heeft het model van 800 pixels de voorkeur, of zelfs nog kleinere beeldgrootte (400 of 640 pixels) technisch moet de camera meer ingezoomd worden. Willen we gaan naar drone beelden, dan zou het model van 3500 pixels in theorie kunnen werken en een gelijkaardige nauwkeurigheid geven als het 1200 pixel model.
De hoogte van de foto’s nu is ongeveer 1.5m van het bodemoppervlakte, nemen we een drone die foto’s van 3500 x 3500 pixels neemt vanop 10 meter, dan worden de plantjes 7 keer kleiner wat gelijkaardig gedrag is als de foto binnen naar 1200 pixels.