Hur tränar man en anpassad datauppsättning med YOLOv5?

Hur tränar man en anpassad datauppsättning med YOLOv5?

Källnod: 1953267

Beskrivning

Vi har sett några tjusiga termer för AI och djupinlärning, såsom förtränade modeller, transfer learning, etc. Låt mig utbilda dig med en mycket använd teknik och en av de viktigaste och mest effektiva: Transfer learning med YOLOv5.

You Only Look Once, eller YOLO är en av de mest använda metoderna för djupinlärning-baserad objektidentifiering. Med hjälp av en anpassad datauppsättning kommer den här artikeln att visa dig hur du tränar en av dess senaste varianter, YOLOv5.

Inlärningsmål 

  1. Den här artikeln kommer huvudsakligen att fokusera på att träna YOLOv5-modellen på en anpassad datasetimplementering.
  2. Vi ska se vad förtränade modeller är och se vad transfer learning är.
  3. Vi kommer att förstå vad YOLOv5 är och varför vi använder version 5 av YOLO.

Så, utan att slösa tid, låt oss komma igång med processen

Innehållsförteckning

  1. Förtränade modeller
  2. Överför lärande
  3. Vad och varför YOLOv5?
  4. Steg involverade i överföringslärande
  5. Genomförande
  6. Några utmaningar som du kan möta
  7. Slutsats

Förutbildade modeller

Du kanske har hört dataforskare använda termen "förutbildad modell" i stor utsträckning. Efter att ha förklarat vad en djupinlärningsmodell/nätverk gör kommer jag att förklara termen. En djupinlärningsmodell är en modell som innehåller olika lager staplade tillsammans för att tjäna ett ensamt syfte, såsom klassificering, detektion, etc. Deep learning-nätverk lär sig genom att upptäcka komplicerade strukturer i den data som matas till dem och spara vikterna i en fil som används senare för att utföra liknande uppgifter. Förutbildade modeller är redan utbildade Deep Learning-modeller. Vad det betyder är att de redan är utbildade på en enorm datauppsättning som innehåller miljontals bilder.

Så här är TensorFlow webbplatsen definierar förutbildade modeller: En förtränad modell är ett sparat nätverk som tidigare tränats på en stor datamängd, vanligtvis på en storskalig bildklassificeringsuppgift.

Vissa mycket optimerade och utomordentligt effektiva förutbildade modeller finns på internet. Olika modeller används för att utföra olika uppgifter. Några av de förtränade modellerna är VGG-16, VGG-19, YOLOv5, YOLOv3 och ResNet 50.

Vilken modell du ska använda beror på vilken uppgift du vill utföra. Om jag till exempel vill utföra en objektdetektering uppgift kommer jag att använda YOLOv5-modellen.

Överför lärande

Överför lärande är den viktigaste tekniken som underlättar uppgiften för en datavetare. Att träna en modell är en rejäl och tidskrävande uppgift; om en modell tränas från grunden brukar det inte ge särskilt bra resultat. Även om vi tränar en modell som liknar en förtränad modell kommer den inte att prestera lika effektivt, och det kan ta veckor för en modell att träna. Istället kan vi använda de förtränade modellerna och använda de redan inlärda vikterna genom att träna dem på en anpassad datauppsättning för att utföra en liknande uppgift. Dessa modeller är mycket effektiva och förfinade när det gäller arkitektur och prestanda, och de har tagit sig till toppen genom att prestera bättre i olika tävlingar. Dessa modeller är tränade på mycket stora mängder data, vilket gör dem mer mångsidiga i kunskap.

Så transfer learning innebär i grunden att överföra kunskap som erhållits genom att träna modellen på tidigare data för att hjälpa modellen att lära sig bättre och snabbare för att utföra en annan men liknande uppgift.

Till exempel att använda en YOLOv5 för objektdetektering, men objektet är något annat än objektets tidigare data som används.

Vad och varför YOLOv5?

YOLOv5 är en förtränad modell som står för att du bara ser när version 5 används för objektdetektering i realtid och har visat sig vara mycket effektiv när det gäller noggrannhet och slutledningstid. Det finns andra versioner av YOLO, men som man skulle förutsäga presterar YOLOv5 bättre än andra versioner. YOLOv5 är snabb och enkel att använda. Den är baserad på PyTorch-ramverket, som har en större community än Yolo v4 Darknet.

Yolov5

Vi ska nu titta på arkitekturen för YOLOv5.

Strukturen kan se förvirrande ut, men det spelar ingen roll då vi inte behöver titta på arkitekturen istället direkt använda modellen och vikterna.

