Hoe train je een aangepaste dataset met YOLOv5?

Hoe train je een aangepaste dataset met YOLOv5?

Bronknooppunt: 1953267

Introductie

We hebben een aantal mooie termen gezien voor AI en deep learning, zoals vooraf getrainde modellen, transfer learning, enz. Laat me je onderwijzen met een veelgebruikte technologie en een van de belangrijkste en meest effectieve: Transfer learning met YOLOv5.

You Only Look Once, of YOLO, is een van de meest gebruikte op deep learning gebaseerde objectidentificatiemethoden. Met behulp van een aangepaste dataset laat dit artikel u zien hoe u een van de meest recente variaties, YOLOv5, traint.

leerdoelen 

  1. Dit artikel zal zich voornamelijk richten op het trainen van het YOLOv5-model op een implementatie van een aangepaste dataset.
  2. We zullen zien wat voorgetrainde modellen zijn en wat overdrachtsleren is.
  3. We zullen begrijpen wat YOLOv5 is en waarom we versie 5 van YOLO gebruiken.

Dus, zonder tijd te verspillen, laten we aan de slag gaan met het proces

Inhoudsopgave

  1. Voorgetrainde modellen
  2. Transfer leren
  3. Wat en waarom YOLOv5?
  4. Stappen die betrokken zijn bij overdrachtsleren
  5. Implementatie
  6. Enkele uitdagingen waarmee u te maken kunt krijgen
  7. Conclusie

Voorgetrainde modellen

Je hebt misschien gehoord dat datawetenschappers de term 'vooraf getraind model' veel gebruiken. Nadat ik heb uitgelegd wat een deep learning model/netwerk doet, zal ik de term uitleggen. Een deep learning-model is een model met verschillende lagen die op elkaar zijn gestapeld om een โ€‹โ€‹afzonderlijk doel te dienen, zoals classificatie, detectie, enz. Deep learning-netwerken leren door gecompliceerde structuren te ontdekken in de gegevens die aan hen worden toegevoerd en de gewichten op te slaan in een bestand dat worden later gebruikt om vergelijkbare taken uit te voeren. Vooraf getrainde modellen zijn al getrainde Deep Learning-modellen. Wat het betekent is dat ze al getraind zijn op een enorme dataset met miljoenen afbeeldingen.

Hier is hoe de TensorFlow website definieert vooraf getrainde modellen: Een vooraf getraind model is een opgeslagen netwerk dat eerder is getraind op een grote gegevensset, meestal op een grootschalige afbeeldingsclassificatietaak.

Sommige sterk geoptimaliseerd en buitengewoon efficiรซnt voorgetrainde modellen zijn beschikbaar op internet. Verschillende modellen worden gebruikt om verschillende taken uit te voeren. Enkele van de vooraf getrainde modellen zijn VGG-16, VGG-19, YOLOv5, YOLOv3 en ResNet 50.

Welk model u moet gebruiken, hangt af van de taak die u wilt uitvoeren. Als ik bijvoorbeeld een object detectie taak, zal ik het YOLOv5-model gebruiken.

Transfer leren

Transfer leren is de belangrijkste techniek die de taak van een datawetenschapper verlicht. Het trainen van een model is een flinke en tijdrovende taak; als een model helemaal opnieuw wordt getraind, levert dit meestal geen erg goede resultaten op. Zelfs als we een model trainen dat vergelijkbaar is met een vooraf getraind model, zal het niet zo effectief presteren en kan het weken duren voordat een model is getraind. In plaats daarvan kunnen we de vooraf getrainde modellen gebruiken en de reeds aangeleerde gewichten gebruiken door ze te trainen op een aangepaste dataset om een โ€‹โ€‹vergelijkbare taak uit te voeren. Deze modellen zijn zeer efficiรซnt en verfijnd in termen van architectuur en prestaties, en ze hebben hun weg naar de top gevonden door beter te presteren in verschillende wedstrijden. Deze modellen zijn getraind op zeer grote hoeveelheden gegevens, waardoor ze meer divers zijn in kennis.

