Ende-Til-ende Objektdeteksjon Med Malmatching ved Hjelp Av Python

hvordan implementere tilpasset objektdeteksjon med malmatching. Ingen kommenterte data nødvendig!

object-detection-template-matching
Object detection med Mal matching for å oppdage komponenter

i Dag bruker state-of-the-art object detection algorithms (algoritmer som tar sikte på å oppdage objekter i bilder) nevrale nettverk som Yolov4.

objektdeteksjon-utgang
en objektdeteksjonsutgang

Malmatching Er en teknikk i digital bildebehandling for å finne små deler av et bilde som samsvarer med et malbilde. Det er en mye enklere løsning enn et nevralt nettverk for å utføre objektdeteksjon. I tillegg kommer den med følgende fordeler:

  • du trenger ikke å kommentere data(en tidkrevende og obligatorisk oppgave å trene nevrale nettverk)
  • grensebokser er mer nøyaktige
  • ikke behov for GPU

i min erfaring er det å kombinere et nevralt nettverk som Yolov4 og objektdeteksjon med malmatching her en god måte å forbedre ytelsen til nevrale nettverk betydelig!

Hva er mal matching?

når Du bruker OpenCV-maltilpasning, glir malen piksel for piksel på bildet. For hver posisjon beregnes en likhetsmåling mellom malbildet ditt og den delen av bildet det gjenoppretter:

template-matching-example
Bruke template matching for å oppdage fransk ID i skannede dokumenter

hvis likhetsmålingen er høy nok til en piksel, er denne pikselen sannsynligvis det øverste venstre hjørnet av et objekt som passer til malen din!

følgelig kan du oppnå objektdeteksjon med maltilpasning bare hvis objektene du prøver å oppdage, er like nok-nesten identiske-i en klasse. Du kan fortsatt inkludere flere maler for å takle objektvariasjoner (størrelse, farge, retning). Men det vil øke prediksjonstiden.

ved første blikk virker det veldig restriktivt. Men mange objekt deteksjon brukstilfeller kan håndteres med mal matching:

  • ID i skannede dokumenter
  • tom parkeringsplass fra et stasjonært kamera
  • komponenter på et samlebånd…

Et Praktisk Eksempel

et godt brukstilfelle for objektdeteksjon ved hjelp av malmatching er å oppdage komponenter på trykte kretser, for eksempel denne:

printed-circuit-unsplash
et trykt kretsfoto av Umberto På Unsplash

Vi kunne forestille oss et samlebånd som produserer slike kretser. La oss forestille oss at noen kretser produsert mangler komponenter og dermed defekt. Vi kan foreslå å installere et kamera på slutten av stien og å skyte hver krets for å filtrere ut defekte produkter. Vi kan oppnå dette med objektdeteksjon med malmatching!

for enkelhets skyld vil vi fokusere på deteksjon av noen få komponenter.

En første komponent vises to ganger:

mal-matchende-komponent-1
Komponent 1

denne vises fire ganger:

mal-matching-komponent-2
Komponent 2

og denne tredje vises seks ganger:

mal-matchende-komponent-3
Komponent 3

Til slutt velger vi disse tre bildene som maler. Følgelig reduseres kompleksiteten til denne brukssaken: vi vil lett oppdage minst objektene som er valgt som maler.

Grunnleggende objektdeteksjon med malmatching

Definere mal

for det første definerer vi maler fra:

  • en bildebane,
  • en etikett,
  • en farge (for resultatvisualisering —markeringsrammer og etikettfarge),
  • og en samsvarende terskel.

For det Andre anser vi at alle piksler som har en likhetsmåling over denne terskelen, indikerer en deteksjon for denne malen.

her er koden som definerer maler:

Definere maler

Detekterer objekt med malmatching

deretter går vi over maler for å utføre objektdeteksjon med malmatching for hver mal. Fordi vi bruker en terskel, velger vi en normalisert likhet metrisk (TM_CCOEFF_NORMED) når du bruker mal matching. Derfor kan vi velge en terskel mellom 0 og 1:

objektgjenkjenning med maltilpasning

vi anser at hver piksel som har likhetspoeng over malterskelen, er det øverste venstre hjørnet av et objekt (med malens høyde, bredde og etikett).

Visualiser oppdagede objekter

deretter plotter vi de forutsagte grenseboksene for denne objektdeteksjonen med malmatching på inngangsbildet:

Vis objektdeteksjonsresultater

Til Slutt får vi følgende resultater:

mal-matchende-dupliserte-oppdagede objekter
Dupliserte oppdagede objekter

som angitt av tykkelsen på boksene (i grønt, gult og rødt), har hvert objekt blitt oppdaget flere ganger.

Fjern duplikater

Hvorfor fikk vi dupliserte påvisninger? Som forklart ovenfor, Returnerer OpenCV mal matching en 2-D matrise som har dimensjonen av inngangsbildet (en celle— og dermed en likhetspoeng— for hver inngangsbildepiksel).

derfor, hvis et objekt oppdages på ett sted, vil alle omkringliggende piksler mest sannsynlig ha samme likhetsscore,og dermed betraktes som andre objekt øverst til venstre.

for å takle dette problemet sorterer vi alle deteksjoner ved å redusere samsvarende verdier. Deretter, vi vil velge om ikke å validere hver deteksjon. Vi validerer deteksjonen hvis den ikke overlapper for mye med noen av de allerede validerte påvisningene. Til slutt bestemmer vi at to deteksjoner overlapper hvis Krysset over Foreningen av deres grensebokser er over en gitt terskel. Denne prosessen kalles Ikke-Maksimal Undertrykkelse.

her er en visuell forklaring på Hva Krysset Over Union (IoU) er:

Kryss Over Union

Her er hvordan jeg implementerte det (beregn IoU-metoden sammen med flere forklaringer finner du her):

Ikke-Maksimal Undertrykkelse

og så la jeg bare disse to linjene etter deteksjonsløkken:

Påfør NMS

som et resultat får vi:

 dedupliserte oppdagede objekter
Dedupliserte oppdagede objekter

mye renere! Vi ser nå klart at alle første og tredje komponenter oppdages uten falsk positiv (presisjon og tilbakekalling av 1).

Vi ønsker nå å redusere antall falske positiver for komponent 2. Den enkleste måten er å øke samsvarende terskel for malen som brukes for denne etiketten.

velge hyperparameters

det er selvfølgelig bedre å beregne objektdeteksjonsmålinger på ulike bilder for å velge hyperparameters(mal matchende terskel og ikke-Maksimal Undertrykkelse terskel). For nå kan vi bare øke terskelen for komponent 2:

Velg mal matchende terskler

Og vi får:

siste utgang
Endelig utgang

Vi har nå bare to falske positiver for komponent 2, i stedet for dusinvis (presisjon på 2/3, tilbakekalling av 1)! I tillegg er komponenter 1 og 2 fortsatt perfekt oppdaget (presisjon og tilbakekalling av 1).

for å forbedre våre resultater kunne vi:

  • inkluder maler for komponentene som forveksles med komponent 2.
  • prøv flere likhetsmålinger
  • annoter noen bilder for å beregne gjenkjenningsmålinger, og utfør et gridsøk på disse parameterne.

Sammendrag

Vi har oppnådd objektdeteksjon med malmatching av:

  • definere minst en mal for hvert objekt (jo flere maler du har for ett objekt, desto mer vil tilbakekallingen være høy—og presisjonen lav)
  • ved Hjelp Av OpenCV-maltilpasningsmetode på bildet for hver mal
  • med tanke på at hver piksel har likhetspoeng over en malterskel er det øverste venstre hjørnet av et objekt (med denne malens høyde, bredde og etikett)
  • bruke ikke-maksimal undertrykkelse av detekteringene oppnådd
  • velge malterskler for å forbedre deteksjonsnøyaktigheten!

Det er det!

leter Du Etter Eksperter På Bildegjenkjenning? Ikke nøl med å kontakte oss!

You might also like

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.