Objektdetektion och instanssegmentering i Python med Detectron2 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Objektdetektion och instanssegmentering i Python med Detectron2

Beskrivning

Objektdetektering är ett stort fält inom datorseende och en av de viktigaste tillämpningarna för datorseende "i det vilda". Å ena sidan kan den användas för att bygga autonoma system som navigerar agenter genom miljöer – oavsett om det är robotar som utför uppgifter eller självkörande bilar, men detta kräver korsning med andra fält. Avvikelsedetektering (som defekta produkter på en linje), lokalisering av objekt i bilder, ansiktsdetektering och olika andra tillämpningar av objektdetektering kan dock göras utan att skära andra fält.

Objektdetektering är inte lika standardiserad som bildklassificering, främst eftersom de flesta av de nya utvecklingarna vanligtvis görs av enskilda forskare, underhållare och utvecklare, snarare än stora bibliotek och ramverk. Det är svårt att paketera de nödvändiga verktygsskripten i ett ramverk som TensorFlow eller PyTorch och behålla API-riktlinjerna som väglett utvecklingen hittills.

Detta gör objektdetektering något mer komplex, vanligtvis mer omfattande (men inte alltid) och mindre lättillgänglig än bildklassificering. En av de stora fördelarna med att vara i ett ekosystem är att det ger dig ett sätt att inte söka efter användbar information om god praxis, verktyg och metoder att använda. Med objektdetektering – de flesta måste göra mycket mer forskning om fältets landskap för att få ett bra grepp.

Meta AI:s Detectron2 – Instanssegmentering och objektdetektion

Detektron2 är Meta AI (tidigare FAIR – Facebook AI Research)s paket för detektering, segmentering och poseringsuppskattning med öppen källkod – allt i ett. Med en indatabild kan den returnera etiketter, begränsningsrutor, konfidenspoäng, masker och skelett av objekt. Detta är väl representerat på förvarets sida:

Det är tänkt att användas som ett bibliotek där du kan bygga forskningsprojekt. Det erbjuder en modell zoo med de flesta implementeringar som förlitar sig på Mask R-CNN och R-CNN i allmänhet, tillsammans med RetinaNet. De har också en ganska anständig dokumentation. Låt oss köra ett exemplifierande slutledningsskript!

Låt oss först installera beroenden:

$ pip install pyyaml==5.1
$ pip install 'git+https://github.com/facebookresearch/detectron2.git'

Därefter importerar vi Detectron2-verktygen – det är här ram-domänkunskapen kommer in i bilden. Du kan konstruera en detektor med hjälp av DefaultPredictor klass, genom att skicka in ett konfigurationsobjekt som ställer in den. De Visualizer erbjuder stöd för att visualisera resultat. MetadataCatalog och DatasetCatalog tillhör Detectron2:s data-API och erbjuder information om inbyggda datamängder samt deras metadata.

Låt oss importera klasserna och funktionerna vi kommer att använda:

import torch, detectron2
from detectron2.utils.logger import setup_logger
setup_logger()

from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog

Använda requests, laddar vi ner en bild och sparar den på vår lokala enhet:

import matplotlib.pyplot as plt
import requests
response = requests.get('http://images.cocodataset.org/val2017/000000439715.jpg')
open("input.jpg", "wb").write(response.content)
    
im = cv2.imread("./input.jpg")
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))

Detta resulterar i:

Objektdetektion och instanssegmentering i Python med Detectron2 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Nu laddar vi konfigurationen, inför ändringar om det behövs (modellerna körs på GPU som standard, så om du inte har en GPU, vill du ställa in enheten på 'cpu' i konfigurationen):

cfg = get_cfg()

cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")


Här anger vi vilken modell vi vill köra från model_zoo. Vi har importerat en instanssegmenteringsmodell, baserad på Mask R-CNN-arkitekturen, och med ett ResNet50-stamnät. Beroende på vad du vill uppnå (nyckelpunktsdetektering, instanssegmentering, panoptisk segmentering eller objektdetektering) laddar du in lämplig modell.

