Free výpočetní cloudy
Binder, Colab, Kaggle
free hostovaný jupyter notebook
stačí se zaregistrovat (pro colab google account)
CPU výkon srovnatelný s nb
dostupné GPU !!
nulová instalace
Binder
Stáhne celý repo
nainstaluje requirements.txt
není python specific
založený na repo2docker
mybinder.org
není od googlu
Colab and kaggle
colab.research.google.com
jen malé rozdíly
~ 12 GB RAM, ~ 100GB space, ~2x CPU
Kaggle obsahuje datasety, soutěže
Colab je rozšířenější, snadno se linkuje z repozitáře
přímé napojení na github
Colab triky
from google.colab import drive
drive.mount('/content/gdrive' )
!wget url
!pip install ...
!git clone ...
nahrávání/stahování souborů
from google.colab import files
files.upload()
files.download('soubor' )
procházení pandas dataframes
% load_ext google.colab.data_table
GPU
všechny ale mají podporu GPU
většinou chybí na noteboocích
nutnost pro deep learning
vylepší výkon?
nutnost kopírovat data na grafickou kartu
neexistuje instruction set
jako u CPU
resp. každá grafika ho má jiný
přístup přes API (OpenGL, DirectX, CUDA, …)
velmi omezené možnosti co dělat (aby to mělo smysl)
Je třeba se učit CUDA?
numpy trochu interně
ufuncs
univerzální funkce s numpy array
po prvcích
například při umocňování:
import numpy as np
x = np.arange(10 )
print (x** 2 )
print (np.exp(x))
[ 0 1 4 9 16 25 36 49 64 81]
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
2.98095799e+03 8.10308393e+03]
- je to mnohem rychlejší
import math
x = np.arange(int (1e6 ))
% timeit np.sqrt(x)
% timeit [math.sqrt(xx) for xx in x]
6.3 ms ± 70.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
275 ms ± 25.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Numba
Numba umí předkompilovat pythoní kód
prakticky pouze numpy a cykly
žádné pandas, vlasní knihovny etc.
použití těchto bude delší
snadno přepne na GPU
npoints = int (1e7 )
a = np.arange(npoints, dtype= np.float32)
from numba import vectorize
@vectorize
def cpu_sqrt(x):
return math.sqrt(x)
cpu_sqrt(x)
import math
from numba import vectorize
@vectorize (['float32(float32)' ], target= 'cuda' )
def gpu_sqrt(x):
return math.sqrt(x)
% timeit gpu_sqrt(a)
% timeit np.sqrt(a)
% timeit cpu_sqrt(a)
Komplikovanější výpočet
Multivariabilní normálně rozdělená náhodná veličina.
points = np.random.multivariate_normal([0 ,0 ], [[1. ,0.9 ], [0.9 ,1. ]], 1000 ).astype(np.float32)
import matplotlib.pyplot as plt
plt.scatter(points[:,0 ], points[:,1 ])
převod do radiálních souřednic
theta = np.arctan2(points[:,1 ], points[:,0 ])
_ = plt.hist(theta, bins= 100 )
@vectorize (['float32(float32, float32)' ],target= 'cuda' )
def gpu_arctan2(y, x):
theta = math.atan2(y,x)
return theta
# malý trik kvůli GPU:
x = np.ascontiguousarray(points[:,0 ])
y = np.ascontiguousarray(points[:,1 ])
theta = gpu_arctan2(y, x)
plt.hist(theta, bins= 200 )
% timeit gpu_arctan2(y, x) # compiled for the GPU
% timeit np.arctan2(y, x) # compiled for the CPU
% timeit [math.atan2(point[1 ], point[0 ]) for point in points] # plain python
Detekce objektů
Klasifikace objektů?
Identifikace a kategorizace objektů v obrázku do předdefinovaných tříd.
Trénink modelu na anotovaném datasetu.
Použití natrénovaného modelu ke klasifikaci nových obrázků.
Detekce objektů
Úloha identifikace a lokalizace objektů určitých tříd v obrázcích.
Algoritmy : R-CNN, Faster R-CNN, YOLO, SSD.
YOLO (You Only Look Once)
Detekce objektů v reálném čase.
Princip : Zpracovává celý obrázek jedním průchodem neuronovou sítí.
Výhody :
Vysoká rychlost zpracování.
Schopnost detekovat více objektů různých tříd současně.
Historie
YOLOv1 (2015): První verze, která rozdělila obrázek na mřížku a předpovídala bounding boxy a třídy pro každou buňku.
YOLOv2 (YOLO9000) (2016): Zlepšení přesnosti a schopnost detekovat přes 9000 tříd objektů.
…
YOLOv11 (2024): vylepšení architektury, podpora segmentace a detekce orientovaných objektů, zlepšená přesnost.
Jak YOLO funguje?
Rozdělení obrázku : Obrázek je rozdělen na mřížku SxS buněk.
Predikce : Každá buňka předpovídá B bounding boxů a jejich confidence skóre.
Kombinace : Bounding boxy jsou kombinovány s předpovězenými třídami objektů.
Výstup : Výsledkem jsou bounding boxy s přiřazenými třídami a confidence skóre.
Výhody
Rychlost: Schopnost zpracovat obrázky v reálném čase.
Jednoduchá architektura a implementace.
Neustálý vývoj a vylepšování vedly k vyšší přesnosti a rychlosti.
Nevýhody
Přesnost: Může mít nižší přesnost u malých objektů nebo objektů v blízkosti sebe.
Lokalizace: Méně přesná lokalizace objektů ve srovnání s některými jinými metodami.
Anotování
Hlavní výzvy :
Časová náročnost.
Potřeba přesnosti.
Kompatibilita s různými formáty (YOLO, COCO, Pascal VOC, atd.).
. . .
Roboflow
Webové rozhraní.
Možnost týmové spolupráce.
Import a export v YOLO, COCO …
Nástroje pro předanotaci (např. AutoML modely pro předběžné označení).
Augmentace dat : přidání transformací (rotace, ořez, změna jasu, atd.).
Bezplatný tarif : Až 1 000 obrázků zdarma, akademický tarif.
roboflow.com
Anotování - alternativy
LabelImg
Zdarma, open-source, jednoduchý na použití
Ruční anotace, omezené funkce
CVAT
Výkonný a přizpůsobitelný pro velké projekty
Složitá instalace
Label Studio
Podpora různých typů dat (text, obrázky, audio)
Supervise.ly
Cloudová platforma s pokročilou automatizací
Omezené použití zdarma
Roboflow
Intuitivní rozhraní, automatizace, sdílení projektů
Omezení u bezplatného tarifu