End-to-end Objektumérzékelés Sablonillesztéssel Python

hogyan lehet megvalósítani az egyéni objektumérzékelést sablonillesztéssel. Nincs szükség kommentált adatokra!

objektum-detektálás-sablon-illesztés
objektum detektálás Sablonillesztéssel az összetevők detektálására

manapság a legkorszerűbb objektum detektálási algoritmusok (a képeken lévő objektumok detektálására szolgáló algoritmusok) olyan neurális hálózatokat használnak, mint a Yolov4.

object-detection-output
an object detection output

a Sablonillesztés egy technika a digitális képfeldolgozásban a kép kis részeinek megkeresésére, amelyek megfelelnek a sablonképnek. Sokkal egyszerűbb megoldás, mint egy neurális hálózat az objektumérzékelés elvégzésére. Ezenkívül a következő előnyökkel jár:

  • nem kell jegyzetekkel adatokat (időigényes és kötelező feladat, hogy a vonat neurális hálózatok)
  • határoló dobozok pontosabbak
  • nincs szükség GPU

az én tapasztalatom, ötvözi a neurális hálózat, mint Yolov4 és objektum detektálás sablon megfelelő itt egy jó módja annak, hogy jelentősen javítja a neurális hálózat teljesítményét!

mi a sablonillesztés?

ha OpenCV sablonillesztést használ, a sablon pixelről pixelre csúszik a képen. Minden pozícióhoz egy hasonlósági mutató kerül kiszámításra a sablonkép és a kép helyreállított része között:

template-matching-example
a template matching használata a francia azonosító észleléséhez a beolvasott dokumentumokban

ha a hasonlósági mutató elég magas egy Pixelhez, akkor ez a pixel valószínűleg a sablonnak megfelelő objektum bal felső sarka!

következésképpen csak akkor érheti el az objektumérzékelést sablonillesztéssel, ha az észlelni kívánt objektumok elég hasonlóak —majdnem azonosak— egy osztályon belül. Továbbra is tartalmazhat további sablonokat az objektumváltozatok (méret, szín, tájolás) kezelésére. De ez növeli az előrejelzési időt.

első pillantásra nagyon korlátozónak tűnik. De sok objektum-észlelési felhasználási eset megoldható a sablonillesztéssel:

  • ID a beolvasott dokumentumokban
  • üres parkolóhely álló kamerából
  • alkatrészek a futószalagon…

gyakorlati példa

a sablonillesztést használó objektumérzékelés jó felhasználási esete a nyomtatott áramkörök alkatrészeinek észlelése, például ez:

nyomtatott áramkör-unsplash
nyomtatott áramkör-Umberto fotója az Unsplash – en

el tudnánk képzelni egy ilyen áramkört előállító futószalagot. Képzeljük el, hogy egyes gyártott áramkörök hiányzó alkatrészek, ezért hibásak. Javasolhatnánk, hogy telepítsünk egy kamerát az ösvény végére, és minden áramkört rögzítsünk, hogy kiszűrjük a hibás termékeket. Ezt objektumérzékeléssel, sablonillesztéssel érhetjük el!

az egyszerűség kedvéért néhány komponens kimutatására összpontosítunk.

az első komponens kétszer jelenik meg:

sablon-illesztés-komponens-1
összetevő 1

ez négyszer jelenik meg:

sablon-illesztés-összetevő-2
összetevő 2

és ez a harmadik hatszor jelenik meg:

sablon-illesztés-komponens-3
összetevő 3

végül ezt a három képet választjuk sablonként. Következésképpen csökken ennek a Felhasználási esetnek a bonyolultsága: könnyen felismerjük legalább a sablonként kiválasztott objektumokat.

alapvető objektumérzékelés sablonillesztéssel

sablon meghatározása

először a sablonokat definiáljuk:

  • egy kép elérési útja,
  • egy címke,
  • egy szín (eredménymegjelenítéshez —határoló dobozok és címkék színe),
  • és egy megfelelő küszöbérték.

másodszor, úgy véljük, hogy minden pixel, amelynek hasonlósági mutatója meghaladja ezt a küszöböt, jelzi a sablon észlelését.

itt van a kód meghatározó sablonok:

sablonok meghatározása

objektum észlelése sablonillesztéssel

ezután a sablonokon áthurkoljuk az objektumérzékelést az egyes sablonokhoz tartozó sablonillesztéssel. Mivel küszöbértéket használunk, a sablonillesztés alkalmazásakor egy normalizált hasonlósági mutatót (tm_ccoeff_normed) választunk. Ezért választhatunk egy küszöböt 0 és 1 között:

Objektumérzékelés sablonillesztéssel

úgy véljük, hogy minden olyan pixel, amelynek hasonlósági pontszáma meghaladja a sablon küszöbértékét, az objektum bal felső sarka (a sablon magasságával, szélességével és címkéjével együtt).

észlelt objektumok vizualizálása

ezután ábrázoljuk az objektumérzékelés előrejelzett határolódobozait a bemeneti képen lévő sablonillesztéssel:

Objektumérzékelési eredmények megjelenítése

végül a következő eredményeket kapjuk:

template-matching-duplicated-detected-objects
Duplicated detected objects

amint azt a dobozok vastagsága jelzi (zöld, sárga és piros), minden objektumot többször észleltek.

másolatok eltávolítása

miért szereztünk duplikált észleléseket? Amint azt fentebb kifejtettük, az OpenCV sablonillesztés egy 2-D mátrixot ad vissza, amelynek mérete a bemeneti kép (egy cella— és így egy hasonlósági pontszám— minden bemeneti képponthoz).

ezért, ha egy objektumot egy helyen észlelnek, akkor minden környező képpont valószínűleg azonos hasonlósági pontszámmal rendelkezik, ezért más objektumnak tekintik a bal felső sarkokat.

a probléma megoldása érdekében az összes észlelést az egyező értékek csökkentésével rendezzük. Ezután eldöntjük, hogy érvényesítjük-e az egyes észleléseket. Az észlelést akkor érvényesítjük, ha az nem fedi túl sok átfedést a már validált észlelések egyikével sem. Végül megállapítjuk, hogy két észlelés átfedésben van, ha a határoló dobozuk egyesülése feletti metszéspont egy adott küszöb felett van. Ezt a folyamatot nem maximális elnyomásnak nevezik.

itt van egy vizuális magyarázat arról, hogy mi a kereszteződés az Unió felett (IoU) :

kereszteződés az Unió felett

itt van, hogyan valósítottam meg (számítási IoU módszer további magyarázatokkal együtt itt található):

Nem Maximális elnyomás

majd csak hozzáadtam ezt a két sort az észlelési hurok után:

alkalmazni NMS

ennek eredményeként megkapjuk:

deduplikált-észlelt-objektumok
deduplikált észlelt objektumok

sokkal tisztább! Most már világosan látjuk, hogy minden első és harmadik komponenst hamis pozitív nélkül észlelünk (pontosság és 1 visszahívása).

most csökkenteni szeretnénk a 2. komponensre vonatkozó hamis pozitív eredmények számát. A legegyszerűbb módszer a címkéhez használt sablon megfelelő küszöbértékének növelése.

Hiperparaméterek kiválasztása

a hiperparaméterek (sablonillesztési küszöb és nem maximális elnyomási küszöb) kiválasztásához természetesen jobb az objektumérzékelési mutatók kiszámítása különböző képeken. Átmenetileg, egyszerűen növelhetjük az alkatrész küszöbét 2:

válassza ki a sablon megfelelő küszöbértékeket

és megkapjuk:

utolsó kimenet
végső kimenet

most már csak két hamis pozitív a 2. komponensre, tucatnyi helyett (2/3 pontosság, 1 visszahívás)! Ezenkívül az 1.és a 2. komponens még mindig tökéletesen észlelhető (az 1. pontossága és visszahívása).

eredményeink javítása érdekében:

  • tartalmazzon sablonokat a 2. összetevővel összetévesztett összetevőkhöz.
  • próbáljon ki több hasonlósági mutatót
  • jegyezzen fel néhány képet az észlelési mutatók kiszámításához, és végezzen rácskeresést ezeken a paramétereken.

Összegzés

elértük az objektumérzékelést a sablon illesztésével:

  • legalább egy sablon meghatározása minden objektumhoz (minél több sablon van egy objektumhoz, annál nagyobb lesz a visszahívás—és a pontosság alacsony)
  • OpenCV sablonillesztési módszer használata a képen minden sablonhoz
  • figyelembe véve, hogy minden olyan pixel, amelynek hasonlósági pontszáma meghaladja a sablonküszöböt, az objektum bal felső sarka (a sablon magasságával, szélességével és címkéjével)
  • a kapott észlelések nem maximális elnyomásának alkalmazása
  • sablon küszöbértékek kiválasztása az észlelési pontosság javítása érdekében!

ez az!

képfelismerő szakértőket keres? Ne habozzon kapcsolatba lépni velünk!

You might also like

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.