Перейти к содержимому
Compvision.ru

BeS

Пользователи
  • Количество публикаций

    349
  • Зарегистрирован

  • Посещение

  • Days Won

    43

Все публикации пользователя BeS

  1. Всем привет, Возник такой вопрос: Вот хочу я на основе DL сделать, например, детектор котиков. И вот тут есть два варианта решения задачи: 1) Насобирать огромную базу изображений котиков и тренировать на них сетку в надежде, что база достаточно репрезентативная и сетка обобщится хорошо. 2) Взять предтренированную на ImageNet сетку и зафайнтюнить её базой котиков среднего размера. Учитывая опыт всяких RCNN и YOLO, тренировка на ImageNet + файнтюнинг на PASCAL дает близкие к state of the art результаты на задачах, например детектированию пешеходов. Хотя в ImageNet + PASCAL число людей вряд ли достигает хотя бы 1M...а вот методов основанных только на тренировке большой базой, без предтренировке на ImageNet в топах не видно...отсюда возникает вопрос, что же все таки лучше: специализированный детектор для конкретного класс объектов, или что-то универсальное, что умеет различать несколько различных классов? В литературе сравнений таких не встреал.
  2. Очень простая техника для улучшения обобщающей способности(тупо примешивает к блобам равномерно распределенный шум): http://arxiv.org/abs/1508.04826 негативные сэмплы - это тоже большая проблема. Больше чем позитивов их брать нельзя, иначе на разбалансированной базе сетка не обобщится на позитивный класс, а позитивную базу увеличивать довольно сложно, даже за счет jittering'а. Да и в тех-же каскадных подходах, обычно негативов не так уж и много надо, чтобы модель научилась разделать позитивы от фона.. Это эмпирическое предположение, основанное на том, что сетка обучаема с нуля, правда на базе меньшего размера, чем 10M, катастрофически проигрывает Faster-RCNN, который обучался на базе, содержащей на порядок меньше искомых объектов. При этом увеличение базы за счет jittering'а не сильно улучшает ситуацию.
  3. А есть какие-то популярные архитектуры, использующие большие свертки? У всяких VGG, GoogleNet etc. вроде бы максимум - это свертки 7х7, но основа - это 3х3 и 5х5 - т.е. практически "универсальный" размер. Веса сверточных слоев мы можем оставить. Сверточному слою ведь пофигу, какого размера картинка к нему пришла на вход...на этом принципе строятся многие object detector'ы, не исопльзующие генераторов гипотез типа скользящих окон или Selective Search...теже RCNN, например, которые через дефолтные сверточные слои VGG16 прогоняют картинку поризвольного размера, без скалирования к 224x224, и инвариантность к масштабу объекта там, признаться, поражает и сравнима с алгоритмами работающими на пирамидах. Чсто теоретически, ничто не должно мешать ресайзить свертку, а веса интерполировать. Правда не совсем понятно, какой эффект получится на выходе. Тут, кстати, можно вспомнить алгоритм Виолы-Джонса, который не использует пирамид, а вместо этого скалирует Хааровские фичи под соответствующие скейлы.
  4. Ну вот тут не совсем понятно, относительно чего уменьшать ошибку. Грубо говоря, если я беру хорошую, выровненую базу жестких объектов, скажем из 100K сэмплов необходимого класса и начинаю на ней обучать сетку, то на тестовой выборке в итоге получается точность ~99%. Но на реальных данных сеть фолсит. При этом как бороться с оверфитом на глубоких сетках не понятно, т.к. весь Deep Learning строится на оверфите моделей (dropout'ы, dither'ы и прочие техники для избегания оверфита не особо как помогают). Да и выобрку можно увеличивать долго...можно, скажем, взять 10M изображений людей и получить результаты хуже, чем у Faster-RCNN, который взял фичи от VGG16 и зафайнтюнился на PASCAL, где людей всего дай бог тысяч 5-10...
  5. Как правильно заметил Smorodov, голова не должна далеко уехать за 45ms...т.ч. весь тяжелый процессинг можно убрать в бэкграунд тред, который будет обрабатывать кадры с такой скоростью с какой сможет, а в основной тред запихнуть трекинг, который будет трекать лицо с последней посчитанной позиции. При таком пайплайне практически ничего синхронизировать не придется, только на каждой итерации основного цикла проверять не обновились ли данные от детектора и подменять ими текущую информацию о ROI, ну и засылать новый кадр тяжелому обработчику.
  6. Хм...тут весь пайплайн работает не больше 100ms...смысл вообще по потокам бить? Может лучше немного код пооптимизировать и добиться реалтайма в одном потоке? Мне почему-то кажется, что у вас просто добавление openmp'шных прагм может разогнать все до реалтайма... А вообще, обычно всю GUI'ню в один поток суют, процессинг в другой и заводят очередь кадров для обработки и вторую для вывода. Синхронизируют тупо мьютексами.
  7. Так яж говорю, что классификатор надо самостоятельно обучать. А можно раскрыть эту идею? Просто при обучении сетки на PASCAL, там все типы объектов имеют разный размер и как размер свертки в данном случае связан с размером объекта - лично мне не совсем понятно. В общем случае вообще пофиг какого размера картинку прогонять через сверточные слои, главное, чтобы размер до 0 не уменьшился...
  8. Ну, если так подумать, то можно брать от обученой на ImageNet сетки только её сверточные слои, а классификатор самостоятельно обучать уже на нужной базе под нужный размер. По идее, если размера картинки хватает на весь проход по сети, то такой вариант должен работать. Проблемным остается только mean file, который привязан к базе определенного размера, но скорей всего это можно решить новым файлом средних и низким learning rate в сверточных слоях.
  9. Не уверен что лицензия это позволяет, но почему не выдернуть из caffe только нужный код и собрать его вместе со своим проектом?:)
  10. Всем привет, Что-то никак не могут найти предтренированную на ImageNet модель, label и mean файлы для каффе для сетки VGG16, может кто-то в курсе где можно скачать? Заранее спасибо.
  11. Сейчас экспериментирую с darknet'ом...там тоже есть список лэблов с такими-же сокращениями, видимо это что-то занчит...правда там список упорядочен по другому
  12. Так вот, роизводных о VGG моделей полно, а оригинальную сетку, как оказалось, найти проблематично)
  13. Судя по всему вот список классов: http://image-net.org/challenges/LSVRC/2012/browse-synsets
  14. До этой ссылки я дошел, даже вроде бы нашел mean файл для ImageNet'а...а вот labels лист нигде не могу найти. А без него у VGG торчит 1000 выходов и какой класс на какой выход забиндился - не известно. А методом тыка пытаться понять где что не очень удобно... Кстати, там еще смущает тот факт, что формат prototxt файлов не совпадает с тем, который используется сейчас в caffe...
  15. Перемножение Vec3d и Mat_<double>?

    Да, в первом случае сработает v1.t() * M
  16. Перемножение Vec3d и Mat_<double>?

    Да, так и должно быть, это я с синтаксисом немного напутал)
  17. а еще дурацкий вопрос, как в формализуете обучение на нечеткой базе? У DeepLeab все боле-мене понятно, там по известной разметке корректируются отклики. А вот что у вас на выходе получается и как вы корректируете веса, не совсем понятно. з.ы. и еще более глупый вопрос: а такую сетку как у вас можно стандартными средствами caffe соорудить, или вы дописывали кастомные слои?
  18. Перемножение Vec3d и Mat_<double>?

    так если надо что-то куда-то передать, то все виды Mat'ов приводятся друг к другу, при этом по умолчанию они будут создаваться на одной памяти, т.ч. приведение типов будет по сути бесплатным.
  19. Каждого - это в вашем случае Лица + Фон, или вы еще внутриклассовую вариативность понижаете и бьете лица на несколько подклассов?
  20. При нечеткой разметке мне видится существенной только проблема того, что база должна быть ооочень большой, чтобы сеть обобщилась, при разметке с сегментацией сетка должна сойтись быстрее. Зато в долгосрочной перспективе такой подход сэкономит кучу времени при подготовке баз.
  21. Сети осуществляющие семантическую сегментацию (DeepLab, DeconvNet, SegNet etc.) - это отдельный класс сетей, который обычно рассматривают независимо от задачи детектирования объектов. Там как такового генератора гипотез, типа скользящего окна или Selective Search, вообще нету, вместо этого там полносвязанные слои сворачивают в свертку и выход сети интерпретируют как картинку. И обучают так, чтобы в выходной картинке каждый пиксель маркировался лэйблами известных ему классов. И мне кажется, что сетка Smorodov'а как раз делает что-то похожее на DeepLab)
  22. Перемножение Vec3d и Mat_<double>?

    Так Matx с Vec можно перемножать. Эти операции не определены только в том, случае, если вы используете cv::Mat, для которого заранее не тип ни размер не известны, для cv::Mat_<> тоже не определены... логика тут в том, что cv::Mat - это не матрица в математическом смысле (хотя может себя так вести в частных случаях) но имеющая некоторый набор операций (типа домножения на константу). А вот Matx - то уже матрица в математическом смысле, со всеми вытекающими. Ну а если не хватает уже объявленых алиасов, то всегда можно написать ченить типа cv::Mat_<float, 3, 3> и оно тоже будет перемножаться с cv::Vec3f
  23. Перемножение Vec3d и Mat_<double>?

    Почему не логично? Хотите перемножить матрицу на вектор, приводите cv::Mat к cv::Matx, т.е. к матрице с известным размером)
  24. А в чем проблема взять какого-нибудь виолу джонса для генерации пропозалов и потом прогонять сетку для найденых гипотез?
  25. Ну, кстати, Бенджио вовсю пишет книгу по Deep Learning'у и черновики уже вполне читабельны. Правда там только теория, без практических примеров. з.ы. а вообще лучшая книга для старта - это пожалуй "Нейронные сети: полный курс" Хайкина, там даже слегонца рекурентные сети затрагиваются. з.з.ы. а с практическими примерами да, совсем беда, особенно не радует наличие 100500 различных фреймворков...
×