[PYTHON] [Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen

Was ist selektive Suche?

Eine Aufgabe zum Erkennen "objektähnlicher" Teile in einem Bild. Bereiten Sie als groben Fluss mehrere Rechtecke vor und schieben Sie sie auf das Bild, um "objektähnliche" Teile zu finden. Beachten Sie, dass nicht nur erkannt wird, was ein Objekt oder ein bestimmtes Objekt ist. Zum Beispiel ist es nicht möglich, nur ein Auto im Bild zu finden. Es ist eine berühmte Aufgabe, die auch in R-CNN verwendet wird, das für seine Objekterkennungsmethode bekannt ist, aber als ich es nachgeschlagen habe, gab es überraschend wenige Artikel, deshalb habe ich es in diesem Artikel zusammengefasst.

Umgebung

Installation

Einfache Installation mit Pip

pip install selective-search

Installieren Sie opencv mit pip

Zielbild

Versuchen Sie, die folgenden vier Bilder auszuführen. Das Bild ist Pascal VOC.

Wagen Hund Möbel
000071.jpg 000108.jpg 000102.jpg

Patter Meter Einstellung

random Es gibt einen zufälligen Parameter, aber die Referenz sagt:

If random set to True, function will carry out pseudo random sorting. It only alters sequences of bounding boxes, instead of locations, which prevents heavily emphasis on large regions as combing proposals from up to 80 different strategies[1]. This only has a significant impact when selecting a subset of region proposals with high rankings, as in RCNN.

Offensichtlich werden bei der selektiven Suche großen Rechtecken Vorrang eingeräumt und dargestellt. Wenn ein Objekt mit RCNN usw. erkannt wird, ist es unmöglich, kleine Objekte zu erkennen. Durch zufälliges Setzen können also nur große Objekte verhindert werden.

mode Bei der selektiven Suche gibt es drei Modi

Entsprechend der Referenz gibt es die folgenden Unterschiede. mode.png

Das heißt, als einzelne, schnelle Qualität nimmt die Anzahl der Rechtecke zu, mit anderen Worten, die Anzahl der Versuche nimmt zu. Andererseits gibt es auch das Problem der Verlangsamung. Das Folgende ist das Versuchsergebnis.

Modus Wagen Möbel Hund
single 000071.jpg 000102.jpg 000108.jpg
fast 000071.jpg 000102.jpg 000108.jpg
quality 000071.jpg 000102.jpg 000108.jpg

Geschätzte Objekte nehmen als einzelne, schnelle Qualität zu, aber es gibt fast keine Fälle, in denen so viele Rechtecke erforderlich sind. Es scheint, dass es ausreicht, die Grundlagen mit Single zu implementieren.

Selbst wenn single festgelegt ist, gibt es zu viele Rechtecke. Bei der Implementierung dieses Mal haben wir beschlossen, die Ausgabe von Rechtecken zu unterdrücken, die keine bestimmte Größe haben.

Implementierung

Verzeichnisaufbau

├── pic #Original Bild
├── result #Ergebnisbild
│   ├── fast
│   ├── quality
│   └── single
└── exe.py #Ausführungsdatei

Ausführungsdatei

import cv2
import glob
from selective_search import selective_search


###Parametereinstellungen
MODE="single"
#MODE="fast"
#MODE="quality"
MINH=100
MINW=100


###E / A-Verzeichniseinstellungen
ORGDIR="./pic/"
RSTDIR="./result/"+MODE+"/"


def search():

    ###Pfad der Eingabedatei lesen
    tgtpaths=glob.glob(ORGDIR+"*")

    for tgtpath in tgtpaths:

        ###Einstellung des Ausgabedateipfads
        rstpath=tgtpath.replace(ORGDIR,RSTDIR)

        ###Zielbild lesen
        tgtimg = cv2.imread(tgtpath, cv2.IMREAD_COLOR)

        ###Führen Sie die selektive Suche aus
        boxes = selective_search(tgtimg, mode=MODE,random=False)

        for box in boxes:

            ###Zeigen Sie keine Rechtecke ohne eine bestimmte Länge an
            if abs(box[2]-box[0]) < MINW or abs(box[3]-box[1])<MINH:
                continue

            ###Rechteckige Zeichnung
            cv2.rectangle(tgtimg, (box[0],box[1]), (box[2],box[3]), (0,255,0), thickness=1)

        ###Ausgabe
        print(rstpath)
        cv2.imwrite(rstpath, tgtimg)



if __name__=="__main__":
    search()

Ergebnis

Wagen Möbel Hund
000071.jpg 000102.jpg 000108.jpg

Der "objektähnliche" Teil wurde durch selektive Suche dargestellt. In RCNN usw. wird die Objekterkennung durchgeführt, indem diese Kandidaten auf einen Klassifizierer angewendet werden.

Referenz

Recommended Posts

[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
Versuchen Sie, die Fusionsbewegung mit AnyMotion zu erkennen
Versuchen Sie, den Strombedarf durch maschinelles Lernen vorherzusagen
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Einführung in das maschinelle Lernen
Versuchen Sie, Code aus 1 mit dem Framework Chainer für maschinelles Lernen (Mnist Edition) zu schreiben.
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Eine Einführung in das maschinelle Lernen
Super Einführung in das maschinelle Lernen
Versuchen Sie es mit Kaggle leicht maschinell
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Anfänger des maschinellen Lernens versuchen, Naive Bayes zu erreichen (2) - Implementierung
Anfänger des maschinellen Lernens versuchen, Naive Bayes (1) - Theorie zu erreichen
[Maschinelles Lernen] Lassen Sie uns den Entscheidungsbaum studieren
Anfänger des maschinellen Lernens versuchen eine lineare Regression
Versuchen Sie, Nagios mit pynag zu konfigurieren
SVM versucht maschinelles Lernen mit Scikit-Learn
Versuchen Sie, Statistiken mit e-Stat abzurufen
Einführung in die Bibliothek für maschinelles Lernen SHOGUN
Anwendungsentwicklung mit Azure Machine Learning
Sammeln von Daten zum maschinellen Lernen
Versuchen Sie, den Wert des Wasserstandsmessers durch maschinelles Lernen unter Verwendung der offenen Daten von Data City Sabae vorherzusagen
Mit dem Ziel, ein Ingenieur für maschinelles Lernen zu werden, der MOOCs aus Vertriebspositionen verwendet
Suchen Sie nach technischen Blogs durch maschinelles Lernen mit dem Schwerpunkt "Verständlichkeit"
Ich möchte Objekte mit OpenCV erkennen
Einführung in das maschinelle Lernen: Funktionsweise des Modells
scikit-learn Verwendung der Zusammenfassung (maschinelles Lernen)
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
Notieren Sie die Schritte zum Verständnis des maschinellen Lernens
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
Eine Einführung in OpenCV für maschinelles Lernen
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Ich habe versucht, die selektive Suche als R-CNN zu verwenden
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Wie man Coursera / Maschinelles Lernen genießt (Woche 10)
Eine Einführung in Python für maschinelles Lernen
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Versuchen wir die neuronale maschinelle Übersetzung mit Transformer
[Maschinelles Lernen] Regressionsanalyse mit Scicit Learn
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (5)
[Super Einführung] Maschinelles Lernen mit Python - Von der Umgebungskonstruktion bis zur Implementierung von Simple Perceptron-
Versuchen Sie, durch maschinelles Lernen anhand von Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (3).
Maschinelles Lernen
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (1)
Versuchen Sie, durch maschinelles Lernen anhand von Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (4)
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (2)
Ich habe versucht, verschiedene Methoden für maschinelles Lernen (Vorhersagemodell) mithilfe von Scicit-Learn zu implementieren
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Datenversorgungstricks mit deque beim maschinellen Lernen
Versuchen Sie, mit django-import-export csv-Daten zu django hinzuzufügen