De bildklassificeringsmodeller vi har arbetat med hittills tar en bild och producerar ett kategoriskt resultat, som klassen 'nummer' i ett MNIST-problem. Men i många fall vill vi inte bara veta att en bild föreställer objekt - vi vill kunna bestämma deras exakta position. Det är precis detta som är syftet med objektigenkänning.
Bild från YOLO v2 webbplats
Om vi ville hitta en katt på en bild, skulle en mycket naiv metod för objektigenkänning vara följande:
- Dela upp bilden i ett antal rutor.
- Kör bildklassificering på varje ruta.
- De rutor som resulterar i tillräckligt hög aktivering kan anses innehålla det aktuella objektet.
Bild från Övningsanteckningsbok
Denna metod är dock långt ifrån idealisk, eftersom den bara tillåter algoritmen att lokalisera objektets begränsningsruta mycket oprecist. För mer exakt lokalisering behöver vi köra någon form av regression för att förutsäga koordinaterna för begränsningsrutorna - och för det behöver vi specifika dataset.
Denna bloggpost ger en bra introduktion till att detektera former.
Du kan stöta på följande dataset för denna uppgift:
- PASCAL VOC - 20 klasser
- COCO - Vanliga objekt i kontext. 80 klasser, begränsningsrutor och segmenteringsmasker
Medan det är enkelt att mäta hur väl algoritmen presterar för bildklassificering, behöver vi för objektigenkänning mäta både korrektheten av klassen och precisionen av den förutsagda begränsningsrutans position. För det senare använder vi den så kallade Intersection over Union (IoU), som mäter hur väl två rutor (eller två godtyckliga områden) överlappar.
Figur 2 från denna utmärkta bloggpost om IoU
Idén är enkel - vi delar området av överlappningen mellan två figurer med området av deras union. För två identiska områden skulle IoU vara 1, medan för helt separata områden skulle det vara 0. Annars varierar det från 0 till 1. Vi betraktar vanligtvis bara de begränsningsrutor där IoU är över ett visst värde.
Anta att vi vill mäta hur väl en viss klass av objekt
- Betrakta Precision-Recall-kurvan som visar noggrannheten beroende på ett detektionströskelvärde (från 0 till 1).
- Beroende på tröskeln kommer vi att få fler eller färre objekt detekterade i bilden, och olika värden för precision och recall.
- Kurvan kommer att se ut så här:
Bild från NeuroWorkshop
Den genomsnittliga precisionen för en given klass
Vi betraktar endast de detektioner där IoU är över ett visst värde. Till exempel antas vanligtvis
Bild från NeuroWorkshop
Huvudmätvärdet för objektigenkänning kallas Medelvärde av genomsnittlig precision, eller mAP. Det är värdet av genomsnittlig precision, medelvärdesbildat över alla objektklasser, och ibland även över
Det finns två breda klasser av algoritmer för objektigenkänning:
- Region Proposal Networks (R-CNN, Fast R-CNN, Faster R-CNN). Huvudidén är att generera Regions of Interests (ROI) och köra CNN över dem, för att leta efter maximal aktivering. Det liknar den naiva metoden, med undantaget att ROI genereras på ett mer intelligent sätt. En av de stora nackdelarna med sådana metoder är att de är långsamma, eftersom vi behöver många passeringar av CNN-klassificeraren över bilden.
- One-pass (YOLO, SSD, RetinaNet) metoder. I dessa arkitekturer designar vi nätverket för att förutsäga både klasser och ROI i ett enda pass.
R-CNN använder Selective Search för att generera en hierarkisk struktur av ROI-regioner, som sedan passerar genom CNN-funktionsextraktorer och SVM-klassificerare för att bestämma objektklassen, och linjär regression för att bestämma begränsningsrutans koordinater. Officiell artikel
Bild från van de Sande et al. ICCV’11
Bilder från denna blogg
Denna metod liknar R-CNN, men regioner definieras efter att konvolutionslager har applicerats.
Bild från den officiella artikeln, arXiv, 2015
Huvudidén med denna metod är att använda ett neuralt nätverk för att förutsäga ROI - så kallat Region Proposal Network. Artikel, 2016
Bild från den officiella artikeln
Denna algoritm är ännu snabbare än Faster R-CNN. Huvudidén är följande:
- Vi extraherar funktioner med hjälp av ResNet-101.
- Funktionerna bearbetas av Position-Sensitive Score Map. Varje objekt från
$C$ klasser delas upp i$k\times k$ regioner, och vi tränar för att förutsäga delar av objekt. - För varje del från
$k\times k$ regioner röstar alla nätverk för objektklasser, och den objektklass med flest röster väljs.
Bild från officiell artikel
YOLO är en realtidsalgoritm med ett enda pass. Huvudidén är följande:
- Bilden delas upp i
$S\times S$ regioner. - För varje region förutsäger CNN
$n$ möjliga objekt, begränsningsrutans koordinater och confidence=sannolikhet * IoU.
Bild från officiell artikel
- RetinaNet: officiell artikel
- SSD (Single Shot Detector): officiell artikel
Fortsätt ditt lärande i följande anteckningsbok:
I denna lektion tog du en snabb genomgång av alla olika sätt som objektigenkänning kan utföras!
Läs igenom dessa artiklar och anteckningsböcker om YOLO och prova dem själv:
- Bra bloggpost som beskriver YOLO
- Officiell webbplats
- Yolo: Keras-implementering, steg-för-steg-anteckningsbok
- Yolo v2: Keras-implementering, steg-för-steg-anteckningsbok
- Objektigenkänning av Nikhil Sardana
- En bra jämförelse av algoritmer för objektigenkänning
- Granskning av djupinlärningsalgoritmer för objektigenkänning
- En steg-för-steg-introduktion till grundläggande algoritmer för objektigenkänning
- Implementering av Faster R-CNN i Python för objektigenkänning











