Русский
Русский
English
Статистика
Реклама

Обнаружение объектов

Из песочницы Breakout-YOLO знакомимся с шустрой object-detection моделью, играя в классический Арканоид

21.06.2020 14:07:34 | Автор: admin


Всем привет! Весенний семестр для некоторых студентов 3-го курса ФУПМ МФТИ ознаменовался сдачей проектов по курсу Методы оптимизации. Каждый должен был выделить интересную для себя тему (или придумать свою) и воплотить её в жизнь в виде кода, научной статьи, численного эксперимента или даже бота в Telegram.


Жёстких ограничений на выбор темы не было, поэтому можно было дать разгуляться фантазии. You Only Live Once! воскликнул я, и решил использовать эту возможность, чтобы привнести немного огня в бессмертную классику.,


Выбор проекта




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


И тут я вспомнил, что год назад вместе с одногруппниками писал браузерный Арканоид на JavaScript. Почему бы не добавить в эту бородатую игрушку немного рок-н-ролла, а точнее модного нынче computer vision-а? Эта область ML представлялась мне довольно интересной и проект на эту тему стал бы прекрасной мотивацией для изучения.


Так и появилась игра Breakout с управлением жестами через веб-камеру, или выражаясь лаконичнее Breakout-YOLO, но обо всем по порядку.


Постановка задачи




Основной геймплей Арканоида заключается в отбивании шарика двигающейся платформой, управляемой мышью/тачпадом или клавиатурой:



Мне же хотелось перенести функцию управления на жесты пользователя. Управление платформой я утвердил следующее: её положение определяется положением некоторого жеста на видео с веб-камеры.


То есть естественным образом возникла задача real-time object-detection на вход алгоритму поступает кадр из видео, на выходе хотим иметь изображение с объектами, обведёнными в рамку (bounding box) прямо как на картинке ниже:



И все это нужно делать быстро, выдавая хотя бы 20-30 FPS, ведь никому не интересно играть в слайд-шоу. Не сомневаюсь, что причастные к CV люди по названию статьи догадались какую модель я выбрал, остальных же охотно приглашаю под следующий заголовок.


Tiny-YOLOv3




You Only Look Once


YOLO это популярная архитектура CNN для решения задачи object-detection:



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


За подробным описанием архитектуры отсылаю интересующегося читателя к оригинальной статье и её обзору от Deep Systems.


Better, Faster, Stronger


Одной из последних* версий YOLO является YOLOv3. От первоначальной модели эту отличает несколько новых фич: авторы отказались от fully-connected слоя в конце, таким образом остались только свёрточные слои. Для улучшения распознавания объектов разных размеров было добавлено 2 дополнительных выходных слоя, что напоминает концепцию feature pyramid.


Были задействованы anchor box наборы ограничительных рамок, а точнее их параметров, относительно которых сеть делает предсказания bounding box-ов. Для повышения точности предсказаний их нужно перевычислять отдельно для каждого датасета. Обычно это делают с помощью метода k-средних, кластеризуя множество bounding box-ов из трейна.


Для того, чтобы регуляризовать сеть, к каждому свёрточному слою был прикручен batch normalization. Также был применён multi-scale training случайное изменение разрешения входящего изображения при обучении.


Детальное описание всех изменений можно найти в статьях про YOLOv2 и YOLOv3 и обзоре.


Я же взял Tiny-YOLOv3 уменьшенную версию этой модели без последнего слоя:



В ней используется слой пулинга вместо свёрточного слоя с страйдом 2. Всё это делает её быстрее и компактнее (~ 35 Мб), а значит более предпочтительнее для моей задачи.


* на момент выбора модели. С тех пор успела выйти YOLOv4 и нечто, называющее себя YOLOv5.


Работа с данными




Перейдём к самой рабоче-крестьянской части проекта.


Выбор жестов и датасета


Для управления игрой были выбраны следующие 4 жеста:



Вопрос: на чем обучать модель?


Первое, что пришло в голову взять датасет какого-нибудь жестового языка, например американского: ASL Alphabet, Sign Language MNIST и обучится на нем.
Но меня отпугнуло следующее:


  • В отсмотренных мною датасетах все фотографии были сделаны на однородном фоне
  • Не все выбранные мною жесты были представлены в датасетах
  • Я не нашел именно object detection датасета с bounding box-ами, так что в любом случае пришлось бы доразмечать данные

