Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.


07.06.2022

Red Hat Enterprise Linux 9

Red Hat zaprezentował system operacyjny Red Hat Enterprise Linux 9 (RHEL 9)...
07.06.2022

Technologiczna piaskownica

Koalicja partnerów KIR, IBM, Chmura Krajowa, PKO Bank Polski, Urząd Komisji Nadzoru...
07.06.2022

Sztuczna inteligencja w...

OVHcloud wprowadziło na rynek AI Notebooks – najnowszy element w ofercie usług...
07.06.2022

Spójna ochrona brzegu sieci

Fortinet zaprezentował FortiOS 7.2 – najnowszą wersję swojego flagowego systemu...
07.06.2022

Zarządzanie transferem

Firma Progress wypuściła nową wersję oprogramowania do zarządzania transferem plików...
07.06.2022

Notebook ekstremalny

Panasonic przedstawił 14-calowy Toughbook 40, notebook do pracy w ekstremalnych...
07.06.2022

Zestaw startowy dla robotyki

Firma AMD przedstawiła najnowszy produkt w portfolio adaptacyjnych modułów SOM...
07.06.2022

Precyzja kadrowania

Najnowsze rozwiązania klasy pro firmy Poly mają sprostać zmieniającym się potrzebom...
07.06.2022

Serwer klasy korporacyjnej

QNAP zaprezentował nowy model serwera NAS, TS-h1886XU-RP R2, który działa na systemie...

Rozpoznawanie i segmentacja obiektów

Data publikacji: 07-06-2022 Autor: Marcin Szeliga

W poprzedniej części artykułu przedstawione zostały nowe, w czasie przygotowywania tekstu dostępne w wersji zapoznawczej, funkcjonalności usługi Azure Machine Learning pozwalające automatycznie klasyfikować obrazy. Tematem tej części są dwie kolejne techniki komputerowej analizy obrazów – rozpoznawanie widocznych na obrazach obiektów i ich segmentacja. Tak jak poprzednio przykładowe eksperymenty przeprowadzimy na platformie Azure Machine Learning, korzystając z Python SDK.

 

Wybierając eksperyment typu IMAGE_CLASSIFICATION_MULTILABEL, zbudowaliśmy klasyfikator rozpoznający wiele obiektów na obrazach, a przeprowadzając eksperyment typu IMAGE_CLASSIFICATION_MULTILABEL, zbudowaliśmy klasyfikator przypisujący obraz do jednej z predefiniowanych klas. Na razie opisane funkcje dostępne są wyłącznie poprzez Python SDK dla Azure ML, ale niedługo automatyczna klasyfikacja obrazów będzie też dostępna za pośrednictwem graficznego kreatora.


> Rozpoznawanie obiektów


Rozpoznanie obiektu wymaga jego zlokalizowania na obrazie i przypisania do jednej ze zdefiniowanych klas. Do lokalizacji obiektów używa się ramek (ang. bounding box), czyli najmniejszych prostokątów zawierających cały interesujący nas obiekt. Takie ramki definiowane są albo za pomocą współrzędnych, np. pozycji lewego górnego rogu ramki oraz ich długości i szerokości, albo poprzez podanie współrzędnych czterech rogów ramki. Niezależnie od tego, czy współrzędne ramki zapisane są jako wartości bezwzględne, czy względem rozmiaru analizowanego obrazu, są to liczby. Wartości liczbowe zwracają modele regresji, a więc do wykonania pierwszego zadania potrzebny nam będzie regresor.


Przypisanie zawartości ramki do jednej z możliwych klas to zadanie dla klasyfikatora. Modele tego rodzaju poznaliśmy w pierwszej części artykułu. Jednak w tym przypadku klasyfikację należy przeprowadzić dla wszystkich widocznych na obrazie obiektów. Zadanie komplikuje fakt, że niesklasyfikowane (jeszcze) obiekty mogą być trudne do zlokalizowania. Dlatego do rozpoznawania obrazów używa się innych algorytmów uczenia maszynowego. Niektóre z metod rozpoznawania obrazów używają nawet niezależnych modeli do lokalizacji i klasyfikacji. Jednak zastosowanie jednego modelu do obu zadań nie tylko upraszcza rozwiązanie, ale dodatkowo poprawia jakość wyników – nauczenie się lokalizowania obiektów pomagało w ich klasyfikacji i vice versa.


Zanim przyjrzymy się różnym metodom rozpoznawania obiektów, musimy odpowiednio przygotować dane. Na potrzeby tego eksperymentu skorzystałem z dostępnego na licencji MIT zbioru BCCD Dataset. Zawiera on około 350 zdjęć w formacie 640 × 480 przedstawiających leukocyty (WBC), erytrocyty (RBC) i trombocyty (ang. platelets). Każde zdjęcie opisane jest dokumentem XML zawierającym m.in. współrzędne ramek i znajdujące się w tych ramkach obiekty:


<filename>BloodImage_00000.jpg</filename>
<size>
<width>640</width>
<height>480</height>
<depth>3</depth>
</size>
<object>
<name>WBC</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>260</xmin>
<ymin>177</ymin>
<xmax>491</xmax>
<ymax>376</ymax>
</bndbox>
</object>
<object>
<name>RBC</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>78</xmin>
<ymin>336</ymin>
<xmax>184</xmax>
<ymax>435</ymax>
</bndbox>
</object>


