Хорошая или плохая таблетка?

Компьютерное зрение для фармацевтической промышленности

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

VGG-16 — это сверточная нейронная сеть, состоящая из 16 слоев. Это была одна из самых эффективных архитектур в конкурсе ILSVRC 2014. Она заняла второе место в задаче классификации с ошибкой классификации в пятерке лучших 7,32% (уступая только GoogleNet с ошибкой классификации 6,66%). Он также стал победителем задачи локализации с ошибкой локализации 25,32%.

Однако очень медленно тренироваться с нуля. Размер обученных весов ImageNet VGG-16 составляет 528 МБ. Таким образом, он занимает довольно много дискового пространства и пропускной способности, что делает его неэффективным. 138 миллионов параметров приводят к проблеме взрывающихся градиентов. Поэтому мы используем расширение Intel для PyTorch (IPEX), работающее на экземпляре AWS EC2 m6i.4xlarge (процессоры Intel Xeon Platinum 8375C 3-го поколения с тактовой частотой 2,9 ГГц), для переноса предварительно обученной архитектуры классификации VGGNet в набор данных таблетки.

IPEX содержит оптимизации для повышения производительности PyTorch на оборудовании Intel (рис. 1). Он включает API Python, который позволяет пользователям воспользоваться преимуществами этих оптимизаций, просто изменив 2–3 строки кода. Большинство оптимизаций IPEX в конечном итоге будут включены в стандартные выпуски PyTorch.

Процессоры Xeon 3-го поколения изначально поддерживают низкоточный BFloat16 с Intel Advanced Vector Extensions (AVX-512), а будущие поколения будут поддерживать смешанную точность с Intel Advanced Matrix Extensions (AMX). С AMX вы сможете тренироваться с половинной точностью, сохраняя при этом точность сети, достигнутую с одинарной точностью.

IPEX прозрачно поддерживает объединение часто используемых шаблонов операторов, таких как Conv2D+ReLU, Linear+ReLU и т. д., для еще большей оптимизации производительности с помощью TorchScript. Он также оптимизирует операторы и реализует несколько настраиваемых операторов. Некоторые операторы ATen заменяются их оптимизированными аналогами в IPEX через механизм регистрации ATen. Более того, некоторые настраиваемые операторы реализованы для нескольких популярных топологий. Например, ROIAlign и NMS определены в Mask R-CNN. IPEX также оптимизирует этих настроенных операторов для повышения производительности этих топологий.

Исследовательский анализ данных

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

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

Наше определение модели VGG-16

Мы определим пользовательскую модель мультиклассовой классификации с помощью экстрактора признаков VGG-16, предварительно обученного в ImageNet, и пользовательского заголовка классификации. Параметры для первых сверточных блоков замораживаются, чтобы обеспечить перенос обучения. Эта функция возвращает оценки класса в режиме обучения, вероятности класса и нормализованную карту признаков в режиме оценки.

Если вы впервые видите схему обучения модели PyTorch, вы заметите, что необходимо написать некоторый шаблонный код. Для моделей PyTorch обычно требуются следующие компоненты:

  • Данные Подготовка. Расширьте класс набора данных PyTorch для загрузки и настройки данных. Это полезно для извлечения изображений из папок, их соответствующих меток и других необходимых метаданных.
  • Загрузка данных.PyTorch также предоставляет класс DataLoader, который помогает перемещаться по классу набора данных во время обучения и оценки модели. Эта функция является генератором, отвечающим за передачу данных вашей модели во время обучения и логического вывода.
  • Определение модели.Определение модели PyTorch включает определение класса, который расширяет класс модуля. Конструктор (__init__) отвечает за определение слоев модели, а функция forward() определяет, как пересылать входные данные через определенные слои модели.
  • Функция обучения. Вам потребуется определить функцию потерь и алгоритм оптимизации для компонента обучения.

Фрагмент кода ниже представляет определение модели в этом примере (рис. 4). Конструктор определяет модель VGG-16, которую мы расширяем, и пользовательские слои, которые мы добавляем к существующей архитектуре. Метод «_freeze_params» замораживает (предотвращает изменение весов слоев для передачи обучения) неглубокие слои модели VGG-16, устанавливая для require_grad значение False. Метод forward() применяет веса и перемещает данные по модели.

Перенос обучения с расширением Intel для PyTorch

Как обсуждалось ранее, IPEX используется для переноса обучения предварительно обученной модели классификации VGGNet в набор данных пилюли. В строке 11 приведенного ниже фрагмента кода показан вызов метода IPEX optimize, который применяет к нашей модели различные оптимизации (рис. 5). См. официальную документацию, чтобы узнать больше о применении IPEX к моделям.

Давайте оценим архитектуру нашей обученной модели и посмотрим общие параметры обучения (рис. 6). Когда модели оптимизируются с использованием IPEX, префикс «_IPEX» добавляется к соответствующим слоям, это хороший способ убедиться, что IPEX реализован.

from torchsummary import summary
summary(trained_model, (3, 224, 224))

Прогнозы на основе данных теста удержания показывают, что наша модель определяет, что 2/3 изображений являются «плохими» таблетками (рис. 7). Ограничительные рамки и тепловые карты выделяют наиболее заметные дефекты, обнаруженные на таблетке. Как и ожидалось, мы видим проблемы с оттиском «FF», сколами и обесцвечиванием.

Выводы

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