Детекция кашля на Intel NUC

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

    Детектор кашля для Intel NUC

    На сложном языке бизнес-задача звучит так — детекция людей с симптоматикой заболеваний на этапе прохождения досмотра в аэропортах и вокзалах с соответствующим информированием должностных лиц у рамок о наличии признаков заболевания для прохождения дополнительных проверок. Ожидаемый результат в краткосрочной перспективе – минимизация распространения короновирусной инфекции COVID-19 в рамках локальных и международных железнодорожных, транспортных и авиаперевозок.

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

    Почему Intel NUC?


    Во-первых, уточним, что мы используем Intel NUC8i5BEK с процессором 8-го поколения Intel Core i5 и встроенной графикой Intel Iris Plus 655. Исполнение нейронных сетей в этом случае можно запускать на GPU, освобождая CPU под траекторный анализ. А в случае увеличения числа камер, направленных на устройство, можно дооборудовать комплекс ускорителями, например Intel NCS2.

    Мы используем фреймворк Intel OpenVINO, т.к. он позволяет эффективно исполнять нейронные сети на процессорах Intel и, что важнее, – задействовать интегрированную графику Intel. Применяемая нами модель – это SSD Mobilenet v2, предобученная на датасете COCO. Для обучения модели использовался Tensorflow.

    Intel NUC8i5BEH

    Собственно, почему мы выбрали NUC:

    1. Низкая стоимость процессоров 8-го поколения в комплекте с устройством, в отличие от рыночной стоимости компонентов по-отдельности.
    2. Высокая производительность в инференсе за счет наличия встроенной графики Iris Plus 655. Iris Plus 655 по производительности исполнения нейросетей на 25% выше Intel UHD Graphics 630, используемого в десктопных процессорах (от i5 8400 до i9 9900k).
    3. Наличие возможности увеличения числа обрабатываемых потоков за счет подключения ускорителей, например, Intel NCS2 без изменения топологии сети и фреймворка.
    4. Низкое энергопотребление при максимальной нагрузке: 28 Вт против 65 Вт у десктопного аналога.
    5. Возможность использования устройств в рамках серверной и облачной инфраструктуры.

    Что мы сделали?


    1. Собрали и структурировали исходные данные для обучения (подготовили датасет).
    2. Обучили классификатор наличия внешних признаков заболевания на SSD Mobilenet V2.
    3. Конвертировали модель в Intel OpenVINO.
    4. Собрали каскад нейронных сетей под управлением Intel OpenVINO для последовательного выполнения следующих операций: детекция лиц и определение вероятности наличия признаков инфекции с фиксацией событий, их частотности и длительности.

    Результат классификации – это вероятность наличия признака на фотографии или фрейме из видеопотока. Наглядный пример:


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

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


    Первая детекция – это лица, сетка из публичной и общедоступной модели model zoo, Intel OpenVINO. На OpenCV реализован траекторный анализ для удержания объекта (лица) в кадре. Далее, лица с расширением зоны передаются классификатору симптоматики и возвращается вероятность.

    Мы фиксируем события (кашель) и их длительность. Предполагается, что на пункте пропуска за счет реидентификации лиц по 5 точкам (быстро, но не очень точно) можно будет уведомлять персонал транспортных узлов о необходимости дополнительных проверок (например, измерения температуры тела).

    А что вы думаете о подобной идее?
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 9

      +2
      Только один вопрос «в пространство»: если человек подавился, его сразу запишут в симптоматики?
        0

        Не, так уж слишком жестоко :) Наличие и длительность, повторяемость симптомов. Мы отслеживаем время начала/окончания события и их количество. На основе этого формируем нужно ли давать уведомление.

        0

        Молодцы, если заработает — позволит разгрузить и людей и аппаратуру, уменьшит очереди где они не нужны.
        А каких объемов был датасет? Сами собирали-размечали? Давали примеры с некашляющими людьми? Брали людей разных полов, национальностей и возрастов?
        Ну и самый очевидный вопрос — не проще использовать звук? :)

          0

          Ну на тестовой произвольной выборке уже работает. Есть куда стремиться, но решается пополнением датасета. Сейчас это 4 типа классификации по 2к объектов. Разметку и датасет после запуска проекта планируется выложить в опенсорс. Собирали сами, так как готового нет (то есть часть есть с кагл и от предыдущей выборки для детектора курения, но это без внешних признаков симпотматики для уравновешивания). Возрастная выборка 20-50, возможно будет ветка от возраста после его классификации на первом шаге. Сейчас ее нет (там только детекция зоны лица, ее расширение и трекинг), используется общая выборка.


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

          0
          Пару вопросов. А если человек не прикрывает рукой рот?:) А если человек разговаривает/смеётся?
          Мне кажется что ошибок первого и второго рода будет дофига, что сильно понижает осмысленность такого решения.

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

          И несколько непонятно зачем Intel и OpenVino тащить. В них нет ничего плохого, я их сам нежно люблю для некоторых их задач, но для SSD Mobilenet хватит и RPi, и JetsonNano, это сильно дешевле, по продуктовости может даже лучше (там есть хорошие корпуса, потребления меньше).
            0
            Объекты разбивали на 4 класса, поэтому кашель с рукой и без руки можно отделить от смеха, например. Ошибок 1/2 рода много, но это вопрос выборки и размерности исходного датасета. На курении получилось очень даже неплохо.

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

            Для распознавания видеопотока через каскад сеток типа Mobilenet RPi не хватит совсем, про Jetson — возможно, но мы пользуемся богатым стеком собственных наработок на базе OpenVINO. При 25 кадрах это 40 мс на фрейм, включая декодирование, инференс и логическую обработку. На RPi таких цифр нет.
              0
              Я недавно как раз писал статью про разные эмбедед платформы: на RPi4 скорость работы Mobilnet 300*300 примерно 110ms (если v1, или если под какими-нибудь ускоренными фреймворками то быстрее).
              Понятно, что ssd чуть медленнее, чем бэкбон. Но кадров 5-6 в секунду даст.
              Честно говоря не понимаю зачем вам больше. 5fps для трекинга хватит, само событие кашля тоже не длится быстрее полусекунды.

              Объекты разбивали на 4 класса, поэтому кашель с рукой и без руки можно отделить от смеха, например. Ошибок 1/2 рода много, но это вопрос выборки и размерности исходного датасета.

              Боюсь что нет.
              1. Как человек по отдельному кадру кашля без руки не может понять что происходит — так и система не сможет. Или вы хотите сказать что мобилнет вытаскивает больше человека? Вам тут больше классов особо не поможет.
                Человек такие штуки отличает по динамике. И вы либо будете генерировать ложняки на речь, либо будете пропускать весь кашель без руки (которого большинство).
              2. Где вы достанете датасет реально кашляющих людей?:) Вы же понимаете что покашлять на камеру и реальный кашель — это принципиально по-разному выглядит и звучит? И тут не хватит 100-200 кадров чтобы существующий детектор оттюнинговать.
              3. Ну и да, про ошибки первого второго рода. Вот, предположим, доведёте вы их до уровня что всего на каждом десятом говорящем будет прокать детектор. И всего десять процентов кашляющих пропустит. Скорее всего всё будет сильно хуже, конечно. И что вы с этим сделаете?:) Как вам это поможет решить реальную проблему?


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

              Да и камера вам, поди, не одна нужна. От неё человек сможет отвернуться, зайти за другого человека, разрешения не хватить уже метрах в 7-8.

              — Ну и да, главное — это глобальная оправданность. Кашель есть далеко не у всех. Как я понимаю когда кашель есть, тем более постоянный — это уже всё плохо совсем. Температура куда чаще встречается.
                0
                Я недавно как раз писал статью про разные эмбедед платформы: на RPi4 скорость работы Mobilnet 300*300 примерно 110ms (если v1, или если под какими-нибудь ускоренными фреймворками то быстрее).
                Понятно, что ssd чуть медленнее, чем бэкбон. Но кадров 5-6 в секунду даст.
                Честно говоря не понимаю зачем вам больше. 5fps для трекинга хватит, само событие кашля тоже не длится быстрее полусекунды.
                5-6 FPS полностью загрузит процессор, а нужно еще запускать логику. Сетки работают каскадом, лица -> кашель -> поза (сейчас ее нет, но, возможно она будет) -> логика оценки в динамике. Эти все вычисления достаточно тяжелые, так что нет, 110 мс это ничтожно мало, запаса не дает совсем.
                Как человек по отдельному кадру кашля без руки не может понять что происходит — так и система не сможет. Или вы хотите сказать что мобилнет вытаскивает больше человека? Вам тут больше классов особо не поможет.
                Человек такие штуки отличает по динамике. И вы либо будете генерировать ложняки на речь, либо будете пропускать весь кашель без руки (которого большинство).
                Кашель без руки — самый опасный! Определяется детектором по характерной мимике. По вторичным признакам — отфильтровка.
                Где вы достанете датасет реально кашляющих людей?:) Вы же понимаете что покашлять на камеру и реальный кашель — это принципиально по-разному выглядит и звучит? И тут не хватит 100-200 кадров чтобы существующий детектор оттюнинговать.
                Ради науки люди готовы на многое :) А если серьезно, готового датасета мы, конечно же, не нашли и подготовили первичный по выборке с интернета, а далее, с большой долей ошибок забирали и вручную формировали с камер пилотного проекта (по предварительной договоренности).
                Ну и да, про ошибки первого второго рода. Вот, предположим, доведёте вы их до уровня что всего на каждом десятом говорящем будет прокать детектор. И всего десять процентов кашляющих пропустит. Скорее всего всё будет сильно хуже, конечно. И что вы с этим сделаете?:) Как вам это поможет решить реальную проблему?
                Человека увидели, проверили температуру пирометром, как вариант. Тут любое снижение возможности заражения важно, каждую цепочку заражений прервать стоит дорого. Выкладывали цены во сколько обходится лечение, каждый тяжелый пациент — до 200 т.р./сутки.
                Да и камера вам, поди, не одна нужна. От неё человек сможет отвернуться, зайти за другого человека, разрешения не хватить уже метрах в 7-8.
                Как и все системы ИИ, эта система призвана помочь людям. Перед ней вовсе не стоит задача поймать всех кто кашлянул. Напротив, помочь найти тех, кто находится в толпе людей с симптомами ОРВИ. Это и люди будут делать тоже, и до введения самоизоляции делали.
                — Ну и да, главное — это глобальная оправданность. Кашель есть далеко не у всех. Как я понимаю когда кашель есть, тем более постоянный — это уже всё плохо совсем. Температура куда чаще встречается.
                Судя по тому, что говорят врачи, чем более явно проявляются симптомы заболевания, тем выше вероятность заразить окружающих (возможно, просто большее количество вирионов вокруг человека). Обнаружение людей с симптомами может без преувеличения спасти жизни и снизить нагрузку на систему здравоохранения. Если это не оправданность, то где же она?
            0

            Объекты разбивали на 4 класса, поэтому кашель с рукой и без руки можно отделить от смеха, например. Ошибок 1/2 рода много, но это вопрос выборки и размерности исходного датасета. На курении получилось очень даже неплохо.


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


            Для распознавания видеопотока через каскад сеток типа Mobilenet RPi не хватит совсем, про Jetson — возможно, но мы пользуемся богатым стеком собственных наработок на базе OpenVINO. При 25 кадрах это 40 мс на фрейм, включая декодирование, инференс и логическую обработку. На RPi таких цифр нет.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое