В последние годы задачи автоматического анализа и распознавания изображений становятся все более востребованными и сложными. Используя подходы машинного обучения, исследователи постоянно усложняют методы и алгоритмы для решения этой задачи, по несколько раз в год обновляя предыдущие рекорды и достижения. Однако, насколько новое всегда означает лучшее? Чтобы прояснить этот вопрос, мы обратились к нашему эксперту по моделям машинного обучения в области компьютерного зрения. Он не только описал современные подходы к решению типовых задач анализа изображения, но и провел исследование, чтобы на основе экспериментов с реальными данными определить, всегда ли новейшие методологии однозначно эффективнее и лучше. Речь пойдёт как о старых классических подходах, так и о самой популярной сейчас архитектуре нейронных сетей – трансформерах, которые не так давно произвели настоящую революцию в задачах обработки текстов, звуковых сигналов и изображений.
Введение
Сегодня поиск по слову «трансформер» скорее приведет к результатам, связанным с моделями машинного обучения, которые значительно улучшили производительность обработки естественного языка (NLP) и компьютерного зрения (CV), чем к гигантским роботам из популярных мультфильмов детства. Новые руководства и учебники наперебой советуют решать и самую типичную задачу анализа изображений – классификацию – с помощью передовых трансформерных моделей совместно с популярными фреймворками машинного обучения, такими как Keras, FastAI или Lightning. Десять строчек кода на языке Python и близкая к 100% точность результата просто не оставляют сомнений!
Однако, всегда ли этот подход будет оптимальным решением? Пришло ли время окончательно забыть и отказаться от более ранних подходов? В рамках данной статьи я решил провести ряд экспериментов и на практике сравнить эффективность трансформеров с более старыми методами компьютерного зрения в различных категориях, чтобы выяснить, есть ли тут явный победитель. Забегая вперед: в ходе этого исследования, стало ясно, что результаты не так однозначны, как кажется на первый взгляд.
Существующие подходы
Понятие компьютерного зрения c набором его типичных задач по распознаванию изображений впервые появилось в 1950-х годах, когда вышли в свет первые теоретические исследования и прототипы. Конечно, на тот момент возможности вычислительных систем были ограничены, и о запуске алгоритмических моделей размером в один гигабайт на высокопроизводительных графических процессорах нельзя было и помыслить. С тех пор компьютерное зрение проделало долгий путь развития.
В моих экспериментах я начал с более практического подхода, который широко использовался в 1990-х годах, но до сих пор не исчез из поля зрения. Этот подход называется извлечением признаков (feature extraction) и предполагает снижение размерности изображения (количества пиксельных значений) при сохранении наиболее важной информации о визуальном контексте. Для этой цели используются различные алгоритмы, такие как каскады Хаара, SIRF, SURF, HOG и другие.
Далее я рассмотрел сверточные нейронные сети (Convolutional Neural Network, CNN), которые стали популярны в 2010-х годах и полностью изменили представление о компьютерном зрении. CNN способны выявлять паттерны на изображениях независимо от их положения и адаптироваться к разным разрешениям. Особенно важно, что связанные с CNN вычисления можно распараллеливать для запуска на графических процессорах (GPU). CNN-модели нашли свое применение в самых широких практических областях и впервые стали конкурировать, а иногда и превосходить по точности возможности человека.
В заключение я провел эксперименты с наиболее современным подходом, основанным на использовании трансформеров. Трансформеры используют механизм внимания (attention), который изначально использовался для улавливания взаимосвязей между различными частями текста, но впоследствии был применен и для изображений, которые подобно словам в предложении стали делить на небольшие области для обработки. На сегодняшний день производительность моделей на основе трансформеров еще не была превзойдена.
Модели и пайплайны
В первом классическом подходе я использовал алгоритм HOG в качестве метода для извлечения признаков изображений. Поскольку HOG не является классификатором сам по себе, я применил алгоритм Support Vector Machine (SVM) для преобразования извлеченных признаков в итоговые предсказания. Кроме того, я включил алгоритм Principal Component Analysis (PCA) посередине, что помогло сократить количество признаков и повысить скорость вычислений без ущерба для точности. Здесь и далее примеры кода приводятся для языка Python.
from skimage.feature import hog
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
pca = PCA(n_components=75)
svc = SVC()
model = Pipeline(steps=[('pca', pca), ('svm', svc)])
X_train = hog(image)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
Для тестов подхода с использованием сверточных нейронных сетей (CNN) я выбрал модель EfficientNet (EFN), которая до сих пор остается одной из лучших в своем классе.
В подходе на основе трансформеров было непросто выбрать одну оптимальную модель. Однако, учитывая соотношение производительности и точности, я остановился на модели Swin Transformer.
Для обеих моделей – CNN и трансформера — я использовал фреймворк FastAI, как более простой в применении, но в то же время гибкий и производительный на этапе обучения. Инициализация моделей и загрузка предобученных весов осуществлялась с помощью библиотеки Timm.
from fastai.vision.all import *
from timm import create_model
dls = ImageDataLoaders.from_df(df_train, …)
model = create_model(model_name, …)
learn = Learner(dls, model, loss_func=CrossEntropyLossFlat(), …)
learn.fit_one_cycle(epochs_count)
predictions = learner.get_preds(dl=test_dl)
Набор данных
Говоря о данных, стоит отметить, что все алгоритмы компьютерного зрения крайне чувствительны к тому набору примеров, на которых они обучаются. Как искусственно составленные наборы данных из учебников, такие как «коты/собаки», так и слишком специфические, такие как медицинские изображения, могут исказить общие тенденции. Для минимизации этого явления я выбрал более практический и универсальный набор данных – классификация транспортных средств на автомобили и автобусы.
Эксперимент
Большинство реальных продуктовых проектов по компьютерному зрению представляют собой сложные задачи с множеством специфических деталей, условий и ограничений. Чтобы сделать шаг от тривиального учебного сценария в сторону такой реалистичности, я акцентировал внимание на максимально практической постановке задачи. В результате, в мои исходные условия были включены следующие ограничения:
- Недостаточно данных для обучения: для моих экспериментов я использовал наборы данных с ограниченным количеством образцов (250, 500, 1000 и 2000 образцов).
- Нет предобученных моделей: в рамках исследования я провел эксперименты с обоими типами моделями – предобученными и необученными (неприменимо для HOG+PCA+SVM).
- Компактные и быстрые опции: я выбирал варианты моделей в своих классах с наименьшим числом обучаемых параметров и, таким образом, наибольшей производительностью (EfficientNet-b0, SWIN-tiny).
Подобные ограничения, связанные с недостаточностью данных, вычислительных ресурсов и альтернатив возможностей, представляют собой реальные условия, в которых работают инженеры по машинному обучению. Эти ограничения могут быть обусловлены различными причинами, такими как скудный бюджет проекта, жесткие требования к аппаратной платформе будущего продукта или сжатые сроки разработки. Не остается ничего другого, кроме как работать с имеющимися данными, доступными вычислителями, фреймворками и инструментами, и учиться создавать модели, которые по-прежнему будут эффективны, надежны и производительны в заданных сценариях.
Опуская ряд деталей по настройке моделей, необходимо дать важное уточнение, что все гиперпараметры для обучения были определены мною посредством отдельных оптимизационных тестов. Из-за ограничений предобученной модели SWIN, пришлось использовать только образцы изображений размером 224×224 пикселя. Поскольку мой эксперимент не является бенчмарком в чистом виде, а лишь выявляет интересные идеи и инсайты, я округляю значения в результирующих таблицах до целого.
Набор данных, использованный в исследовании, был найден на платформе Kaggle, все эксперименты проводились там же.
Результаты
Для лучшего понимания и интерпретации результатов, я свел полученные результаты в три таблицы: точность (Accuracies), время выполнения (Timings) и размеры моделей (Model Sizes).
Dataset Size [кол-во примеров] | HOG+SVM Untrained [%] | EFN Untrained [%] | EFN Pre-trained [%] | SWIN Untrained [%] | SWIN Pre-trained [%] |
250 | 84 | 63 | 88 | 61 | 99 |
500 | 87 | 74 | 90 | 68 | 98 |
1000 | 94 | 85 | 96 | 81 | 98 |
2000 | 95 | 93 | 96 | 86 | 100 |
Platform and Phase | HOG+PCA+SVM [sec] | EFN Untrained [sec] | EFN Pre-trained [sec] | SWIN Untrained [sec] | SWIN Pre-trained [sec] | |
CPU | Train | 14 | 393 | 114 | 1043 | 295 |
Inference | 13 | 12 | 12 | 43 | 39 | |
GPU | Train | 12 | 121 | 38 | 114 | 39 |
Inference | 11 | 11 | 11 | 11 | 11 |
Model Size | HOG+PCA+SVM [mb] | EFN [mb] | SWIN [mb] |
10 | 17 | 112 |
Как и ожидалось, трансформеры демонстрируют наилучшую точность по сравнению с другими моделями. Но давайте посмотрим на результаты в целом! Привожу список наблюдений, которые мне показались наиболее интересными:
- Предварительно обученный трансформер имеет наивысшую точность, но при этом у этой модели самый большой размер и наихудшая производительность на центральном процессоре (CPU). Кроме того, предобученный трансформер имеет фиксированное разрешение входного изображения, что может стать ограничением для ряда сценариев.
- Необученные CNN и трансформер неизменно показывают худшие результаты по точности, чем HOG+PCA+SVM. Делаем вывод, что при невозможности применения предобученной модели и наличии лишь небольшой набора данных для обучения может быть не лишним протестировать подход с извлекателем признаков.
- Необученная модель CNN показывает более высокую точность по сравнению с необученным трансформером. Это может означать, что трансформеру требуется больше всего данных при обучении модели с нуля.
- Метод HOG+PCA+SVM демонстрирует сопоставимую точность с предобученной CNN на наибольшем наборе данных из 2000 образцов.
- Метод HOG+PCA+SVM имеет наименьший размер модели и минимальное время обучения как на центральном процессоре (CPU), так и на графическом процессоре (GPU), что делает его актуальным вариантом для рассмотрения в сценариях с ограниченными вычислительными ресурсами, недостаточными для работы с более новыми моделями.
Заключение
Результаты экспериментов демонстрируют, что старые подходы в области компьютерного зрения могут превосходить более новые в определенных категориях, таких как обучение с нуля на небольших наборах данных, а также быть хорошей опцией для сред исполнения с ограниченной оперативной и дисковой памятью или вычислительными ресурсами. А с точки зрения знаний и опыта можно ещё раз подтвердить известный инженерных принцип, что глубокое понимание различных подходов и методов всегда помогает создавать более эффективные решения.
Важно отметить, что мои эксперименты были проведены в первую очередь из научного интереса и я сильно ограничил число проверяемых гипотез. Это значит, что полученные результаты могут отличаться при использовании других наборов данных, моделей или фреймворков. В реальных сценариях также могут применяться дополнительные методы улучшения результата, такие как аугментация набора данных для повышения точности или квантизация моделей для уменьшения их размера.
Если у вас возникли вопросы к нашим экспертам или вы бы хотели обсудить свой проект в области компьютерного зрения, не колеблясь связывайтесь с нами через контактную форму на нашем сайте. Мы с удовольствием поможем вам в вашей работе и поиске оптимальных решений для ваших задач. Благодарим вас за интерес к нашим исследованиям, и надеемся на дальнейшее плодотворное сотрудничество!