Jump to content
Compvision.ru

Victor Tsaregorodtsev

Пользователи
  • Content count

    20
  • Joined

  • Last visited

  • Days Won

    4

Victor Tsaregorodtsev last won the day on October 24 2013

Victor Tsaregorodtsev had the most liked content!

Community Reputation

10 Бывалый

About Victor Tsaregorodtsev

  • Rank
    Бывалый
  1. kmeans и MNIST dataset

    2 mrgloom: Рядом бы для сравнения поместить картинку из статьи Хинтона в Сайнс 2006г (с той, с которой начался мировой бум deep learning). Чисто для спекуляции насчёт того, что алгоритм снижения размерности, явно не ставящий задачи минимизации внутриклассовых расстояний и максимизации межклассовых, - тоже отрабатывает на этой базе очень достойно.
  2. >Задача получить из шумного облака точек (например семплы с кинекта) некую упорядоченную, более-менее стабильную структуру (модель распределения). SOINN? Она тоже построит сетку узлов. А шум (узлы, попавшие в области с малой плотностью распределения) - удалит. Я, правда, точно не помню самый начальный алгоритм (какую сетку/граф он строит) - но модификация ESOINN даст сетку с треугольными ячейками (может, кому-то для его задачи будет полезнее 3 соседа у нейрона в середине карты, чем 4, как в SOM с прямоугольными ячейками).
  3. 2 Nuzhny Результаты сравнения по скорости собирал 4-2 года назад (потом стало лень) на этой странице (смотреть от где-то от середины и все постскрипты). Сравнивал с пятью чужими программами (вернее, с опубликованными в печати или в интернете временами расчётов - исходник-то был доступен всего для одной из этих 5 программ). Сравнивал ориентировочно - с учётом прикидок о разнице в быстродействии моего и других процессоров. Исходников не открываю, демку где-то в те годы на сайте предложил сделать-дать только тому, кто придёт с тяжёлым проектом и гарантирует отдачу проекта в мои руки после того, как демка всё заявленное (как скорость, так и просто надёжность-работоспособность) продемонстрирует. По потреблению памяти - у меня на копейки больше, т.к. все данные обрабатываемого примера (именно одного текущего примера) и внутренние сигналы/веса сети оптимально раскладываются с учётом выравнивания блоков данных на границу параграфа. Ну и в коде 1.5 ноу-хау - одно чисто моё (на удивление - почему-то нигде и никем ранее не опубликованное) о самом шустром варианте распараллеливания обучения нейросети (вообще без синхронизаций потоков на уровне операционной системы), второе - об аппроксимированном вычислении нелинейности нейрона (которое опубликовано, но почему-то никто об этом не знает и на практике не применяет). И сейчас реализованы пара канонических вариантов свёрточных сеток (ЛеКуновский и Симардовский), а также другие её клоны (от Эндрю Нг, Свена Бенке) - вернее, из разных слоёв-кубиков можно собирать свой/новый вариант. Также у нейронов можно ставить полиномиальные сумматоры - не на всех слоях свёрточной сети это помогает/полезно, но если помогает - то точность растёт. Я так даже самого Хинтона опроверг - он в прошлом году говорил, что на задаче MNIST на обычном персептроне никто никогда не опустился ниже 1.6% ошибок, а я таки постановкой полиномиальных сумматоров только на вых.слой получил точность лучше (см последний абзац тут) (хотя сам Хинтон в 1986г в двухтомнике PDP описывал формулы обратного распространения ошибки в том числе и для полиномиальных сумматоров - но вот почему-то сам не пользуется сейчас сигма-пи нейронами в своих сетях, может быть, зря).
  4. Наполовину реклама Думаю, что самый шустрый код для обычных процессоров - у меня, а для видеокарт (на CUDA) - у сотрудника российского филиала НВидии (это его хобби-проект). По крайней мере, код ОНейлла (по второй ссылке в теме) тормознее моего в сотню раз. Код нвидиевца тоже скорее всего будет гарантированно быстрее кода Алекса Крижевского (который писал прогу для Джеффри Хинтона) - из-за доступа к внутрифирменным секретам НВидии. Так что если кому нужен самый-самый шустряк - обращайтесь с конструктивными предложениями Ну и нерекламная часть: исходники проги Крижевского на С и Питоне лежат тут http://code.google.com/p/cuda-convnet/
  5. Динамические ядра - это идущий из СССРовских времён синоним k-means Ну и переформулирую прошлый пост на ином языке. 1) У Вас есть N сэмплов 2) Кластеризуем их - получаем n кластеров, n<<N. Кластеризовать я советую онлайновым алгоритмом. 3) Для каждого кластера строим список из его нескольких ближайших соседей. Чтобы если при "боевой работе" придёт сэмпл с краю кластера - knn работал и с примерами соседнего кластера. Начинаем боевую работу 1) Приходит сэмпл - определяем, в какой кластер он попадает. Затрат - n вычислений длин векторов разностей. 2) Думаем - а не нужно ли взять какие-то соседние кластеры? Например, те, расстояние от сэмпла до центра которых сопоставимо с расстоянием от сэмпла до его кластера. В общем, тут можно придумать эмпирику, ради экономии вычислений берущую соседей только при достаточном удалении сэмпла от центра его кластера. 3) На сэмплах кластера (и, при необходимости, сэмплах его соседях) запускаем knn. Число примеров в этом одном или нескольких кластерах будет в разы меньше, чем N - во столько же раз и ускорится knn. Т.е. через пару-тройку десятков классификаций сэмплов - компенсируем время, затраченное на предварительную кластеризацию, и затем начинаем работать в плюс (по сравнению с постоянным запуском knn по всем N сэмплам)
  6. deep learning

    >Так для того, чтобы визуализировать то, что находится в глубоком слое, надо пройти от него обратно к первому. > Берем карту коэффициентов, и собираем из образов предыдущего слоя картинку как в методе главных компонент. > Затем то же самое повторяем с предыдущими слоями. > В результате, каждая картинка будет иметь размер входного слоя. С опозданием на месяц кину ещё один вариант решения. Берём любой образ, на котором нужный нам "глубокий" нейрон стал победителем среди своих соседей (выдал наибольший сигнал). И начинаем решать обратную задачу - так менять входной образ, чтобы ещё больше максимизировать выходной сигнал данного глубокого нейрона с одновременным уменьшением сигналов его соседей. Т.е. задача обучения с учителем, эталонные коды (1 и -1 или 1 и 0 для нейронов) очевидны. Метод решения - обычный бэкпроп, только обучающий не веса сети, а значения входных сигналов. Т.е. если один глубокий нейрон реагирует на мужика, другой - на бабу, а на входе сети - картинка из камасутры, то "обучение" картинки может убрать с картинки ненужное (бабу или мужика), т.к. мы убираем то, на что реагировал другой нейрон (чья реакция нам не интересна)
  7. >возможно ли делать как то поиск ближайших K соседей не загружая все семплы в память? Я бы сначала раскластеризовал (или заквантовал - если кластеров в данных нет) данные методом динамических ядер на достаточно большое число кластеров/квантов, а knn запускал только для того кластера, к которому относится точка, и для нескольких смежных кластеров. Если данных куча (сотни тысяч) - динамические ядра в онлайн-режиме коррекции за достаточно малое число итераций хорошо устаканиваются. Т.е. десяток-другой прокруток всей выборки (для кластеризации) - а потом работай внутри отдельных кластеров. Я бы для этого ещё и выборку переписал в другом порядке (сэмплы одного кластера идут друг за другом) - чтобы винт читал длинные последовательные блоки данных (кластеры целиком), а не бегал взад-вперёд то за одним, то за другим сэмплом
  8. На английском - не называется. Это русская придумка (см нейрокнижку Жени Миркеса) Проверять результаты - так же, как пишут про LDA. У нейросетки-то целевая функция будет в виде двух макрослагаемых - суммы (по всем классам) сумм внутриклассовых расстояний (от точки до центральной проекции для её класса) и суммы межклассовых расстояний (между центрами проекций классов). Отнормировать все нужные слагаемые аккуратно (на число классов или на число точек в классе) - и управляйте нужным отношением ratio of interclass variance to intra-class variance через добавление ещё одного множителя-коэффициента (к какому-то одному из макрослагаемых).
  9. нейронная сеть

    mrgloom >еще цифры можно исказить рэндомно И нейросеть тоже можно исказить рэндомно См. препринт "Improving neural networks by preventing co-adaptation of feature detectors " Джеффри Хинтона сотоварищи. Правда, не знаю - насколько сильные ручные переделки библиотечного (OpenCV) нейросетевого кода для этого могут потребоваться.
  10. Уточнение контура объекта

    kazanOpenCV был вроде такой алгоритм для задач трекинга объектов - но в полвторого ночи мой склероз отказывается вспоминать его название
  11. Если вектора будут одинаковой длины - я бы действовал грубой силой. Нелинейный проектор - это многослойный персептрон, у которого число вых.нейронов равно желаемой размерности подпространства. Обучение - с помощью "нелокальной" целевой функции (такой, которая не позволяет вычислить невязки и производные для одного примера без знания того, как сеть сработала на остальных примерах). Функция эта штрафует примеры каждой выборки за отклонение от среднего вектора их проекций, и максимизирует расстояния между средними векторами проекций выборок. Придётся, правда, поиграться с относительным весом каждого из штрафных макрослагаемых (за внутривыборочное расстояние между проекциями и за расстояния между средними для проекций выборок).
  12. Спасибо. Не то, что хочется - но если не найду ничего иного... Хотелось именно чего-то простенького. А 3мб исходников - это для моего проекта как из пушки по воробьям.
  13. Выбор камеры

    У меня тоже 905. Брал чисто под монитор Самс204, за которым сижу до сих пор (20дюймовик классической пропорции 4:3 c разрешением 1600*1200 - узкоглазые мониторы мне неудобны). Но в ширпотребных (пусть и топовых) камерах прогресса нет уже года 2 как минимум - их матрицы по прежнему двухмегапиксельные (под разрешение FullHD), а более высокое разрешение достигается интерполяцией.
  14. От либы нужно только чтение и распаковка файла в память. Т.е. вся работа с библиотекой будет заключаться (в идеале) в единственной строке навроде: BYTE *RGBbuffer=ReadJPEGFile(filename,&width,&height); Я бы воспользовался привычным классом из поставки борландовской (ныне абракадабровской) среды разработки - но клиенту нужна переносимость на никсы и отсутствие любых лицензионных заморочек. Поэтому либе необходима кроссплатформенность и сырцы с гнушной лицензией. Ну и безпроблемная компилируемость компилятором gcc, в таком случае. Кто-нибудь может посоветовать вариант?
  15. Вычитание фона

    Ну и я немного скажу по нарытому. В общем, нашёл достаточно много интересного. На ряд вопросов, которые я задавал, можно дать такие ответы а) Codebook всё-таки смогли перенести на GPU (CUDA) и получить 12кратное ускорение. Но более простой алгоритм-предок (Horprasert et al, 2000) с одним "кодом на пиксел дал почти 100кратный прирост скорости на видяхе. б) ViBe (статья 2011 года) будет поточнее Codebook'а и побыстрее на обычном проце. И почти не теряет в качестве при переходе от цветного изображения к ч/б. Т.е. лично мне, наверно, стоит Codebook пропустить.
×