В лучших real-time алгоритмах Instance Segmentation (YOLACT++, Poly-YOLO) используется модифицированный детектор YOLO.
Then producing a full-image instance segmentation from these two components is simple: for each instance, linearly combine the prototypes using the corresponding predicted coefficients and then crop with a predicted bounding box.
Доля рынка Apple != доля рынка моделей детекторов
Достоверно известно, что Apple использует детекцию в десятке задач (сортировка галереи, поиск в галерее по названию объекта, ...) в любом iPhone -> Apple купила XNOR-YOLO за 200M$ -> Apple заменила все свои детекторы на всех новых iPhone (200М штук в год) на более быстрые и точные XNOR-YOLO.
Но вы утверждаете, что купила за 200M$, но не использует )
После этого разговора я вообще уже не уверен, что есть свидетельства, что кто-то на самом использует детекцию, а уж тем более определить доли рынка конкретных моделей :)
Как же Apple тогда сейчас сортирует фото по наличию обнаженки, бюстгалтеров, мозаики, цукини… в галерее на iPhone? iz.ru/665343/2017-10-31/iphone-raspoznaet-foto-v-biustgalterakh-v-otdelnuiu-kategoriiu (надо понимать, что на фото может быть 10-20 равноценных мелких предметов, и классификация тут не подходит, нужна детекция)
Т.е. Apple отдала 200M$ за XNOR-YOLO, а вместо него для этой задачи использует ваш любимый медленный и кривой EfficientDet от Google, или там люди руками перебирают фото — как это работает? )
Детекция на смартфонах:
— детекция лиц перед их распознаванием
— сортировка фотографий в галерее по объектам
— поиск фотографий по предметам (забыл где на телефоне валяется фото, но помнишь что на нем была гитара)
— размытие фона при общении по Skype / Zoom /… — уж этим все воспользовались во время карантина
— размытие фона на фотографиях
…
Лучший детектор YOLO можно расширить до лучшего Instance Segmentator YOLACT++, например, чтобы отображать только одного человека, а остальных людей и фон размывать, используя YOLACT++ arxiv.org/pdf/1912.06218.pdf или Poly-YOLO arxiv.org/pdf/2005.13243.pdf
а уж тем более определить доли рынка конкретных моделей :)
И забавно сравнивать популярность детектора по тому, что используют в не менее узкоспециализированной ROS. Одно развёрнутое гуглом приложение на мобильники даст install base в тысячу раз больше, чем все пользователи рос вместе взятые. Причём гугл даже не будет это нигде рекламировать как отдельную фичу (ну разве что где-нибудь в блоге для девелоперов напишут заметку, мимоходом, дескать используем мобайлнет для детекции чего-нибудь на миллиарде устройств).
Ну покажите ссылки и назовите продукты где Google использует какие-либо детекторы массово, кроме своих Pixel-phone тиражом в 2 штуки. Вот Apple купила XNOR-YOLO за 200M$ и уже использует XNOR-YOLO на всех iPhone из-за её быстроты и энергоэффективности — это 200 миллионов iPhone каждый год, да и через 2 года будут использовать на PC, переход PC на ARM уже начался.
Остальные сети вообще нигде не используются, и исследователи их не любят, и точность и скорость у них крайне низкие — объективные числа я привел в предыдущем сообщении.
Компания Tencent (капитализация 500 000 000 000$) считает хорошей сеткой YOLO, а не Facebook-RetineNet/MaskRCNN или Google-EfficientDet: github.com/Tencent/ncnn
Может быть я предвзят из-за своего отрицательного опыта и поэтому так воспринимаю (у меня тоже ограниченное видение), но то, в йоло всё так перемешано и захардкожено (шаг вправо, шаг влево — сегфолт, градиенты всякие вручную прописанные в дебрях Си,
— в YOLO вообще ничего не зарадкожено, вся сеть целиком в одном простом cfg-файле (читаемый формат INI) github.com/AlexeyAB/darknet/blob/master/cfg/yolov4-tiny.cfg и чтобы поменять архитектуру сети вообще не надо программировать на C/C++/CUDA/Python/…. Авторы CSPNet вообще не правили ни строчки код, а только изменили cfg-файл: arxiv.org/abs/1911.11929
Успешно изменяют YOLO разные люди: и которые вообще не умеют программировать, но знают нейронные сети, и люди которые знают chain-rule/differentiation, могут писать собственные слои и их реализации на CUDA.
Вышла модель YOLOv4-tiny с экстремально высокой скоростью 370 FPS на GPU 1080ti, или 16 FPS на Jetson Nano (max_N, 416x416, batch=1, Darknet-framework): github.com/AlexeyAB/darknet/issues/6067
Дождемся официальной реализации и релиза yolov4-tiny в OpenCV, и там скорее всего будет Real-time 30 FPS на Jetson-Nano и NPU Intel Myriad X (1 Watt), и ещё быстрее при batch=4 / INT8.
Под приличными я имел в виду то, что эти бейзлайны были не слабыми, как типично бывает (когда берётся плохо натренированный бейзлайн и сравнивается с сильно тюнингованной своей сетью), а хорошими бейзлайнами, популярными вариантами, хорошо натренированными и известными.
Я понимаю, что для вас это центральная разработка и из-за того, что вы варитесь в нём и среди людей, которые его используют, то может показаться, что это очень популярная и распространённая штука.
Или может быть все знают кроме вас — вот что показывают объективные числа:
Никто не знает и не считает важным детекторы MobileNetv2 / Facebook-RetinaNet / PeleeNet / CornerNet, в отличии от Yolo.
2. О чем знают обычные пользователи из ютуб — про какой ещё детектор объектов рассказывали на TED и имеется более 1 млн просмотров на ютуб?
— youtu.be/Cgxsv1riJhI
— youtu.be/4eIBisqx9_g
3. Какие самые популярные детекторы объектов у исследователей:
YOLOv1 (2015) — 7234 раз процитировано: arxiv.org/abs/1506.02640
YOLOv2 (2016) — 3664 раз процитировано: arxiv.org/abs/1612.08242
Seattle AI startup drew interest from Amazon, Microsoft, Intel before selling to Apple
6. И самое главное, какой детектор самый быстрый и точный? — Об этом эта статья.
Критика о том, что у фреймворка Darknet только 11 000 (my) / 18 000 (official) Stars, про него ничего нет в Wiki, и бывает трудно найти в гугле — принимается. Ну на то он и Darknet.
Под маргинальностью Darknet можно понимать только то, что если я перестану его разрабатывать, то его развитие остановится.
Просто забавно, ходят по конференциям, выпускают кучу статей, а сделать ничего лучше не могут:
—
Могли, но не стали. И я их понимаю — одно дело запустить одной командой условный детектрон и перетренировать, другое дело разбираться с установкой и работой с даркнетом и так далее, особенно, когда тебе это нужно ради добавления одной цифры в статью, которая вообще в целом не об этом.
Вот здесь пробуют запустить обучение «эффективной» Google-EfficientDet-D5 одной командой даже на топовой игровой GPU RTX 2080ti 11GB или на Titan V (3000$) вы столкнетесь с Error: Out of Memory, даже с batch_size=1 (хотя EfficientDet требует batch_size=128 для достижения заявленной точности): github.com/google/automl/issues/85
In my mind, efficientdet is light-weighted and efficient. However, I can only run efficientdet-d4 on a single Nvidia Titan V GPU by setting train_batch_size=1. Training efficientdet-d5 will result in OOM.
Может если бы йоло не была так привязана к маргинальному (будем честны, он такой и есть) даркнету, то авторы не поленились бы и запустили её в сравнение ко всем остальным ретинам.
Вы считаете, что 10 000 студентов смогли обучить и запустить Yolo, а топовые исследователи из Google не смогли? Какое-то у вас предвзятое и негативное мнение о Google.
This week the U.S. Patent and Trademark Office officially published the transfer of four XNOR.AI registered trademarks to Apple that include: YOLOV2; YOLOV3; YOLO9000; and TINY YOLO as presented below. The actual registered trademark certificates have yet to be republished with Apple Inc. shown as owner.
Apple reportedly acquired Xnor.ai, a Seattle-based startup for $200 million
…
The founders of Xnor.ai, Ali Farhadi and Mohammad Rastegari, are experts in computer vision. Ali is a co-author of the popular object detection technique. YOLO — You Look Only Once. YOLO is one of the most popular techniques used in object detection in real-time.
Researchers at Xnor.ai developed an object detection model they called You Only Look Once (aka YOLO), which the company licensed to enterprise customers including internet-connected home security camera company Wyse.
А то, что они «кинулись» статью исправлять, то тут миллион причин может быть, может быть им ревьюеры на CVPR, куда эта статья прошла, на это указали и попросили уточнить (а это проще сделать, чем спорить)
Все правильно, и я, и авторы CVPR считают, что сравнение EfficientDet на GPU 130 000 TFlops-TC против YOLOv3 на GPU 6 000 TFLops в статье EfficientDet — это фейк, и в первоначальном виде их статью бы не допустили на CVPR. Я это объяснил 99% пользователей, которые это не понимали. Странно почему вы против того, чтобы пользователи это знали.
Если Google указывает Inference time в статье и делает специальную версию EfficientNet-TPUEdge (backbone для EfficientDet) ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html, в которой убирает все фишки (DepthWise-conv, SE, ...) снижающие BFLOPS, чтобы это работало побыстрее, с сильным падением точности обнаружения — хотя бы по точности/скорости как самая древняя YOLO, значит Google важна скорость. И если в результате все равно это не быстрее/точнее — значит просто не могут сделать. Apple их обгоняет в этом плане потому, что они используют что?
Может если бы йоло не была так привязана к маргинальному (будем честны, он такой и есть) даркнету, то авторы не поленились бы и запустили её в сравнение ко всем остальным ретинам.
The founders of Xnor.ai, Ali Farhadi and Mohammad Rastegari, are experts in computer vision. Ali is a co-author of the popular object detection technique. YOLO — You Look Only Once. YOLO is one of the most popular techniques used in object detection in real-time.
Думаю вопрос «как сильно пострадала наша репутация от того, что мы в одной из второстепенных строк одной из таблиц указали данные из оригинальной статьи, а потом вычеркнули совсем для единообразия и ясности» вызовет у них в лучшем случае недоумение :)
Если бы Google-brain статью не исправили, и их бы не пустили на CVPR — вот у них было бы недоумение.
Вообще, выглядит так, что они эту йоло туда изначально на отвали запихали — основное внимание в статье уделено большим вариантам и сравниваются они с приличными бейзлайнами.
Т.е. вы считаете, что в статье EfficientDet сравнение писалось на отвали, а вместо точных чисел скорости и точности они использовали термины «приличные»? Я считаю, что Google намного лучше, чем вы о них думаете.
То есть вы берёте цифры конкурентов из их статей и все остальные поступают точно так же — берут цифры конкурентов из их статей, поэтому и получается сравнение новых сетей на новых железках со старыми сетями на старых железках.
Нет, не получается. Прочитайте статью.
У нас новая сеть сравнивается с другими сетями на одинаковых железках.
Новая сеть на старом железе со старой сетью на старом железе.
Новая сеть на новом железе с новой сетью на новом железе.
Вряд ли у ребят из гугл брейн была цель показать какая yolo3 плохая. В конце концов, не весь ресёрч ведётся для того, чтобы показать исключительно практические, немедленно применимые в реальной жизни результаты и уменьшение теоретических флопсов — тоже полезное направление, потому что кто знает, что будущее железо нам принесёт?
Если бы им было все равно, то они бы не кинулись через пол года доделывать сеть и исправлять статью, при этом бросив текущие проекты.
Если бы им не было важно Inference time (ms), то они бы их не указывали.
Мне кажется, что пока единственный удачный эксперимент в применении Transformer к картинкам был вот этот — arxiv.org/pdf/2005.12872.pdf (я даже по его поводу небольшую статью накатал — cv-blog.ru/?p=310 )
Привет.
А batch=32 для измерения Latency (ms) не смутило сразу? )
Тут два варианта:
1. Либо один пакет в 32 изображения обрабатывается за 17мс с точностью 47%AP, т.е. скорость ~2000 FPS с точностью 47%AP
2. Либо один пакет в 32 изображения обрабатывается за ~500мс, а затем они зачем то это делят на 32, и получают 17мс. Только задержка 1 сэмпла в пакете не может быть меньше задержки всего пакета 500мс.
То есть чтобы понять, что дурят, даже в нейронных сетях не надо разбираться, надо только знать что такое Latency и Batching.
4. На GPU (и Jetson) ещё больше проблем с Grouped/Depthwise-conv используемых в EfficientDet.
— MobileNetv3-small — 16.1% AP arxiv.org/pdf/1905.02244v5.pdf
— YOLOv4-416 — 41.2% AP и 30 FPS на Jetson Xavier AGX если запустить на OpenCV или tkDNN-TesnorRT batch=1
Результаты на AGX Xavier, полагаю, для int8?
Везде FP32/16. Если использовать int8, то надо и точность для int8 писать.
И не особо важно, как что-то работает на старой Jetson Nano (Maxwell), гораздо важнее как что-то работает на современных Jetson Xavier / TPU-Edge / Intel Myriad X и на будущих устройствах.
Очень любопытно, спасибо, что уточнили! Я, увидев FPS, сразу неявно предположил, что действительно с batch-size=1 указано, а так это, конечно, меняет дело.
На это и расчет.
— MobileNetv3 — оптимальна только для CPU / мобильных-CPU / устройств 5-летней давности
— YOLOv4 full/tiny — оптимальна для GPU и NPU/VPU/TPU
— EfficientDet — ни для чего не оптимальна
5. Google это коммерческая компания, с большими зарплатами, которые там не платят просто за написание статьи. Сказать что им не важна скорость — это сказать, что им не важны деньги.
Без всякого сарказма: у Вас есть объяснение тому, что при всём при этом разработки архитектур EfficientDet и MobileNetv3 вообще покинули стены лаборатории? Я в своих оценках могу основываться только на результатах, приведённых в статьях, которые, по Вашим словам, местами, мягко говоря, не без предвзятости (о чём, в общем, и в других источниках время от времени упоминается), хотя архитектурные решения EfficientDet мне кажутся элегантными. Неужели NIH-синдром? И считаете ли Вы базовую модель, EfficientNet, также не совсем удачной или с ней дела лучше?
1. А вы как думаете, почему они сначала написали, а потом удалили из своей статьи FPS/latency для Yolov3?
2. И почему EfficientDet и MobileNetv3 вообще покинули стены лаборатории?
На NAS-сети потратили десятки миллионов долларов на разработки и TPU для AutoML / Hyper-parameter Tuning.
Плюс надеются, что grouped/depthwise-conv когда-то все таки оптимизируют именно на NPU, а не на GPU, поэтому и мы от этого полностью не отказываемся, о чем и написали в статье.
Все данные в статье EfficientDet верны, и там написано, что EfficientDet не лучше, чем старая Yolov3, просто большинство людей читать не умеют — на это и расчет )
В моих собственных экспериментах на Jetson Nano вариант MobileNetv3-small показывает ещё несколько более впечатляющие результаты.
4. На GPU (и Jetson) ещё больше проблем с Grouped/Depthwise-conv используемых в EfficientDet.
— MobileNetv3-small — 16.1% AP arxiv.org/pdf/1905.02244v5.pdf
— YOLOv4-416 — 41.2% AP и 30 FPS на Jetson Xavier AGX если запустить на OpenCV или tkDNN-TesnorRT batch=1
— MobileNetv3 — оптимальна только для CPU / мобильных-CPU / устройств 5-летней давности
— YOLOv4 full/tiny — оптимальна для GPU и NPU/VPU/TPU
— EfficientDet — ни для чего не оптимальна
вот автор одной из недавних реализаций на PyTorch заявляет о более высоком уровне в его экспериментах.
Если YOLOv4 запустить хотя бы с batch=4, то мы уже получаем более 400 FPS на той же RTX 2080Ti, с гораздо большей точностью чем у D0:
5. Как можно судить, в титульной реализации EfficientDet, похоже, вообще не очень-то преисполнялись темой быстродействия,
5. Google это коммерческая компания, с большими зарплатами, которые там не платят просто за написание статьи. Сказать что им не важна скорость — это сказать, что им не важны деньги. Допустим Apple заплатила $200 M за то, чтобы Yolo работала побыстрее с небольшим падением точности: news.crunchbase.com/news/apple-acquires-ai-on-the-edge-startup-xnor-ai-for-around-200m
Researchers at Xnor.ai developed an object detection model they called You Only Look Once (aka YOLO), which the company licensed to enterprise customers including internet-connected home security camera company Wyse.
EfficientDet разрабатывала команда Google Brain, для того, чтобы использовать её как на TPU-Edge-devices, так и внутри Google, и от скорости зависит сколько они потратят на Hardware в масштабах Google, например, $10 M или $20 M. Так же зависит их репутация от фейкового сравнения со старой Yolov3.
Поэтому они сразу кинулись допиливать код и исправлять статью, а именно таблицу 2:
— было 3 Apr 2020: arxiv.org/pdf/1911.09070v4.pdf
— стало 24 May 2020: arxiv.org/pdf/1911.09070v5.pdf
1. Убрали Latency/FPS для Yolov3
2. Бросились увеличивать скорость потому, что как оказалось, на самом деле самая быстрая EfficientDet-D0 даже медленнее, чем самая медленная старая Yolov3-608 :)
Было D0-512 — 62 FPS — 33.8% AP — 52.2% AP50
Стало D0-512 — 98 FPS — 33.8% AP — 52.2% AP50
Когда
YOLOv4-416 — 96 FPS — 41.2% AP — 62.8% AP50
YOLOv4-320 — 123 FPS — 38% AP — 60% AP50
Yolov3-416 — 100 FPS — 31% AP — 55% AP50
Т.е. по AP50, даже старая (2018 год) Yolov3-416 быстрее и точнее, чем даже улучшенная (2020 год) версия EfficientDet-D0. Т.е. вообще занавес.
3. BiFPN использует weighted multi-input Residual connections, в которых сумма весов равна 1 (нормализованы). Это обычные Residual connections из ResNet-сетей, но:
— I. На вход подается не 2, а от 2 до 4 выходов предыдущих слоев
— II. Входы не просто складываются, а умножаются на вес (1 вес на каждый вход). Т.е. если на вход подается 3 слоя, то: out[i] = in1[i]*w1 + in2[i]*w2 + in3[i]*w3;
out[i+1] = in1[i+1]*w1 + in2[i+1]*w2 + in3[i+1]*w3; ...
Тогда как для обычного Residual connection: out[i] = in1[i] + in2[i]; out[i+1] = in1[i+1] + in2[i+1];
4. Авторы EfficientDet разработали эффективную с точки зрения формальных параметров BFLOPS, но не эффективную с точки зрения производительности, поэтому в Google отказались от большинства фич, которые радикально уменьшают BFLOPS, а именно отказались от: Swish, Depthwise convolution и Squeeze-and-excitation block ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html
5. Авторы EfficientDet в таблице 2 уточняют, что FPS-скорость для Yolov3 они взяли из yolo-статьи, где её измеряли на TitanX/M40 maxwell, а FPS-скорость для EfficientDet они измеряли на TitanV volta, которая на 2 поколения новее и в несколько раз быстрее. Только поэтому EfficientDet получилась чуть лучше по скорости и точности, чем старая Yolov3.
Количество фильтров/слоев в Neck (FPN, PAN, BiFPN, ASFF, ...) сильно зависит от network resolution, backbone, dataset, BoF/BoS,… чуть что-то изменил, и надо заново подбирать. Это всегда будет поиск компромисса или точнее и медленнее, или быстрее, но точность хуже. Мы же старались добавить фичи, которые увеличивают точность без уменьшения скорости, и которые затем можно использовать в любых других сетях, детекторах или даже задачах.
Единственное, что могу посоветовать, это использовать те же скейл параметры (α = 1.2, β = 1.1, γ = 1.15), как в EfficientNet/Det для compound scaling method, если хотите уменьшить/увеличить сеть и скорость/точность. arxiv.org/abs/1905.11946
Вы можете использовать NAS (как часть AutoML) для подбора оптимальной архитектуры, но если вы не Google, который может тратить миллионы $ на NAS, то больших результатов ждать не стоит. en.wikipedia.org/wiki/Neural_architecture_search
В Google-brain использовали NAS в большей или меньшей степени для: NAS-FPN, MnasNet + NECK, EfficientNet/Det, MixNet,… а все равно не смогли сделать сеть точнее, чем старая Yolov3 при той же скорости, если запускать обе на том же GPU (TitanV/TeslaV100).
Достоверно известно, что Apple использует детекцию в десятке задач (сортировка галереи, поиск в галерее по названию объекта, ...) в любом iPhone -> Apple купила XNOR-YOLO за 200M$ -> Apple заменила все свои детекторы на всех новых iPhone (200М штук в год) на более быстрые и точные XNOR-YOLO.
Но вы утверждаете, что купила за 200M$, но не использует )
Как же Apple тогда сейчас сортирует фото по наличию обнаженки, бюстгалтеров, мозаики, цукини… в галерее на iPhone? iz.ru/665343/2017-10-31/iphone-raspoznaet-foto-v-biustgalterakh-v-otdelnuiu-kategoriiu (надо понимать, что на фото может быть 10-20 равноценных мелких предметов, и классификация тут не подходит, нужна детекция)
Т.е. Apple отдала 200M$ за XNOR-YOLO, а вместо него для этой задачи использует ваш любимый медленный и кривой EfficientDet от Google, или там люди руками перебирают фото — как это работает? )
Детекция на смартфонах:
— детекция лиц перед их распознаванием
— сортировка фотографий в галерее по объектам
— поиск фотографий по предметам (забыл где на телефоне валяется фото, но помнишь что на нем была гитара)
— размытие фона при общении по Skype / Zoom /… — уж этим все воспользовались во время карантина
— размытие фона на фотографиях
…
Лучший детектор YOLO можно расширить до лучшего Instance Segmentator YOLACT++, например, чтобы отображать только одного человека, а остальных людей и фон размывать, используя YOLACT++ arxiv.org/pdf/1912.06218.pdf или Poly-YOLO arxiv.org/pdf/2005.13243.pdf
Ну то что у Apple доля мирового рынка 32% мирового дохода от продаж телефонов, 66% мирового дохода от мобильных телефонов + сервисов (iCloud, Apple Music, ...), и 15% по количеству проданных iPhone, и продажи 200 миллионов iPhone в год — это по моему не секрет:
— www.forbes.com/sites/johnkoetsier/2019/12/22/global-phone-profits-apple-66-samsung-17-everyone-else-unlucky-13/#37452bf92ff3
— www.ixbt.com/news/2020/01/30/apple-vozglavljaet-rynok-smartfonov-po-itogam-proshlogo-kvartala-.html
Скорость и точность разных YOLO: github.com/AlexeyAB/darknet/issues/5079
На CPU — 90 Watt — FP32 (Intel Core i7-6700K 4GHz 8 Logical Cores) OpenCV-DLIE, FPS
1. github.com/AlexeyAB/darknet/blob/master/cfg/yolov3-tiny-prn.cfg — 46 FPS
2. github.com/AlexeyAB/darknet/blob/master/cfg/yolov4-tiny.cfg — такая же быстрая, но точнее, подождите неделю пока в OpenCV добавят поддержку github.com/opencv/opencv/issues/17666 И затем сразу можете использовать OpenCV-master-branch github.com/opencv/opencv/archive/master.zip
Или дождитесь релиза нового бинарника: opencv.org/releases
Работает быстрее, если скомпилировать OpenCV с бэкэндом OpenVINO: github.com/opencv/opencv/wiki/Intel's-Deep-Learning-Inference-Engine-backend
Ну покажите ссылки и назовите продукты где Google использует какие-либо детекторы массово, кроме своих Pixel-phone тиражом в 2 штуки. Вот Apple купила XNOR-YOLO за 200M$ и уже использует XNOR-YOLO на всех iPhone из-за её быстроты и энергоэффективности — это 200 миллионов iPhone каждый год, да и через 2 года будут использовать на PC, переход PC на ARM уже начался.
Остальные сети вообще нигде не используются, и исследователи их не любят, и точность и скорость у них крайне низкие — объективные числа я привел в предыдущем сообщении.
Компания Tencent (капитализация 500 000 000 000$) считает хорошей сеткой YOLO, а не Facebook-RetineNet/MaskRCNN или Google-EfficientDet: github.com/Tencent/ncnn
Вы по моему не тот Darknet использовали, надо про нейронные сети, а не где продают запрещенные вещества )
Захардкожено — это в TensorFlow-EfficientDet вся сеть захардкожена в коде на Python, и приходится лазить по всему исходному коду, чтобы хоть чуть-чуть поменять архитектуру
— TF-EfficientDet — backbone в одном месте github.com/google/automl/blob/b26c32ab3062c271eb3a2c2754d633b5572a98c2/efficientdet/backbone/efficientnet_model.py, neck в другом месте github.com/google/automl/blob/b26c32ab3062c271eb3a2c2754d633b5572a98c2/efficientdet/efficientdet_arch.py другие части ещё где-то раскиданы
— в YOLO вообще ничего не зарадкожено, вся сеть целиком в одном простом cfg-файле (читаемый формат INI) github.com/AlexeyAB/darknet/blob/master/cfg/yolov4-tiny.cfg и чтобы поменять архитектуру сети вообще не надо программировать на C/C++/CUDA/Python/…. Авторы CSPNet вообще не правили ни строчки код, а только изменили cfg-файл: arxiv.org/abs/1911.11929
Успешно изменяют YOLO разные люди: и которые вообще не умеют программировать, но знают нейронные сети, и люди которые знают chain-rule/differentiation, могут писать собственные слои и их реализации на CUDA.
Дождемся официальной реализации и релиза yolov4-tiny в OpenCV, и там скорее всего будет Real-time 30 FPS на Jetson-Nano и NPU Intel Myriad X (1 Watt), и ещё быстрее при batch=4 / INT8.
Или может быть все знают кроме вас — вот что показывают объективные числа:
Никто не знает и не считает важным детекторы MobileNetv2 / Facebook-RetinaNet / PeleeNet / CornerNet, в отличии от Yolo.
1. Что используют в реальных системах — поиск в гугле по общей фразе «ros object detection» — первая строчка: github.com/leggedrobotics/darknet_ros
2. О чем знают обычные пользователи из ютуб — про какой ещё детектор объектов рассказывали на TED и имеется более 1 млн просмотров на ютуб?
— youtu.be/Cgxsv1riJhI
— youtu.be/4eIBisqx9_g
3. Какие самые популярные детекторы объектов у исследователей:
YOLOv1 (2015) — 7234 раз процитировано: arxiv.org/abs/1506.02640
YOLOv2 (2016) — 3664 раз процитировано: arxiv.org/abs/1612.08242
CornerNet (2017) — 231 раз процитировано: arxiv.org/abs/1808.01244
RetinaNet (2017) — 1796 раз процитировано: arxiv.org/abs/1708.02002 (FaceBook)
YOLOv3 (2018) — 2431 раз процитировано: arxiv.org/abs/1804.02767
MobileNetv2 (2018) — 1862 раз процитировано: arxiv.org/abs/1801.04381
PeleeNet (2018) — 87 раз процитировано: arxiv.org/abs/1804.06882
CenterNet (2019) — 109 раз процитировано: arxiv.org/abs/1904.08189
EfficientDet (2019) — 38 раз процитировано: arxiv.org/abs/1911.09070 (Google)
Сгруппировано по годам, т.к. чем старее статья — тем больше цитат.
Понятно, что статья вышедшая только месяц назад почти не будет процитирована.
4. О каком ещё детекторе объектов кроме XNOR-YOLO рассказывал CEO ARM?
twitter.com/morastegari/status/1158966293262819328
5. Какой ещё детектор объектов кроме XNOR-YOLO пытались купить сразу Microsoft, Intel, Amazon, Apple (и Apple купила за 200M$)? www.geekwire.com/2020/seattle-ai-startup-drew-interest-amazon-microsoft-intel-selling-apple
6. И самое главное, какой детектор самый быстрый и точный? — Об этом эта статья.
Критика о том, что у фреймворка Darknet только 11 000 (my) / 18 000 (official) Stars, про него ничего нет в Wiki, и бывает трудно найти в гугле — принимается. Ну на то он и Darknet.
Под маргинальностью Darknet можно понимать только то, что если я перестану его разрабатывать, то его развитие остановится.
Просто забавно, ходят по конференциям, выпускают кучу статей, а сделать ничего лучше не могут:
—
Конечно, это очень трудно покликать по стрелочкам в Google Colab, чтобы увидеть как компилировать и запускать Yolo на Darknet: https://colab.research.google.com/drive/12QusaaRj_lUwCGDvQNfICpa7kA7_a2dE
Скомпилировать Darknet используя Cmake — 2 команды
Скачать датасет
Затем обучение запускается одной строкой: https://github.com/AlexeyAB/darknet/wiki/Train-Detector-on-MS-COCO-(trainvalno5k-2014)-dataset
Вот здесь пробуют запустить обучение «эффективной» Google-EfficientDet-D5 одной командой даже на топовой игровой GPU RTX 2080ti 11GB или на Titan V (3000$) вы столкнетесь с Error: Out of Memory, даже с batch_size=1 (хотя EfficientDet требует batch_size=128 для достижения заявленной точности): github.com/google/automl/issues/85
Вы считаете, что 10 000 студентов смогли обучить и запустить Yolo, а топовые исследователи из Google не смогли? Какое-то у вас предвзятое и негативное мнение о Google.
Почему тогда CEO ARM рассказывает про XNOR YOLO, и нафига тогда Apple платить $200M за TradeMark на YOLO?
www.patentlyapple.com/patently-apple/2020/06/four-xnorai-trademarks-covering-yolo-tools-for-real-time-object-detection-have-officially-been-transferred-to-apple.html
www.forbes.com/sites/janakirammsv/2020/01/19/apple-acquires-xnorai-to-bolster-ai-at-the-edge/#568e22063975
news.crunchbase.com/news/apple-acquires-ai-on-the-edge-startup-xnor-ai-for-around-200m
Все правильно, и я, и авторы CVPR считают, что сравнение EfficientDet на GPU 130 000 TFlops-TC против YOLOv3 на GPU 6 000 TFLops в статье EfficientDet — это фейк, и в первоначальном виде их статью бы не допустили на CVPR. Я это объяснил 99% пользователей, которые это не понимали. Странно почему вы против того, чтобы пользователи это знали.
Если Google указывает Inference time в статье и делает специальную версию EfficientNet-TPUEdge (backbone для EfficientDet) ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html, в которой убирает все фишки (DepthWise-conv, SE, ...) снижающие BFLOPS, чтобы это работало побыстрее, с сильным падением точности обнаружения — хотя бы по точности/скорости как самая древняя YOLO, значит Google важна скорость. И если в результате все равно это не быстрее/точнее — значит просто не могут сделать. Apple их обгоняет в этом плане потому, что они используют что?
YOLO есть на всех фреймворках: Facebook-Pytorch, Google-TensorFlow, Tencent-NCNN, nVidia-TensorRT, Intel-OpenCV, Mxnet, Keras, TVM, Darknet,…
всего 13 000 репозиториев, 4852 на Python: github.com/search?q=yolo
* YOLOv3 Pytorch: github.com/ultralytics/yolov3
* YOLOv3-ASFF Pytorch: github.com/ruinmessi/ASFF
Приватные разработки в том числе на маргинальном Darknet были куплены компанией Apple за $200 000 000 именно из-за быстроты XNOR-YOLO на ARM-чипах/NPU www.forbes.com/sites/janakirammsv/2020/01/19/apple-acquires-xnorai-to-bolster-ai-at-the-edge/#156e95733975
Если бы Google-brain статью не исправили, и их бы не пустили на CVPR — вот у них было бы недоумение.
Т.е. вы считаете, что в статье EfficientDet сравнение писалось на отвали, а вместо точных чисел скорости и точности они использовали термины «приличные»? Я считаю, что Google намного лучше, чем вы о них думаете.
Нет, не получается. Прочитайте статью.
У нас новая сеть сравнивается с другими сетями на одинаковых железках.
Новая сеть на старом железе со старой сетью на старом железе.
Новая сеть на новом железе с новой сетью на новом железе.
Если бы им было все равно, то они бы не кинулись через пол года доделывать сеть и исправлять статью, при этом бросив текущие проекты.
Если бы им не было важно Inference time (ms), то они бы их не указывали.
Читайте, YOLOv5-Ultralytics хуже, чем YOLOv4 и по точности и по скорости: https://github.com/pjreddie/darknet/issues/2198
А Repulsion Loss (21 Nov 2017) / CVPR 2018 arxiv.org/abs/1711.07752v2 или Soft-IoU layer (CVPR 19) arxiv.org/abs/1904.00853v3 потом не пробовали для обнаружения в толпах?
А batch=32 для измерения Latency (ms) не смутило сразу? )
Тут два варианта:
1. Либо один пакет в 32 изображения обрабатывается за 17мс с точностью 47%AP, т.е. скорость ~2000 FPS с точностью 47%AP
2. Либо один пакет в 32 изображения обрабатывается за ~500мс, а затем они зачем то это делят на 32, и получают 17мс. Только задержка 1 сэмпла в пакете не может быть меньше задержки всего пакета 500мс.
То есть чтобы понять, что дурят, даже в нейронных сетях не надо разбираться, надо только знать что такое Latency и Batching.
По факту Ultralytics-YOLOv5 чуть хуже, чем YOLOv4 если честно сравнивать: github.com/AlexeyAB/darknet/issues/5920
Везде FP32/16. Если использовать int8, то надо и точность для int8 писать.
И не особо важно, как что-то работает на старой Jetson Nano (Maxwell), гораздо важнее как что-то работает на современных Jetson Xavier / TPU-Edge / Intel Myriad X и на будущих устройствах.
На это и расчет.
1. А вы как думаете, почему они сначала написали, а потом удалили из своей статьи FPS/latency для Yolov3?
2. И почему EfficientDet и MobileNetv3 вообще покинули стены лаборатории?
На NAS-сети потратили десятки миллионов долларов на разработки и TPU для AutoML / Hyper-parameter Tuning.
Плюс надеются, что grouped/depthwise-conv когда-то все таки оптимизируют именно на NPU, а не на GPU, поэтому и мы от этого полностью не отказываемся, о чем и написали в статье.
Все данные в статье EfficientDet верны, и там написано, что EfficientDet не лучше, чем старая Yolov3, просто большинство людей читать не умеют — на это и расчет )
4. На GPU (и Jetson) ещё больше проблем с Grouped/Depthwise-conv используемых в EfficientDet.
— MobileNetv3-small — 16.1% AP arxiv.org/pdf/1905.02244v5.pdf
— YOLOv4-416 — 41.2% AP и 30 FPS на Jetson Xavier AGX если запустить на OpenCV или tkDNN-TesnorRT batch=1
— MobileNetv3 — оптимальна только для CPU / мобильных-CPU / устройств 5-летней давности
— YOLOv4 full/tiny — оптимальна для GPU и NPU/VPU/TPU
— EfficientDet — ни для чего не оптимальна
Потому что тестируют с batch=64 github.com/rwightman/efficientdet-pytorch/issues/28#issuecomment-636532299
Если YOLOv4 запустить хотя бы с batch=4, то мы уже получаем более 400 FPS на той же RTX 2080Ti, с гораздо большей точностью чем у D0:
5. Google это коммерческая компания, с большими зарплатами, которые там не платят просто за написание статьи. Сказать что им не важна скорость — это сказать, что им не важны деньги. Допустим Apple заплатила $200 M за то, чтобы Yolo работала побыстрее с небольшим падением точности: news.crunchbase.com/news/apple-acquires-ai-on-the-edge-startup-xnor-ai-for-around-200m
EfficientDet разрабатывала команда Google Brain, для того, чтобы использовать её как на TPU-Edge-devices, так и внутри Google, и от скорости зависит сколько они потратят на Hardware в масштабах Google, например, $10 M или $20 M. Так же зависит их репутация от фейкового сравнения со старой Yolov3.
Поэтому они сразу кинулись допиливать код и исправлять статью, а именно таблицу 2:
— было 3 Apr 2020: arxiv.org/pdf/1911.09070v4.pdf
— стало 24 May 2020: arxiv.org/pdf/1911.09070v5.pdf
1. Убрали Latency/FPS для Yolov3
2. Бросились увеличивать скорость потому, что как оказалось, на самом деле самая быстрая EfficientDet-D0 даже медленнее, чем самая медленная старая Yolov3-608 :)
Было D0-512 — 62 FPS — 33.8% AP — 52.2% AP50
Стало D0-512 — 98 FPS — 33.8% AP — 52.2% AP50
Когда
YOLOv4-416 — 96 FPS — 41.2% AP — 62.8% AP50
YOLOv4-320 — 123 FPS — 38% AP — 60% AP50
Yolov3-416 — 100 FPS — 31% AP — 55% AP50
Т.е. по AP50, даже старая (2018 год) Yolov3-416 быстрее и точнее, чем даже улучшенная (2020 год) версия EfficientDet-D0. Т.е. вообще занавес.
Да, конечно, нормализованное relu.
Relu(w[i]) / (sum(Relu(w[k])) + 0.001)
Где sum Суммирует по всем k
Несколько уточнений:
1. Официальный код на TensorFlow: github.com/google/automl/tree/master/efficientdet
2. Эта хитрая функция называется — ReLU
3. BiFPN использует weighted multi-input Residual connections, в которых сумма весов равна 1 (нормализованы). Это обычные Residual connections из ResNet-сетей, но:
— I. На вход подается не 2, а от 2 до 4 выходов предыдущих слоев
— II. Входы не просто складываются, а умножаются на вес (1 вес на каждый вход). Т.е. если на вход подается 3 слоя, то:
out[i] = in1[i]*w1 + in2[i]*w2 + in3[i]*w3;
out[i+1] = in1[i+1]*w1 + in2[i+1]*w2 + in3[i+1]*w3; ...
Тогда как для обычного Residual connection: out[i] = in1[i] + in2[i]; out[i+1] = in1[i+1] + in2[i+1];
4. Авторы EfficientDet разработали эффективную с точки зрения формальных параметров BFLOPS, но не эффективную с точки зрения производительности, поэтому в Google отказались от большинства фич, которые радикально уменьшают BFLOPS, а именно отказались от: Swish, Depthwise convolution и Squeeze-and-excitation block
ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html
5. Авторы EfficientDet в таблице 2 уточняют, что FPS-скорость для Yolov3 они взяли из yolo-статьи, где её измеряли на TitanX/M40 maxwell, а FPS-скорость для EfficientDet они измеряли на TitanV volta, которая на 2 поколения новее и в несколько раз быстрее. Только поэтому EfficientDet получилась чуть лучше по скорости и точности, чем старая Yolov3.
6. Авторы EfficientNet/Det из Google AI использовали AutoML/NAS для автоматического подбора оптимальных гиперпараметров/разрешения/глубины/количества-параметров для конкретных датасетов ILSVRC2012-classification / MSCOCO-detection.
nni.readthedocs.io/en/latest/TrialExample/EfficientNet.html
ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html
Единственное, что могу посоветовать, это использовать те же скейл параметры (α = 1.2, β = 1.1, γ = 1.15), как в EfficientNet/Det для compound scaling method, если хотите уменьшить/увеличить сеть и скорость/точность. arxiv.org/abs/1905.11946
Вы можете использовать NAS (как часть AutoML) для подбора оптимальной архитектуры, но если вы не Google, который может тратить миллионы $ на NAS, то больших результатов ждать не стоит. en.wikipedia.org/wiki/Neural_architecture_search
В Google-brain использовали NAS в большей или меньшей степени для: NAS-FPN, MnasNet + NECK, EfficientNet/Det, MixNet,… а все равно не смогли сделать сеть точнее, чем старая Yolov3 при той же скорости, если запускать обе на том же GPU (TitanV/TeslaV100).