I överföringsinlärning använder vi det anpassade datasetet, dvs de data som modellen aldrig har sett förut ELLER de data som modellen inte är tränad på. Eftersom modellen redan är tränad på ett stort dataset har vi redan vikterna. Vi kan nu träna modellen för ett antal epoker på de data vi vill arbeta med. Utbildning krävs då modellen har sett data för första gången och kommer att kräva viss kunskap för att utföra uppgiften.

Steg involverade i överföringslärande

Transferinlärning är en enkel process, och vi kan göra det i några enkla steg:

  1. Dataförberedelse
  2. Rätt format för kommentarerna
  3. Byt några lager om du vill
  4. Träna om modellen för några iterationer
  5. Validera/testa

Förberedelse av data

Dataförberedelse kan vara tidskrävande om din valda data är lite stor. Dataförberedelse innebär att kommentera bilderna, vilket är en process där man märker bilderna genom att göra en ruta runt objektet i bilden. Genom att göra detta kommer koordinaterna för det markerade objektet att sparas i en fil som sedan matas till modellen för träning. Det finns några webbplatser, som t.ex makesense.ai och roboflow.com, som kan hjälpa dig att märka data. 

Så här kan du kommentera data för YOLOv5-modellen på makesense.ai.

1. Besök https://www.makesense.ai/. 

2. Klicka på kom igång längst ner till höger på skärmen.

Yolov5

3. Välj de bilder du vill märka genom att klicka på rutan som är markerad i mitten.

Ladda bilderna du vill kommentera och klicka på objektdetektering.
Yolov5

4. När du har laddat bilderna kommer du att bli ombedd att skapa etiketter för din datauppsättnings olika klasser.

Jag upptäcker registreringsskyltar på ett fordon, så den enda etiketten jag kommer att använda är "License Plate". Du kan skapa fler etiketter genom att helt enkelt trycka på enter genom att klicka på '+'-knappen till vänster i dialogrutan.

När du har skapat alla etiketter klickar du på start projekt.

Yolov5

Om du har missat några etiketter kan du redigera dem senare genom att klicka på åtgärder och sedan redigera etiketter.

5. Börja skapa en begränsningsram runt objektet i bilden. Den här övningen kan vara lite rolig till en början, men med mycket stor data kan det vara tröttsamt.

avgränsande ruta

6. Efter att ha kommenterat alla bilder behöver du spara filen som kommer att innehålla koordinaterna för avgränsande rutor tillsammans med klassen.

Så du måste gå till åtgärdsknappen och klicka på exportkommentarer, glöm inte att markera alternativet "Ett zip-paket som innehåller filer i YOLO-format", eftersom detta kommer att spara filerna i rätt format som krävs i YOLO-modellen.

YOLO modell

7. Detta är ett viktigt steg, så följ det noggrant.

När du har alla filer och bilder skapar du en mapp med valfritt namn. Klicka på mappen och skapa ytterligare två mappar med namnbilder och etiketter inuti mappen. Glöm inte att namnge mappen på samma sätt som ovan, eftersom modellen automatiskt söker efter etiketter efter att du matat träningsvägen i kommandot.

För att ge dig en uppfattning om mappen har jag skapat en mapp som heter 'CarsData' och i den mappen skapat två mappar – 'bilder' och 'etiketter'.

yolov5

Inuti de två mapparna måste du skapa ytterligare två mappar som heter 'tåg' och 'val'. I bildmappen kan du dela upp bilderna efter din vilja, men du måste vara försiktig när du delar upp etiketten, eftersom etiketterna ska matcha bilderna du har delat

8. Gör nu en zip-fil av mappen och ladda upp den till enheten så att vi kan använda den i colab.

Genomförande

Vi kommer nu till implementeringsdelen, som är väldigt enkel men knepig. Om du inte vet vilka filer som ska ändras exakt, kommer du inte att kunna träna modellen på den anpassade datamängden. 

Så här är koderna som du bör följa för att träna YOLOv5-modellen på en anpassad datauppsättning

Jag rekommenderar att du använder google colab för den här handledningen eftersom den också tillhandahåller GPU som ger snabbare beräkningar.

1. !git-klon https://github.com/ultralytics/yolov5
Detta kommer att göra en kopia av YOLOv5-förvaret som är ett GitHub-förråd skapat av ultralytics.

2. cd yolov5
Detta är ett kommandoradsskal-kommando som används för att ändra den nuvarande arbetskatalogen till YOLOv5-katalogen.

3. !pip install -r requirements.txt
Detta kommando kommer att installera alla paket och bibliotek som används för att träna modellen.

4. !unzip '/content/drive/MyDrive/CarsData.zip'
Packar upp mappen som innehåller bilder och etiketter i google colab

Här kommer det viktigaste steget...

