www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Основы классификации изображений в машинном обучении с использованием IBM PowerAI (часть 1)

Дата публикации Feb 18, 2018

IBM Power Systems

Введение

Классификация изображений стала одним из ключевых пилотных вариантов использования для демонстрации машинного обучения. В этой короткой статье я попытаюсь написать о том, как реализовать такое решение с использованием IBM PowerAI, и сравнить производительность графического процессора и процессора при выполнении этого в IBM Power Systems.

Искусственный интеллект

В настоящее время искусственный интеллект рассматривается как отрасль компьютерных наук, которая занимается тем, чтобы заставить компьютеры выполнять такие задачи, как визуальное распознавание, идентификация речи, когнитивное принятие решений, языковой перевод и т. Д., Которые традиционно приписываются человеческому интеллекту.

Машинное обучение

Машинное обучение, обычно рассматриваемое как применение искусственного интеллекта, имеет дело с предоставлением системам возможности учиться и совершенствоваться с опытом, без явного кодирования всех задач.

Глубокое обучение

Глубокое обучение - это подмножество машинного обучения, где системы могут обучаться с помеченными данными обучения (под наблюдением) или без маркировки данных обучения (без присмотра). Глубокое обучение обычно использует иерархический уровень искусственных нейронных сетей для выполнения задачи.

Искусственные нейронные сети

Искусственные нейронные сети - это системы, вдохновленные биологическими нейронными сетями, которые могут выполнять определенные задачи, такие как классификация изображений, с удивительной точностью. Например, для классификации изображений, набор изображений животных снабжен маркировкой. Это тренировочные данные. Искусственная нейронная сеть, проходящая через серию шагов (или слоев), помогает системе научиться классифицировать немаркированные изображения (изображение орангутана в примере, показанном в этой статье) как принадлежащие к определенной группе, в то же время подходя с точностью баллы.

Существует несколько приложений глубокого обучения для вашего бизнеса - от личных помощников по мобильному телефону до автомобилей с самостоятельным вождением, где быстро меняющиеся схемы используются для классификации объектов в режиме реального времени.

Что такое IBM PowerAI?

Программное обеспечение IBM PowerAI позволяет с минимальными усилиями легко запускать все популярные платформы машинного обучения на серверах IBM POWER9, которые содержат графический процессор. Процессоры были разработаны и построены для последовательной обработки и содержат небольшое количество ядер, тогда как графические процессоры могут содержать тысячи меньших ядер и полагаться на параллельную обработку задач. Задачи, предназначенные для машинного обучения, являются ключевыми приложениями графических процессоров. Проверьте IBM Power SystemAC922серверы, рекламируемые как один из лучших серверов на рынке для выполнения задач ИИ предприятия. В настоящее время IBM PowerAI включает в себя следующие платформы;

Источник:https://www.ibm.com/us-en/marketplace/deep-learning-platform

Текущая настройка

Для этой демонстрации я использовал контейнер на виртуальной машине под управлением Ubuntu на Power (ppc64le), размещенный наОблако Нимбикса,

Контейнер - это запущенный экземпляр изображения. Изображение - это шаблон, который содержит код ОС, программного обеспечения и приложения, все они объединены в один файл. Изображения определяются с помощью Dockerfile, который представляет собой список шагов для настройки изображения. Dockerfile создан для создания образа, а образ запускается, чтобы получить работающий контейнер. Чтобы запустить образ, вам нужно установить и настроить Docker Engine на виртуальной машине.

ЗдесьDockerfileЯ использовал, написанныйИндраджит Поддар, Это взято изэтот Githubстр.

Это создает образ с помощью Jupyter Notebook, iTorch Kernel (мы обсудим это во второй части) и некоторых базовых примеров TensorFlow.

TensorFlowэто масштабируемая библиотека с открытым исходным кодом для приложений машинного обучения, основанная на концепции графа потока данных, который может быть построен и выполнен. Граф может содержать два компонента, узлы и ребра (или тензоры). Он поставляется с Python API и легко собирает сеть, назначает параметры и запускает ваши модели обучения.

Шаги ниже были продемонстрированыИндраджит Поддар, Он создал тестовый образ в Nimbix Cloud, который через несколько минут запустит вышеупомянутые сервисы при развертывании.

Следующая команда используется для проверки, подключен ли GPU к контейнеру.

[email protected]:/usr/lib/nvidia-384# nvidia-smiThu Feb 1 23:45:11 2018+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+| NVIDIA-SMI 384.111 Driver Version: 384.111 || — — — — — — — — — — — — — — — -+ — — — — — — — — — — — + — — — — — — — — — — — +| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. ||===============================+======================+======================|| 0 Tesla P100-SXM2… Off | 00000003:01:00.0 Off | 0 || N/A 40C P0 42W / 300W | 299MiB / 16276MiB | 0% Default |+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+| Processes: GPU Memory || GPU PID Type Process name Usage ||=============================================================================|+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+

