Числовые данные (например, температура и давление) могут быть обработаны и интерпретированы любой моделью машинного обучения. Однако это не относится к изображениям. Изображения требуют дополнительного шага преобразования, прежде чем они будут использованы моделью, и именно здесь в игру вступает модель компьютерного зрения. В модели видения используется тип искусственной нейронной сети, называемый CNN, сокращение от Convolutional Neural Network.

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

Чтобы построить мощную обобщенную модель, нам нужно огромное количество времени и данных. К счастью, сообщество ИИ имеет в открытом доступе предварительно обученные CNN с широким диапазоном размеров и точности. Однако компромисс всегда заключается в выборе между большой и более точной моделью или меньшей и менее точной моделью. Понимая сложность нашей задачи, мы решили использовать предварительно обученную СНС для создания встраивания изображения.

Если вы помните из нашего предыдущего поста, вся модель должна делать прогнозы в реальном времени на граничном устройстве с ограниченными ресурсами. Это означает, что нам нужна CNN небольшого размера, способная обрабатывать встраивание за минимальное время.
И вопрос в том… Как этого можно добиться, не уменьшая сложность CNN?

Как сжать предварительно обученную модель? 🤏

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

Квантование

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

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

На практике есть два способа сделать это:

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

Если вы хотите узнать больше о сжатии модели, ознакомьтесь с нашей статьей и учебником (tensorflow).

Дистилляция

Дистилляция знаний — это процесс переноса знаний из большой хорошо обученной модели в меньшую. Большая модель обычно носит название «модель учителя», а меньшая модель называется «модель ученика».

Мы передаем знания от учителя ученику путем минимизации специальной функции потерь, как показано на следующем рисунке.

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

Обсуждение результатов

В этом разделе мы оцениваем результаты использования двух методов уменьшения размера модели, обсуждавшихся ранее.

Для метода дистилляции знаний мы выбрали DenseNet201 в качестве модели учителя. Эта модель считается очень точной, поскольку она предварительно обучена на тысячах изображений из ImageNet, популярного набора изображений, созданного Google. Для модели ученика мы использовали предварительно обученную модель SqueezeNet, размер которой составляет 5% от модели учителя. Затем мы точно настроили обе модели в Caltech 256, наборе данных с 256 различными классами изображений, в отличие от ImageNet, который содержит 1000 различных классов изображений. Это значительно ускорит и упростит передачу знаний от модели учителя к модели ученика.

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

Недавний опрос показывает аналогичные результаты [1]. На самом деле есть больше вариантов, которые можно попробовать для дистилляции знаний, которые дадут лучшие результаты. Например, некоторые модели учеников учатся у одних моделей учителей лучше, чем у других, не говоря уже о различных алгоритмах дистилляции знаний, о которых вы можете узнать подробнее в [1].

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

Заключение и дальнейшая работа 🚀

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

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