TETRA iStorage4SME

Intelligente Geavanceerde Anomalie Detectie bij de opslag en transport in de voedingsketen

5.2. Active learning object segmentation witloof palloxen

MASKAL detective broccoli kroppen

[Submitted on 13 Dec 2021 (v1), last revised 19 Jan 2022 (this version, v2)]

Active learning with MaskAL reduces annotation effort for training Mask R-CNN

Pieter M. BlokGert KootstraHakim Elchaoui ElghorBoubacar DialloFrits K. van EvertEldert J. van Henten

Inleiding

Kwaliteit in transport en opslag van landbouwgewassen start bij de evaluatie van de kwaliteit van het gewas voor de oogst. Wanneer deze nulmeting goed uitgevoerd wordt kan een kwaliteitsverlies bij de opslag en transport goed geëvalueerd worden.

Voor opslag en transport van verse groenten moet de kwaliteit van de groenten reeds op het veld bepaald worden. Pieter Blok van de Wageningen universiteit heeft beeld analyse technologie uitgetest om broccoli kroppen op het veld te detecteren en de kwaliteit van de kroppen te bepalen. Of er reeds ziekten aanwezig zijn op de kroppen, of dat de kroppen niet perfect gevormd zijn.

Het voortijdig detecteren van zieke producten voor opslag is essentieel om een hoge kwaliteit te waarborgen. Een zieke plant heeft namelijk meer kans om bij opslag en transport te rotten en hierbij voor een groter verlies te zorgen dan moest dit voortijdig opgemerkt worden

Broccoli krop detectie en kwaliteit bepaling op het veld.

Deze walk trough is gebaseerd op de publicatie van Pieter Blok “Active learning with MaskAL reduces annotation effort for training Mask R-CNN” gepubliceerd op 19 Januari 2022.

De aanpak van Pieter Blok heeft als doel om Broccoli kroppen in het veld te detecteren en deze te classificeren als gezond of ongezond. Figuur 1 geeft enkele voorbeelden van hoe in het onderzoek beelden verzameld worden.

Figuur 1 Voorbeelden van het nemen van beelden op he veld. (a) met een robot, (b) met een stationaire camera set-up, (c) met een op een tractor gemonteerde acquisitie doos of met een selectieve broccoli oogst machine. (Blok et al. 2022)

Om broccoli te detecteren wordt object segmentation gebruikt waar naast classificering , bepaling van de positie van het object, plaatsen van een omschrijvende doos ook de individuele pixels van de broccoli gedetecteerd zoals gevisualiseerd in Figuur 2.

Figuur 2 De input van het model is een beeld. op dit beeld wordt een bounding box bepaald, de pixels bepaald die tot de broccoli krop behoren en daarna geclassificeerd als gezond of niet.

Software

Om machine learning te kunnen toepassen mioeten de labels van de labeling software labelme ingebracht worden in de segmentatie algorithmen van Detectron 2. De labels in de experimenten in dit document worden gemaakt door polygonen te tekenen rond de objecten en de labels te exporteren in JSON formaat. Deze labeling en export van labels is compatibel met detectron2. Hierdoor moeten de labels niet ge hertransformeerd worden. Een andere combinatie is labeling van objecten met rechthoeken met label-studio, exportering van de labels in Yolo formaat en trainen van de detectie algoritmen met Yolov5.

Labeling: labelme


GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).

Object segmentation: detectron2

GitHub - facebookresearch/detectron2: Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.

1.14 Computer Vision Iteratief proces.

MaskAL heeft het Computer Vision iteratief proces gebruiksvriendelijker gemaakt. Dit Iteratief proces betsaat uit 5 stappen.

· Annotate

· Update

· Train

· Evaluate

· Sample

In de annotate stap wordt een initiële reeks van foto’s manueel geannoteerd. Deze foto’s worden gebruikt om via transferred learning een model te trainen. Op basis van de Test en Validatie gelabelde foto’s wordt het model geëvalueerd. Daarna wordt het model toegepast op alle niet gelabelde foto’s en wordt een sample genomen van de foto’s die het meeste informatie bevatten. Deze foto’s worden aangeboden in LAbelme waar manuele correcties van de gelabelde foto’s kunnen uitgevoed worden. Na OK van de persoon die labeled worden de suggesties van Detectron2 geüpdated en meegenomen in een 2de ronde van model training.

De automatisatie komt door de cyclus te sluiten en de sampling van de foto’s die gelabeled moeten worden automatisch te selecteren in plaats van vooraf alle foto’s te labelen probeert Detectron2 nu eerst de foto’s te labelen en wordt enkel manueel gecorrigeerd. MaskAL selecteerd deze foto’s op basis van de foto’s die het meeste informatie bevatten die nuttig is voor het model. Waardoor sneller een goed getraind model wordt bekomen. Bijkomend heb je snel een zicht op de kwaliteit van het model aangezien je op regelmatige tijdstippen het model visueel kan evalueren.

