Обновлено: 08.01.2023

Исправление: SageMaker Studio требовалось обновление, и автоглюон отлично работает на ядре basepython2.

Почему AutoML? Зачем этот блог? Мы наблюдаем растущий интерес к демократизации ИИ и МО. Поставщики облачных услуг, такие как AWS, GCP и Azure, продолжают инвестировать в создание сервисов более высокого уровня, которые упрощают машинное обучение для масс с помощью пользовательских интерфейсов или API-интерфейсов с щелчком и перетаскиванием, которые удовлетворяют конкретные потребности, такие как распознавание текста, компьютерное зрение, перевод и транскрипция, и это лишь некоторые из них. Какое место в мире облачных провайдеров и предприятий, таких как H2O, предлагает услуги с открытым исходным кодом? Ответ в том, что он хорошо вписывается, вы по-прежнему можете использовать ресурсы облака, и вместо того, чтобы просто использовать то, что предлагается, вы можете задать вопрос и сравнить то, что предлагают эти компании, с инструментами с открытым исходным кодом и выбрать лучший вариант для вашего использования. случай.

В этом посте я сравню два пакета automl с открытым исходным кодом AutoKeras и AutoGluon для задачи классификации изображений. Я хочу сосредоточиться на простоте использования и наборе данных, который не является mnist или iris. Я хочу попробовать это на своем собственном наборе данных соединений, который я скачал с Kaggle несколько лет назад. Я не буду обучать модели до конца. Я протестировал их на инстансах Amazon SageMaker Notebook с инстансом GPU. Я ищу

  1. Могу ли я просто установить pip, а не много с настройками или отладкой установки?

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

3. Могу ли я просто указать каталог для загрузки данных train, val и test?

4. Может ли библиотека разделить мои данные, если они у меня не разделены (например, одна папка для обучения и проверки)?

5. Могу ли я загрузить изображения и позволить библиотеке изменить их размер для разных моделей?

По сути, насколько легко его использовать?

Набор данных

Источник: https://www.kaggle.com/datasets/karthikaditya147/junctions-images

Обучающие данные: всего 1326 файлов, содержащих изображения из 3 классов, показанных ниже.

Тестовые данные: 333 файла из тех же 3 классов.

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

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

Это требует от вас высокого уровня понимания того, что такое эпоха, или если вы занимаетесь классификацией изображений, регрессией, классификацией текста и т. д.

Настройка ноутбука

Блокноты — это то, как специалисты по данным сначала прототипируют и тестируют некоторый пример кода. Это естественный шаг, и его необходимо учитывать. Если библиотека работает только как докер-контейнер, это хорошо, но не отлично. если он работает только на более старой версии cuda, такой как 10.1, в то время как большинство из них на 11.6, я бы проигнорировал эту библиотеку, если только вы не влюблены в нее по уши.

Для обоих тестов я использовал экземпляр Amazon SageMaker Notebook с ml.g5.8xlarge. Почему? Я не могу позволить себе купить GPU или M2 MacBook. Облако дешевле для быстрого прототипирования, и я работаю в AWS.

AutoKeras (8,7 тыс. звезд на github)

Keras — это высокоуровневая библиотека нейронных сетей, работающая поверх TensorFlow, в разработке которой активно участвует Google. Autokeras, как следует из названия, является AutoML-версией библиотеки Keras.

Я начал с ядра conda-python3 и запустил приведенный ниже код в разных ячейках блокнота, я вставил их так же, как запускал их по отдельности, чтобы вы могли повторить то, что я сделал.

!pip install autokeras
#this is where my dataset is stored on S3. You can get it directly from Kaggle
# here: https://www.kaggle.com/datasets/karthikaditya147/junctions-images