Я вижу видеокарту Nvidia Tesla P100. Следующая команда показывает установленные экземпляры Jupyter Notebook и связанные токены, которые будут использоваться для аутентификации позже.

[email protected]:/usr/lib/nvidia-384# jupyter notebook list
Currently running servers:
http://0.0.0.0:8889/?token=d0f34d33acc9febe500354a9604462e8af2578f338981ad1 :: /opt/DL/torch
http://0.0.0.0:8888/?token=befd7faf9b806b6918f0618a28341923fb9a1e77d410b669 :: /opt/DL/caffe-ibm
http://0.0.0.0:8890/?token=a9448c725c4ce2af597a61c47dcdb4d1582344d494bd132f :: /opt/DL/tensorflow
[email protected]:/usr/lib/nvidia-384#

Начальная классификация изображений

Что такое Кафе?

Caffe(Сверточная архитектура для быстрого внедрения функций) была разработана в Центре обучения и изучения Беркли. Это платформа с открытым исходным кодом для выполнения таких задач, как классификация изображений. ПоддерживаетCUDA, Convolutional Neural Networks, имеет предварительно обученные модели, и поэтому является хорошим выбором для этой демонстрации.

Мы будем использовать Python для выполнения всех задач. Шаги ниже были сделаны через Блокнот Jupyter. Во-первых, давайте настроим Python,Numpy, а такжеMatplotlib

import numpy as npimport matplotlib.pyplot as plt# display plots in this notebook%matplotlib inline# set display defaultsplt.rcParams[‘figure.figsize’] = (10, 10) # large imagesplt.rcParams[‘image.interpolation’] = ‘nearest’ # don’t interpolate: show square pixelsplt.rcParams[‘image.cmap’] = ‘gray’ # use grayscale output rather than a (potentially misleading) color heatmap# Then, we load Caffe. The caffe module needs to be on the Python path;# we’ll add it here explicitly.import syscaffe_root = ‘../’ # this file should be run from {caffe_root}/examples (otherwise change this line)sys.path.insert(0, caffe_root + ‘python’)import caffe

Что такое Caffenet?

Caffenetэто сверточная нейронная сеть, написанная для взаимодействия сCUDA, с основной целью классификации изображений. Каффенет является вариантомAlexnet, Презентация создателей Alexnet от 2015 годаВот, В приведенном ниже коде мы загружаем предварительно обученную модель.

import osif os.path.isfile(caffe_root + ‘models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel’):print ‘CaffeNet found.’else:print ‘Downloading pre-trained CaffeNet model…’!../scripts/download_model_binary.py ../models/bvlc_reference_caffenet

Вот вывод.

CaffeNet found.
Downloading pre-trained CaffeNet model...
…100%, 232 MB, 42746 KB/s, 5 seconds passed

Затем мы загружаем Caffe в режиме CPU и работаем с предварительной обработкой ввода.