Модели же предстояло работать на разных ноутбуках с разными веб-камерами в условиях если не агрессивного фона и плохого освещения, то как минимум силуэта человека на заднем плане. По этой причине (а также из-за своей неосведомлённости в deep learning) я не мог обоснованно сказать, как YOLO обученная на этих данных поведет себя в бою. К тому же сроки предзащиты проекта поджимали права на ошибку не было.


Поэтому я посчитал правильным действовать наверняка и решил...



собрать и разметить свой датасет.


Не имей сто рублей, а имей сто друзей


В развивающемся репозитории с различными YOLO моделями мудрецы гласят, что для сколько-нибудь успешного обучения необходимо иметь в трейне не менее 2000 размеченных изображений для каждого класса. Я решил не мелочиться и поставил планку в 3000 изображений для каждого класса, обеспечивая себе пути для отступления и солидную тестовую выборку в случае выполнения поставленной цели.


Как для достижения большего разнообразия в датасете, так и для облегчения собственных страданий пришлось прибегнуть к бесплатному краудсорсингу помощи друзей. Я попросил каждого из этих восьми несчастных записать на веб-камеру 2-ух минутное видео с 4 жестами по 15 секунд на жест каждой рукой. Сам я сделал 4 таких видео в разной одежде и на разных фонах.


Далее в дело вступал удобнейший GUI для разметки от AlexeyAB. С помощью него я нарезал видео на кадры и, набравшись терпения, сел размечать. Директорию с изображениями я предварительно синхронизировал с гугл-доком при помощи Insync, чтобы не терять время на перенос датасета в облако.


К концу 8-го часа разметки у меня имелось около 8000 изображений с аннотациями в .txt файлах, полное нежелание продолжать процесс и, наверное, парочка новых сидячих болезней. Поэтому, удовлетворившись проделанной работой, я пересчитал anchor box-ы, разделил данные на тест и трейн в жадном соотношении 1:9 и перешел к следующему этапу.


Обучение




Снаряжаемся видеокарточками


Времени до первого показа проекта оставалось всё меньше и меньше, поэтому я пошёл куда глаза глядят по пути наименьшего сопротивления и решил обучать модель в Darknet написанном на C и CUDA open-source фреймворке для создания и обучения нейронных сетей.


Вычислительных мощностей мне объективно не хватало из графических процессоров с поддержкой CUDA под рукой имелась только GeForce GT 740M (Compute Capability = 3.0), которой требовалось 10-12 часов для обучения Tiny-YOLOv3. Поэтому я стал счастливым обладателем подписки на Colab Pro с Tesla P100-PCIE-16GB под капотом, сократившей это время до 3 часов. Стоит отметить, что Colab уже давно и так бесплатно предоставляет всем желающим мощную Tesla T4, правда с ограничениями по времени использования. О них я узнал по всплывшей на экране надписи You cannot currently connect to a GPU due to usage limits in Colab, заигравшись с обучением YOLO на всяких кошечках-собачках, интереса ради.


Чтобы нащупать trade-off между точностью распознавания и быстродействием, я взял 4 модели: Tiny-YOLOv3 с размерами входного изображения 192x192, 256x256, 416x416 и XNOR Tiny-YOLOv3, в которой свёртки аппроксимируются двоичными операциями, что должно ускорять работу сети. Указанные Ёлки обучались в течение 8, 10, 12 и 16 тысяч итераций соответственно.


Метриками качества обученных моделей послужили mean Average Precision с IoU=0.5(далее обозначается как mAP@0,5) и FPS.


Результаты обучения



На графиках выше представлены зависимости значений лосс-функции на трейне и mAP@0.5 на тесте от номера итерации обучения.


Как видите, XNOR модели нездоровилось. Несмотря на финальный mAP@0.5 88%, при хорошем освещении она еле-еле распознавала пару жестов с минимальным confidence. FPS 15 также намекал, что что-то пошло не так. Это не могло не расстраивать, так как я возлагал на XNOR большие надежды. На момент написания этой статьи мне всё ещё не ясно, в чём была проблема, возможно я что-то напутал в .cfg файле.