Du har nu utfört nästan alla steg och behöver skriva en kodrad till som ska träna modellen, men innan dess måste du utföra några steg till och ändra några kataloger för att ge sökvägen till din anpassade datauppsättning och träna din modell på dessa data.

Här är vad du behöver göra.

Efter att ha utfört de 4 stegen ovan kommer du att ha mappen yolov5 i din google colab. Gå till mappen yolov5 och klicka på mappen 'data'. Nu kommer du att se en mapp som heter 'coco128.yaml'. 

yolov5

Gå vidare och ladda ner den här mappen.

När mappen har laddats ner måste du göra några ändringar i den och ladda upp den tillbaka till samma mapp som du laddade ner den från.

Låt oss nu titta på innehållet i filen vi har laddat ner, och det kommer att se ut ungefär så här.

yolov5

Vi kommer att anpassa den här filen enligt vår datauppsättning och kommentarer.

Vi har redan packat upp datasetet på colab, så vi kommer att kopiera sökvägen för våra tåg och valideringsbilder. Efter att ha kopierat sökvägen till tågbilderna, som kommer att finnas i datasetmappen och ser ut ungefär så här '/content/yolov5/CarsData/images/train', klistra in den i filen coco128.yaml, som vi just laddade ner.

Gör samma sak med test- och valideringsbilderna.

Nu när vi är klara med detta kommer vi att nämna antalet klasser som 'nc: 1'. Antalet klasser, i det här fallet, är bara 1. Vi kommer då att nämna namnet som visas i bilden nedan. Ta bort alla andra klasser och den kommenterade delen, som inte behövs, varefter vår fil ska se ut ungefär så här.

yolo

Spara den här filen med vilket namn du vill. Jag har sparat filen med namnet customPath.yaml och laddar nu upp den här filen tillbaka till colab på samma plats där coco128.yaml var. 

Nu är vi klara med redigeringsdelen och redo att träna modellen.

Kör följande kommando för att träna din modell för några interaktioner på din anpassade datauppsättning.

Glöm inte att ändra namnet på filen du har laddat upp ('customPath.yaml). Du kan också ändra antalet epoker du vill träna modellen. I det här fallet kommer jag att träna modellen endast under 3 epoker.

5. !python train.py –img 640 –batch 16 –epoker 10 –data /content/yolov5/customPath.yaml –weights yolov5s.pt

Tänk på sökvägen dit du laddar upp mappen. Om sökvägen ändras kommer kommandona inte att fungera alls.

När du har kört det här kommandot bör din modell börja träna och du kommer att se något liknande på skärmen.

yolo

yolo

När alla epoker är avslutade kan din modell testas på vilken bild som helst.

Du kan göra lite mer anpassning i detect.py-filen om vad du vill spara och vad du inte gillar, detekteringarna där registreringsskyltarna detekteras osv.

6. !python detect.py –weight /content/yolov5/runs/train/exp/weights/best.pt –source path_of_the_image

Du kan använda det här kommandot för att testa modellens förutsägelse på några av bilderna.

Några utmaningar som du kan möta

Även om stegen som förklaras ovan är korrekta, finns det vissa problem du kan möta om du inte följer dem exakt. 

  1. Fel väg: Detta kan vara en huvudvärk eller ett problem. Om du har kommit in på fel väg någonstans när du tränar bilden kan det inte vara lätt att identifiera, och du kommer inte att kunna träna modellen.
  2. Fel format av etiketter: Detta är ett utbrett problem som människor möter när de tränar en YOLOv5. Modellen accepterar endast ett format där varje bild har sin egen textfil med önskat format inuti. Ofta matas en fil i XLS-format eller en enskild CSV-fil till nätverket, vilket resulterar i ett fel. Om du laddar ner data någonstans, istället för att kommentera varje bild, kan det finnas ett annat filformat där etiketterna sparas. Här är en artikel för att konvertera XLS-formatet till YOLO-formatet. (länk efter att artikeln är klar).
  3. Att inte namnge filerna korrekt: Att inte namnge filen korrekt leder igen till ett fel. Var uppmärksam på stegen när du namnger mapparna och undvik detta fel.

Slutsats

I den här artikeln lärde vi oss vad transfer learning är och den förtränade modellen. Vi lärde oss när och varför man använder YOLOv5-modellen och hur man tränar modellen på en anpassad datauppsättning. Vi gick igenom varje steg, från att förbereda datamängden till att ändra vägarna och slutligen mata dem till nätverket i implementeringen av tekniken, och förstod stegen grundligt. Vi tittade också på vanliga problem som möter när vi tränade en YOLOv5 och deras lösning. Jag hoppas att den här artikeln hjälpte dig att träna din första YOLOv5 på en anpassad datauppsättning och att du gillar artikeln.

Tidsstämpel:

Mer från Analys Vidhya