Trainen van het model

Om deze brocolli te detecteren moet het Mask R-CNN neuraal netwerk getraind worden. Om objetc detectie te doen moeten foto’s maueel gelabeled worden. De standaard methode is alle foto’s manueel labelen en deze daarna opdelen in 3 groepen. Een eerste grootste groep ‘Train’ bevat 80% van de foto’s en wordt gebruikt om het model te trainen. De tweede groep ‘Test’ bevat 10% van de foto’s en wordt gebruikt om het getrainde model te testen en de voorspellende kracht te bepalen voor elke groep van objecten. Modellen die het betse scoren op de 10% Test foto’s worden naar voor geschoven. De laatste groep ‘Val” bevat 10% van de foto’s en wordt bepaald om het getrainde model te valideren. Het model dat het beste presteerd op de 10% test foto’s werkt misschien niet goed op de 10% Val foto’s. Dit fenomeen heet “overfitting”.

1.6 Compatibiliteit.

Computer vision is gelinkt aan de CUDA versie van de grafische kaart. Afhankelijk van de omgeving worden andere grafische kaarten gebruikt. Voor Data labs zoals google Colab en Azure worden grafische kaarten bij Google en Microsoft gebruikt. KMO’s en onderzoeksinstellingen kunnen hun eigen GPU laptops, computers en servers hebben die een ander type grafische kaart gebruiken.

Naast het gebruik van de GPU kaart is ook de architectuur van de kaart van belang om de compatibiliteit te bepalen met Computer Vision.

De Gratis GPU in Google Colab (K80) en de Grafische kaarten bij Howest zijn compatibel met CUDA versie 10. Terwijl de meest nieuwe GPU niet backwards compatible zijn met CUDA 10 aangzien CUDA 11 de minimum vereiste is.

IN inderstaande opsomming worden verschillende GPU mogelijkheden opgesomd die gebruikt worden in Google Colab, Voor Edge computing, op PC en laptop en in Azure.

· Google Colab

o (Gratis) Tesla K80 (Kepler) SM_37

o (Pro) T4 (Turing) SM_75

o (Pro) P100 (Pascal) SM_60

o (Pro) V100 (Volta) SM_70

· Edge computing

o Jetson (Maxwell) SM_53

· PC/Laptop

o RTX 2060 (Turing) SM_75

o RTX 2080Ti (Turing) SM_75

o RTX 3070 (Ampere) SM_85

· Azure

o V100 (Volta) SM_70

o A100 (Ampere) SM_80

o M60 (Maxwel) SM_50

Met uitzondering van de nieuwste GPU zijn alle kaarten CUDA 10.1 compatibel. De nieuwste GPU kaarten zijn compatibel met CUDA 11.0.

Tabel 1 NVIDIA Datacenter Drivers

FirstLast
Tesla K80 (Kepler) SM_376.010.2
M60 (Maxwel) SM_506.5Ongoing
Jetson (Maxwell) SM_536.5Ongoing
P100 (Pascal) SM_608.0Ongoing
V100 (Volta) SM_707.0Ongoing
T4 (Turing) SM_7510.0Ongoing
RTX 2060 (Turing) SM_7510.0Ongoing
RTX 2080Ti (Turing) SM_7510.0Ongoing
A100 (Ampere) SM_8011.0Ongoing
RTX 3070 (Ampere) SM_8511.0Ongoing

De Google Colab, Azure en edge computing zijn geschikt om inference en/of training van de modellen uit te voeren, maar het labelen zelf kan op een apparte laptop/desktop gebeuren. Foto en dabelling uitwisseling tussen de Headless desktop en laptop kan via WinSCP gebeuren.

In de handleiding staat dat MaskAL getest is met

  • for cuda 10.1: pip install -U torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/cu101/torch_stable.html
  • for cuda 11.1: pip install -U torch==1.7.1 torchvision==0.8.2 -f https://download.pytorch.org/whl/cu111/torch_stable.html

Headless Op de Shuttle met RTX-2060 kon MaskAL geconfigureerd worden met:

pip install -U torch==1.8.0+cu101 torchvision==0.9.0+cu101 -f https://download.pytorch.org/whl/cu101/torch_stable.html

wanneer ‘+cu101’ niet werd toegevoegd, werd regelmatig de verkeerde CU versie geïnstalleerd welke foutmeldingen gaf voor MaskAL. Installatie van Torch==1.8.0 en torchvision==0.9.0 gaf foutmeldingen in MaskAL. De paketten voor torch==1.7.1+cu111 en torchvision==0.8.2+cu111 kon Python niet terug vinden in https://download.pytorch.org/whl/cu111/torch_stable.html.

Headless Op de Desktop met RTX-2080Ti kon MaskAL geconfigureerd worden met:

pip install -U torch==1.8.0+cu101 torchvision==0.9.0+cu101 -f https://download.pytorch.org/whl/cu101/torch_stable.html

De venv werd opgezet met Python 3.8. Hierbij was installatie van python3.8-dev een vereiste

Op de laptop met RTX-3070 kon maskal geconfigureerd worden met:

pip install -U torch==1.7.1+cu110 torchvision==0.8.2+cu110 -f https://download.pytorch.org/whl/cu110/torch_stable.html

deze combinatie werd niet door MaskAL uitgetest, maar andere geteste combinaties werkten niet. Installatie van de cu101 versie zoals voor de RTX-2060 is niet compatibel met RTX-3070 (zie tabel 1). De cu111 versie kon niet geïnstalleerd worden gezien de Torch versies niet beschikbaar zijn op pytorch. De torch 1.8.0+cu111 gaf dan weer problemen bij het compileren van Detectron2.

Toepassen detective witloof zaailingen op vels.

Configuratie

Maskal is geconfigureerd in een Virtuele omgeving “Comp_Vis” op de Howest “Shuttle”.

CD naar locatie: vibeshuttle1@vibeshuttle1:~/projecten/Computer_vision

Activeer de venv “Comp_Vis”

Volg de installatie van maskal, configureer vor CUDA 10.1 (procedure met 11.1 werkte niet…) en configureer lmet torch==1.8.0 torchvision==0.9.0

Navigeer daarna naar “maskal”

Klaarzetten van de foto’s

De minimum voorwaarde is dat alle foto’s in het Test en Val mapje reeds manueel moeten gelabeld worden.

De foto’s staan in 3 mappen “Test”, ”Train”, ”en “Val” in de datasets map van Maskal.

Configuratie CUDA versie van de Shuttle

Hieronder kunnen de configuraties van de CUDA versie van de Shuttle terug vinden. Aangezien de modellen in een virtuele omgeving lopen, kan de CUDA versie verschillen afhankelijk van welke resultaten van de CUDA versie worden opgeroepen. De voorwaarde blijft echter dat de grafisceh kaart met alle CUDA versies compatibel moet zijN.

Example nvidia-smi en nvcc –version

Dus Nvidia-smi toont 11.4; nvcc toont 11.1 en python toont 10.1 => die van python wordt door MaskAL gebruikt

2.4 Installeren Python packages

In de MaskAL handleiding worden verschillende pakketten geïnstalleerd om maskal te configureren.

2.4.1 Lijst te installeren

  • for cuda 10.1: pip install -U torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/cu101/torch_stable.html
  • for cuda 11.1: pip install -U torch==1.7.1 torchvision==0.8.2 -f https://download.pytorch.org/whl/cu111/torch_stable.html
  • pip install cython pyyaml==5.1
  • pip install -U 'git+GitHub - cocodataset/cocoapi: COCO API - Dataset @ http://cocodataset.org/ '
  • pip install jupyter
  • pip install opencv-python
  • pip install -U fvcore
  • pip install nbformat==4.4
  • pip install scikit-image matplotlib imageio
  • pip install black isort flake8 flake8-bugbear flake8-comprehensions
  • pip install -e .
  • pip install scikit-learn==0.22.2
  • pip install pandas
  • pip install h5py
  • pip install structlog
  • pip install pytorch-lightning==0.8.5
  • pip install transformers
  • pip install datasets
  • pip install onnx
  • pip install baal
  • pip install xmltodict
  • pip install seaborn
  • pip install statsmodels
  • pip install cerberus
  • pip install darwin-py

Oplijsting installatie issues

Frequente issues die ik kreeg bij verkeerde versies van paketten was het niet correct opbouwen van Detectron2. Dit gaf geen duidelijke issues bij de installatie, maar resulteerde in bijvoorbeeld volgende foutmelding from detectron2 import _C “Importerror: cannot import name '_C' ".

Ook de standaard test in de Maskal configuratie from detectron2 import model_zoo faalde ook frequent door issues met pakketten.

Bij configuratie van de RTX3070 met CUDA 10.1 kon alles zonder fouten geïnstalleerd worden. Detectron2 werd juist gecompileerd en from detectron2 import model_zoo kon correct ingelezen worden. Maskal bleek initeel ook te werken, maar van zodra de GPU aangesproken werd kreeg ik volgende foutmelding “RuntimeError: CUDA error: no kernel image is available for execution on the device”. Wat resulteerde uit de incompatibiliteit tussen de RTX3070 en CUDA 10.X.

Op de desktop was Python 3.8 niet voor geïnstalleerd. Na installatie en configuratie kregen we bij installatie van

  • pip install -U 'git+GitHub - cocodataset/cocoapi: COCO API - Dataset @ http://cocodataset.org/ '