Остальные же модели обучились приемлемо. Полученные значения FPS справедливы для следующей


конфигурации

ASUS Vivobook S15, i7 1.8GHz, GeForce MX250


В погоне за быстродействием для использования в игре я выбрал 192х192 модель.


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


Дело в том, что в собранном датасете жесты на фотографиях расположены примерно на одном расстоянии от камеры, поэтому модели переобучились на это расстояние. Это видно по тому, как 192х192 модель работает при сильном приближении/отдалении от веб-камеры она не умеет предсказывать очень большие/маленькие bounding box-ы, так как не видела таковых в датасете. Однако такое переобучение соответствует поставленной задаче распознаванию жестов на установленном расстоянии, удобном пользователю.


Таким образом, важно понимать, что mAP@0.5 здесь тесно связан с конкретной задачей, и на самом деле при уменьшении размера входного изображения модель теряет в точности распознавания очень близких/далеких к камере жестов, что, однако, практически не влияет на точность на тесте.


Let's play!




Немного про архитектуру


Для распознавания жестов в браузере я использовал библиотеку TensorFlow.js. Обученные веса сначала были сконвертированы в Keras, а затем преобразованы в TFJS Graph model.


Так выглядит демо-версия (загрузка может занять некоторое время):



Сама игра написана на Javascript, за основу был взят этот туториал. Её архитектура предельно проста и заключается лишь в перерисовке кадров с помощью setInterval. На некоторых девайсах наблюдался довольно низкий FPS, поэтому я установил модель распознавать жесты каждую 10-ую перерисовку.


Несмотря на это, всё равно могут быть заметны фризы в момент распознавания. Чтобы их избежать я планирую распараллелить распознавание и перерисовку с помощью Web Worker.


А вот теперь поиграем


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


Управление игрой:


  • Нажатие на кнопку Play/пауза в игре жест finger up
  • Перемещение курсора в меню/снятие с паузы жест circle
  • Перемещение платформы жест fist
  • Выстрел шариком с липкой платформы жест pistol

Поиграть можно здесь. Я рекомендую использовать FIrefox, но Chrome/Chromium также поддерживаются.


Так выглядит геймплей:



Вместо заключения




Внимательный читатель спросит: А причем тут собственно методы оптимизации? Да ни при чем! Но такая свобода выбора темы проекта дала стимул плотно начать разбираться в интересном разделе машинного обучения, и это здорово, на мой взгляд.


Sapere aude, хабровчане!


Полезные ссылки





P. S.


Всё это, как видится, лишь история о моём знакомстве с моделью YOLO и о её использовании. Если Вы знаете как надо было сделать, то приглашаю вместе с конструктивной критикой в комментарии, буду рад дельным рекомендациям.

Подробнее..

Scaled YOLO v4 самая лучшая нейронная сеть для обнаружения объектов на датасете MS COCO

07.12.2020 20:14:08 | Автор: admin

Scaled YOLO v4 является самой точной нейронной сетью (55.8% AP) на датасете Microsoft COCO среди всех опубликованных нейронных сетей на данный момент. А также является лучшей с точки зрения соотношения скорости к точности во всем диапазоне точности и скорости от 15 FPS до 1774 FPS. На данный момент это Top1 нейронная сеть для обнаружения объектов.

Scaled YOLO v4 обгоняет по точности нейронные сети:

  • Google EfficientDet D7x / DetectoRS or SpineNet-190 (self-trained on extra-data)
  • Amazon Cascade-RCNN ResNest200
  • Microsoft RepPoints v2
  • Facebook RetinaNet SpineNet-190




Мы показываем, что подходы YOLO и Cross-Stage-Partial (CSP) Network являются лучшими с точки зрения, как абсолютной точности, так и соотношения точности к скорости.

График Точности (вертикальная ось) и Задержки (горизонтальная ось) на GPU Tesla V100 (Volta) при batch=1 без использования TensorRT:



Даже при меньшем разрешении сети Scaled-YOLOv4-P6 (1280x1280) 30 FPS чуть точнее и в 3.7х раза быстрее, чем EfficientDetD7 (1536x1536) 8.2 FPS. Т.е. YOLOv4 эффективнее использует разрешение сети.

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