caffe.set_mode_cpu()model_def = caffe_root + ‘models/bvlc_reference_caffenet/deploy.prototxt’model_weights = caffe_root + ‘models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel’net = caffe.Net(model_def, # defines the structure of the modelmodel_weights, # contains the trained weightscaffe.TEST) # use test mode (e.g., don’t perform dropout)

Caffenet 'caffe.io.Transformer' используется. Это трансформатор по умолчанию, используемый во всех примерах. Он создает преобразованное среднее значение для изображения на основе предоставленного ввода. Caffenet настроен для получения входных изображений в формате BGR со значениями в диапазоне от 0 до 255. Выполняется преобразование для загрузки изображений со значениями в диапазоне от 0 до 1 в формате RGB в качестве входных данных, необходимых для Matplotlib.

# load the mean ImageNet image (as distributed with Caffe) for subtractionmu = np.load(caffe_root + ‘python/caffe/imagenet/ilsvrc_2012_mean.npy’)mu = mu.mean(1).mean(1) # average over pixels to obtain the mean (BGR) pixel valuesprint ‘mean-subtracted values:’, zip(‘BGR’, mu)# create transformer for the input called ‘data’transformer = caffe.io.Transformer({‘data’: net.blobs[‘data’].data.shape})transformer.set_transpose(‘data’, (2,0,1)) # move image channels to outermost dimensiontransformer.set_mean(‘data’, mu) # subtract the dataset-mean value in each channeltransformer.set_raw_scale(‘data’, 255) # rescale from [0, 1] to [0, 255]transformer.set_channel_swap(‘data’, (2,1,0)) # swap channels from RGB to BGR

Другими словами, компьютеры теперь могут научиться классифицировать изображение, сначала преобразовав изображение в массив значений RGB. Затем эти значения сканируются, чтобы найти шаблоны значений, которые уже соответствуют другому изображению в предварительно обученной модели. При сравнении генерируются метрики достоверности, которые показывают, насколько точной была классификация.

Вот вывод.

mean-subtracted values: [(‘B’, 104.0069879317889), (‘G’, 116.66876761696767), (‘R’, 122.6789143406786)]

классификация

Здесь мы устанавливаем размер изображения по умолчанию. Это может быть изменено позже в зависимости от вашего ввода.

net.blobs[‘data’].reshape(50, # batch size3, # 3-channel (BGR) images720, 720) # image size is 720x720

Затем мы загружаем изображение орангутана из библиотеки Wiki Commons.

# download the imagemy_image_url = “https://upload.wikimedia.org/wikipedia/commons/b/be/Orang_Utan%2C_Semenggok_Forest_Reserve%2C_Sarawak%2C_Borneo%2C_Malaysia.JPG" # paste your URL here!wget -O image.jpg $my_image_url# transform it and copy it into the netimage = caffe.io.load_image(‘image.jpg’)transformed_image = transformer.preprocess(‘data’, image)plt.imshow(image)

Вот вывод.

--2018-02-02 00:27:52--  https://upload.wikimedia.org/wikipedia/commons/b/be/Orang_Utan%2C_Semenggok_Forest_Reserve%2C_Sarawak%2C_Borneo%2C_Malaysia.JPGResolving upload.wikimedia.org (upload.wikimedia.org)... 198.35.26.112, 2620:0:863:ed1a::2:bConnecting to upload.wikimedia.org (upload.wikimedia.org)|198.35.26.112|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 1443340 (1.4M) [image/jpeg]Saving to: 'image.jpg'image.jpg           100%[===================>]   1.38M  5.25MB/s    in 0.3s2018-02-02 00:27:54 (5.25 MB/s) - 'image.jpg' saved [1443340/1443340]

Теперь давайте классифицируем изображение.

# copy the image data into the memory allocated for the netnet.blobs[‘data’].data[…] = transformed_image# perform classificationoutput = net.forward()​output_prob = output[‘prob’][0] # the output probability vector for the first image in the batch​print ‘predicted class is:’, output_prob.argmax()

Выход был ‘прогнозируемый класс: 365».

Приведенный выше вывод классифицирует изображение в класс 365. Давайте загрузим метки ImageNet и просмотрим вывод.

# load ImageNet labelslabels_file = caffe_root + ‘data/ilsvrc12/synset_words.txt’if not os.path.exists(labels_file):!../data/ilsvrc12/get_ilsvrc_aux.shlabels = np.loadtxt(labels_file, str, delimiter=’\t’)print ‘output label:’, labels[output_prob.argmax()]

Вот вывод. Класс был правильным!

output label: n02480495 orangutan, orang, orangutang, Pongo pygmaeus

Следующий код поможет вам найти другие лучшие классы.

# sort top five predictions from softmax outputtop_inds = output_prob.argsort()[::-1][:5] # reverse sort and take five largest itemsprint ‘probabilities and labels:’zip(output_prob[top_inds], labels[top_inds])

Вот вывод.

probabilities and labels:
[(0.96807814, 'n02480495 orangutan, orang, orangutang, Pongo pygmaeus'),(0.030588957, 'n02492660 howler monkey, howler'),(0.00085891742, 'n02493509 titi, titi monkey'),(0.00015429058, 'n02493793 spider monkey, Ateles geoffroyi'),(7.259626e-05, 'n02488291 langur')]

Анализ производительности GPU

Вот время, необходимое для выполнения классификации в режиме «только процессор».

%timeit net.forward()

Вот вывод.

OUTPUT: 1 loop, best of 3: 3.06 s per loop

Три секунды за цикл - это довольно долго. Давайте перейдем в режим GPU и сделаем то же самое.

caffe.set_device(0) # if we have multiple GPUs, pick the first onecaffe.set_mode_gpu()net.forward() # run once before timing to set up memory%timeit net.forward()

Вот вывод.

OUTPUT: 1 loop, best of 3: 11.4 ms per loop

Это улучшение на 3048,6 миллисекунды! На этом заканчивается первая часть этого блога. Я прошу прощения за грамматические ошибки, если таковые имеются.

В следующей части мы рассмотрим, как обучить вашу собственную модель с использованием цифр NVIDIA и как использовать Torch.

Если вам понравился этот кусок, продолжайте, хлопните его (вы можете хлопать более одного раза)! Вы также можете поделиться им где-нибудь в Интернете, чтобы другие тоже могли это прочитать.

Отказ от ответственности: публикации на этом сайте являются моими собственными и не обязательно отражают позиции, стратегии или мнения IBM.

Автор:Упендра Раджан

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map