Цель

Были проведены обширные исследования по использованию глубокого обучения для обучения сверточных нейронных сетей (CNN), которые могут предсказывать присутствие объектов, людей и сцен на изображениях [1][2][3].

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

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

Методология

1. Подготовка данных

При выборе набора данных для обучения и тестирования модели учитывались следующие соображения:

  • Где будет применима модель?

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

  • Какова гипотеза о типе изображений, которые будут полезны при обучении модели?

Разумный подход — попытаться определить, кто выглядит как врач, медсестра или пациент с точки зрения человека.

Для врачей: стетоскоп (предупреждение: терапевты, опытные медсестры также носят их, но этот проект пока не будет касаться этой группы)

Для медсестер: женщины (предостережение — медсестры могут быть женщинами или мужчинами. Поскольку большинство медсестер — женщины, этот проект пока сосредоточится на этой группе) и носят топы с короткими рукавами.

Для пациентов: кровать/коляска, обтянутая больничным халатом (мужчины, женщины, всех возрастов).

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

Этапы подготовки:

  1. Поиск в Google по ключевым словам «врач», «медсестры» и «пациенты». Удалите изображения, соответствующие вышеуказанным критериям.
  2. Сгруппируйте фотографии пациентов и медицинских работников в соответствующие категории и сохраните в структуре папок в соответствии с требованиями загрузчика данных PyTorch.
  3. Вручную обрежьте интересующий объект из каждой фотографии в изображение размером 224 X 224.
  4. Если на исходном изображении несколько объектов, обрежьте каждый подходящий объект и сохраните в соответствующую назначенную папку.

Проблемы и обходные пути:

  • Изображения содержат несколько предметов, например. Медсестра и пациент; Первоначальный тест обученной модели показал плохие результаты, когда на изображении несколько объектов -> Выполнена ручная обрезка изображения, так что на любом изображении остается только один объект.
  • Ограниченный набор данных для создания набора для обучения и проверки. › Методы увеличения данных, такие как случайная обрезка, горизонтальное переворачивание и перетасовка изображений во время загрузки данных.

Собран набор данных:

Всего: 564

  • Поезд: 437
  • Проверка: 96
  • Тест: 31

Увеличение данных:

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

2. Загрузите и просмотрите набор данных

3. Создайте модель для трансферного обучения

Архитектура модели:

Наша модель построена поверх Resnet18 (с предварительно обученными весами). Полносвязный линейный слой, который принимает вход 512 и выход 3, создается как последний слой. Мы также заморозим все параметры слоев в сети, кроме последнего слоя.

В качестве функции потерь выбрана перекрестная потеря энтропии. Начальные настройки оптимизатора Stochastic Gradient Decent (SGD) с планировщиком скорости обучения следующие: скорость обучения = 0,001, импульс = 0,9, скорость затухания обучения = 0,1 каждые 7 эпох, цикл обучения = 25 эпох.

Во время трансферного обучения [4] модель получает изображения партиями по 4 из набора для обучения и проверки. Каждая эпоха разделена на фазы «обучения» и «проверки».

На этапе «Обучение» входные данные передаются в модель через прямой проход, и мы получаем выходные данные в виде оценок активации и прогнозируемых меток. Мы рассчитываем перекрестную энтропийную потерю на основе выходных данных по сравнению с метками достоверности. Затем мы вычисляем градиенты относительно потерь при обратном проходе и обновляем параметры последнего слоя.

Для этапа «Проверка» мы повторяем тот же процесс, но без вычисления градиентов и обновления параметров за последний год.

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

4. Обучите модель

Первоначальный запуск для обучения модели занял 21 мин 42 с на процессоре Intel Core i5 с тактовой частотой 2,7 ГГц. Наилучшая оценка точности на проверочном наборе составила 91,75% с потерей 0,2687. Мы получаем соответствующий показатель точности 82,61% на тренировочном наборе с потерей 0,4259.

Судя по графику точности и обучения, оценки обучения и проверки сходятся примерно в 10 эпохах, и, похоже, нет никаких признаков переобучения.

5. Анализ прогнозов

Чтобы лучше понять результаты прогнозирования модели, я применил подход, используемый в fastai [5], для отображения прогнозируемых результатов из набора проверки следующим образом:

Разбивка производительности прогнозирования при проверке, установленной по классам, показывает различную точность для 3 классов:

  • Врач: 90,48% (n=21, 2 неверно)
  • Медсестра: 88,89% (n=36, 4 неверно)
  • Пациент: 97,44% (n=39, 1 неверно)