Scaled YOLOv4 точнее и быстрее, чем нейронные сети:
  • Google EfficientDet D0-D7x
  • Google SpineNet S49s S143
  • Baidu Paddle-Paddle PP YOLO
  • И многие другие


Scaled YOLO v4 это серия нейронных сетей, созданная из улучшенной и отмасштабированной сети YOLOv4. Наша нейронная сеть была обучена с нуля без использования предобученных весов (Imagenet или любых других).

Рейтинг точности опубликованных нейронных сетей: paperswithcode.com/sota/object-detection-on-coco


Скорость нейронной сети YOLOv4-tiny достигает 1774 FPS на игровой видеокарте GPU RTX 2080Ti при использовании TensorRT+tkDNN (batch=4, FP16): github.com/ceccocats/tkDNN

YOLOv4-tiny может исполняться в real-time со скоростью 39 FPS / 25ms Latency на JetsonNano (416x416, fp16, batch=1) tkDNN/TensorRT:


Scaled YOLOv4 намного эффективнее использует ресурсы параллельных вычислителей, таких как GPU и NPU. Например, GPU V100 (Volta) имеет производительность: 14 TFLops 112 TFLops-TC images.nvidia.com/content/technologies/volta/pdf/tesla-volta-v100-datasheet-letter-fnl-web.pdf

Если мы будем тестировать обе модели на GPU V100 с batch=1, с параметрами --hparams=mixed_precision=true и без --tensorrt=FP32, то:

  • YOLOv4-CSP (640x640) 47.5% AP 70 FPS 120 BFlops (60 FMA)
    Исходя из BFlops, должно быть 933 FPS = (112 000 / 120), но в действительности мы получаем 70 FPS, т.е. используется 7.5% GPU = (70 / 933)
  • EfficientDetD3 (896x896) 47.5% AP 36 FPS 50 BFlops (25 FMA)
    Исходя из BFlops, должно быть 2240 FPS = (112 000 / 50), но в действительности мы получаем 36 FPS, т.е. используется 1.6% GPU = (36 / 2240)


Т.е. эффективность вычислительных операций на устройствах с массивными параллельными вычислениями типа GPU, используемых в YOLOv4-CSP (7.5 / 1.6) = в 4.7x раза лучше, чем эффективность операций, используемых в EfficientDetD3.

Обычно нейронные сети запускаются на CPU только в исследовательских задачах для более легкой отладки, а характеристика BFlops на данный момент имеет только академический интерес. В реальных задачах важны реальные скорость и точность, а не характеристики на бумаге. Реальная скорость YOLOv4-P6 в 3.7х раза выше, чем EfficientDetD7 на GPU V100. Поэтому почти всегда используются устройства с массовым параллелизмом GPU / NPU / TPU/ DSP с гораздо более оптимальными: скоростью, ценой и тепловыделением:

  • Embedded GPU (Jetson Nano/Nx)
  • Mobile-GPU/NPU/DSP (Bionic-NPU/Snapdragon-DSP/Mediatek-APU/Kirin-NPU/Exynos-GPU/...)
  • TPU-Edge (Google Coral/Intel Myriad/Mobileye EyeQ5/Tesla-motors TPU 144 TOPS-8bit)
  • Cloud GPU (nVidia A100/V100/TitanV)
  • Cloud NPU (Google-TPU, Huawei Ascend, Intel Habana, Qualcomm AI 100, ...)


Также при использовании нейронных сетей On Web обычно используется GPU через библиотеки WebGL, WebAssembly, WebGPU, for this case the size of the model can matter: github.com/tensorflow/tfjs#about-this-repo

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

  • Текущий лучший размер Литографии процессоров (Semiconductor device fabrication) равен 5 нанометров.
  • Размер кристаллической решетки кремния равен 0.5 нанометров.
  • Атомный радиус кремния равен 0.1 нанометра.

Решение это вычислители с массивным параллелизмом: на одном кристалле или на нескольких кристаллах, соединенных интерпозером. Поэтому крайне важно создавать нейронные сети, которые эффективно используют вычислители с массивным параллелизмом, такие как GPU и NPU.

