Zephyrnet-logo

Tren din egen YoloV5-objektdeteksjonsmodell

Dato:


Denne artikkelen ble publisert som en del av Data Science Blogathon

"Du kan ha data uten informasjon, men du kan ikke ha informasjon uten data" - Daniel Keys Moran

Introduksjon

Hvis du er her, er du kanskje allerede interessert i Machine Learning eller Deep Learning, så jeg trenger ikke forklare hva det er? Så starter med en liten introduksjon til emnet, Objektdeteksjon er metoden for å oppdage ønskede objekter i bilder eller videoer, og de siste årene har det vært mange modeller som ble introdusert for det samme. YoloV5 er en av de modellene som regnes som en av de raskeste og nøyaktige. I denne artikkelen skal jeg forklare hvordan du kan trene YoloV5 modell på dine egne data for både GPU og CPU-baserte systemer. Jeg vil forklare hvordan du må sette opp både GPU eller CPU, da det kan trenes på hvilken som helst av dem, selv om GPU er foretrukket, da det vil ta nesten tre ganger mer på CPU for å trene det samme, hvis du ikke har GPU-basert systemet og ikke ønsker å trene modellen din på Google Colab, kan du fortsatt trene modellen på CPU.

Trinnene vi skal diskutere i denne opplæringen er som følger:

Valgfritt: Opprette et virtuelt miljø for trening.

  1. Kloningslager og installasjon av avhengigheter for YoloV5
  2. Lag merknader for et tilpasset datasett ved hjelp av VIA-verktøyet
  3. Konverter merknader til Coco-format
  4. Oppretter YAML-fil for trening
  5. YoloV5 trening
  6. YoloV5 Inferens

Python 3.6 anbefales til treningen.

La oss starte med å lage et virtuelt miljø, dette trinnet er valgfritt, hvis du vil installere pakker i rotmiljøet kan du hoppe over dette ellers hvis du vil holde dette oppsettet atskilt kan du følge det for å lage et virtuelt miljø. Start med å installere virtualenv pakke som hjelper med å skape det virtuelle miljøet.

$ pip installer virtualenv

når pakken er installert, kan du gå videre og lage det virtuelle miljøet for YoloV5-trening:

 $ virtualenv yolov5_training_env

utgangen av kommandoen vil se slik ut:

virtuell env
Kilde: lokalt

etter å ha opprettet et miljø, må du aktivere det samme for å installere de nødvendige pakkene.

UNIX:

$ kilde yolov5_training_env/bin/activate

Windows:

$ yolov5_training_envScriptsactivate
virtuelt miljø vinduer | YoloV5 objektdeteksjonsmodell
Kilde: lokalt

Kloningslager og installasjonsavhengigheter

Til å begynne med må vi klone tjenestemannen YoloV5 repository, hvis du allerede har git installert, kan følgende kommando brukes til å klone depotet.

$ git klone https://github.com/ultralytics/yolov5
klone depot og installeringsavhengigheter
Kilde: lokalt

Ellers kan du laste ned koden direkte fra følgende nettsted:

YoloV5-kode: https://github.com/ultralytics/yolov5

Dette yolov5-depotet kommer med en "requirements.txt"-fil som inneholder alle nødvendige biblioteker for å trene modellen. En ting å huske her er lommelykt bibliotek som ville være annerledes for både GPU- og CPU-miljøer, så vi må fjerne torch and torchvision fra kravfilene og installere de andre bibliotekene. For å installere andre biblioteker fra filen "requirements.txt" brukes følgende kommando.

$ pip install -r requirements.txt
installeringskrav | YoloV5 objektdeteksjonsmodell
Kilde: lokalt

etter å ha installert andre biblioteker vil vi installere torch and torchvision som er ryggraden for trening.

Installasjon av Torch CPU-versjon:

Python-pakkehåndteringssystem (pip) kan brukes til å installere lommelykt og torchvision for CPU.

Windows og Linux:

$ pip install torch==1.7.0+cpu torchvision==0.8.0+cpu torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

Mac:

$ pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0

Installasjon av Torch GPU-versjon: 

Conda er å foretrekke for å installere GPU-baserte lommelykt- og torchvision-biblioteker da den allerede kompilerer den med CUDA. Også hvis du har problemer med conda-installasjon, kan du bruke pip-installasjon. Før installasjoner må du kontrollere at du installerer den CUDA-kompatible lommelyktversjonen som du finner her https://pytorch.org/get-started/previous-versions/.

Windows og Linux:

$ conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.1 -c pytorch

or

$ pip install torch==1.7.0+cu101 torchvision==0.8.0+cu101 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

Mac:

$ conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 -c pytorch

or

$ pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0
installer avhengighetsvinduer
Kilde: lokalt

sørg for at denne installasjonen gjøres riktig, ellers ville det være mange kompatibilitetsproblemer.