Из 96 изображений в проверочном наборе модель неверно предсказала 7 изображений.

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

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

6. Понимание того, как модель делает свои прогнозы

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

Короче говоря, ключевая идея состоит в том, чтобы визуализировать последний слой путем построения карты чувствительности вычисленных градиентов. Однако необходимо применять методы увеличения для улучшения визуальной согласованности карты чувствительности. Поэтому я применил метод SmoothGrad [6], который в основном повышает резкость карты чувствительности, пропуская изображение через обученную модель 30 раз, каждый раз добавляя случайный шум и, наконец, усредняя общие накопленные градиенты.

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

  • Врачи

Модель: лицо, воротник, стетоскоп

Гипотеза: стетоскоп

  • Медсестра

Модель: лицо, воротник, короткие рукава, руки

Гипотеза: женщина (лицо), короткие рукава

  • Пациенты

Модель: лицо, подушка

Гипотеза: кровать/инвалидная коляска, связанная больничным халатом.

Интересно отметить, что модель научилась улавливать признаки, не входящие в нашу первоначальную гипотезу, чтобы делать прогнозы:

  • Врачи: лицо, ошейник
  • Медсестры: воротник, руки
  • Пациенты: подушка

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

  • На первом изображении (вид сбоку врача в белом халате) стетоскоп был обнаружен, но лицо и воротник не были четко идентифицированы.
  • На втором изображении (врач в зеленом халате стоит на коленях рядом с инвалидной коляской) стетоскоп не был обнаружен, но лицо, руки и очертания тела были четко видны.

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

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

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

7. Улучшить модель

В этом разделе рассматриваются различные попытки улучшить модель:

  • Настройка гиперпараметров

Настройка скорости обучения -> Высочайшая точность получена 91,67% по сравнению с базовым уровнем 91,75% (нет существенной разницы)

Обучение модели дольше -> Высочайшая точность получена 93,75% по сравнению с базовым уровнем 91,75% (без переобучения - потеря обучения: 0,4200, ошибка обучения: 0,8284, потеря проверки: 0,2200) -> Небольшое улучшение прогнозирования класса медсестер (с 88,89% до 91,67). %)

  • Модель поезда с большим количеством изображений видов сбоку и сзади

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

8. Оцените модель на тестовом наборе

Рекомендации по выбору набора тестов

  • Не те фотографии/человек из набора для обучения или проверки
  • Отобрано вручную, чтобы быть ближе к реальным условиям грунта
  • Окончательные результаты = 100% точность (n=31)

Заключение и будущая работа

Модель достигла 100% точности на тестовом наборе и наивысшей общей точности 93,75% на проверочном наборе. Прогностические характеристики классов для набора проверки следующие:

  • Акцент доктора: 90,48%
  • Медсестра Счет: 91,67%%
  • Аккаунт пациента: 97,44%

Учитывая разумную точность модели, автор предлагает ее использование в следующих потенциальных приложениях (собранных на основе отзывов клиницистов и медсестер):

  • Мониторинг пациента/уход по месту жительства — падения, сон, жизненно важные органы, движение/активность (реабилитация)
  • Присутствие посетителей с пациентами
  • Прием пищи/пития пациентов
  • Гигиена рук

Будущая работа

  • Обучение модели с большим количеством изображений, содержащих профиль врачей и медсестер сбоку и сзади.
  • Использование методов распознавания объектов, таких как YOLO, для автоматизации обрезки изображений.
  • Узнайте, даст ли перенос обучения в другие сети, такие как Resnet152 или Inception V3, V4, лучшие результаты
  • Извлечение весов последнего полностью связанного слоя для точной настройки вручную (большее внимание уделяется выдающимся функциям, таким как стетоскоп для врачей, короткие рукава для медсестер и т. д.)

использованная литература

1.Сверточные нейронные сети CS231n для визуального распознавания.
2. Грег Гриффин, Алекс Холуб и Пьетро Перона. Набор данных категории объектов Caltech-256.
3. Ли Фей-Фей, Кай Ли. ImageNet.
4. PyTorch. Учебное пособие по переносу обучения.
5. Джереми Ховард. Урок 1: Классификация изображений с помощью сверточных нейронных сетей.
6. Даниэль Смилков, Нихил Торат, Бин Ким, Фернанда Вьегас, Мартин Ваттенберг. SmoothGrad: удаление шума путем добавления шума

исходный код: https://github.com/Oracle1983/Ai6-Challenge-2018.git