Улучшения в Scaled YOLOv4 по сравнению с YOLOv4:
  • В Scaled YOLOv4 применяли оптимальные способы масштабирования сети для получения YOLOv4-CSP -> P5 -> P6 -> P7 сетей
  • Улучшенная архитектура сети: оптимизирован Backbone, а также в Neck (PAN) используются Cross-stage-partial (CSP) connections и Mish-активация
  • Во время обучения используется Exponential Moving Average (EMA) это частный случай SWA: pytorch.org/blog/pytorch-1.6-now-includes-stochastic-weight-averaging
  • Для каждого разрешения сети обучается отдельная нейронная сеть (в YOLOv4 обучали только одну нейронную сеть для всех разрешений)
  • Улучшены нормализаторы в [yolo] слоях
  • Изменены активации для Width и Height, что позволяет быстрее обучать сеть
  • Используется параметр [net] letter_box=1 (сохраняет соотношение сторон входного изображения) для сетей с большим разрешением (для всех кроме yolov4-tiny.cfg)


Архитектура нейронной сети Scaled-YOLOv4 (примеры трех сетей: P5, P6, P7):


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


Простейший пример CSP-соединения (слева обычная сеть, справа CSP-сеть):


Пример CSP-соединения в YOLOv4-CSP / P5 / P6 / P7
(слева обычная сеть, справа CSP-сеть использу):


В YOLOv4-tiny используются 2 CSP-соединения (используя Partial Concatenation)


YOLOv4 применяется в различных областях и задачах:

И во многих других задачах.

Имеются реализации на различных фреймворках:


Как скомпилировать и запустить Обнаружение объектов в облаке бесплатно:
  1. colab: colab.research.google.com/drive/12QusaaRj_lUwCGDvQNfICpa7kA7_a2dE
  2. video: www.youtube.com/watch?v=mKAEGSxwOAY


Как скомпилировать и запустить Обучение в облаке бесплатно:
  1. colab: colab.research.google.com/drive/1_GdoqCJWXsChrOiY8sZMr_zbr_fH-0Fg?usp=sharing
  2. video: youtu.be/mmj3nxGT2YQ


Также подход YOLOv4 может использоваться в других задачах, например, при обнаружении 3D объектов:


Подробнее..

I see hey, stop moving как зрительная система компенсирует неточности саккад

17.06.2020 10:12:43 | Автор: admin


Одним из самых важных органов чувств считаются глаза. Благодаря им мы получаем львиную долю информации об окружающем мире. Когда мы рассматриваем что-то, наш взор не фиксированный, т.е. наши глаза совершают множество мелких движений, именуемых саккадами. Из-за этих движений смещается сетчатка, что в свою очередь снижает четкость изображения (вспомните не самые удачные фильмы в стиле мокьюментари). Чтобы компенсировать этот эффект, зрительная система снижает свою чувствительность к смещению зрительных стимулов во время саккад. Однако до сего времени механизмы, лежащие в основе этого тонкого процесса, оставались не изучены. Посему ученые из университета Тохоку (Япония) решили провести ряд практических опытов и моделирований. Что показали эксперименты, какие секреты таит в себе гашение саккадического смещения, и почему так важны визуальные стимулы до и после саккад? Ответы на эти вопросы мы найдем в докладе ученых. Поехали.

Основа исследования


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

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


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

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

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

Саккады работают во всех направлениях (вверх-вниз, влево-вправо), однако наибольшее число движений происходит в горизонтальной плоскости. А диапазон саккад варьируется от 2 до 15.


Саккады во время поворота глаза.

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

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

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

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

Потому ученые и предполагают, что механизм оценки саккад-индуцированного сдвига в изображении на сетчатке основан на копии эфферентной* моторной команды движения глаза для компенсации сдвигов изображения.
Эфферентные* (двигательные) нейроны передают импульс ЦНС рабочим органам.
После перенастройки местоположения стимула в пространстве механизм может интегрировать изображения сетчатки до и после саккад. Тем не менее, поскольку фактическая амплитуда саккады и амплитуда саккады, предсказанная на основе эфферентной копии, не всегда одинаковы, объект может восприниматься как смещенный во время саккады даже без физического смещения, если визуальная система полностью доверяет копии.