Vi må laste ned de ferdigtrente vektene også for å bruke modellen for tilpassede data. Vekter kan lastes ned fra følgende lenke https://github.com/ultralytics/yolov5/releases. Når du har lastet ned vektene, må vi opprette en mappe "Yolov5/weights" og lime inn vektfilen der. Du kan laste ned hvilken som helst av modellene basert på ditt bruksområde (anbefalt: yolov5x.pt or yolov5x6.pt).

Lag merknader ved hjelp av VIA-verktøyet

Hjertet i å trene enhver objektdeteksjonsmodell er datakommentarer (forberede data for trening). Dataannotering er en teknikk der vi lager forskjellige geometriske former på objektene som vi vil at vår objektdeteksjonsmodell skal oppdage. Det er flere datamerkingsverktøy tilgjengelig, men det jeg synes er enkelt å bruke er VIA (VGG Image Annotator)-verktøyet. Jeg har gjort noen endringer i verktøyet slik at du kan bruke det på dine egne objekter. Du kan laste ned verktøyet herfra https://drive.google.com/file/d/1rJx0fNgnnhODM7H3GP9RQQ5QEsWdkYEd/view?usp=sharing. Dette verktøyet er bare en enkel HTML-side som gir deg flere merknader som COCO-dataformat, CSV-format osv. Verktøysiden ser slik ut:

lage kommentarer | YoloV5 objektdeteksjonsmodell
Kilde: lokalt

Her hvis du ser, er det 3 knapper som er for objekter en, to og tre som faktisk kan tilpasses, dvs. du kan endre disse knappene i henhold til objektnavnene dine, for å gjøre det må du åpne HTML-filen i redigerbar modus og finne følgende linjer:

knapper | YoloV5 objektdeteksjonsmodell
Kilde: lokalt

disse objektnavnene kan du ha som dine egendefinerte objekter som bil, person osv. Når du har verktøyet klart, må du klikke på attributtknappen du ser på venstre sidepanel og lage et navneattributt som vil se omtrent slik ut:

attributtknapp
Kilde: lokalt

når du har fullført oppsett, kan du laste inn bildene ved å bruke "Legg til filer"-knappen og kan starte merknader ved å velge objektet og klikke på knappen med objektnavnet tilsvarende.

last inn bilder | YoloV5 objektdeteksjonsmodell
Kilde: lokalt

Når alle merknadene er ferdige, kan du eksportere dem i CSV-format på ønsket sted.

Konverter CSV-kommentarer til COCO-format

YoloV5 modellen krever at data er i coco-format:

coco-format
Kilde: lokalt

For å konvertere CSV-kommentarer til COCO-format kan du bruke følgende kodebit:

Start med å importere avhengigheter for å lage COCO-datasett.

importer os importer numpy som np importer pandaer som pd importer shutil som sh fra PIL importer bilde fra tqdm.auto import tqdm

Når alle avhengighetene er importert, må vi lage noen nødvendige kolonner for COCO-datasettet.

data_path = '/Users/gouravbais//Final_Cleaned_Dataset/' df = pd.read_csv(data_path+'train/via_region_export.csv') ## opprett x, y, w, h kolonner x, y, w, h = [], [ ], [], [] for rad i df['region_shape_attributes']: row = row.replace('{}', '').replace('}', '') row = row.split(',' ) x.append(int(rad[1].split(':')[-1])) y.append(int(rad[2].split(':')[-1])) w.append (int(rad[3].split(':')[-1])) h.append(int(rad[4].split(':')[-1])) ## beregner x, y, bredde- og høydekoordinater df['x'], df['y'], df['w'], df['h'] = x, y, w, h ## oppretter et kolonnenavn image_id med bildenavn som id df['image_id'] = [name.split('.')[0] for navn i df['filnavn']] ## oppretter to kolonner for lagring av x- og y-senterverdier df['x_center'] = df ['x'] + df['w']/2 df['y_center'] = df['y'] + df['h']/2 ## definer antall klasser etiketter = df['region_attributes'] .unique() labels_to_dict = dict(zip(lables, range(0, len(labels)))) print('Lables Directory:', labels_to_dict) df['classes'] = df['region_attributes'] df.replace( {'classes':labels_to_dict}, inplace=True) df = df[['image_id','x', 'y', 'w', 'h','x_center','y_center','classes']] ## sett indeks over bilder indeks = liste(sett(df.image_id))

og til slutt lage datasettet ved å kopiere bilder og lage tekstfiler.