volgende foutmelding.


dit kon opgelost worden door python3.8-dev te installeren.

Toepassen Maskal voor de detectie van paloxen in een loods

Als test om Active learning toe te passen werd een dataset met 44 foto’s van witloof paloxen gebruikt die met poligonen gelabbeled konden worden. De palloxen werden verdeeld in 2 types. Grotere paloxen die witloof wortellen bevatte en kleinere palloxen die aardappelen bevatte.

Eenmaal maskal juist geconfigureerd en geïnstalleerd kan de active learning gestart worden met “python maskAL.py –config maskAL.yaml”. Het gaat hier over python3, op toestellen waar enkel python3 geïnstalleerd werd kan “python” gebruikt worden om python te openen. Systemen met python2 en python3 moeten “python3” specifiëren.

(Comp_Vis) vibeshuttle1@vibeshuttle1:~/projecten/Computer_vision/maskal$

Een eerste stap in Maskal is het selecteren van het pregedefinieerd aantal foto’s die gelabeld moeten worden per ronde. Hier waren dat er 5. In onderstaande screenshot kan je de foto’s en toevoegen van de annotaties volgen

Het model heeft hier 5 foto’s geselecteerd en initiële labels toegevoegd. Gezien het model transferred learning gebruikt is het gebaseerd op het COCO model en de initiële labelen is met labels van het COCO model aangezien het model nog niet getraind is met onze nieuwe labels. Voor 1 foto vindt COCO objecten.

Gezien MaskAL op een headless systeem draait worden de foto’s getransfereerd met WinSCP naar een lokale laptop waar labelme op draait. Onderstaande foto is de foto waar Detectron 2 objecten gedetecteerd heeft met het COCO model. Hier wordt de vorkheftruck als “truck” gedetecteerd en de persoon als “person”. Het COCO model is niet getraind op vorkheftrucks en palloxen, dus deze objecten kan het ongetrainde model nog niet detecteren.

De “truck” werd in deze foto herlabeled naar “forklift” en de paloxen werden belabeled met polygonen tot de 5 foto’s die MaskAL naar voren schoof gelabeled werden en toegevoegd aan de “annotate” map.

Wanneer alle 5 foto’s gelabeld zijn kan Detectron 2 het model trainen om Palloxen en vorkheftrucks te detecteren. IN de 5 foto’s werden 53 grote paloxen met witloof (Pallox), 41 kleine paloxen (pallox_2) met aardappelen, 2 vorkheftrucks en één persoon belabeled.

Deze foto’s warden gebruikt om het Detectron2 model te tainen.

Aangezien meer grote paloxen dan personen en vorkheftrucks in de gelabelde train data zitten worden deze sneller herkend. De Gemiddelde precisie voor het model getraind op 5 foto’s voor grote paloxen is 86.9, voor kleine paloxen 51.7, voor vorkheftrucks 35 en voor personen 8. Op het einde van de training verbeterde de accuratie en werd een Gemiddelde precisie behaald van 77 voor Witloof palloxen, 53.7 voor kleinere aardappel palloxen, 35.3 voor vorkheftrucks en 24.7 voor personen.

Na deze eerste training stelt MaskAL opnieuw 5 foto’s voor waarbij het getrainde model wordt toegepast.

Voor alle 5 voorgestelde foto’s worden objecten gelabeled.

In onderstaande foto zien we dat de pallox relatief goed wordt gedeteceerd en het model merkt ook een vorkheftruck op. Enkel de persoon wordt niet gedetecteerd.

In een tweede foto worden alle palloxen gedetecteerd en de kleine aardappel palloxen kunnen onderscheiden worden van de grotere witloof palloxen. Het model heeft het wel moeilijk met randeffecten van het model. Dit is het meeste zichtbaar aan de randen van de foto’s waarbij de lijn niet perfect recht is..

With “SHIFT” Click on a point outside an image you can bring it back into the image.

De randeffecten werden manueel bijgewerkt en labels werden toegevoegd.

Na labelen van de foto’s werden in de 10 foto’s 120 grote palloxen met witloof (Pallox), 58 kleine palloxen (pallox_2) met aardappelen, 3 vorkheftrucks en twee personen belabeled.

De gemiddelde precisie van het model verbeterde iets met het toevoegen van 5 extra gelabelde foto’s

Na het getrainde model op 10 foto’s slaagde het model er relatief goed in om de 2 types palloxen, persoon en vorkheftruck te detecteren. Het model kan gebruikt worden op de plaats en categorie van het object te rapporteren. Wanneer de perfecte afbakening van de objecten vereist is moet het model nog meer verfijnd te worden.

Met de steun van:
© Howest 2023