Transferleren betekent dus in feite het overdragen van kennis die is opgedaan door het model te trainen op eerdere gegevens om het model te helpen beter en sneller te leren om een โ€‹โ€‹andere maar vergelijkbare taak uit te voeren.

Bijvoorbeeld een YOLOv5 gebruiken voor objectdetectie, maar het object is iets anders dan de eerder gebruikte gegevens van het object.

Wat en waarom YOLOv5?

YOLOv5 is een voorgetraind model dat staat voor 'je kijkt pas als versie 5 wordt gebruikt voor real-time objectdetectie en heeft bewezen zeer efficiรซnt te zijn in termen van nauwkeurigheid en inferentietijd. Er zijn andere versies van YOLO, maar zoals te verwachten presteert YOLOv5 beter dan andere versies. YOLOv5 is snel en gemakkelijk te gebruiken. Het is gebaseerd op het PyTorch-framework, dat een grotere community heeft dan Yolo v4 Darknet.

Yolov5

We zullen nu kijken naar de architectuur van YOLOv5.

De structuur ziet er misschien verwarrend uit, maar dat maakt niet uit, omdat we niet naar de architectuur hoeven te kijken, maar direct het model en de gewichten gebruiken.

Bij overdrachtsleren gebruiken we de aangepaste dataset, dwz de gegevens die het model nog nooit eerder heeft gezien OF de gegevens waarop het model niet is getraind. Omdat het model al is getraind op een grote dataset, hebben we de gewichten al. We kunnen het model nu trainen voor een aantal tijdperken op de gegevens waaraan we willen werken. Training is vereist omdat het model de gegevens voor het eerst heeft gezien en enige kennis vereist om de taak uit te voeren.

Stappen die betrokken zijn bij Transfer Learning

Leren overdragen is een eenvoudig proces en we kunnen het in een paar eenvoudige stappen doen:

  1. Data voorbereiding
  2. Het juiste formaat voor de annotaties
  3. Verander een paar lagen als je dat wilt
  4. Train het model opnieuw voor een paar iteraties
  5. Valideren/testen

Data voorbereiding

Gegevensvoorbereiding kan tijdrovend zijn als de door u gekozen gegevens een beetje groot zijn. Gegevensvoorbereiding betekent het annoteren van de afbeeldingen, een proces waarbij u de afbeeldingen labelt door een kader rond het object in de afbeelding te maken. Door dit te doen, worden de coรถrdinaten van het gemarkeerde object opgeslagen in een bestand dat vervolgens naar het model wordt gestuurd voor training. Er zijn een paar websites, zoals zinvol.ai en roboflow.com, waarmee u de gegevens kunt labelen. 

Hier ziet u hoe u de gegevens voor het YOLOv5-model op makesense.ai kunt annoteren.

1. Bezoek https://www.makesense.ai/. 

2. Klik op aan de slag rechtsonder in het scherm.

Yolov5

3. Selecteer de afbeeldingen die u wilt labelen door op het gemarkeerde vak in het midden te klikken.

Laad de afbeeldingen die u wilt annoteren en klik op objectdetectie.
Yolov5

4. Na het laden van de afbeeldingen wordt u gevraagd om labels te maken voor de verschillende klassen van uw dataset.

Ik detecteer kentekenplaten op een voertuig, dus het enige label dat ik zal gebruiken is 'Kentekenplaat'. U kunt meer labels maken door simpelweg op Enter te drukken door op de knop '+' aan de linkerkant van het dialoogvenster te klikken.

Nadat je alle labels hebt aangemaakt, klik je op project starten.

Yolov5

Als u labels bent vergeten, kunt u deze later bewerken door op acties te klikken en vervolgens labels bewerken.

5. Begin met het maken van een begrenzingskader rond het object in de afbeelding. Deze oefening kan aanvankelijk een beetje leuk zijn, maar met zeer grote gegevens kan het vermoeiend zijn.

begrenzend vak

6. Nadat u alle afbeeldingen hebt geannoteerd, moet u het bestand opslaan dat de coรถrdinaten van de begrenzingsvakken samen met de klasse zal bevatten.

