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

maxfashko

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

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

  • Посещение

  • Days Won

    2

Сообщения, опубликованные пользователем maxfashko


  1. Добрый день. А как собственно определяется тангаж и крен ЛА? Для примера представим, что на нашем аппарате установлены камеры, которые передают показания бортовому вычислительному кластеру. К примеру имеется камера, установленная на передней части ЛА. Один из модулей в вычислительном кластере умеет определять линию горизонта, используя кадры с данной камеры. Тогда мы должны:

    1) Взять за точку отсчета линию на камере, относительно которой будем сравнивать реальную линию горизонта.

    2) Программно определяем на изображении реальную линию горизонта.

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


  2. 24 минуты назад, Smorodov сказал:

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

    Я ведь правильно понимаю, что изображение аннотируется в соответствии со знанием о моделируемой сцене?

    Если посмотреть видео примера ( минута 7 )

     

    на камере отражающей аннотацию, нет некоторых объектов. Или это задано в настройках, или еще чего.


  3. Добрый день. Наткнулся на интересный тренажер для БПЛА. Кто-то уже пробовал?

    https://github.com/Microsoft/AirSim

    По поводу генерирования датасета говориться следующее:

    Цитата

    There are two ways you can generate training data from AirSim for deep learning. The easiest way is to simply press the record button on the lower right corner. This will start writing pose and images for each frame.  There is a Log Viewer provided that can visualize the streams of data that are published by the simulator (and your drone).

    С виду этот LogViewer не имеет ничего полезного для автоматического аннотирования сцены. И вообще не понятно, возможно ли вытащить аннотированые изображения из тренажера.

    • Like 2

  4. Здравствуйте! Немного не понимаю как формат аннотации датасета MS COCO -  "RLE" перегнать в бинарную маску. Я понял что это последовательность координат, но конвертировать не получается. Кто-нибудь занимался такими вещами, как это делается?

     


  5. 11 час назад, mrgloom сказал:

    >А что за информация в skin_no_skin.txt?

    https://github.com/mrgloom/Simple-skin-detection/blob/master/tree/tree.py#L10

    Data in format [B G R Label]

     

     

    Тут пишут про размер входных изображений 600×800 http://xiaoyongshen.me/webpage_portrait/index.html

     

    Matting как я понял не обязателен, он дополнительно даёт 'мягкие' границы на пушистых объектах типа волос и т.д.

     

     

    p.s. векторизация и оверсегментация это другая задача.

    Я скачал, поковырялся и понял, что без проблем это не заточить под мой пример. Начиная от переписывать код матлабовский, до проблем усреднения маски. 

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

    Его маттинг можно использовать только для головы и волос.

    Выполняем поиск морды-лица на картинке, выделяем необходимые точки, например овал лица. Подаем кропнутую область в grabcut ( он кстати неплохо удаляет фон от волос). Создаем маску для grabcut, где овал зальем 1. Далее используем сегментированное после grabcut изображение для создания маски на вход маттингу, заливая область волос серым. И только после этого в дело вступает matting.

    Только вот на всю сегментации уйдет около 30 секунд на процессоре. А так метод вроде рабочий.

    А вообще, все же необходимо еще собрать данные для обучения. Необходимы еще человеки.

    У меня не большие знания о pascal VOV****. Ведь имеются там изображения с полной аннотацией класса человек? Есть ли отличия в версиях по годам? Не считая кол-ва классов и кол-ва картинок? Какую лучше использовать?


  6. В 03.03.2017 at 15:22, mrgloom сказал:

    Можно тупо попиксельную классификацию попробовать.

    Репа несколько не доделанная:

    https://github.com/mrgloom/Simple-skin-detection

     

    Датасет есть?

    А что за информация в skin_no_skin.txt?

    59 минут назад, 2expres сказал:

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

    Я не знаю что такое  meanShif. За сколько времени он обрабатывает данные фотографии?

    Что Вы будете делать с большим количеством сегментов, при "реалистичной" сегментации? Как вы их обьедените, если задача стоит не в детектировании объекта, а точной попиксельной сегментации?


  7. 2 часа назад, 2expres сказал:

    Результат сегментации моей программой без применения OpenCV, нейронных сетей и различных библиотек в векторном формате *.svg. Время обработки менее 1 сек на на AMD 1800+. Результат без подбора коэффициентов получили результаты 2 фотографий. Сегменты можно просмотреть с помощью CoralDraw предварительно разгруппировав объект. Результаты:

    00094.svg

    00338.svg

    P.S. Результат такой не красивый, т.к. введены ограничения на площадь сегмента и мелкие сегменты просто отбрасываются, чтобы не получился слишком большой svg файл.

    Интересный эффект. Похоже чем то на meanShift. Только грубее.


  8. Да, это все пробовал, и переменную импортировал в bash_profile. Все равно при запуске всегда пишет 1 поток. По нагрузке видно, что активно работает только одно ядро.

    Я тут подумал вот о чем, ребята http://www.cse.cuhk.edu.hk/leojia/projects/automatting/index.html использовали заранее заготовленную усредненную маску. Так как у них там изображения однотипны. А если подавать сети на обучение маску конкретного примера, так как в моем случае изображения не однотипны?


  9. Smorodov, код работоспособный, отлично. Только вот на i5 4600 "я съел еще этих мягких булок да выпил чаю - много чаю" Имеется способ оптимизировать код? Или сразу переписывать на cuda?


  10. Сейчас GrabCut и используется в качестве основного алгоритма сегментации после сетки. Но даже grabcut не спасает от "артефактов" ресайза. Дополнительно использую детектор кожи. Так же использую порог, который срабатывает в окрестности 5 пикселей от границы изображения; и если повезет с полностью светлым фоном, будет захвачена граница изображения, которую сеть из-за ресайза не захватила. 

    Разброс снимков большой. Могут быть изображения с высоким контрастом на белом фоне, так и зашумленные лишними предметами. Соответственно на каждый метод найдутся свои плюсы и недостатки.
    Детектор кожи к примеру любит активироваться на напольное покрытие или бежевые стены, что не очень радует. 
    При использовании порога - отличный результат будет получен на фото 00094, но на 00338 получим кашу в нижней части изображения, да и тень еще скорее всего захватим; в итоге получиться "переуточнение" границ, что тоже не хорошо.

    Matting Посмотрю, интересно.

    00064.jpg

    00094.jpg

    00338.jpg

    00507.jpg


  11. У меня на работе вот этот сайт с форумом открывается только через тор сеть:o

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

    К тому же сетка там рекурсивная что ли. В отличие от segnet, где одни только свертки и пулы.

    Не знаю, такую сеть вообще можно легко переделать под нужный размер картинок?

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


  12. Smorodov, cпасибо за материалы!

    Задача состоит в уточнении границы, да, и как конечный результат - улучшения качества сегментации.

    К примеру имеем изображение пропущенное через нейронку. Размер изображения на входе ~ 200*300. Размер реально используемого изображения 1500. При ресайзе сегментированной сетью маски до значения 1500 пикселей, получается очень хороший зубчатый эффект. На примере розовым цветом залита область, сегментированная сетью; под данной областью располагается исходное изображение ( или вокруг данной области, кому как удобнее ). Как видно, бинаризацией в данном случае проблему не решить, а вот floodfill справляется очень хорошо. Проверял реализацией magickEaser в Photoshop с низким интервалом.

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

    test.JPG


  13. Добрый день. Рябата, подскажите реализована ли где-нибудь следущая идея алгоритма сегментации, и не пытаюсь ли я придумать велосипед?

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

    Таким образом, алгоритм позволит отделить от фона границу объекта с высоким контрастом, не затронув границу с низким контрастом ( например градиент на нижней границе риуснка )

    Объяснил как смог. Мне интересно вычисление значения для алгоритма floodfill, на основе чего оно будет вычисляться?

    Без имени-1 копия.JPG


  14. Занятно, спасибо за статью. Нужно в общем пробовать это дело пока стандартными питоновскими методами пытаться решить, для понимая возможностей. Но как я понимаю flask и вообще питон тут не к месту. Реалтайм который мне необходим питон не обеспечит. 


  15. Да, это я понял:). Ожидал чуда вроде:

    Обработка одного файла равна 0.1 с. на  gpu 4 gb ram. Сеть ест 3 gb ram. Запускаем сразу 100 потоков, каждый обрабатывает 1 файл, и вуаля - 100 файлов обратнаны за 0.1 с.:ph34r:


  16. Думаю не подходит. Не обязательно делать привязку к cpu. Идея вообще такая:

    На сервер стучится до 100 пользователей, которым необходимо обработать данные, пропустив их через нейронку. Новые данные поступают в очередь, и worker распределяет их по "потокам". С gpu, это возможно сделать? Что если у каждого юзера имеется до 200 файлов? Здесь необходима параллельная обработка, чтобы не было задержки у конкретного юзера.

    Причем запускать несколько экземпляров процесса тоже не рационально в связи с нехваткой памяти железа.


  17. 3 часа назад, mrgloom сказал:

    Что то я сомневаюсь, что это невозможно на CPU

    Про процессор. Я пробовал запустить 2 процесса ( 2 скрипта ), каждый разворачивал сеть и принимал данные на классификацию. Так вот, время обработки одного изображения при одном запущенном процессе ~2.5 sec., при двух запущенных процессах ~ 5-6 sec.

    Я подозреваю, что виной всему openblas. В bash_profile я выставил export OPENBLAS_NUM_THREADS=(16).

    Когда я собирал caffe с blas - такого эффекта не наблюдалось. Время обработки одного изображения было ~9 sec. И при запуске двух процессов замедления не было обнаружено.

     


  18. Добрый день.

    Как реализовать параллельную классификацию на развернутой в памяти сети используя Caffè. 

    То есть не класифицировать массив данных поочередно., а скажем запустить 100 потоков и цеплять оттуда данные на обработку.

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

    На процессоре это оказалось не возможно, поток ждет, пока не завершиться предыдущий.


  19. Здравствуйте!

    Интересует собственно, какие вы знаете алгоритмы сегментации реализованные с поддержкой вычислений на gpu.

    А задача такая - имеется исходное изображение ( rgb ), имеется маска при помощи которой необходимо "отсегментировать" исходное изображение ( 1 - объект, 0 - фон )

    В данный момент использую алгоритм grabcut реализованный в opencv. Справляется с поставленной задачей очень-очень хорошо, но есть недостатки:

    Для качественной сегментации одного изображения требуется 2 запуска алгоритма. 

    1 - первичное уточнение прямоугольной областью

    2 - Удаление фона

    Так как в opencv grabcut вычисляет все на cpu, получается ну очень долго ( 4 - 5 секунд: img 1500*2500px )

    Nvidia реализовала очень давно grabcut, и запихнула все это дело в примеры cuda. Но так как cuda обновилась уже несколько раз, этот код не рабочий на новых версиях cuda.


  20. Добрый вечер. В университете дали задачу простой классификации. Определить, что на фото имеется президент РФ.

    Я не понимаю как происходит аннотация изображений для обучения нейросети.

    Я пополнил выборку 1000 изображениями, в которых 500 фото президента и 500 фото обычных людей.

    Мне необходимо как я понимаю 2 класса: человек, президент.

    Вообще, где посмотреть как аннотировать, тренировать сети на классификацию (любой фреймворк)?


  21. Добрый вечер. Чем воспользоваться для следующей задачи:

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

    - ББ

    -Насыщенность

    -Яркость

    -Цветовой баланс

    Что есть в сети данные параметры, как их описать и использовать?


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

    ==5705== Profiling result:
    Time(%)      Time     Calls       Avg       Min       Max  Name
     73.18%  24.757ms         1  24.757ms  24.757ms  24.757ms  void cv::cuda::device::resize_area<cv::cuda::device::IntegerAreaFilter<cv::cuda::device::BorderReader<cv::cuda::PtrStep<uchar3>, cv::cuda::device::BrdConstant<uchar3>>>, uchar3>(uchar3, cv::cuda::PtrStepSz<cv::cuda::PtrStep<uchar3>>)
     26.79%  9.0619ms         1  9.0619ms  9.0619ms  9.0619ms  [CUDA memcpy HtoD]
      0.04%  12.992us         1  12.992us  12.992us  12.992us  [CUDA memcpy DtoH]

×