RetinaNeti objektide tuvastamine PyTorchi ja torchvision PlatoBlockchain Data Intelligence abil. Vertikaalne otsing. Ai.

RetinaNeti objektide tuvastamine PyTorchi ja torchvisioniga

Sissejuhatus

Objektide tuvastamine on arvutinägemise suur valdkond ja üks olulisemaid arvutinägemise rakendusi "looduses". Ühest otsast saab selle abil ehitada autonoomseid süsteeme, mis navigeerivad agente läbi keskkondade – olgu selleks ülesandeid täitvad robotid või isejuhtivad autod, kuid selleks on vaja ristumist teiste valdkondadega. Anomaaliate tuvastamist (nt defektsed tooted liinil), objektide asukoha määramist piltidel, näotuvastust ja mitmesuguseid muid objekti tuvastamise rakendusi saab aga teha ilma teisi välju ristumata.

Objektide tuvastamine ei ole nii standardiseeritud kui piltide klassifitseerimine, peamiselt seetõttu, et enamiku uutest arendustest teevad tavaliselt üksikud teadlased, hooldajad ja arendajad, mitte suured raamatukogud ja raamistikud. Raske on pakkida vajalikke utiliidi skripte raamistikku, nagu TensorFlow või PyTorch, ja säilitada API juhiseid, mis seni arendust juhtisid.

See muudab objektide tuvastamise mõnevõrra keerukamaks, tavaliselt paljusõnalisemaks (kuid mitte alati) ja vähem ligipääsetavaks kui piltide klassifitseerimine. Üks ökosüsteemis viibimise peamisi eeliseid on see, et see annab võimaluse mitte otsida kasulikku teavet heade tavade, tööriistade ja kasutusviiside kohta. Objektide tuvastamisega – enamik peab hea haarde saamiseks palju rohkem uurima põllu maastikku.

Objektide tuvastamine PyTorchi/TorchVisioni RetinaNeti abil

torchvision on PyTorchi arvutinägemise projekt, mille eesmärk on muuta PyTorchil põhinevate CV-mudelite arendamine lihtsamaks, pakkudes teisendus- ja suurendamisskripte, näidisloomaaeda eelkoolitatud kaaludega, andmekogumeid ja utiliite, mis võivad praktikule kasulikud olla.

Olles veel beetaversioonis ja väga eksperimenteeriv – torchvision pakub suhteliselt lihtsat objektituvastuse API-t koos mõne mudeli vahel, mille hulgast valida:

  • Kiirem R-CNN
  • RetinaNet
  • FCOS (täielikult konvolutsiooniline RetinaNet)
  • SSD (VGG16 magistraal… jee)
  • SSDLite (MobileNetV3 magistraal)

Kuigi API ei ole nii lihvitud ega lihtne kui mõned teised kolmanda osapoole API-d, on see väga korralik lähtepunkt neile, kes eelistavad siiski turvalisust neile tuttavas ökosüsteemis. Enne jätkamist installige kindlasti PyTorch ja Torchvision:

$ pip install torch torchvision

Laadime sisse mõned utiliidi funktsioonid, nt read_image(), draw_bounding_boxes() ja to_pil_image() piltide lugemise, joonistamise ja väljastamise hõlbustamiseks, millele järgneb RetinaNeti ja selle eelkoolitatud kaalude (MS COCO) importimine:

from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import retinanet_resnet50_fpn_v2, RetinaNet_ResNet50_FPN_V2_Weights

import matplotlib.pyplot as plt

RetinaNet kasutab ResNet50 magistraalvõrku ja selle peal funktsioonipüramiidvõrku (FPN). Kuigi klassi nimi on paljusõnaline, viitab see arhitektuurile. Toome pildi kasutades requests raamatukogu ja salvestage see failina meie kohalikule kettale:

import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)

img = read_image("obj_det.jpeg")

Kui pilt on paigas – saame oma mudeli ja kaalud teha:

weights = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)

model.eval()

preprocess = weights.transforms()

. score_thresh argument määratleb läve, mille juures objekt tuvastatakse klassi objektina. Intuitiivselt on see usalduslävi ja me ei liigita objekti klassi kuuluvaks, kui mudel on vähem kui 35% kindel, et see kuulub klassi.

Eeltöötleme pilti, kasutades meie kaalude teisendusi, loome partii ja teeme järelduse:

batch = [preprocess(img)]
prediction = model(batch)[0]

See on kõik, meie prediction sõnastik sisaldab tuletatud objektide klasse ja asukohti! Nüüd pole tulemused meie jaoks sellisel kujul eriti kasulikud – me tahame kaaludest metaandmetega seotud sildid eraldada ja joonestada piirdekastid, mida saab teha draw_bounding_boxes():

labels = [weights.meta["categories"][i] for i in prediction["labels"]]

box = draw_bounding_boxes(img, boxes=prediction["boxes"],
                          labels=labels,
                          colors="cyan",
                          width=2, 
                          font_size=30,
                          font='Arial')

im = to_pil_image(box.detach())

fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()

Selle tulemuseks on:

RetinaNet klassifitseeris tegelikult auto taha piiluja! See on üsna raske klassifikatsioon.

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Saate RetinaNeti välja lülitada FCOS-ile (täielikult konvolutsiooniline RetinaNet), asendades retinanet_resnet50_fpn_v2 koos fcos_resnet50_fpnja kasutage FCOS_ResNet50_FPN_Weights kaalud:

from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import fcos_resnet50_fpn, FCOS_ResNet50_FPN_Weights

import matplotlib.pyplot as plt
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)

img = read_image("obj_det.jpeg")
weights = FCOS_ResNet50_FPN_Weights.DEFAULT
model = fcos_resnet50_fpn(weights=weights, score_thresh=0.35)
model.eval()

preprocess = weights.transforms()
batch = [preprocess(img)]
prediction = model(batch)[0]

labels = [weights.meta["categories"][i] for i in prediction["labels"]]

box = draw_bounding_boxes(img, boxes=prediction["boxes"],
                          labels=labels,
                          colors="cyan",
                          width=2, 
                          font_size=30,
                          font='Arial')

im = to_pil_image(box.detach())

fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()

Edasiminek – praktiline süvaõpe arvutinägemise jaoks

Sinu uudishimulik loomus tekitab sinus soovi minna kaugemale? Soovitame tutvuda meiega Kursus: "Praktiline süvaõpe arvutinägemise jaoks Pythoniga".

RetinaNeti objektide tuvastamine PyTorchi ja torchvision PlatoBlockchain Data Intelligence abil. Vertikaalne otsing. Ai.

Veel üks arvutinägemise kursus?

Me ei klassifitseeri MNIST-i numbreid ega MNIST-moodi. Nad teenisid oma osa juba ammu. Liiga paljud õpperessursid keskenduvad põhiandmekogumitele ja põhiarhitektuuridele, enne kui lasevad täiustatud musta kasti arhitektuurid jõudluskoormuse enda kanda võtta.

Tahame keskenduda demüstifitseerimine, praktilisus, mõistmine, intuitsioon ja tõelisi projekte. Tahad õppida kuidas saate midagi muuta? Viime teid teele alates viisist, kuidas meie aju töötleb pilte, kuni rinnavähi süvaõppe klassifikaatori kirjutamiseni kuni süvaõppevõrgustikeni, mis "hallutsineerivad", õpetades teile põhimõtteid ja teooriat praktilise töö kaudu, varustades teid oskusteavet ja tööriistu, et saada eksperdiks süvaõppe rakendamisel arvutinägemise lahendamisel.

Mis seal sees on?

  • Nägemise esimesed põhimõtted ja see, kuidas arvuteid saab õpetada nägema
  • Arvutinägemise erinevad ülesanded ja rakendused
  • Tööriistad, mis muudavad teie töö lihtsamaks
  • Arvutinägemise andmestike otsimine, loomine ja kasutamine
  • Konvolutsiooniliste närvivõrkude teooria ja rakendus
  • Domeeni nihke, koosesinemise ja muude andmekogumite eelarvamuste käsitlemine
  • Teisaldage õppimine ja teiste koolitusaja ja arvutusressursside kasutamine teie kasuks
  • Kaasaegse rinnavähi klassifikaatori ehitamine ja väljaõpe
  • Kuidas rakendada tervet annust skepsist peavoolu ideede suhtes ja mõista laialdaselt kasutusele võetud tehnikate mõju
  • ConvNeti "kontseptsiooniruumi" visualiseerimine t-SNE ja PCA abil
  • Juhtumiuuringud, kuidas ettevõtted kasutavad arvutinägemise tehnikaid paremate tulemuste saavutamiseks
  • Mudeli nõuetekohane hindamine, varjatud ruumi visualiseerimine ja mudeli tähelepanu tuvastamine
  • Domeeniuuringu läbiviimine, oma andmekogumite töötlemine ja mudelitestide loomine
  • Tipptasemel arhitektuurid, ideede edenemine, mis teeb need ainulaadseks ja kuidas neid ellu viia
  • KerasCV – WIP-teek tipptasemel torujuhtmete ja mudelite loomiseks
  • Kuidas töid sõeluda ja lugeda ning neid ise rakendada
  • Mudelite valimine sõltuvalt teie rakendusest
  • Täieliku masinõppe torujuhtme loomine
  • Maastik ja intuitsioon objektide tuvastamisel kiiremate R-CNN-ide, RetinaNetside, SSD-de ja YOLO-ga
  • Eksemplar ja semantiline segmenteerimine
  • Reaalajas objektituvastus YOLOv5-ga
  • YOLOv5 objektidetektorite koolitamine
  • Transformeritega töötamine KerasNLP-ga (tööstuse tugev WIP-teek)
  • Transformerite integreerimine ConvNetsiga, et luua piltide pealdised
  • Deepdream

Järeldus

Objektide tuvastamine on arvutinägemise oluline valdkond ja see on kahjuks vähem ligipääsetav, kui see peaks olema.

Selles lühikeses juhendis vaatasime, kuidas torchvision, PyTorchi Computer Vision pakett, muudab RetinaNeti abil piltidel objektide tuvastamise lihtsamaks.

Ajatempel:

Veel alates Stackabus