source = 'train' hvis True: for fold inn [0]: val_index = index[len(index)*fold//5:len(index)*(fold+1)//5] for navn,mini i tqdm( df.groupby('image_id')): if name in val_index: path2save = 'val2017/' else: path2save = 'train2017/' hvis ikke os.path.exists('convertor/fold{}/labels/'.format( fold)+path2save): os.makedirs('convertor/fold{}/labels/'.format(fold)+path2save) med open('convertor/fold{}/labels/'.format(fold)+path2save+name+ ".txt", 'w+') som f: rad = mini[['classes','x_center','y_center','w','h']].astype(float).values ​​imagename = data_path+"/ {}/{}.jpg".format(kilde,navn) check_image_width_height = Image.open(imagename) img_width, img_height = check_image_width_height.size for r in (rad): r[1] = r[1]/img_width r[ 2] = r[2]/img_height r[3] = r[3]/img_width r[4] = r[4]/img_height rad = rad.astype(str) for j i område(len(rad)): print(rad[j], 'n') rad[j][0] = str(int(float(rad[j][0]))) text = ' '.join(rad[j]) f.write (tekst) f.write("n") hvis ikke os.path.exists('convertor/fold{}/images/{}'.format(fold,path2save)): os.makedirs('convertor/fold{} /images/{}'.format(fold,path2save)) sh.copy(data_path+"/{}/{}.jpg".format(source,name),'convertor/fold{}/images/{}/{ }.jpg'.format(fold,bane2lagre,navn))

Følgende kode vil generere en mappe kalt "konverter/fold0" som inneholder Bilder og etiketter mapper som du må kopiere og lime inn i klonet YoloV5-depot “YoloV5/coco/” mappe.

Oppretter YAML-fil for trening

Når avhengigheter er installert og data er klare, må vi konfigurere en YAML fil for å trene modellen. For det åpner du et hvilket som helst tekstredigeringsprogram og lager en fil «coco.yml» inne i mappen "YoloV5/data/". Innholdet i filen vil være slik:

# train and val data as 1) katalog: path/images/, 2) file: path/images.txt, eller 3) liste: [path1/images/, path2/images/] tog: /Users/gouravbais/yolov5/ coco/images/train2017 val: /Users/gouravbais/yolov5/coco/images/val2017

# antall klasser

nc: 3

# klassenavn

navn: ['objekt1', 'objekt2', 'objekt3']

Vennligst hold klassene i samme rekkefølge som du får når du konverterer CSV-datasettet til COCO-datasettet.

Yolov5 trening

Oppsett av YAML-filen har ikke mye å gjøre etterpå, nå trenger vi bare å skrive kommandoen og gi den data og vekter for å trene modellen på vårt tilpassede datasett. Du må gå til YoloV5-mappen via terminal- eller anaconda-ledeteksten og kjøre følgende kommando:

$ python train.py --img 416 --batch 12 --epoker 50 --data ./data/coco.yml --weights ./weights/yolov5x.pt

Kommandoforklaring:

train.py: python-fil som inneholder treningskoden.

bilde: bildestørrelsen er standard til 640, avhengig av GPU eller CPU-minne kan du endre den.

parti: batchstørrelse som igjen er direkte avhengig av minnet ditt.

data: banen til YAML-filen.

vekter: banen til vekter-filen som vi har lastet ned i trinn 1.

Når du kjører den nevnte kommandoen, vil treningen av modellen starte. Treningsfilen som vi bruker har koden som sjekker for GPU om den er tilgjengelig, deretter foregår treningen på GPU ellers fortsetter treningen på CPU. Vi trenger ikke eksplisitt kode for å bruke GPU eller CPU.

modelltrening | YoloV5 objektdeteksjonsmodell
Kilde: lokalt

Når treningen er fullført kan du finne de trente vektene i “YoloV5/løper/tog” mappe, som ville ha to vekter-fil «best.pt» og «last.pt» du kan bruke en av dem basert på treningen din («best.pt» anbefales). Du kan kopiere filen og lime den inn i "YoloV5/vekter" mappe. En ting du må observere her er at hvis tapet fortsatt avtar etter 50 epoker, kan du kjøre det i flere epoker avhengig av dataene dine.

YoloV5 inferencing

Avslutningsvis, det du trenger er en Deep Learning-modell som fungerer på testdataene dine. Så for å teste modellen din på testdata må du bruke "YoloV5/detect.py" skript til stede på samme sted som «train.py». Kommandoen for å teste modellen på dataene dine er som følger:

$ python detect.py --img 416 --kilde ./detect/test_data --weights ./weights/best.pt --conf-thres 0.4

Kommandoforklaring:

detect.py: python-fil for slutning.

bilde: bildestørrelse som må være den samme som treningsbildestørrelse.

kilde: banen til testdata eller testbildefil.

vekter: banen til trente vekter.

konf-thres: konfidensgrense over hvilken gjenstand må detekteres.

Å kjøre kommandoen ovenfor vil opprette en mappe "YoloV5/kjører/oppdag" som ville ha alle de resulterende filene som du har kjørt modellen på.

Nå er du klar til å bruke denne kunnskapen om objektgjenkjenning på bruksområdet ditt.

Takk for at du leste denne artikkelen, liker hvis du har lært noe nytt, kommenter gjerne vi ses neste gang !!! ❤️ 

Media vist i denne artikkelen eies ikke av Analytics Vidhya og brukes etter forfatterens skjønn.

PlatonAi. Web3 Reimagined. Data Intelligence Amplified.
Klikk her for å få tilgang.

Kilde: https://www.analyticsvidhya.com/blog/2021/08/train-your-own-yolov5-object-detection-model/

spot_img

Siste etterretning

spot_img