Slutligen kan vi konstruera en prediktor med detta cfg och kör den på ingångarna! De Visualizer klass används för att rita förutsägelser på bilden (i det här fallet segmenterade instanser, klasser och begränsningsrutor:

predictor = DefaultPredictor(cfg)
outputs = predictor(im)

v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(out.get_image()[:, :, ::-1])

Slutligen resulterar detta i:

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Objektdetektion och instanssegmentering i Python med Detectron2 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Going Further – Praktisk djupinlärning för datorseende

Din nyfikna natur gör att du vill gå längre? Vi rekommenderar att du kollar in vår Kurs: "Praktisk djupinlärning för datorseende med Python".

Objektdetektion och instanssegmentering i Python med Detectron2 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ännu en kurs i datorseende?

Vi kommer inte att göra klassificering av MNIST-siffror eller MNIST-mode. De tjänade sin del för länge sedan. Alltför många inlärningsresurser fokuserar på grundläggande datamängder och grundläggande arkitekturer innan de låter avancerade blackbox-arkitekturer bära bördan av prestanda.

Vi vill fokusera på avmystifiering, praktiskhet, förståelse, intuition och riktiga projekt. Vill lära sig hur du kan göra skillnad? Vi tar dig med på en tur från hur våra hjärnor bearbetar bilder till att skriva en klassificerare för djupinlärning för bröstcancer i forskningsklass till nätverk för djupinlärning som "hallucinerar", lär dig principer och teorier genom praktiskt arbete, och utrustar dig med kunskap och verktyg för att bli expert på att tillämpa djupinlärning för att lösa datorseende.

Vad är inuti?

  • De första principerna för syn och hur datorer kan läras att "se"
  • Olika uppgifter och tillämpningar av datorseende
  • Branschens verktyg som gör ditt arbete enklare
  • Hitta, skapa och använda datauppsättningar för datorseende
  • Teorin och tillämpningen av Convolutional Neural Networks
  • Hantera domänskifte, samtidig förekomst och andra fördomar i datamängder
  • Överför Lärande och utnyttja andras träningstid och beräkningsresurser till din fördel
  • Bygga och träna en toppmodern klassificerare för bröstcancer
  • Hur man applicerar en hälsosam dos av skepsis på mainstream idéer och förstår implikationerna av allmänt använda tekniker
  • Visualisera ett ConvNets "konceptutrymme" med t-SNE och PCA
  • Fallstudier av hur företag använder datorseendetekniker för att uppnå bättre resultat
  • Korrekt modellutvärdering, latent rumsvisualisering och identifiering av modellens uppmärksamhet
  • Utföra domänforskning, bearbeta dina egna datamängder och upprätta modelltester
  • Banbrytande arkitekturer, utvecklingen av idéer, vad som gör dem unika och hur man implementerar dem
  • KerasCV – ett WIP-bibliotek för att skapa toppmoderna pipelines och modeller
  • Hur man analyserar och läser uppsatser och implementerar dem själv
  • Välja modeller beroende på din applikation
  • Skapa en komplett maskininlärningspipeline
  • Landskap och intuition på objektdetektering med snabbare R-CNN, RetinaNets, SSD och YOLO
  • Instans och semantisk segmentering
  • Objektigenkänning i realtid med YOLOv5
  • Träning av YOLOv5-objektdetektorer
  • Arbeta med transformatorer med KerasNLP (industristarkt WIP-bibliotek)
  • Integrering av Transformers med ConvNets för att generera bildtexter
  • DeepDream

Slutsats

Instanssegmentering går ett steg bortom semantisk segmentering och noterar den kvalitativa skillnaden mellan individuella instanser av en klass (person 1, person 2, etc...) snarare än bara om de tillhör en. På ett sätt – det är klassificering på pixelnivå.

I den här korta guiden har vi tagit en snabb titt på hur Detectron2 gör instanssegmentering och objektdetektering enkel och tillgänglig via deras API, med hjälp av en Mask R-CNN.

Tidsstämpel:

Mer från Stackabuse