!aws s3 cp s3://ml-materials/junctions-data.tar.gz .
!tar -xzf junctions-data.tar.gz . --no-same-owner
# this code produces the image I Included in the dataset section.
%pylab inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
f, axs = plt.subplots(1,3,figsize=(15,15))
img1 = mpimg.imread('./data/train/Priority/12481.png')
img2 = mpimg.imread('./data/train/Roundabout/53408.png')
img3 = mpimg.imread('./data/train/Signal/27258.png')

axs[0].imshow(img1)
axs[0].set_title("Priority")
axs[1].imshow(img2)
axs[1].set_title("Roundabout")
axs[2].imshow(img3)
axs[2].set_title("Signal")

plt.show()

и проверить форму изображения (640, 640, 3).

img1.shape
#(640, 640, 3)

Пока все хорошо, Autokeras даже не звонили.

import autokeras as ak
import os
# this will be yours if you followed my code, if not adjust the path
data_dir=os.getcwd()+"/data"

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

да и это пропуск.

batch_size = 32
img_height = 640
img_width = 640

train_data = ak.image_dataset_from_directory(
    data_dir+"/train",
    # Use 20% data as testing data.I have my data organized in train val and test, so commented it
    #validation_split=0.2,
    subset="training",
    # Set seed to ensure the same split when loading testing data.I'm not splitting so commented it 
    #seed=123, 
    color_mode="rgb",
    image_size=(img_height, img_width),
    batch_size=batch_size,
)

test_data = ak.image_dataset_from_directory(
    data_dir+"/val",
    #validation_split=0.2, same comment as above
    subset="validation",
    #seed=123, same comment as above
    color_mode="rgb",
    image_size=(img_height, img_width),
    batch_size=batch_size,
)

Далее мы начнем наш процесс классификации и запустим 1 эпоху.

import time
start=time.perf_counter()
clf = ak.ImageClassifier(overwrite=True, max_trials=1)
clf.fit(train_data, epochs=1)
print(clf.evaluate(test_data))
end=time.perf_counter()
s = (end-start) 
print(f"Elapsed {s:.03f} secs.")

Вот здесь-то и начинаются проблемы с ядром conda python3 на ноутбуке Amazon SageMaker. вы увидите такую ​​ошибку?

Слишком много для авто, что ли? В документации Autokeras будет сказано, что данные принимаются в формате (размер, размер, каналы) или (каналы, размер, размер), и эта ошибка ясно показывает, что он сначала ищет каналы, поскольку он сравнивает минимальный размер 32 с 3 и сходит с ума. Как это исправить ? если я ищу Auto что-нибудь, я сдамся и перейду к чему-то, что работает из коробки. Давайте разберемся, а что вы можете сделать в любом случае.

Когда вы устанавливаете Autokeras с помощью pip install, он создает папку с именем .keras в вашем домашнем каталоге, а внутри нее находится файл с именем keras.json.

здесь вы можете видеть, что keras.json сначала показывает image_data_format как каналы, отсюда и ошибка. Измените это значение на channels_last, и вы перезапустите ядро ​​вашего ноутбука.

Как только это будет завершено, вы можете попробовать снова запустить все ячейки из Import autokeras как ak.

Вы либо получите сообщение об ошибке, такое как cuDNN не найден, либо W tensorflow/core/framework/op_kernel.cc:1818] RESOURCE_EXHAUSTED: не удалось выделить память.

В этот момент я переключил свое ядро ​​на conda_tensorflow2_p38, и оно работает. Похоже, ему нужна была установка графического процессора tensorflow, и autokeras, возможно, не установил его с правого колеса. Не уверен, не удосужился заглянуть слишком глубоко, поскольку я симулировал себя пользователем autoML.

Вы можете генерировать прогнозы на основе новых данных с помощью

clf.predict("path to a new image")

Итак, чтобы ответить на один из наших вопросов: Могу ли я просто установить pip, не заморачиваясь настройками или отладкой установки? НЕТ.

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

Время оценить AutoGluon.

AutoGluon (5,2 тысячи звезд на github)