U moet dus naar de actieknop gaan en op annotaties exporteren klikken. Vergeet niet de optie 'Een zip-pakket met bestanden in YOLO-indeling' aan te vinken, omdat hierdoor de bestanden in het juiste formaat worden opgeslagen, zoals vereist in het YOLO-model.

YOLO-model

7. Dit is een belangrijke stap, dus volg deze zorgvuldig.

Nadat u alle bestanden en afbeeldingen hebt, maakt u een map met een willekeurige naam. Klik op de map en maak nog twee mappen met de naam afbeeldingen en labels in de map. Vergeet niet om de map dezelfde naam te geven als hierboven, aangezien het model automatisch naar labels zoekt nadat u het trainingspad in de opdracht hebt ingevoerd.

Om je een idee te geven van de map, heb ik een map gemaakt met de naam 'CarsData' en in die map heb ik twee mappen gemaakt: 'afbeeldingen' en 'labels'.

jolov5

Binnen de twee mappen moet je nog twee mappen maken met de namen 'train' en 'val'. In de afbeeldingenmap kunt u de afbeeldingen naar wens splitsen, maar u moet voorzichtig zijn bij het splitsen van het label, aangezien de labels moeten overeenkomen met de afbeeldingen die u hebt gesplitst

8. Maak nu een zip-bestand van de map en upload het naar de schijf zodat we het in colab kunnen gebruiken.

Implementatie

We komen nu bij het implementatiegedeelte, dat heel eenvoudig maar lastig is. Als u niet precies weet welke bestanden u moet wijzigen, kunt u het model niet trainen op de aangepaste gegevensset. 

Dus hier zijn de codes die u moet volgen om het YOLOv5-model te trainen op een aangepaste dataset

Ik raad u aan Google Colab te gebruiken voor deze zelfstudie, omdat deze ook GPU biedt die snellere berekeningen mogelijk maakt.

1. !git kloon https://github.com/ultralytics/yolov5
Hiermee wordt een kopie gemaakt van de YOLOv5-repository, een GitHub-repository gemaakt door ultralytics.

2. cdyolov5
Dit is een opdrachtregel-shell-commando dat wordt gebruikt om de huidige werkdirectory te wijzigen in de YOLOv5-directory.

3. !pip install -r vereisten.txt
Met deze opdracht worden alle pakketten en bibliotheken geรฏnstalleerd die zijn gebruikt bij het trainen van het model.

4. !unzip '/content/drive/MyDrive/CarsData.zip'
De map uitpakken die afbeeldingen en labels bevat in Google Colab

Hier komt de belangrijkste stap...

U heeft nu bijna alle stappen uitgevoerd en u moet nog รฉรฉn regel code schrijven om het model te trainen, maar daarvoor moet u nog een paar stappen uitvoeren en enkele mappen wijzigen om het pad van uw aangepaste dataset te geven en train uw model op die gegevens.

Dit is wat je moet doen.

Na het uitvoeren van de 4 bovenstaande stappen, heb je de yolov5-map in je Google Colab. Ga naar de map yolov5 en klik op de map 'data'. Nu ziet u een map met de naam 'coco128.yaml'. 

jolov5

Ga je gang en download deze map.

Nadat de map is gedownload, moet u er een paar wijzigingen in aanbrengen en deze terug uploaden naar dezelfde map als waaruit u de map hebt gedownload.

Laten we nu kijken naar de inhoud van het bestand dat we hebben gedownload, en het zal er ongeveer zo uitzien.

jolov5

We gaan dit bestand aanpassen aan onze dataset en annotaties.

We hebben de dataset al uitgepakt op colab, dus we gaan het pad van onze trein en validatiebeelden kopiรซren. Na het kopiรซren van het pad van de treinafbeeldingen, die zich in de datasetmap bevinden en er ongeveer zo uitziet '/content/yolov5/CarsData/images/train', plakt u deze in het bestand coco128.yaml, dat we zojuist hebben gedownload.

Doe hetzelfde met de test- en validatiebeelden.