Funkcja automatycznego analizowania obrazów usługi Azure ML wymaga, żeby dane były w formacie tabelarycznego zbioru danych. Taki zbiór danych tworzy się na podstawie dokumentu JSONL o określonym formacie. Każdy element tego dokumentu musi zawierać ścieżkę obrazu zapisanego w magazynie danych usługi oraz zbiór etykiet opisanych klasą oraz względnymi lokalizacjami ramki:


{„image_url”: „AmlDatastore://workspaceblobstore/`
BCCD/images/BloodImage_00000.jpg”, „image_details”:
{„format”: „jpg”, „width”: 640, „height”: 480},
„label”:
[{„label”: „WBC”, „topX”: 0.40625, „topY”: 0.36875, `
„bottomX”: 0.7671875, „bottomY”: 0.7833333333333333, `
„isCrowd”: 0},
{„label”: „RBC”, „topX”: 0.121875, „topY”: 0.7,`
„bottomX”: 0.2875, „bottomY”: 0.90625, „isCrowd”: 0}, …


Po przekształceniu oryginalnych dokumentów XML do wymaganego formatu i wgraniu plików JPG do magazynu danych zarejestrowałem dwa zbiory danych zawierające obrazy treningowe i walidacyjne.

 

Po zalogowaniu się do obszaru roboczego Azure ML:


from azureml.core.workspace import Workspace
ws = Workspace.from_config()


utworzyłem klaster obliczeniowy składający się z maksymalnie dwóch węzłów wyposażonych w akcelerator Tesla K80:


from azureml.core.compute import AmlCompute, ComputeTarget
cluster_name = „NC6Cluster”
try:
compute_target = ws.compute_targets[cluster_name]
print(‚Found existing compute target.’)
except KeyError:
print(‚Creating a new compute target...’)
compute_config = AmlCompute.provisioning_configuration(vm_size=`
’Standard_NC6’, idle_seconds_before_scaledown=1800, min_nodes=0, max_nodes=2)
compute_target = ComputeTarget.create(ws, cluster_name, compute_config)
compute_target.wait_for_completion(show_output=True, min_node_count=`
None, timeout_in_minutes=20)


Następnie zdefiniowałem nowy eksperyment:


from azureml.core import Experiment
experiment_name = ‚automl-image-object-detection-blood-cells’
experiment = Experiment(ws, name=experiment_name)


Konfigurując eksperyment, zdefiniowałem przeszukiwaną przestrzeń hiperparametrów. Dwa hiperparametry – współczynnik uczenia i wielkość bloku danych – zostały zdefiniowane jako niezależne od modelu bazowego. O ile współczynnik uczenia został zdefiniowany jako wartość ciągła o rozkładzie jednorodnym i zakresie od 0,001 do 0,01, o tyle wielkość bloku danych została na stałe ustawiona na 16 – każdy z węzłów klastra typu Standard_NC6 zawiera pojedynczy akcelerator GPU, a więc połowę karty Tesla K80, czyli jedynie 12 GB RAM pamięci GPU. Przetwarzanie danych w większych blokach skończyłoby się błędem braku pamięci.


Na listę sprawdzanych modeli bazowych wpisałem piątą wersję modelu YOLO (You Only Look Once, opis oryginalnego algorytmu jest dostępny pod adresem bit.ly/3MbqRVF, a zmodyfikowana przez firmę Ultralytics wersja pod adresem bit.ly/3L7YyGg) oraz model typu R-CNN (Region Based Convolutional Neural Networks) w opracowanej w roku 2015 wersji Faster R-CNN(opis tego algorytmu dostępny jest pod adresem bit.ly/3M7fMoA). W obu wypadkach zmniejszyłem wielkość obrazów, do 412 lub 320 pikseli – powodem ponownie była mała ilość dostępnej pamięci:

from azureml.train.automl import AutoMLImageConfig
from azureml.automl.core.shared.constants import ImageTask
from azureml.train.hyperdrive import GridParameterSampling, `
RandomParameterSampling, BayesianParameterSampling
from azureml.train.hyperdrive import BanditPolicy, HyperDriveConfig, `
PrimaryMetricGoal
from azureml.train.hyperdrive import choice, uniform
parameter_space = {
‚learning_rate’: uniform(0.0001, 0.01),
‚training_batch_size’: choice(16),
‚model’: choice(
{
‚model_name’: choice(‚yolov5’),
‚model_size’: choice(‚small’, ‚medium’),
‚img_size’: choice(412, 320),
},
{
‚model_name’: choice(‚fasterrcnn_resnet50_fpn’),
‚warmup_cosine_lr_warmup_epochs’: choice(0, 3),
‚box_detections_per_img’: choice(50),
‚optimizer’: choice(‚sgd’, ‚adam’, ‚adamw’),
‚max_size’: choice(412, 320),
}
)
}

 

[...]

 

Pracownik naukowy Wyższej Szkoły Bankowej w Poznaniu Wydział Zamiejscowy w Chorzowie, jest autorem książek poświęconych analizie danych i posiada tytuł Microsoft Most Valuable Professional.

Artykuł pochodzi z miesięcznika: IT Professional

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"