[PYTHON] [Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective

Qu'est-ce que la recherche sélective?

Une tâche pour détecter des parties "semblables à des objets" dans une image. En gros, préparez plusieurs rectangles et faites-les glisser sur l'image pour trouver des parties "semblables à des objets". Notez qu'il ne détecte pas seulement ce qu'est un objet ou un objet spécifique. Par exemple, il n'est pas possible de trouver uniquement une voiture dans l'image. C'est une tâche célèbre qui est également utilisée dans R-CNN, qui est célèbre pour sa méthode de détection d'objet, mais quand je l'ai recherchée, il y avait étonnamment peu d'articles, alors je l'ai résumé dans cet article.

environnement

Installation

Facile à installer avec pip

pip install selective-search

Installer opencv avec pip

Image cible

Essayez de courir sur les quatre images suivantes. L'image est Pascal VOC.

voiture chien meubles
000071.jpg 000108.jpg 000102.jpg

Réglage du compteur de particules

random Il existe un paramètre aléatoire, mais la référence dit:

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.

Apparemment, dans la recherche sélective, les grands rectangles sont prioritaires et présentés. Lors de la détection d'un objet à l'aide de RCNN, etc., il devient impossible de reconnaître les petits objets, donc en définissant l'aléatoire, il est possible d'empêcher uniquement les grands objets.

mode Il existe trois modes de recherche sélective

Selon la référence, il existe les différences suivantes. mode.png

C'est-à-dire qu'en qualité unique, rapide, le nombre de rectangles, en d'autres termes, le nombre d'essais augmente. D'autre part, il y a aussi le problème du ralentissement. Voici le résultat de l'essai.

mode voiture meubles chien
single 000071.jpg 000102.jpg 000108.jpg
fast 000071.jpg 000102.jpg 000108.jpg
quality 000071.jpg 000102.jpg 000108.jpg

Les objets estimés augmentent en tant que qualité unique, rapide, mais il n'y a presque aucun cas qui nécessite autant de rectangles. Il semble qu'il suffit de mettre en œuvre les bases avec single.

Même si single est défini, il y a trop de rectangles, donc lors de l'implémentation de cette fois, nous avons décidé de supprimer la sortie des rectangles qui n'ont pas une certaine taille.

la mise en oeuvre

Structure du répertoire

├── pic #Image originale
├── result #Image de résultat
│   ├── fast
│   ├── quality
│   └── single
└── exe.py #Dossier d'exécution

Dossier d'exécution

import cv2
import glob
from selective_search import selective_search


###réglages des paramètres
MODE="single"
#MODE="fast"
#MODE="quality"
MINH=100
MINW=100


###Paramètres du répertoire d'E / S
ORGDIR="./pic/"
RSTDIR="./result/"+MODE+"/"


def search():

    ###Lire le chemin du fichier d'entrée
    tgtpaths=glob.glob(ORGDIR+"*")

    for tgtpath in tgtpaths:

        ###Paramètre du chemin du fichier de sortie
        rstpath=tgtpath.replace(ORGDIR,RSTDIR)

        ###Lire l'image cible
        tgtimg = cv2.imread(tgtpath, cv2.IMREAD_COLOR)

        ###Lancer une recherche sélective
        boxes = selective_search(tgtimg, mode=MODE,random=False)

        for box in boxes:

            ###Ne pas afficher de rectangles sans une certaine longueur
            if abs(box[2]-box[0]) < MINW or abs(box[3]-box[1])<MINH:
                continue

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

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



if __name__=="__main__":
    search()

résultat

voiture meubles chien
000071.jpg 000102.jpg 000108.jpg

La partie "objet" était présentée par recherche sélective. Dans RCNN, etc., la détection d'objet est effectuée en appliquant ces candidats à un classificateur.

référence

Recommended Posts

[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
Essayez de détecter les mouvements de fusion en utilisant AnyMotion
Essayez de prédire la demande de puissance par l'apprentissage automatique
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Introduction à l'apprentissage automatique
Essayez d'écrire du code à partir de 1 en utilisant le chainer du cadre d'apprentissage automatique (édition mnist)
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Les débutants en apprentissage automatique essaient de créer un arbre de décision
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
Une introduction à l'apprentissage automatique
Super introduction à l'apprentissage automatique
Essayez le machine learning à la légère avec Kaggle
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Les débutants en apprentissage automatique tentent de contacter Naive Bayes (2) - Mise en œuvre
Les débutants en apprentissage automatique tentent de contacter Naive Bayes (1) - Théorie
[Apprentissage automatique] Étudions l'arbre de décision
Les débutants en apprentissage automatique essaient la régression linéaire
Essayez d'utiliser pynag pour configurer Nagios
SVM essayant l'apprentissage automatique avec scikit-learn
Essayez d'obtenir des statistiques en utilisant e-Stat
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
Développement d'applications à l'aide d'Azure Machine Learning
Comment collecter des données d'apprentissage automatique
Essayez de prédire la valeur de la jauge de niveau d'eau par apprentissage automatique en utilisant les données ouvertes de Data City Sabae
Viser à devenir un ingénieur en apprentissage automatique en utilisant des MOOC depuis des postes de vente
Recherche de blogs techniques par machine learning en mettant l'accent sur la "facilité de compréhension"
Je veux détecter des objets avec OpenCV
Introduction à l'apprentissage automatique: fonctionnement du modèle
scikit-learn Comment utiliser le résumé (apprentissage automatique)
Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
Enregistrez les étapes pour comprendre l'apprentissage automatique
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Une introduction à OpenCV pour l'apprentissage automatique
[Apprentissage automatique] Prédiction FX à l'aide de l'arbre de décision
J'ai essayé d'utiliser la recherche sélective comme R-CNN
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
Essayez d'utiliser Excel en utilisant Python (Xlwings)
Comment profiter de Coursera / Machine Learning (semaine 10)
Une introduction à Python pour l'apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Essayons la traduction automatique neuronale avec Transformer
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Essayez de dessiner un "front de type carte météorologique" par apprentissage automatique basé sur des données météorologiques (5)
[Super Introduction] Apprentissage automatique utilisant Python - De la construction d'environnement à l'implémentation de perceptron simple-
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur les données météorologiques (3)
Apprentissage automatique
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur des données météorologiques (1)
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur des données météorologiques (4)
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur des données météorologiques (2)
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Une introduction à l'apprentissage automatique pour les développeurs de robots
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Essayez d'utiliser django-import-export pour ajouter des données csv à django