Трансформеры: Панацея для компьютерного зрения?

31/07/23
Технические статьи
Трансформеры: Панацея для компьютерного зрения?

В последние годы задачи автоматического анализа и распознавания изображений становятся все более востребованными и сложными. Используя подходы машинного обучения, исследователи постоянно усложняют методы и алгоритмы для решения этой задачи, по несколько раз в год обновляя предыдущие рекорды и достижения. Однако, насколько новое всегда означает лучшее? Чтобы прояснить этот вопрос, мы обратились к нашему эксперту по моделям машинного обучения в области компьютерного зрения. Он не только описал современные подходы к решению типовых задач анализа изображения, но и провел исследование, чтобы на основе экспериментов с реальными данными определить, всегда ли новейшие методологии однозначно эффективнее и лучше. Речь пойдёт как о старых классических подходах, так и о самой популярной сейчас архитектуре нейронных сетей – трансформерах, которые не так давно произвели настоящую революцию в задачах обработки текстов, звуковых сигналов и изображений.

Введение

Сегодня поиск по слову «трансформер» скорее приведет к результатам, связанным с моделями машинного обучения, которые значительно улучшили производительность обработки естественного языка (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
[%]
2508463886199
5008774906898
10009485968198
200095939686100
Таблица 1. Точность моделей, обученных на наборах данных различного размера
Platform and PhaseHOG+PCA+SVM
[sec]
EFN
Untrained
[sec]
EFN
Pre-trained
[sec]
SWIN
Untrained
[sec]
SWIN
Pre-trained
[sec]
CPUTrain143931141043295
Inference1312124339
GPUTrain121213811439
Inference1111111111
Таблица 2. Время в секундах для обучения и предсказания моделей на центральном процессоре (CPU) и графическом процессоре (GPU)
Model SizeHOG+PCA+SVM
[mb]
EFN
[mb]
SWIN
[mb]
1017112
Таблица 3. Размеры моделей

Как и ожидалось, трансформеры демонстрируют наилучшую точность по сравнению с другими моделями. Но давайте посмотрим на результаты в целом! Привожу список наблюдений, которые мне показались наиболее интересными:

  1. Предварительно обученный трансформер имеет наивысшую точность, но при этом у этой модели самый большой размер и наихудшая производительность на центральном процессоре (CPU). Кроме того, предобученный трансформер имеет фиксированное разрешение входного изображения, что может стать ограничением для ряда сценариев.
  2. Необученные CNN и трансформер неизменно показывают худшие результаты по точности, чем HOG+PCA+SVM. Делаем вывод, что при невозможности применения предобученной модели и наличии лишь небольшой набора данных для обучения может быть не лишним протестировать подход с извлекателем признаков.
  3. Необученная модель CNN показывает более высокую точность по сравнению с необученным трансформером. Это может означать, что трансформеру требуется больше всего данных при обучении модели с нуля.
  4. Метод HOG+PCA+SVM демонстрирует сопоставимую точность с предобученной CNN на наибольшем наборе данных из 2000 образцов.
  5. Метод HOG+PCA+SVM имеет наименьший размер модели и минимальное время обучения как на центральном процессоре (CPU), так и на графическом процессоре (GPU), что делает его актуальным вариантом для рассмотрения в сценариях с ограниченными вычислительными ресурсами, недостаточными для работы с более новыми моделями.

Заключение

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

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

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

Свяжитесь с нами напрямую

Офисы

Москва

117587, Варшавское ш., д. 125, стр. 16А

Ростов-на-Дону

344002, пр. Буденновский, д. 9, офис 305

Нижний Новгород

603104, ул. Нартова, д. 6, корп. 6, офис 829