Решение этой проблемы заключается в том, что зрительная система намеренно не фиксирует небольшие смещения объекта во время саккады, даже если их легко обнаружить во время фиксированного рассмотрения. Этот феномен называют саккадным подавлением смещения (SSD от saccadic suppression of displacement).

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

Еще одним важным элементом в исследовании визуальной стабильности является эффект гашения (blanking effect).

Эффект гашения это явление, при котором эффективность обнаружения смещения объекта во время саккады улучшается за счет вставки временного пробела (50300 мс) во время саккады и до того, как объект вновь появляется в новой позиции. Это явление предполагает, что сигналы о смещении объекта действительно доступны после саккады, но не могут использоваться для обнаружения смещения, когда объект саккады присутствует в ее конце, т.е. без пост-саккадического пробела. Смещение, однако, может быть воспринято, когда подавление устраняется путем вставки пост-саккадического пробела.

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

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

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

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

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

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

Подготовка к опытам


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

Участниками наблюдений стали 8 мужчин и 2 женщины в возрасте от 21 до 24 лет с нормальным зрением. Каждый из участников размещал голову на специальной подставке (как в кабинете офтальмолога) на расстоянии 45 см от объекта, демонстрируемого на ЭЛП-экране (Sony GDM-F520, 21, 100 Гц).

Положение глаз измерялось с помощью устройства слежения за лимбом*, состоящего из инфракрасного диода и двух фотодиодов.
Лимб роговицы* место соединения роговицы и склеры, т.е. край роговицы.
Положение глаз и скорость их движения оценивались в реальном времени посредством алгоритма разности трех точек, в котором скорость в момент времени n рассчитывалась исходя из положения глаза в момент времени n-1 и момент времени n+1.

Начало саккады определялось как момент, когда скорость глаза превышала 30 /с. Обнаружение начала саккады всегда задерживалось на 1 кадр (10 мс) из-за метода расчета скорости.


Условия опытов: А опыты без применения временных пробелов; В опыты с временными пробелами (эффект гашения).

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

Расчеты показали, что исчезновение предсаккадического объекта происходит примерно за 32 мс до самой саккады. Лишь в 0.7% опытов объект исчезал после саккады. Также в дальнейшем моделировании не учитывались результаты опытов, где саккада была короче 120 мс или дольше 400 мс. Суммируя все уточнения и исключения, было забраковано лишь 6% результатов опытов.

Также необходимо было провести калибровку перед каждым опытом. В начале калибровки пять одинаково разделенных точек были представлены последовательно вдоль горизонтальной линии, тогда как центральная точка была всегда расположена в центре дисплея. Участникам необходимо было фиксироваться на каждой точке по очереди и нажимать кнопку, когда каждая фиксация была завершена. Если коэффициент регрессии* был меньше 0.9, процедуру калибровки повторяли до тех пор, пока критерий не был удовлетворен.
Коэффициент регрессии* показывает силу и характер влияния независимых переменных (в данном случае 5 точек) на зависимую.
В качестве объектов (точка фиксации взгляда, объект до и после саккады), за которыми должны были наблюдать участники опытов, выступали диски диаметром 0.88. Фоновая яркость была постоянной и составляла 21.4 кд/м2 (кандел на метр квадратный). Перед проведением опытов также был измерен контраст. В данном случае это был контраст Вебера, который является отношением объекта к фону, и поэтому в некоторых случаях контраст превышал 100%. Чтобы учесть разницу в чувствительности между центральным и периферическим зрением, контрасты стимула определялись факторами порогового контраста.

Контраст до-саккадического объекта в 3, 4.3, 6.1, 8.8, 12.6 или 18 раз превышал порог контраста при периферическом зрении, а у пост-саккадического в 3, 4.3, 6.1, 8.8, 12.6 или 18 раз превышал порог контрастности при центральном зрении.

Результаты опытов и моделирования


Первым делом стоит определить, каково же влияние контраста на обнаружение смещения.

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


Изображение 1: влияние контраста до и после саккады на точность обнаружения смещения при обычных условиях (без эффект гашения).

Точность обнаружения смещения объекта через саккаду выражалась как d в каждом контрастном состоянии. Значения d в условиях отсутствия/наличия временных пробелов показаны на изображениях 1 и 2 соответственно.