Nadat we hiermee klaar zijn, zullen we het aantal klassen vermelden zoals 'nc: 1'. Het aantal lessen is in dit geval slechts 1. We zullen dan de naam vermelden zoals weergegeven in onderstaande afbeelding. Verwijder alle andere klassen en het commentaargedeelte, dat niet nodig is, waarna ons bestand er ongeveer zo uit zou moeten zien.

Yolo

Sla dit bestand op met elke gewenste naam. Ik heb het bestand opgeslagen met de naam customPath.yaml en upload dit bestand nu terug naar de colab op dezelfde plek waar coco128.yaml was. 

Nu zijn we klaar met het bewerkingsgedeelte en klaar om het model te trainen.

Voer de volgende opdracht uit om uw model te trainen voor een paar interacties op uw aangepaste gegevensset.

Vergeet niet de naam van het geรผploade bestand te wijzigen ('customPath.yaml). U kunt ook het aantal tijdperken wijzigen waarin u het model wilt trainen. In dit geval ga ik het model slechts voor 3 tijdperken trainen.

5. !python train.py โ€“img 640 โ€“batch 16 โ€“epochs 10 โ€“data /content/yolov5/customPath.yaml โ€“gewichten yolov5s.pt

Houd rekening met het pad waar u de map uploadt. Als het pad wordt gewijzigd, werken de opdrachten helemaal niet.

Nadat u deze opdracht hebt uitgevoerd, zou uw model moeten beginnen met trainen en ziet u zoiets op uw scherm.

Yolo

Yolo

Nadat alle tijdperken zijn voltooid, kan uw model op elke afbeelding worden getest.

U kunt wat meer aanpassingen doen in het detect.py-bestand over wat u wilt opslaan en wat u niet leuk vindt, de detecties waarbij de kentekenplaten worden gedetecteerd, enz.

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

U kunt deze opdracht gebruiken om de voorspelling van het model op sommige afbeeldingen te testen.

Enkele uitdagingen waarmee u te maken kunt krijgen

Hoewel de hierboven beschreven stappen correct zijn, zijn er enkele problemen die u kunt tegenkomen als u ze niet precies volgt. 

  1. Verkeerd pad: dit kan hoofdpijn of een probleem zijn. Als u ergens het verkeerde pad bent ingeslagen bij het trainen van de afbeelding, kan het niet gemakkelijk zijn om deze te identificeren en kunt u het model niet trainen.
  2. Verkeerd formaat van labels: dit is een wijdverbreid probleem waarmee mensen worden geconfronteerd tijdens het trainen van een YOLOv5. Het model accepteert alleen een formaat waarin elke afbeelding zijn eigen tekstbestand heeft met daarin het gewenste formaat. Vaak wordt een bestand in XLS-indeling of een enkel CSV-bestand naar het netwerk gestuurd, wat resulteert in een fout. Als u de gegevens ergens vandaan downloadt, kan er in plaats van elke afzonderlijke afbeelding te annoteren, een ander bestandsformaat zijn waarin de labels worden opgeslagen. Hier is een artikel om het XLS-formaat naar het YOLO-formaat te converteren. (link na voltooiing van het artikel).
  3. De bestanden niet correct benoemen: Het niet correct benoemen van het bestand zal opnieuw tot een fout leiden. Besteed aandacht aan de stappen bij het benoemen van de mappen en voorkom deze fout.

Conclusie

In dit artikel hebben we geleerd wat overdrachtsleren is en het vooraf getrainde model. We hebben geleerd wanneer en waarom we het YOLOv5-model moeten gebruiken en hoe we het model kunnen trainen op een aangepaste dataset. We hebben elke stap doorlopen, van het voorbereiden van de dataset tot het wijzigen van de paden en uiteindelijk het invoeren ervan in het netwerk bij de implementatie van de techniek, en we begrepen de stappen grondig. We hebben ook gekeken naar veelvoorkomende problemen tijdens het trainen van een YOLOv5 en hun oplossing. Ik hoop dat dit artikel je heeft geholpen om je eerste YOLOv5 te trainen op een aangepaste dataset en dat je het artikel leuk vindt.

Tijdstempel:

Meer van Analytics Vidhya