Pull to refresh

Comments 15

Что интересно, даже если нейросеть обучена детектировать только людей на фото (как на картинке с пешеходами в статье), на самом деле она «понимает» и все остальные объекты в сцене. Информация о них хранится в финальном слое features. Можно взять только этот слой (обрезав последние один-два слоя сети), добавить пару чистых слоев и дообучить эту нейросеть распознавать, скажем, скамейки на улице, не обучая всю сеть заново с нуля.

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

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

Другое дело, что в живых организмах классы выделяются ради выживания. Например, обязательно нужно выделить класс «тигр», чтобы он вас не съел. Или «дерево», «препятствие» для целей навигации, чтобы убегать от того же тигра. Как задать похожие задачи для нейросети, хороший вопрос ). Сейчас что-то подобное пытаются делать, когда не хватает размера датасета. Например, для карт глубины мало трехмерных данных, поэтому пытаются через такой unsupervised learning самообучиться на стерео снимках или из движения камеры в видео. Теоретически, это позволит дальше улучшать точность распознавания, а главное — уменьшать ошибочные распознавания, что сейчас, при достигнутой точности современных нейросеть, даже выходит на первый план.
теоретически можно обучить сеть распознавать вообще любые объекты на фото, а не только из ограниченного списка классов (хотя и непонятно, в каком виде задавать выходы сети для этого).

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

На картинке с object detection / instance segmentation два котейки обведены одинаковым цветом, так что это больше похоже на semantic segmentation.

Да, это правда, спасибо :)
Картинку взял на самом деле для демонстрации того, как выглядят боксы (слева). Про сегментацию будет отдельный разговор в третьей части.
Про сегментацию будет отдельный разговор в третьей части.
Ждём третью часть :)
Спасибо за статью! А не встречали что-то вроде готового EAST-детектора именно для цифр а не букв? Или проще файн-тьюнить на цифры их обученные модели?
Здравствуйте!
Рад, что статья оказалась полезной)
Кажется, что тот же github.com/argman/EAST уже обучен под детектирование в том числе и цифр. Если Вам нужно только цифры, и чтобы текст не детектировался, то наверное проще всего просто на этапе пост-обработки детекций выбрасывать боксы только с текстом, или же да, обучить архитектуру с нуля только под цифры. Код из вышеприведенного репозитория позволяет это сделать.
ExtremeNet является модификацией CornerNet. Кажется, сейчас их можно назвать SOTA в детекции с помощью нейросетей (но это не точно).


А что конкретно натолкнуло на такие мысли, по каким показателям они SOTA?
На тот момент меня впечатлила прежде всего возможность решать с помощью одной модели (CenterNet) сразу трех задач: детекция в 2D, в 3D и оценка позы, плюс они в статье репортят SOTA-скорость у CenterNet-DLA (в таблице 2) при AP выше, чем у YOLOv3, что в моих глазах выглядело как SOTA в speed/accuracy trade-off (что, на мой взгляд, для детекторов важнее, чем только speed или только AP).

Сам я измерение скорости и качества всех приведенных в этом посте моделей не проводил, потому и написал «Кажется», и "(но это не точно)", однако хотел все же обратить внимание на CenterNet.

p.s. Поздравляю с YOLOv4! Выглядит очень многообещающе, однозначно добавлю в этот пост Вашу статью.
плюс они в статье репортят SOTA-скорость у CenterNet-DLA (в таблице 2) при AP выше, чем у YOLOv3, что в моих глазах выглядело как SOTA в speed/accuracy trade-off (что, на мой взгляд, для детекторов важнее, чем только speed или только AP).

Про какую статью идет речь, можно ссылку на статью и скриншот с CenterNet-DLA со скоростью FPS и точностью AP?

p.s. Поздравляю с YOLOv4! Выглядит очень многообещающе, однозначно добавлю в этот пост Вашу статью.

Спасибо!
Про какую статью идет речь, можно ссылку на статью и скриншот с CenterNet-DLA со скоростью FPS и точностью AP?


Object as Points, Table 2. Скриншот:image
CenterNet-DLA (SS + Flip) — 28 FPS (TitanV) — 39.2% AP — 57.1% AP50
Darknet YOLOv3 608x608 — 73 FPS (TitanV) — 33.0% AP — 57.9% AP50

1. Они тестировали CenterNet-DLA на GPU TitanV (GV100-400-A1 Volta 2017 год), а для Yolo v3 взяли значение из статьи 20 FPS на GPU TitanX (GM200-400 Maxwell 2015 год), конечно если взять видеокарту на 2 поколения новее, то скорость будет больше ) А если запускать на одной и той же GPU, то Yolo v3 в 3 раза быстрее, чем CenterNet-DLA (SS + Flip).

2. Yolo v3 608x608 точнее по AP50 и быстрее в 3 раза чем CenterNet-DLA (SS + Flip)

3. Они для CenterNet-DLA (SS + Flip) — используют test time data augmetation = flip, т.е. делают несколько inference для одной картинки вместо одного, иначе точность будет ниже

4. Ну и попробуйте сами потестить совершенно разные модели одновременно и по FPS в реальных задачах и по AP на MSCOCO test-dev обязательно! на этой же сетке, очень сильно удивитесь )

Точнее CenterNet-DLA (SS + Flip) тестировали на TitanXP (11.3 TFlops GP102-450-A1 Pascal 2017 год), а Yolo v3 на Titan X (6.6 TFlops GM200-400 Maxwell 2015 год).
Так что всего на 1 поколение

CenterNet-DLA (SS + Flip) — 28 FPS (TitanXP) — 39.2% AP — 57.1% AP50
Darknet YOLOv3 608x608 — ~34 FPS (TitanXP) — 33.0% AP — 57.9% AP50

CenterNet: arxiv.org/pdf/1904.07850.pdf

Table 1 shows our results on COCO validation with different backbones and testing options, while Figure 1 compares CenterNet with other real-time detectors. The running time is tested on our local machine, with Intel Core
i7-8086K CPU, Titan Xp GPU, Pytorch 0.4.1, CUDA 9.0,
and CUDNN 7.1. We download code and pre-trained models12
to test run time for each model on the same machine.


Yolo v3: arxiv.org/pdf/1804.02767v1.pdf

It achieves 57.9 AP50 in 51 ms on a Titan X,


Yolo v3: pjreddie.com/darknet/hardware-guide

Titan X: $1,000, 6.9 TFLOPS, 6.9 GFLOPS/$
Спасибо за ценные замечания! Я тогда не обратил на это внимания.
Sign up to leave a comment.