RetinaNet Object Detection PyTorchin ja torchvision PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

RetinaNet-objektien tunnistus PyTorchin ja torchvisionin avulla

esittely

Objektien havaitseminen on laaja kenttä tietokonenäössä ja yksi tärkeimmistä tietokonenäön sovelluksista "luonnossa". Toisaalta sen avulla voidaan rakentaa autonomisia järjestelmiä, jotka navigoivat agentteja ympäristöissä – olipa kyse tehtäviä suorittavista roboteista tai itseohjautuvista autoista, mutta tämä vaatii risteyksiä muiden kenttien kanssa. Kuitenkin poikkeamien havaitseminen (kuten vialliset tuotteet linjalla), kohteiden paikantaminen kuvissa, kasvojen tunnistus ja monet muut esineentunnistuksen sovellukset voidaan tehdä leikkaamatta muita kenttiä.

Objektien tunnistus ei ole yhtä standardoitua kuin kuvien luokittelu, lähinnä siksi, että useimmat uudet kehitystyöt ovat tyypillisesti yksittäisten tutkijoiden, ylläpitäjien ja kehittäjien tekemiä suurten kirjastojen ja kehysten sijaan. Tarvittavia apuohjelmia on vaikea pakata TensorFlow- tai PyTorchin kaltaisiin puitteisiin ja ylläpitää kehitystä tähän asti ohjaaneita API-ohjeita.

Tämä tekee objektien havaitsemisesta jonkin verran monimutkaisempaa, tyypillisesti monisanaisempaa (mutta ei aina) ja vähemmän lähestyttävää kuin kuvien luokittelu. Yksi ekosysteemissä olemisen suurimmista eduista on, että se tarjoaa tavan olla etsimättä hyödyllistä tietoa hyvistä käytännöistä, työkaluista ja lähestymistavoista. Kohteen havaitseminen – useimpien on tutkittava enemmän kentän maisemaa saadakseen hyvän otteen.

Objektin tunnistus PyTorch/TorchVisionin RetinaNetillä

torchvision on PyTorchin Computer Vision -projekti, jonka tavoitteena on helpottaa PyTorch-pohjaisten CV-mallien kehittämistä tarjoamalla muunnos- ja lisäysskriptejä, mallieläintarhan esiopetetuilla painoilla, tietojoukkoja ja apuohjelmia, joista voi olla hyötyä harjoittelijalle.

Vielä beta-vaiheessa ja kokeellisessa - torchvision tarjoaa suhteellisen yksinkertaisen Object Detection APIn, jossa on muutama malli, joista valita:

  • Nopeampi R-CNN
  • RetinaNet
  • FCOS (täyskierteinen RetinaNet)
  • SSD (VGG16 runko… jees)
  • SSDLite (MobileNetV3-runkoverkko)

Vaikka sovellusliittymä ei olekaan niin hiottu tai yksinkertainen kuin jotkut muut kolmannen osapuolen sovellusliittymät, se on erittäin kelvollinen lähtökohta niille, jotka silti haluaisivat turvallisesti olla tutussa ekosysteemissä. Ennen kuin jatkat, varmista, että asennat PyTorchin ja Torchvisionin:

$ pip install torch torchvision

Ladataanpa joitain aputoimintoja, kuten read_image(), draw_bounding_boxes() ja to_pil_image() Kuvien lukemisen, piirtämisen ja tulostamisen helpottamiseksi, minkä jälkeen RetinaNet ja sen esiopetetut painot (MS COCO) tuodaan:

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 käyttää ResNet50-runkoverkkoa ja Feature Pyramid Network (FPN) -verkkoa sen päällä. Vaikka luokan nimi on monisanainen, se viittaa arkkitehtuuriin. Haetaan kuva käyttämällä requests kirjasto ja tallenna se tiedostona paikalliselle asemallemme:

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")

Kun kuva on paikallaan – voimme ilmentää mallimme ja painomme:

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 argumentti määrittää kynnyksen, jolla objekti tunnistetaan luokan objektiksi. Intuitiivisesti se on luottamuskynnys, emmekä luokittele objektia kuuluvaksi luokkaan, jos malli on alle 35 % varma, että se kuuluu luokkaan.

Esikäsittelemme kuvaa painojemme muunnoksilla, luomme erän ja suoritamme päättelyn:

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

Siinä se, meidän prediction sanakirja sisältää päätellyt objektiluokat ja sijainnit! Nyt tulokset eivät ole meille kovin hyödyllisiä tässä muodossa – haluamme poimia painojen metatietoihin liittyvät tunnisteet ja piirtää rajoituslaatikot, mikä voidaan tehdä 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()

Tämä johtaa:

RetinaNet todellakin luokitteli auton takana kurkistavan henkilön! Se on aika vaikea luokittelu.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Voit vaihtaa RetinaNetin FCOS-verkkoon (täyskonvoluutioretinaNet) vaihtamalla retinanet_resnet50_fpn_v2 with fcos_resnet50_fpn, ja käytä FCOS_ResNet50_FPN_Weights painot:

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()

Jatketaan – Käytännön syvällistä oppimista tietokonenäköön

Utelias luonteesi saa sinut haluamaan pidemmälle? Suosittelemme tutustumaan meidän Kurssi: "Käytännön syvällinen oppiminen tietokonenäön käyttöön Pythonilla".

RetinaNet Object Detection PyTorchin ja torchvision PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Toinen tietokonenäkökurssi?

Emme luokittele MNIST-numeroita tai MNIST-muotia. He palvelivat osansa kauan sitten. Liian monet oppimisresurssit keskittyvät perustietosarjoihin ja perusarkkitehtuureihin, ennen kuin edistyneiden black-box-arkkitehtuurien annetaan kantaa suoritustaakka.

Haluamme keskittyä demystifikaatio, käytännöllisyys, ymmärtäminen, intuitio ja oikeita projekteja. Haluan oppia miten voitko vaikuttaa? Viemme sinut matkalle aivomme prosessoinnista kuvien tutkimiseen rintasyövän syväoppimisluokittajan kirjoittamiseen syväoppimisverkostoihin, jotka "halusinoivat", opettaen sinulle periaatteita ja teoriaa käytännön työssä ja varustamalla tietotaitoa ja työkaluja tullaksesi asiantuntijaksi syväoppimisen soveltamisessa tietokonenäön ratkaisemiseen.

Mitä on sisällä?

  • Näön ensimmäiset periaatteet ja kuinka tietokoneet voidaan opettaa "näkemään"
  • Tietokonenäön eri tehtävät ja sovellukset
  • Ammatin työkalut, jotka helpottavat työtäsi
  • Tietokokonaisuuksien etsiminen, luominen ja hyödyntäminen tietokonenäköä varten
  • Konvoluutiohermoverkkojen teoria ja sovellus
  • Verkkotunnuksen siirtymisen, samanaikaisen esiintymisen ja muiden vääristymien käsittely tietojoukoissa
  • Siirrä Oppiminen ja muiden koulutusajan ja laskennallisten resurssien hyödyntäminen hyödyksesi
  • Huippuluokan rintasyövän luokittelijan rakentaminen ja kouluttaminen
  • Kuinka soveltaa tervettä annos skeptisyyttä valtavirran ideoihin ja ymmärtää laajalti käytettyjen tekniikoiden vaikutukset
  • ConvNetin "konseptitilan" visualisointi t-SNE:n ja PCA:n avulla
  • Tapaustutkimuksia siitä, kuinka yritykset käyttävät tietokonenäkötekniikoita parempien tulosten saavuttamiseksi
  • Oikea mallin arviointi, piilevän tilan visualisointi ja mallin huomion tunnistaminen
  • Toimialuetutkimuksen suorittaminen, omien tietojoukkojen käsittely ja mallitestien laatiminen
  • Huippuluokan arkkitehtuurit, ideoiden eteneminen, mikä tekee niistä ainutlaatuisia ja miten ne toteutetaan
  • KerasCV – WIP-kirjasto uusimpien putkien ja mallien luomiseen
  • Kuinka jäsentää ja lukea papereita ja toteuttaa ne itse
  • Mallien valinta sovelluksesi mukaan
  • Luodaan päästä päähän koneoppimisputki
  • Maisema ja intuitio kohteen havaitsemisessa nopeampien R-CNN-, RetinaNet-, SSD- ja YOLO-verkkojen avulla
  • Instanssi ja semanttinen segmentointi
  • Reaaliaikainen objektintunnistus YOLOv5:n avulla
  • YOLOv5-objektitunnistimien koulutus
  • Työskentely Transformersin kanssa KerasNLP:n (teollisuuden vahvuus WIP-kirjasto) avulla
  • Transformersin integrointi ConvNet-verkkojen kanssa kuvien tekstitysten luomiseksi
  • Deepdream

Yhteenveto

Objektin havaitseminen on tärkeä tietokonenäön ala, ja se on valitettavasti vähemmän tavoitettavissa kuin sen pitäisi olla.

Tässä lyhyessä oppaassa olemme tarkastelleet kuinka torchvision, PyTorchin Computer Vision -paketti, helpottaa kuvien objektien havaitsemista RetinaNetin avulla.

Aikaleima:

Lisää aiheesta Stackabus