Изображение 2: влияние контраста до и после саккады на точность обнаружения смещения при использовании временного пробела (эффект гашения).

В состоянии без временного пробела точность обнаружения смещения значительно снизилась с постсаккадическим контрастом (1C), а с досаккадическим контрастом наоборот улучшилась ().

В режиме с временным пробелом точность обнаружения смещения улучшалась при контрасте до саккады (), но никак не менялась от контраста после саккады ().

Факт того, что повышение контраста до саккады улучшает обнаружение смещения объекта, полностью согласуется с классическим представлением о работе глаз человека: чем сильнее первичный стимул, тем лучше будет его дальнейшее обнаружение. А вот снижение точности глаз из-за повышения контраста объекта после саккады подразумевает, что постсаккадический стимул усиливает SSD (саккадное подавление смещения).

Для лучшего понимания связи между SSD и контрастности ученые провели моделирование.

Информация от сетчатки передается в зрительную кору по двум основным функционально отличным путям: магноцеллюлярный путь (M-путь) и парвоцеллюлярный путь (P-путь). Психофизические исследования показали, что M-путь сильно подавлен во время саккад.

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

Если М-путь подавлен во время саккад, то Р-путь должен быть доминантным сразу после саккад. Это значит, что постсаккадическая информация от сетчатки обрабатывается главным образом через P-путь. Снижение точности с увеличением постсаккадического контраста наталкивает на мысль, что активность P-пути подавляет обнаружение смещения.

Чтобы проверить эту теорию, ученые создали модель, основанную на предположении, что P-путь доминирует сразу после саккады.

Если предположить, что существует только два визуальных пути от сетчатки до коры (игнорируя все остальные), одна из самых простых моделей будет состоять в том, что сигналы M-пути подавляются сигналами из P-пути или визуальных областей более высокого уровня, которые получают входной сигнал от P-пути.

Отклик каждого пути на контраст был выражен функцией, которая также используется для моделирования контрастного ответа ЛКТ* клеток М- и Р-типа и для сравнения с психофизическими результатами опытов.
ЛКТ* (латеральное коленчатое тело) структурная часть мозга, расположенная на нижней латеральной стороне подушки таламуса.
Для оценки выходного сигнала обнаружения смещения была использована модель Рейхардта, с помощью которой была рассчитана корреляция между пред- и постсаккадическими сигналами, косвенно связанными с M-путем.


Модель Рейхардта для оценки обнаружения смещения объекта.

Если утрировано, то в данной модели от значения отклика Р-пути зависела сила выходного сигнала всей модели (чем выше отклик Р-пути, тем ниже отклик всей модели).

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



k pre нормализованный контраст объекта до саккады;
kpost нормализованный контраст объекта после саккады;
параметры и контраст полунасыщения и сила зависимости от контраста;
R коэффициент, используемый для преобразования отклика в точность обнаружения смещения;
n0 константная нелинейная функция, моделирующая нейронные контрастные характеристики, которая контролирует уровень шума;
m и p M-путь и P-путь;
S вклад отклика P-пути, который влияет на обнаружение смещения;
SBlank вклад отклика P-пути в случае использование эффекта гашения (т.е. временного пробела).


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


Изображение 3: результаты моделирования.

Согласно таблице 1, функция P-пути имеет более низкий контрастный отклик и меньший контраст полунасыщения, чем функция M-пути, что соответствует разнице в (p в 2.4 раза больше, чем m). Это согласуется с разницей между характеристиками контрастного отклика ЛКТ клеток P- и M-типа, о которых сообщалось в ранее проведенных исследованиях: контраст полунасыщения ЛКТ клеток P-типа приблизительно в 5 раз больше, чем у клеток M-типа.

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

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

Эпилог


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

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

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

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

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

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

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

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

Немного рекламы


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Подробнее..

Как я обучил модель с нуля для обнаружения и сегментации печатей

06.12.2020 18:10:56 | Автор: admin

Привет хабр! Сегодня хочу поделиться своим кейсом. Распознавание печатей позволило бы автоматизировать множество рутиных задач, упростив работу человека. Для своей задачи я использую модель Mask R-CNN.

