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



05.09.2022

Łatwiejsza migracja do chmur

Commvault i Oracle rozszerzyły partnerską współpracę i wspólnie oferują rozwiązanie...
01.09.2022

Badanie sieci

QNAP ogłosił wprowadzenie oprogramowania ADRA Network Detection and Response (NDR) dla...
01.09.2022

5G w Polsce

Z badania Kearney 5G Readiness Index 2022 wynika, że Polska jest jednym z najgorzej...
01.09.2022

Zarządzanie działaniami

Fortinet zaprezentował chmurową usługę, która koreluje informacje dotyczące...
01.09.2022

Selektywna rejestracja

Naukowcy z UCLA przedstawili projekt inteligentnej kamery, która pozwala wybrać, jaki...
01.09.2022

Więcej mocy, komputer...

Profesjonalny komputer Dell Precision 7865 Tower z AMD Ryzen Threadripper PRO 5000...
01.09.2022

Rekord prędkości

Firma Aorus zapowiada superszybki dysk, następcę modelu Gen4 7000s SSD, który ma oferować...
01.09.2022

Beprzewodowe drukowanie

Firma Brother wprowadziła do swojego portfolio nowe urządzenie wielofunkcyjne z systemem...
01.09.2022

Obraz dobrze zaprogramowany

Monitor interaktywny Lyra to połączenie Androida 11, szyby antybakteryjnej, wbudowanego...

Automatyczna klasyfikacja obrazów

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

Klasyfikacja obrazów jest pierwszą i wciąż jedną z najpopularniejszych technik ich komputerowej analizy. Polega ona na przypisaniu obrazu do jednej z predefiniowanych klas na podstawie widocznych na nim obiektów. Na przykład, jeżeli na obrazie widoczny jest kot, komputer powinien przypisać go do klasy Kot, a moje selfie mogłoby zostać sklasyfikowane jako Osoba bądź Marcin.

 

Przełomem w automatycznej klasyfikacji obrazów było zastosowanie (na początku XX wieku) głębokich sieci neuronowych. W ciągu pięciu lat pozwoliło to zwiększyć dokładność automatycznej klasyfikacji obrazów z 70% (rok 2011) do 97% (w roku 2015). W kolejnym roku dokładność, z jaką modele automatyczne klasyfikowały obrazy, przewyższyła ludzką.


Nadal jednak samodzielne zbudowanie takiego modelu było wyzwaniem. Po pierwsze, wymagało to zgromadzenia i opisania dużych ilości danych (przynajmniej kilku tysięcy przykładowych obrazów dla każdej klasy). Po drugie, trening modelu wymaga użycia akceleratorów GPU wyposażonych w duże ilości (16 GB lub więcej) pamięci. Po trzecie, architektura i proces uczenia głębokich sieci neuronowych są bardzo skomplikowane i wymagają ustawienia odpowiednich wartości wielu (od kilkuset do kilku tysięcy) parametrów. Znalezienie odpowiedniej dla rozwiązywanego zadania kombinacji tych parametrów wymaga nie tylko eksperckiej wiedzy, ale również czasu i pieniędzy.


W efekcie tylko duże korporacje mogły sobie pozwolić na samodzielne budowanie modeli. Sytuacja zaczęła się zmieniać dzięki powszechnemu stosowaniu wstępnie nauczonych modeli (tzw. przekazywanie wiedzy). Ponieważ ogromna większość głębokiej sieci neuronowej odpowiada za rozpoznawanie kształtów (od bardzo prostych, jak linie, po skomplikowane, jak usta albo dzioby), możemy użyć wcześniej nauczonej sieci neuronowej do różnych zadań – wystarczy douczyć ją rozpoznawania interesujących nas obiektów. Przekazywanie wiedzy pozwala wielokrotnie ograniczyć liczbę wymaganych przykładów (z tysięcy do dziesiątków), skrócić czas uczenia (z tygodni do godzin), jednocześnie upraszczając eksperyment (liczba wymaganych do ustawienia parametrów zmniejsza się do kilkunastu).


Kolejnym krokiem na drodze do upowszechnienia głębokiego uczenia maszynowego jest połączenie przekazywania wiedzy z technikami automatycznego uczenia maszynowego, które z powodzeniem od lat stosowane są do treningu klasycznych modeli uczenia maszynowego. Tematem artykułu jest takie nowatorskie, dostępne na platformie Azure, rozwiązanie.


> Usługa Azure Machine Learning


Do utworzenia usługi potrzebna jest subskrypcja Azure, której darmowa oferta dostępna jest pod adresem bit.ly/3NcgyB4. Instrukcja opisująca tworzenie usługi i potrzebnego do uruchomienia przykładowego kodu zasobu obliczeniowego dostępna jest pod adresem bit.ly/3N9bWvn. Po jej wykonaniu będziemy mogli zalogować się do Azure Machine Learning Studio i utworzyć nowy notatnik, w którym zbudujemy i przetestujemy model klasyfikacji obrazów.


Usługa Azure ML, oprócz zasobów obliczeniowych, magazynów i zestawów danych, wbudowanych mechanizmów logowania przebiegu eksperymentów, rejestrowania i wdrażania nauczonych modeli, oferuje także interfejsy programistyczne w postaci SDK dla języków Python i R. W czasie powstawania artykułu dostępna była wersja 1.38.0 SDK dla języka Python. Żeby sprawdzić bieżącą wersję, trzeba upewnić się, że notatnik połączony jest z kernelem Python 3.8 Azure ML, i wykonać poniższą instrukcję:


import azureml.core
print(„You are currently using version”, azureml.core.VERSION, `
„of the Azure ML SDK.”)


Następnie należy zalogować się do wcześniej utworzonego obszaru roboczego usługi:


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


Przeprowadzenie eksperymentu automatycznego głębokiego uczenia maszynowego wymaga utworzenia klastra obliczeniowego. W opisywanym przykładzie użyty został klaster zbudowany z dwóch maszyn wirtualnych typu NC6 wyposażonych w akcelerator graficzny Nvidia 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_si”e=”Standard_”C6”,
idle_seconds_before_scaledown=600,
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
)


> Klasyfikator rozpoznający wiele obiektów na obrazach


Jako pierwszy zbudujemy model rozpoznający wiele widocznych na obrazach obiektów. Ponieważ takie modele mogą przypisać jeden obraz do wielu klas, nazywa się je klasyfikatorami multi-label. Żeby zdefiniować nowy eksperyment, wystarczy podać jego nazwę:


from azureml.core import Experiment
experiment_name = „automl-image-multilabel-fridge-objects”
experiment = Experiment(ws, name=experiment_name)


Jako przykładowych danych użyjemy około 140 zdjęć przedmiotów, które można znaleźć w lodówce – dane te są ogólnie dostępne, po pobraniu archiwum ZIP należy je rozpakować:


import os
import urllib
from zipfile import ZipFile
download_url = „https://cvbp-secondary.z19.web.core.windows.net/datasets/`
image_classification/multilabelFridgeObjects.zip”
data_file = „./multilabelFridgeObjects.zip”
urllib.request.urlretrieve(download_url, filename=data_file)
with ZipFile(data_file, „r”) as zip:
print(„extracting files...”)
zip.extractall()
print(„done”)
os.remove(data_file)


Zdjęcia możemy wyświetlić, klikając na nazwie pliku. Warto też zwrócić uwagę, że archiwum zawiera plik labels.csv z etykietami. Usługa Azure ML wymaga, żeby dane te były zarejestrowane jako zbiór danych, który możemy przygotować samodzielnie, uruchamiając projekt typu Data labelling albo posługując się plikiem JSONL w odpowiednim formacie. Pliki JSONL opisujące przykładowe dane podzielone na zbiór treningowy i walidacyjny dostępne są pod adresem bit.ly/3FDiIH0. Oba te pliki oraz znajdujące się w tym samym repozytorium przykładowe zdjęcie należy zapisać w folderze multilabelFridgeObjects. Po wgraniu wszystkich plików do magazynu danych:


ds = ws.get_default_datastore()
ds.upload(src_dir=”./multilabelFridgeObjects”, `
target_path=”multilabelFridgeObjects”)


należy zarejestrować oba zbiory danych. Poniżej pokazana została rejestracja zbioru treningowego. Rejestrując zbiór walidacyjny, należy zmienić jego nazwę i nazwę opisującego go pliku JSONL:


from azureml.core import Dataset
from azureml.data import DataType
training_dataset_name = „multilabelFridgeObjectsTrainingDataset”
if training_dataset_name in ws.datasets:
training_dataset = ws.datasets.get(training_dataset_name)
print(„Found the training dataset”, training_dataset_name)
else:
training_dataset = Dataset.Tabular.from_json_lines_files(
path=ds.path(„multilabelFridgeObjects/train_annotations.jsonl”),
set_column_types={„image_url”: DataType.to_stream(ds.workspace)},
)
training_dataset = training_dataset.register(
workspace=ws, name=training_dataset_name
)


Sam trening modelu sprowadza się do zdefiniowania obiektu AutoMLImageConfig. Tym razem ograniczymy się do użycia domyślnych parametrów dla wybranego modelu bazowego, którym będzie bazowy transformer:


from azureml.automl.core.shared.constants import ImageTask
from azureml.train.automl import AutoMLImageConfig
from azureml.train.hyperdrive import GridParameterSampling, choice
image_config_vit = AutoMLImageConfig(
task=ImageTask.IMAGE_CLASSIFICATION_MULTILABEL,
compute_target=compute_target,
training_data=training_dataset,
validation_data=validation_dataset,
hyperparameter_sampling=GridParameterSampling({„model_name”: `
choice(„vitb16r224”)}),
iterations=1,
)


Użycie transformerów do analizy obrazów zapoczątkował artykuł z roku 2021 zatytułowany „An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale”. Więcej informacji o tej architekturze oraz kilka wstępnie nauczonych modeli można znaleźć pod adresem  bit.ly/39WLp6b. Po uruchomieniu tak zdefiniowanego eksperymentu pozostaje nam poczekać kilkanaście minut na jego zakończenie. W tym czasie możemy monitorować postępy uczenia, obserwując wyświetlane w Studio ML wykresy: automl_image_run = experiment.submit(image_config_vit). Podstawową metryką jakości klasyfikatorów multi-label w Azure ML jest IoU (ang. Intersection over Union). Mierzy ona procent prawidłowo nadanych etykiet względem wszystkich nadanych obrazom etykiet, IoU równe 1 oznacza idealny model.

 

[...]

 

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.

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