Gluon — это высокоуровневая библиотека нейронных сетей, работающая поверх MXNet, в разработке которой активно участвует Amazon. AutoGluon, как следует из названия, представляет собой AutoML-версию библиотеки Gluon. Мне пришлось отложить свое личное мнение о MXNet в том смысле, что он не так популярен, как Tensorflow, Pytorch, FastAI или что-то еще в этом отношении. Трудно найти в stackoverflow, когда вы упираетесь в стену, в отличие от других, где есть большая база активных пользователей. Тем не менее, AutoGluon может похвастаться рядом функций, которые превосходят очень немногие альтернативы с открытым исходным кодом. Например, AutoKeras не поддерживает обнаружение объектов, Autogluon поддерживает, это для другого поста. Итак, двигаемся дальше, давайте приступим к этому.

Инструкции по установке AutoGluon можно найти здесь https://auto.gluon.ai/stable/install.html.

На экземпляре SageMaker Notebook (требуется учетная запись AWS)

Я использовал обновленную версию студии SageMaker с очень крутым пользовательским интерфейсом по сравнению с Google Colab.

Я использовал экземпляр ml.g4dn.xlarge с образом Base Python 2.0 (python3.8)

Установка в SageMaker Studio

!pip3 install -U pip
!pip3 install -U setuptools wheel

# Install the proper version of PyTorch following https://pytorch.org/get-started/locally/
!pip3 install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchtext==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu113

!pip3 install autogluon

В этот момент запуск импорта дал мне ошибку libgl1

Исправить

Запустите следующее, чтобы исправить это

!apt-get update && apt-get -y install libgl1

Установка в Google Colab

Я запустил следующий код в Google colab для установки

!pip3 install -U pip
!pip3 install -U setuptools wheel

# Install the proper version of PyTorch following https://pytorch.org/get-started/locally/
!pip3 install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchtext==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu113

!pip3 install autogluon

Я загрузил набор данных, как и в случае с SageMaker Notebook, но с некоторыми изменениями в пути к набору данных для работы как в colab, так и в SageMaker Studio.

!wget https://ml-materials.s3.amazonaws.com/junctions-data.tar.gz
!tar -xzf junctions-data.tar.gz . --no-same-owner
import autogluon as ag
from autogluon.vision import ImageDataset
import pandas as pd
from autogluon.vision import ImagePredictor

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

train_dataset, val_dataset, test_dataset = ImageDataset.from_folders('./data')
print(train_dataset)

Можем ли мы начать тренироваться без особых усилий отсюда?

predictor = ImagePredictor()
predictor.fit(train_dataset, hyperparameters={'epochs': 1})  

В выводе видно, что ImagePredictorустаревает в пользу MultiModalPredictor, так что вот как это выглядело бы при проверке в тот же блокнот colab.

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

proba = predictor.predict_proba({'image': [image_path]})
print(proba)

Итак, чтобы ответить на один из наших вопросов: Могу ли я просто установить pip, не заморачиваясь настройками или отладкой установки? НЕТ.

Лаборатория SageMaker Studio (бесплатно)

Установка прошла быстро, хотя я не смог так быстро запустить GPU, как в Google Colab. Я установил время работы ЦП, получил инструкции по установке и успешно установил AutoGluon, однако импорт приводит к ошибке.

В заключение: ни один из них не работал только с установкой pip, но AutoKeras выигрывает благодаря простоте установки по сравнению с усилиями на ноутбуках SageMaker и необходимости безуспешно переключаться на SageMaker Studio Lab и Google Colab с успехом. Оба модуля обещают простую загрузку наборов данных и быстрый запуск классификатора с минимальными усилиями. Помимо использования локальных папок, AutoGluon поддерживает URL-адреса s3, как показано ниже, для загрузки ваших данных, что очень удобно для больших наборов данных.

download_dir = 'https://ml-materials.s3.amazonaws.com/junctions-data.tar.gz'
train_data,_, test_data = ImageDataset.from_folders(download_dir)

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