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

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

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

Что такое подсчет толпы?

Подсчет толпы - это метод оценки количества людей на изображении или в видеопотоке. Визуальный подсчет или подсчет - это открытая проблема, т. Е. Количество людей, которые могут присутствовать при оценке, может варьироваться от [0, + бесконечность). Например, рассмотрите это изображение ниже и попытайтесь предсказать, сколько людей на нем (хотя я знаю, что все, что вы будете делать, - это делать безумные предположения xD).

На этой картинке очень высокая плотность людей в этом регионе, поэтому для нашего мозга очень сложно точно предсказать количество людей. Если мы начнем считать, скажем, из левого верхнего угла, постепенно переходя в правую сторону, это будет трудная задача, при которой большую часть времени мы будем испортить ее даже в середине пути. Но машина может это сделать. Просто скармливайте ему логику, и он будет извлекать уроки из событий (в основном это то, чем является Machine Leaning) и даст нам почти точный подсчет.

Подсчет толпы - методы и методы

С момента открытия постановки проблемы для ее решения использовалось несколько методов. Используя базовые алгоритмы машинного обучения и компьютерного зрения, такие как обнаружение объектов, регрессия и подходы на основе плотности, компьютерные ученые разработали решение для прогнозирования плотности скопления людей. Но с ними пришлось столкнуться с некоторыми проблемами, такими как вариации в масштабе, неоднородная плотность и т. Д. Позже, с появлением сверточных нейронных сетей (CNN), эти проблемы были преодолены, и на них было обращено больше внимания.

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

1. Методы обнаружения

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

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

2. Методы, основанные на регрессии

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

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

3. Методы, основанные на оценке плотности

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

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

4. Методы на основе CNN

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

  • Базовые CNN - эти модели включают начальные знания глубокого обучения, состоящего из базовых сверточных слоев, ядер и слоев пула.

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

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

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

Архитектура CSRNet:

CSRNet использует технику VGG-16 на переднем конце, так как он имеет более высокую скорость обучения передачи. Размер вывода, который получается из VGG, составляет 1 / pth размера исходного размера ввода. Расширенные сверточные слои также используются в бэкенде CSRNet.

Теперь, очевидно, можно спросить: «Что именно представляют собой эти расширенные сверточные слои?». Чтобы объяснить это, посмотрите на изображение выше.

Расширенные свертки используются для увеличения размера ядра без увеличения количества параметров. Если скорость расширения равна 1, мы берем пространство ядра и сворачиваем его полностью. В то время как, если скорость расширения изменяется на 2, ядро ​​расширяется. пока происходит свертка, как показано на рисунке выше.

Построение нашей модели подсчета толпы…

Итак, теперь нас ждет самое интересное, а именно. приступить к созданию модели с нуля. Давайте приступим, без лишних слов!

Мы собираемся реализовать CSRNet на наборе данных ShanghaiTech, популярном среди материалов, связанных с толпой. Он содержит 1198 анонированных изображений людей в толпе. Вы можете загрузить набор данных ShanghaiTech из вот .

Кроме того, убедитесь, что в ваших системах установлены CUDA и PyTorch, поскольку они являются предварительными условиями для работы с моделью.

git clone https://github.com/leeyeehoo/CSRNet-pytorch.git

Используйте этот приведенный выше код блока, чтобы клонировать репозиторий CSRNet-pytorch и переместить набор данных в репозиторий, который вы клонировали выше, изменив корневой путь и затем разархивировав его.

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

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

plt.imshow(Image.open(img_paths[0]))

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

gt_file=h5py.File(img_paths[0].replace('.jpg','.h5').replace('image','ground-truth'),'r')
groundtruth = np.asarray(gt_file['density'])
plt.imshow(groundtruth,cmap=CM.jet)

Чтобы подсчитать количество людей на образце изображения, напишите этот код:

np.sum(groundtruth)

Мы получим следующий результат: 270.32568.

Точно так же мы можем сгенерировать значения для part_B.

Мы закончили получение наших истинных значений с изображениями. Теперь давайте обучим модель !!

cd CSRNet-pytorch
python train.py part_A_train.json part_A_val.json 

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

Наконец, пришло время проверить производительность нашей модели на невидимых данных (тестирование модели).

Чтобы проверить MAE (средняя абсолютная ошибка), то есть метрика оценки нашей модели, напишите этот фрагмент кода ниже. Мы достигли MAE около 75, что довольно хорошо и доказывает, что CSRNet хорошо работает для подсчета толпы.

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

Как мы видим, наш прогноз довольно близок к исходному наблюдаемому значению, которое показывает, что модель работает хорошо. Наконец-то модель успешно реализована !!

Конец заметок

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

Я надеюсь, что вы, ребята, поняли реализацию модели на основе CSRNet и заинтересованы в работе в области глубокого обучения и машинного обучения ...