RetinaNet objektumészlelés PyTorch és torchvision PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

RetinaNet objektumészlelés PyTorch és torchvision segítségével

Bevezetés

Az objektumészlelés a számítógépes látás nagy területe, és a számítógépes látás egyik legfontosabb alkalmazása „vadon”. Egyrészt fel lehet vele építeni autonóm rendszereket, amelyek az ügynököket a környezeteken keresztül navigálják – legyen szó feladatokat ellátó robotokról vagy önvezető autókról, de ehhez más területekkel való kereszteződés szükséges. Az anomáliák észlelése (például a vonalon lévő hibás termékek), a képeken belüli objektumok helymeghatározása, az arcfelismerés és az objektumészlelés különféle egyéb alkalmazásai azonban elvégezhetők anélkül, hogy más mezőket metszenek.

Az objektumészlelés nem annyira szabványos, mint a képbesorolás, főleg azért, mert a legtöbb új fejlesztést jellemzően egyéni kutatók, karbantartók és fejlesztők végzik, nem pedig nagy könyvtárak és keretrendszerek. Nehéz a szükséges segédprogram-szkripteket olyan keretrendszerbe csomagolni, mint a TensorFlow vagy a PyTorch, és fenntartani az API-irányelveket, amelyek a fejlesztést eddig irányították.

Ez némileg bonyolultabbá, jellemzően bőbeszédesebbé (de nem mindig) teszi az objektumok észlelését, és kevésbé megközelíthetővé, mint a képosztályozás. Az ökoszisztémában való tartózkodás egyik fő előnye, hogy lehetővé teszi, hogy ne keressen hasznos információkat a bevált gyakorlatokról, eszközökről és megközelítésekről. Tárgyérzékeléssel – a legtöbbnek sokkal többet kell kutatnia a terep táján, hogy jó tapadást érjen el.

Objektumészlelés a PyTorch/TorchVision RetinaNet segítségével

torchvision a PyTorch Computer Vision projektje, és célja, hogy megkönnyítse a PyTorch-alapú CV-modellek fejlesztését azáltal, hogy transzformációs és bővítési szkripteket, egy modell állatkertet előre betanított súlyokkal, adatkészletekkel és segédprogramokkal, amelyek hasznosak lehetnek a gyakorló szakemberek számára.

Még béta állapotban és nagyon kísérletező torchvision viszonylag egyszerű objektumészlelési API-t kínál, néhány modell közül választhat:

  • Gyorsabb R-CNN
  • RetinaNet
  • FCOS (teljesen konvolúciós RetinaNet)
  • SSD (VGG16 gerinc… jé)
  • SSDLite (MobileNetV3 gerinc)

Bár az API nem olyan letisztult vagy egyszerű, mint néhány más, harmadik féltől származó API, ez egy nagyon tisztességes kiindulópont azok számára, akik továbbra is előnyben részesítik az általuk jól ismert ökoszisztéma biztonságát. Mielőtt továbblépne, feltétlenül telepítse a PyTorch-ot és a Torchvision-t:

$ pip install torch torchvision

Töltsünk be néhány segédfunkciót, mint pl read_image(), draw_bounding_boxes() és a to_pil_image() a képek könnyebb olvasásának, rajzolásának és kimenetének megkönnyítése érdekében, majd importálja a RetinaNet és az előre betanított súlyokat (MS COCO):

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

A RetinaNet egy ResNet50 gerinchálózatot és egy Feature Pyramid Network (FPN) hálózatot használ a tetején. Míg az osztály neve bőbeszédű, az architektúrára utal. Hozzunk le egy képet a segítségével requests könyvtárat, és mentse el fájlként a helyi meghajtónkra:

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

Ha a kép a helyén van – példányosíthatjuk a modellünket és a súlyokat:

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

model.eval()

preprocess = weights.transforms()

A score_thresh Az argumentum azt a küszöbértéket határozza meg, amelynél az objektum egy osztály objektumaként érzékelhető. Intuitív módon ez a megbízhatósági küszöb, és nem sorolunk be egy objektumot egy osztályba, ha a modell 35%-nál kevésbé biztos abban, hogy egy osztályhoz tartozik.

Feldolgozzuk a képet a súlyozásunkból származó transzformációk segítségével, hozzunk létre egy köteget, és futtassuk le a következtetést:

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

Ez az, a miénk prediction szótár tartalmazza a kikövetkeztetett objektumosztályokat és -helyeket! Nos, az eredmények ebben a formában nem túl hasznosak számunkra – ki akarjuk kinyerni a címkéket a metaadatokhoz képest a súlyokból, és határolódobozokat rajzolni, amit a 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()

Ennek eredményeként:

A RetinaNet valóban besorolta az autó mögé kukucskáló személyt! Ez elég nehéz besorolás.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

Kicserélheti a RetinaNet FCOS-re (teljesen konvolúciós RetinaNet) retinanet_resnet50_fpn_v2 val vel fcos_resnet50_fpn, és használja a FCOS_ResNet50_FPN_Weights súlyok:

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

Továbblépve – Gyakorlati mélytanulás a számítógépes látáshoz

Érdeklődő természete arra készteti, hogy tovább menjen? Javasoljuk, hogy tekintse meg nálunk Tanfolyam: „Practical Deep Learning for Computer Vision with Python”.

RetinaNet objektumészlelés PyTorch és torchvision PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Újabb számítógépes látás tanfolyam?

Nem végezzük az MNIST számjegyek osztályozását vagy az MNIST divatot. Régen kiszolgálták a részüket. Túl sok tanulási erőforrás összpontosít az alapvető adatkészletekre és alapvető architektúrákra, mielőtt a fejlett feketedoboz-architektúrákra hagyná a teljesítmény terhét.

Mi arra szeretnénk koncentrálni demisztifikáció, gyakorlatiasság, megértés, intuíció és a valódi projektek. Tanulni akar hogyan tudsz változtatni? Elvezetjük Önt az agyunk képfeldolgozási módjától a mellrák kutatási szintű mélytanulási osztályozójának megírásáig a mély tanulási hálózatokig, amelyek „hallucinálnak”, gyakorlati munkán keresztül megtanítjuk az alapelveket és az elméletet, felkészítve a know-how és eszközök ahhoz, hogy szakértővé váljon a mélytanulás alkalmazásában a számítógépes látás megoldásában.

Mi van benne?

  • A látás első alapelvei és hogyan lehet a számítógépeket „látni” tanítani
  • A számítógépes látás különböző feladatai és alkalmazásai
  • A szakma eszközei, amelyek megkönnyítik a munkáját
  • Adatkészletek keresése, létrehozása és felhasználása számítógépes látáshoz
  • A konvolúciós neurális hálózatok elmélete és alkalmazása
  • Tartományeltolódás, együttes előfordulás és egyéb torzítások kezelése az adatkészletekben
  • Transzfer Tanulás és mások képzési idejének és számítási erőforrásainak felhasználása az Ön javára
  • Korszerű emlőrák osztályozó felépítése és betanítása
  • Hogyan alkalmazzunk egy egészséges adag szkepticizmust a mainstream ötletekhez, és hogyan értsük meg a széles körben elfogadott technikák következményeit
  • A ConvNet „koncepcióterének” megjelenítése t-SNE és PCA segítségével
  • Esettanulmányok arról, hogy a vállalatok hogyan használják a számítógépes látástechnikákat a jobb eredmények elérése érdekében
  • Megfelelő modellértékelés, látens tér vizualizáció és a modell figyelmének azonosítása
  • Domainkutatás végzése, saját adatkészletek feldolgozása és modelltesztek létrehozása
  • Élvonalbeli architektúrák, az ötletek fejlődése, mi teszi őket egyedivé és hogyan valósítsuk meg őket
  • KerasCV – WIP-könyvtár a legkorszerűbb csővezetékek és modellek létrehozásához
  • Hogyan elemezze és olvassa el a dolgozatokat, és saját maga hajtsa végre azokat
  • Modellek kiválasztása az alkalmazástól függően
  • Végpontok közötti gépi tanulási folyamat létrehozása
  • Tájkép és intuíció a tárgyfelismeréshez a gyorsabb R-CNN-ekkel, RetinaNetekkel, SSD-kkel és YOLO-val
  • Példány és szemantikai szegmentáció
  • Valós idejű objektumfelismerés a YOLOv5 segítségével
  • YOLOv5 objektumdetektorok képzése
  • Transzformátorokkal való munkavégzés KerasNLP-vel (ipari erősségű WIP-könyvtár)
  • Transformers integrálása ConvNetekkel a képek feliratainak létrehozásához
  • Deepdream

Következtetés

Az objektumészlelés a számítógépes látás egyik fontos területe, és sajnos kevésbé megközelíthető, mint kellene.

Ebben a rövid útmutatóban megnéztük, hogyan torchvision, a PyTorch Computer Vision csomagja, amely megkönnyíti a képek objektumfelismerését a RetinaNet segítségével.

Időbélyeg:

Még több Stackabus