Mask R-CNN представляет собой двухэтапную структуру: на первом этапе сканируется изображение и генерируютсяпредложения(области, которые могут содержать объект).На втором этапе предложения классифицируются и создаются ограничивающие рамки и маски.

Что такое сегментация?

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

Классификация: на этом изображении есть кошка.

Обнаружение объектов:на этом изображении в этих местах есть две кошки, одна собака и утка.Мы начинаем учитывать перекрывающиеся объекты.

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

Подготовка набора данных для обучения

Так как, нет открытых наборов данных для печатей(по крайне мере я не нашел), я решил создать набор данных с нуля. Я искал изображения с открытых каналов глобальной паутины. Я собрал около 2 тысяч изображений разделил их на обучающий набор и набор для проверки.Искать изображения очень просто.Аннотировать их - сложная часть.

Вы наверное задаётесь вопросом, разве нам не нужен больше изображений, чем 2 тысяч для обучения модели глубокого обучения? Иногда да, но часто нет. Я полагаюсь на трансферное обучение. Это просто означает, что вместо обучения модели с нуля я начинаю с файла весов, который был обучен на наборе данных COCO (в репозитории Mask R-CNN они предоставляют его).Хотя набор данных COCOнесодержит класса печатей, он содержит много других изображений (~ 120 тысяч), поэтому обученные веса уже изучили множество функций, общих для естественных изображений, что действительно помогает.

Для аннотирования изображений я использовал VIA (VGG Image Annotator). Это отдельный HTML-файл, который вы загружаете и открываете в браузере.Аннотирование первых нескольких изображений было очень медленным, но как только я привык к пользовательскому интерфейсу, я начал аннотировать объект около 20 секунд.

Загрузка набора данных

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

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

Совет по коду:простой способ написать код для нового набора данных - скопироватьcoco.pyи изменить его в соответствии с вашими потребностями.Что я и сделал.Я сохранил новый файл как seal.py

Мой SealDataset класс выглядит так:

class SealDataset(utils.Dataset):    def load_balloons(self, dataset_dir, subset):        ...    def load_mask(self, image_id):        ...    def image_reference(self, image_id):        ...

load_balloonsсчитывает файл JSON, извлекают аннотации и итеративно вызывает внутренниеadd_classиadd_imageфункцию для создания набора данных.

load_maskгенерирует растровые маски для каждого объекта изображения путем рисования многоугольников.

image_referenceпросто возвращает строку, которая идентифицирует изображение для целей отладки.Здесь он просто возвращает путь к файлу изображения.

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

Проверить набор данных

Чтобы убедиться, что мой новый код реализован правильно, я добавил этузаписную книжку Jupyter.Он загружает набор данных, визуализирует маски и ограничивающие рамки, а также визуализирует якоря, чтобы убедиться, что размеры моих якорей подходят для размеров моих объектов.Вот пример того, что вы должны ожидать:

Совет по коду:чтобы создать этот блокнот, я скопировалфайл inspect_data.ipynb, который мы написали для набора данных COCO, и изменил один блок кода вверху, чтобы вместо него загрузить набор данных Seal.

Конфигурации

Конфигурации для этого проекта аналогичны базовой конфигурации, используемой для обучения набора данных COCO, поэтому мне просто нужно было переопределить 3 значения.Как и в случае сDatasetклассом, я наследую от базовогоConfigкласса и добавляю свои переопределения:

class BalloonConfig(Config):    # Give the configuration a recognizable name    NAME = "seal"    # Number of classes (including background)    NUM_CLASSES = 1 + 1  # Background + seal    # Number of training steps per epoch    STEPS_PER_EPOCH = 100

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

Обучение

Маска R-CNN - довольно большая модель. Вам нужен современный графический процессор. Я пробовал на Quadro M2000 c 4 ГБ памяти. Обучение заняло около 3-4 часов.

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

python seal.py train --dataset=/путь/к/датасету --model=coco

И возобновить тренировку, если она остановилась:

python seal.py train --dataset=/путь/к/датасету --model=last

Проверка результатов

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

Предобученные весы для обнаружения и сегментации можете скачать здесь. Чтобы использовать, добавьте проект в папку samples в Mask R-CNN. Если есть необходимость датасета, напишите мне в почту: galym55010@gmail.com

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru