End-to-end Detekci Objektů s Odpovídající Šablony pomocí Python

Jak implementovat vlastní detekci objektů s odpovídající šablony. Nejsou potřeba žádná anotovaná data!

objekt-detekce-šablony-odpovídající
detekce Objektů s odpovídající Šablony pro detekci komponent

Dnes, state-of-the-art object detection algoritmy (algoritmy, jejichž cílem je rozpoznat objekty v obrázcích) jsou pomocí neuronových sítí jako Yolov4.

objekt-detekce-výstup
objekt detekce výstup

Template matching je technika digitálního zpracování obrazu pro nalezení malé části obrazu, které odpovídá obrázek šablony. Je to mnohem jednodušší řešení než neuronová síť pro provádění detekce objektů. Kromě toho přichází s následujícími výhodami:

  • není třeba komentovat dat (časově náročné a povinným úkolem k vlaku neuronové sítě)
  • ohraničující boxy jsou přesnější
  • není potřeba GPU

podle mých zkušeností, kombinující neuronové sítě jako Yolov4 a detekce objektů s odpovídající šablony zde je dobrý způsob, jak výrazně zlepšit své neuronové sítě výkon!

co je to shoda šablon?

při použití OpenCV odpovídající šablony, vaše šablona snímky pixel po pixelu na obrázku. Pro každou pozici, podobnost metriky je počítán mezi šablonu obrázku a část obrazu se obnoví:

template-matching-příklad
Pomocí odpovídající šablony pro detekci francouzské ID v naskenované dokumenty

Pokud similarity metric je dostatečně vysoká pro jeden pixel, pak je tento pixel je asi levý horní roh objektu odpovídající šablonu!

v důsledku toho můžete dosáhnout detekce objektů pomocí párování šablon pouze tehdy, pokud jsou objekty, které se pokusíte detekovat, dostatečně podobné— téměř identické-ve třídě. Stále můžete zahrnout více šablon pro řešení variací objektů(velikost, barva, orientace). Ale to zvýší dobu predikce.

na první pohled to vypadá velmi restriktivně. Ale hodně objektu, detekce případů použití mohou být řešeny s odpovídající šablony:

  • ID v naskenované dokumenty
  • prázdné parkovací místo ze stacionární kamery
  • komponentů na montážní lince…

praktický příklad

dobrým případem pro detekci objektů pomocí párování šablon je detekce Součástí na plošných spojích, jako je tento:

plošnými unsplash
tištěné obvody, – Foto Umberto na Unsplash

Můžeme si představit, montážní linka výroba těchto obvodů. Představme si, že některé vyrobené obvody chybí komponenty, a proto jsou vadné. Mohli bychom navrhnout instalaci kamery na konci stezky a natočit každý okruh, abychom odfiltrovali vadné výrobky. Toho můžeme dosáhnout detekcí objektů pomocí shody šablon!

z důvodu jednoduchosti se zaměříme na detekci několika komponent.

první složka se objeví dvakrát:

template-matching-component-1
Složka 1

Tenhle objevují čtyřikrát:

template-matching-komponenty-2
Složka 2

A ten třetí se objeví šestkrát:

template-odpovídající-component-3
Složka 3

Nakonec jsme se rozhodli tyto tři obrázky jako šablony. V důsledku toho je složitost tohoto případu použití snížena: snadno detekujeme alespoň objekty vybrané jako šablony.

Základní detekci objektů s odpovídající šablony

Definování šablony

za Prvé, jsme se definovat šablony z:

  • obrázek cesta,
  • label
  • barva (pro výsledek vizualizace —bounding boxy a štítky, barvy),
  • a odpovídající prahové hodnoty.

Zadruhé se domníváme, že všechny pixely, které mají metriku podobnosti nad touto prahovou hodnotou, označují detekci této šablony.

zde je Kód definující šablony:

Definování šablony

Detekce objektu s odpovídající šablony

Pak jsme smyčka přes šablony provést detekci objektů s odpovídající šablony pro každý šablony. Protože používáme prahovou hodnotu, vybereme normalizovanou metriku podobnosti (TM_CCOEFF_NORMED) při použití shody šablon. Proto můžeme vybrat práh mezi 0 a 1:

detekce Objektů s odpovídající šablony

domníváme se, že každý pixel má skóre podobnosti výše šablony práh je horní levý roh objektu (šablony je výška, šířka a označení).

Vizualizace detekovaných objektů

Pak jsme plot předpověděl bounding boxy této detekce objektů s odpovídající šablony na obrázku:

Zobrazení detekce objektů výsledků

Konečně, dostaneme následující výsledky:

template-matching-duplicitní-zjištěné objekty
Duplicitní detekovaných objektů

Jak je uvedeno tloušťka krabice (v zelené, žluté a červené), každý objekt byl zjištěn několikrát.

Odstranit duplikáty

proč jsme získali duplicitní detekce? Jak je vysvětleno výše, OpenCV template matching vrací 2 – D matici mající rozměr vstupního obrazu (jedna buňka— a tedy jedno skóre podobnosti – pro každý vstupní obrazový pixel).

Proto, když objekt je detekován na jednom místě, všechny okolní pixely s největší pravděpodobností bude mít stejné skóre podobnosti, a tedy považován za jiný předmět levý horní roh.

abychom tento problém vyřešili, budeme třídit všechny detekce snížením hodnot shody. Poté si vybereme, zda chcete ověřit každou detekci. Detekci ověřujeme, pokud se příliš nepřekrývá s některou z již ověřených detekcí. Nakonec zjistíme, že dvě detekce se překrývají, pokud je průnik přes spojení jejich ohraničujících polí nad daným prahem. Tento proces se nazývá non-maximální potlačení.

Tady je vizuální vysvětlení toho, co Křižovatce nad Unie (dlužní Úpis) :

Křižovatka nad Unie

Zde je, jak jsem implementoval (compute dlužní Úpis metoda spolu s dalšími vysvětleními najdete zde):

Non-Maximum Suppression

A pak, Jen jsem přidal tyto dva řádky po detekci smyčky:

Platí NMS

Jako výsledek, dostaneme:

deduplicated-zjištěné objekty
Deduplicated detekovaných objektů

Mnohem čistší! Nyní jasně vidíme, že všechny první a třetí komponenty jsou detekovány bez falešně pozitivních (přesnost a vyvolání 1).

nyní chceme snížit počet falešných pozitiv pro komponentu 2. Nejjednodušší je zvýšit práh shody pro šablonu použitou pro tento štítek.

Výběr hyperparameters

To je samozřejmě lepší počítat detekce objektů metriky na různých obrázků vybrat hyperparameters (odpovídající šablony práh a Non-Maximum Suppression threshold). Pro teď, můžeme jednoduše zvýšit práh pro komponenty 2:

Vyberte si šablonu odpovídající prahové hodnoty

A získáme:

poslední výstup
výstupní

nyní Máme pouze dva falešně pozitivní výsledky pro složku 2, namísto desítek (přesné 2/3, připomeňme 1)! Kromě toho jsou komponenty 1 a 2 stále dokonale detekovány (přesnost a vyvolání 1).

zlepšit naše výsledky můžeme:

  • zahrnout šablony pro komponenty zaměňovat s komponenty 2.
  • zkuste několik metrik podobnosti
  • anotujte několik obrázků pro výpočet metrik detekce a proveďte vyhledávání v mřížce na těchto parametrech.

souhrn

dosáhli jsme detekce objektů pomocí odpovídající šablony:

  • definovat alespoň jednu šablonu pro každý objekt (více šablon, které mají pro jeden objekt více své odvolání bude vysoká—a vaše přesnost nízká)
  • pomocí OpenCV šablonu odpovídající metoda na obrázek pro každou šablonu
  • vzhledem k tomu, že každý pixel má skóre podobnosti výše šablonu práh je horní levý roh objektu (s této šabloně je výška, šířka a označení)
  • použití Non-Maximální Potlačení detekce získaná
  • výběr šablony prahové hodnoty pro zlepšení přesnosti detekce!

to je ono!

hledáte odborníky na rozpoznávání obrázků? Neváhejte nás kontaktovat!

You might also like

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.