ИИ приветствовал сосредоточение внимания на колонке «Наггетс» в научно-техническом базовом лагере для более сухого содержания.
[Руководство] Это быстрое руководство по использованию глубокого изучения целевого обнаружения для достижения системы мониторинга. Различные целевые модели обнаружения на модели обнаружения пешеходов сравниваются в руководствах.
Наблюдение — неотъемлемая часть безопасности и патрулирования, и в большинстве случаев задача состоит в том, чтобы в течение длительного времени наблюдать за тем, чего мы не хотим. Тем не менее, низкая вероятность возникновения чрезвычайных ситуаций не умаляет важности рутинной задачи мониторинга, даже критической.
Было бы здорово, если бы у нас были инструменты, которые могли бы «ждать и наблюдать» в чрезвычайных ситуациях. К счастью, с годами технологии совершенствовались, и мы смогли написать сценарии для автоматизации задачи мониторинга. Прежде чем углубляться дальше, нам нужно рассмотреть два вопроса.
Машины уже на уровне людей?
Любой, кто знаком с глубоким обучением, знает, что классификаторы изображений превзошли людей по точности. На рис. 1 показана частота ошибок классификации для людей, традиционного компьютерного зрения (CV) и глубокого обучения в наборе данных ImageNet за последние годы.
БытьБыть
Рисунок 1. Частота ошибок человека, глубокого обучения и CV-классификации в ImageNet
По сравнению с людьми машины могут лучше следить за целями, а использование машин для наблюдения более эффективно.Преимущества можно резюмировать следующим образом:
-
Повторяющиеся задачи могут привести к снижению внимания человека, и при использовании машин для мониторинга такого раздражения нет, и мы можем больше сосредоточиться на устранении чрезвычайных ситуаций по мере их возникновения.
Когда контролируемая территория большая, требуется большое количество людей, а поле зрения фиксированной камеры ограничено. Но эту проблему можно решить с помощью мобильных роботов-наблюдателей, таких как микродроны.
Кроме того, одну и ту же технологию можно использовать в различных приложениях, не ограниченных безопасностью, таких как радионяни или автоматизированная доставка товаров.
Так как же нам это автоматизировать?
Прежде чем мы углубимся в сложную теорию, давайте посмотрим, как обычно работает слежка.Когда мы смотрим живое видео, мы принимаем меры, если замечаем отклонения. Поэтому наша технология также должна обнаруживать ненормальные вещи, внимательно считывая каждый кадр видео, и определять, нужно ли тревожить этот процесс.
Как вы, возможно, уже знаете, суть этого процесса заключается в обнаружении цели.Это отличается от классификации.Нам нужно знать точное местоположение цели, а на одном изображении может быть несколько целей. Чтобы лучше различать, приведем пример простого изображения, как показано на рисунке 2.
Быть
Рисунок 2 Пример схемы классификации, локализации, обнаружения и сегментации
Чтобы найти точное местоположение, наш алгоритм должен проверить каждую часть изображения на наличие определенного класса. С 2014 года продолжающиеся итеративные исследования в области глубокого обучения привели к появлению хорошо спроектированных нейронных сетей, способных обнаруживать объекты в режиме реального времени. На рисунке 3 показаны характеристики обнаружения трех моделей R-CNN, Fast R-CNN и Faster R-CNN за последние два года.
БытьБыть
Рис. 3 R-CNN, быстрый R-CNN и производительность быстрее R-CNN
Вот несколько фреймворков глубокого обучения, которые используют разные методы для выполнения одной и той же задачи.Среди самых популярных Faster-RCNN, YOLO и SSD.. На рис. 4 показаны характеристики обнаружения Faster R-CNN, R-FCN и SSD.
БытьБыть
Рисунок 4. Производительность обнаружения Faster R-CNN, R-FCN и SSD, компромисс между скоростью и точностью, более высокое значение mpA и более низкое время GPU являются лучшими.
Каждая модель опирается на базовый классификатор, который сильно влияет на окончательную точность и размер модели. Кроме того, выбор детектора объектов может серьезно повлиять на сложность вычислений и конечную точность.При выборе алгоритма обнаружения объектов всегда приходится идти на компромисс между скоростью, точностью и размером модели.
Изучив и поняв вышеизложенное, мы научимся использовать обнаружение объектов для создания простой и эффективной системы мониторинга.
Начнем с ограничений, налагаемых характером задачи мониторинга.
Ограничения глубокого обучения в слежке
Прежде чем внедрять автоматизированный мониторинг, нам необходимо учесть следующие факторы:
1. Живое изображение
Для наблюдения на большой территории нам может понадобиться несколько камер. Кроме того, эти камеры должны иметь место (локальное или удаленное) для хранения своих данных. На рис. 5 показана типичная камера наблюдения.
БытьБыть
Рис. 5 Типичная камера наблюдения
Видео высокого качества занимают больше памяти, чем видео низкого качества. Кроме того, входной поток RGB в 3 раза больше, чем входной поток BW. Поскольку мы можем хранить только ограниченное количество входных потоков, мы обычно снижаем качество, чтобы максимизировать объем памяти.
Следовательно, универсальная система наблюдения должна уметь анализировать изображения низкого качества. В то же время наш алгоритм глубокого обучения также должен обучаться на изображениях низкого качества.
2. Вычислительная мощность
Где обрабатывать данные, полученные с камеры, — еще один большой вопрос. Обычно есть два способа решить эту проблему.
Централизованная серверная обработка
Видеопоток с камеры обрабатывается покадрово на удаленном сервере или кластере. Этот подход является мощным и позволяет нам использовать сложные модели с высокой точностью. Но недостаток этого метода в том, что есть задержка. Кроме того, без коммерческого API затраты на настройку и обслуживание сервера могут быть высокими. На рис. 6 показано потребление памяти тремя моделями по мере увеличения времени вывода.
БытьБыть
Рис. 6. Потребление памяти в зависимости от времени вывода (мс). Большинство высокопроизводительных моделей потребляют много памяти
Децентрализованная обработка краев
Сама камера обрабатывается в режиме реального времени путем подключения микроконтроллера. Преимущество заключается в отсутствии задержки передачи, более быстрой обратной связи при обнаружении аномалии и отсутствии ограничений WiFi или Bluetooth (таких как микродроны). Недостатком является то, что микроконтроллеры не такие мощные, как графические процессоры, поэтому можно использовать менее точные модели. Использование встроенного графического процессора позволяет избежать этой проблемы, но это слишком дорого. На рис. 7 показаны характеристики детектора объектов FPS.
БытьБыть
Рисунок 7. Производительность различных детекторов объектов в FPS.
система мониторинга тренировок
В следующем содержании мы попробуем, как использовать обнаружение объектов для распознавания пешеходов. Используя API обнаружения объектов TensorFlow для создания модуля обнаружения объектов, мы также кратко опишем, как настроить API и обучить его выполнению задач мониторинга. Весь процесс можно свести к трем этапам (блок-схема показана на рисунке 8):
подготовка данных
Обучите модель
вывод
БытьБыть
Рис. 8 Рабочий процесс обучения модели обнаружения объектов
▌Фаза 1: Подготовка данных
Шаг 1. Получите набор данных
Видеонаблюдение заключается в получении наиболее точного набора источников данных. Однако в большинстве случаев захотеть получить это видео наблюдения непросто. Поэтому нам нужно обучить наш детектор целей так, чтобы он распознавал обычное изображение с цели.
БытьБыть
Рис. 9. Извлечение аннотированных изображений из набора данных
Как было сказано ранее, наши изображения могут быть плохого качества, поэтому обученную модель необходимо адаптировать для работы с таким качеством изображения. Мы добавляем немного шума к изображениям в наборе данных (как показано на рисунке 9) или пробуем размытие и эрозию, чтобы снизить качество изображений в наборе данных.
В задаче обнаружения объектов мы использовали набор данных TownCentre. Первые 3600 кадров видео используются для обучения, а остальные 900 кадров — для тестирования.
Шаг 2: Аннотация изображения
Маркировка с помощью такого инструмента, как LabelImg, утомительна, но не менее важна. Мы сохраняем аннотированное изображение в виде XML-файла.
Шаг третий: клонируйте репозиторий
Выполните следующие команды, чтобы установить файлы требований, скомпилировать некоторые библиотеки Protobuf и установить переменные пути.
Быть
pip install -r requirements.txt
sudo apt-get install protobuf-compiler
protoc object_detection/protos/*.proto --python_out=.
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
Быть
Шаг 4: Подготовьте необходимые входные данные
Во-первых, нам нужно дать каждой цели метку и представить каждую метку в файле как label_map.pbtxt, как показано ниже.
item {
id: 1
name: ‘target’
}
Быть
Затем создайте текстовый файл, содержащий имена файлов XML и изображений. Например, если в наборе данных есть img1.jpg, img2.jpg и img1.xml, img2.xml, представление файла trainval.txt должно выглядеть следующим образом:
img1
img2
Быть
Разделите набор данных на две папки (изображения и аннотации). Поместите label_map.pbtx и trainval.txt в папку labels, затем создайте в папке labels подпапку с именем xmls и поместите все XML-файлы в эту подпапку. Иерархия каталогов должна выглядеть так:
Быть
-base_directory
|-images
|-annotations
||-xmls
||-label_map.pbtxt
||-trainval.txt
Шаг 5. Создайте запись перехода
API принимает входные данные в формате файла TPRecords. Преобразуйте набор данных в TFRecords, используя файл creat_tf_record.py. Мы должны выполнить следующие команды в базовом каталоге:
python create_tf_record.py \
--data_dir=`pwd` \
--output_dir=`pwd`
Быть
После выполнения этой программы мы можем получить поездов.
▌Этап 2: Обучите модель
Шаг 1: Выбор модели
Как упоминалось ранее, скорость и точность не могут быть скомпрометированы, а создание и обучение детекторов объектов с нуля требует много времени. Таким образом, TensorFlow Object Detection API предоставляет набор предварительно обученных моделей, которые мы можем точно настроить для собственного использования, процесс, называемый трансферным обучением, и он может значительно повысить скорость нашего обучения.
Рис. 10. Набор предварительно обученных моделей в наборе данных MS COCO.
Загрузите модель с рисунка 10 и извлеките содержимое в базовый каталог. Доступны контрольные точки модели, фиксированные графики вывода и файлы pipe.config.
Шаг 2. Определите задание по обучению
Мы должны определить «задание обучения» в файле pipleline.config и поместить этот файл в базовый каталог. Самые важные вещи в этом файле — это несколько последних строк — мы просто ставим выделенные значения на свои места.
Быть
gradient_clipping_by_norm: 10.0
fine_tune_checkpoint: "model.ckpt"
from_detection_checkpoint: true
num_steps: 200000
}
train_input_reader {
label_map_path: "annotations/label_map.pbtxt"
tf_record_input_reader {
input_path: "train.record"
}
}
eval_config {
num_examples: 8000
max_evals: 10
use_moving_averages: false
}
eval_input_reader {
label_map_path: "annotations/label_map.pbtxt"
shuffle: false
num_epochs: 1
num_readers: 1
tf_record_input_reader {
input_path: "val.record"
}
}
Быть
Шаг 3: Начните обучение
Выполните следующую команду, чтобы начать тренировочное задание. Рекомендуется использовать компьютер с достаточно большим графическим процессором, чтобы ускорить процесс обучения.
python object_detection/train.py \
--logtostderr \
--pipeline_config_path=pipeline.config \
--train_dir=train
▌Этап 3: Вывод
Шаг 1. Экспорт обученной модели
Прежде чем модель можно будет использовать, файл обученной контрольной точки необходимо экспортировать в фиксированный граф вывода.Реализовать этот процесс несложно, просто выполните следующий код (замените «ххххх» на контрольную точку)
python object_detection/export_inference_graph.py \
--input_type=image_tensor \
--pipeline_config_path=pipeline.config \
--trained_checkpoint_prefix=train/model.ckpt-xxxxx \
--output_directory=output
Быть
После того, как программа будет выполнена, мы можем получить Frozen_inference_graph.pb и кучу файлов контрольных точек.
Шаг 2: Используйте в видеопотоке
Нам нужно извлечь каждый кадр из видеоисточника, это можно сделать с помощью метода OpenCV VideoCapture, код выглядит так:
cap = cv2.VideoCapture()
flag = True
while(flag):
flag, frame = cap.read()
## -- Object Detection Code --
Быть
Код извлечения данных, использованный на первом этапе, автоматически создает папку «test_images» для изображений нашего тестового набора. Наша модель может работать с тестовым набором, выполнив:
python object_detection/inference.py \
--input_dir={PATH} \
--output_dir={PATH} \
--label_map={PATH} \
--frozen_graph={PATH} \
--num_output_classes=1 \
--n_jobs=1 \
--delay=0
Быть
эксперимент
Как упоминалось ранее, при выборе модели обнаружения объектов нельзя ставить под угрозу скорость и точность. Мы провели несколько экспериментов с этим, измерив FPS и точность количества людей, обнаруженных с помощью трех разных моделей. Кроме того, наши эксперименты проводятся при различных ограничениях ресурсов (ограничения параллелизма графического процессора).
▌настраивать
Для наших экспериментов были выбраны следующие модели, которые можно найти в модуле Zoo API TensorFlow Object Detection.
Faster RCNN with ResNet 50
SSD with MobileNet v1
SSD with InceptionNet v2
Все модели были обучены в Google Colab на 10 000 шагов, а точность подсчета измерялась путем сравнения близости количества людей, обнаруженных моделью, к фактическому количеству людей. Проверьте скорость вывода FPS при следующих ограничениях.
Single GPU
Two GPUs in parallel
Four GPUs in parallel
Eight GPUs in parallel
результат
Приведенный ниже GIF-файл представляет собой фрагмент нашего вывода с использованием FasterRCNN на тестовом наборе.
Быть
Быть
▌Тренировочное время
На рис. 11 показано время, необходимое для обучения каждой модели в 10 тыс. шагов (единица измерения: часы) (исключая время, необходимое для поиска параметров).
Быть
Быть
Рисунок 11. Время, необходимое для обучения каждой модели
▌Скорость (кадров в секунду)
В предыдущих экспериментах мы измеряли производительность FPS 3 моделей при 5 различных ограничениях ресурсов, и результаты измерений показаны на рисунке 12:
БытьБыть
Рис. 12. Производительность FPS при разном количестве графических процессоров
Когда мы используем один графический процессор, SSD работает очень быстро, легко превосходя скорость FasterRCNN. Но когда количество графических процессоров увеличивается, FasterRCNN быстро догоняет твердотельные накопители.
Чтобы доказать наш вывод о том, что скорость системы обработки видео не может быть выше скорости системы ввода изображения, мы предпочтительно считываем изображение. На рисунке 13 показано улучшение FPS с NobileNet + SSD после добавления задержки. Из рисунка 13 видно, что при добавлении задержки FPS быстро увеличивается.
БытьБыть
Рис. 13 Улучшение FPS модели после добавления различных задержек
▌точность счета
Мы определяем точность подсчета как процент лиц, правильно идентифицированных системой обнаружения объектов. Точность каждой из наших моделей показана на рисунке 14. Из рисунка 14 видно, что FasterRCNN является наиболее точной моделью, а MobileNet превосходит InceptionNet.
Быть
Быть
Рис. 14. Точность подсчета каждой модели
Nanonets
Увидев это, я думаю, у всех возникает общее чувство - слишком много шагов! Да, работать с такой моделью было бы утомительно и дорого.
Лучшим решением для этого является использование службы API, которая уже развернута на сервере. Nanonets предоставляет такой API, и они развертывают API на высококачественном оборудовании с графическими процессорами, поэтому разработчикам не нужно беспокоиться о производительности.
Способ, которым Nanonets может сократить поток работы, заключается в следующем: я преобразовываю существующие XML-комментарии в формат JSON и передаю их API Nanonets. Поэтому, если вы не хотите вручную аннотировать набор данных, вы можете напрямую запросить Nanonets API для аннотирования данных.
На приведенной выше диаграмме представлен сокращенный рабочий процесс.
Время обучения Nanonets заняло около 2 часов, Nanonets — явный победитель по времени обучения, а Nanonets также превзошли FasterRCNN по точности.
FasterRCNN Count Accuracy = 88.77%
Nanonets Count Accuracy = 89.66%
Насколько надежен автоматический мониторинг?
Глубокое обучение — удивительный инструмент. Но в какой степени мы можем доверять нашим системам наблюдения и действовать автоматически? Есть несколько ситуаций, на которые необходимо обратить внимание при автоматизации процесса.
▌ Подозрительный вывод
Мы не знаем, как алгоритмы глубокого обучения приходят к своим выводам. Даже если поток данных идеален, может быть множество ложных успехов. Хотя управляемое обратное распространение может в определенной степени объяснить процесс принятия решений, в этом аспекте необходимы дальнейшие исследования.
▌Антагонистическая атака
Системы глубокого обучения хрупки, а атаки злоумышленников напоминают оптические иллюзии изображений. Вычисленные неочевидные возмущения могут привести к неправильной классификации модели глубокого обучения. Используя тот же принцип, исследователи смогли обойти системы наблюдения, основанные на глубоком обучении, с помощью состязательных очков.
▌ложный положительный результат
Другой вопрос, что делать, если есть ложные срабатывания. Серьезность проблемы зависит от самого приложения. Например, ложные срабатывания систем пограничного патрулирования могут быть более важными, чем системы наблюдения за садами.
▌похожие лица
Внешность не так уникальна, как отпечатки пальцев, и однояйцевые близнецы — яркий тому пример. Это может вызвать большое отвлечение.
▌Набору данных не хватает разнообразия
Качество алгоритмов глубокого обучения во многом зависит от наборов данных, и Google однажды ошибочно классифицировал чернокожего человека как гориллу.
Примечание. Учитывая GDPR и приведенные выше причины, нельзя игнорировать вопросы законности и этичности автоматизации слежки. Это руководство также предназначено и предназначено только для целей совместного обучения. Общедоступный набор данных, используемый в руководстве, поэтому вы несете ответственность за обеспечение его легитимности во время использования.
Оригинальная ссылка
https://medium.com/nanonets/how-to-automate-surveillance-easily-with-deep-learning-4eb4fa0cd68d
Автор | Бхарат Радж
Переводчик | Гу Хун
Редактор | Джейн
Продюсер | Базовый лагерь технологий искусственного интеллекта (rgznai100)