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.
Facile à installer avec pip
pip install selective-search
Installer opencv avec pip
Essayez de courir sur les quatre images suivantes. L'image est Pascal VOC.
voiture | chien | meubles |
---|---|---|
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.
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 | |||
fast | |||
quality |
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.
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()
voiture | meubles | chien |
---|---|---|
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.
Recommended Posts