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

maxfashko

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

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

  • Посещение

  • Days Won

    2

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

  1. Добрый день. А как собственно определяется тангаж и крен ЛА? Для примера представим, что на нашем аппарате установлены камеры, которые передают показания бортовому вычислительному кластеру. К примеру имеется камера, установленная на передней части ЛА. Один из модулей в вычислительном кластере умеет определять линию горизонта, используя кадры с данной камеры. Тогда мы должны: 1) Взять за точку отсчета линию на камере, относительно которой будем сравнивать реальную линию горизонта. 2) Программно определяем на изображении реальную линию горизонта. Я верно мыслю? По каким далее формулам мы получим разницу между текущим тангажом и креном, и той линией горизонта которую нам насчитал программный модуль, для того чтобы в дальнейшем передать информацию автопилоту? В свою очередь последний будет корректировать тангаж и крен.
  2. Эти датчики уже используются. Задача стоит именно средствами компьютерного зрения дополнительно расчитывать отклонения.
  3. Добрый день. Наткнулся на интересный тренажер для БПЛА. Кто-то уже пробовал? https://github.com/Microsoft/AirSim По поводу генерирования датасета говориться следующее: С виду этот LogViewer не имеет ничего полезного для автоматического аннотирования сцены. И вообще не понятно, возможно ли вытащить аннотированые изображения из тренажера.
  4. Я ведь правильно понимаю, что изображение аннотируется в соответствии со знанием о моделируемой сцене? Если посмотреть видео примера ( минута 7 ) на камере отражающей аннотацию, нет некоторых объектов. Или это задано в настройках, или еще чего.
  5. Здравствуйте! Немного не понимаю как формат аннотации датасета MS COCO - "RLE" перегнать в бинарную маску. Я понял что это последовательность координат, но конвертировать не получается. Кто-нибудь занимался такими вещами, как это делается?
  6. Дается ссылка на api https://github.com/pdollar/coco/blob/master/PythonAPI/pycocoDemo.ipynb Там рассказывают как просмотреть файл сегментации, а вот насчет конвертирования там ничего. Я не там ищу?
  7. Я скачал, поковырялся и понял, что без проблем это не заточить под мой пример. Начиная от переписывать код матлабовский, до проблем усреднения маски. Ну а обычный маттинг мне все же не подходит. Иногда граница маски на выходе моей сети слишком далека от сегментируемого объекта; выходит что я подаю на вход маттингу часть изображения заведомо относящуюся к другому классу ( это знаем только мы ). Его маттинг можно использовать только для головы и волос. Выполняем поиск морды-лица на картинке, выделяем необходимые точки, например овал лица. Подаем кропнутую область в grabcut ( он кстати неплохо удаляет фон от волос). Создаем маску для grabcut, где овал зальем 1. Далее используем сегментированное после grabcut изображение для создания маски на вход маттингу, заливая область волос серым. И только после этого в дело вступает matting. Только вот на всю сегментации уйдет около 30 секунд на процессоре. А так метод вроде рабочий. А вообще, все же необходимо еще собрать данные для обучения. Необходимы еще человеки. У меня не большие знания о pascal VOV****. Ведь имеются там изображения с полной аннотацией класса человек? Есть ли отличия в версиях по годам? Не считая кол-ва классов и кол-ва картинок? Какую лучше использовать?
  8. А что за информация в skin_no_skin.txt? Что Вы будете делать с большим количеством сегментов, при "реалистичной" сегментации? Как вы их обьедените, если задача стоит не в детектировании объекта, а точной попиксельной сегментации?
  9. Интересный эффект. Похоже чем то на meanShift. Только грубее.
  10. Да, это все пробовал, и переменную импортировал в bash_profile. Все равно при запуске всегда пишет 1 поток. По нагрузке видно, что активно работает только одно ядро. Я тут подумал вот о чем, ребята http://www.cse.cuhk.edu.hk/leojia/projects/automatting/index.html использовали заранее заготовленную усредненную маску. Так как у них там изображения однотипны. А если подавать сети на обучение маску конкретного примера, так как в моем случае изображения не однотипны?
  11. Может я eigen собрал не правильно? На core i5 всегда при запуске работает 1 поток. Как это исправить?
  12. Smorodov, код работоспособный, отлично. Только вот на i5 4600 "я съел еще этих мягких булок да выпил чаю - много чаю" Имеется способ оптимизировать код? Или сразу переписывать на cuda?
  13. Сейчас GrabCut и используется в качестве основного алгоритма сегментации после сетки. Но даже grabcut не спасает от "артефактов" ресайза. Дополнительно использую детектор кожи. Так же использую порог, который срабатывает в окрестности 5 пикселей от границы изображения; и если повезет с полностью светлым фоном, будет захвачена граница изображения, которую сеть из-за ресайза не захватила. Разброс снимков большой. Могут быть изображения с высоким контрастом на белом фоне, так и зашумленные лишними предметами. Соответственно на каждый метод найдутся свои плюсы и недостатки. Детектор кожи к примеру любит активироваться на напольное покрытие или бежевые стены, что не очень радует. При использовании порога - отличный результат будет получен на фото 00094, но на 00338 получим кашу в нижней части изображения, да и тень еще скорее всего захватим; в итоге получиться "переуточнение" границ, что тоже не хорошо. Matting Посмотрю, интересно.
  14. У меня на работе вот этот сайт с форумом открывается только через тор сеть А эту сетку давненько видел, да. Скачивал пользовался. Они вроде на imageNet картинках обучали. Результаты хуже моих в разы, но если обобщить базу человеков с моей небольшой базой человеков, может быть лучше результат. К тому же сетка там рекурсивная что ли. В отличие от segnet, где одни только свертки и пулы. Не знаю, такую сеть вообще можно легко переделать под нужный размер картинок? Ну а вообще мы отошли от темы:) мне ведь не новая сетка нужна, а способ улучшить качество постобработки после текущей.
  15. Smorodov, cпасибо за материалы! Задача состоит в уточнении границы, да, и как конечный результат - улучшения качества сегментации. К примеру имеем изображение пропущенное через нейронку. Размер изображения на входе ~ 200*300. Размер реально используемого изображения 1500. При ресайзе сегментированной сетью маски до значения 1500 пикселей, получается очень хороший зубчатый эффект. На примере розовым цветом залита область, сегментированная сетью; под данной областью располагается исходное изображение ( или вокруг данной области, кому как удобнее ). Как видно, бинаризацией в данном случае проблему не решить, а вот floodfill справляется очень хорошо. Проверял реализацией magickEaser в Photoshop с низким интервалом. Вот я и подумал, что скользящим окном можно было бы как-нибудь улучшить результат.
  16. Добрый день. Как реализовать параллельную классификацию на развернутой в памяти сети используя Caffè. То есть не класифицировать массив данных поочередно., а скажем запустить 100 потоков и цеплять оттуда данные на обработку. Вопрос именно в том, возможно ли это? И будут ли потоки действительно параллельно заниматься классификацией. И ускорит ли это обработку большого массива данных? На процессоре это оказалось не возможно, поток ждет, пока не завершиться предыдущий.
  17. Занятно, спасибо за статью. Нужно в общем пробовать это дело пока стандартными питоновскими методами пытаться решить, для понимая возможностей. Но как я понимаю flask и вообще питон тут не к месту. Реалтайм который мне необходим питон не обеспечит.
  18. Да, это я понял. Ожидал чуда вроде: Обработка одного файла равна 0.1 с. на gpu 4 gb ram. Сеть ест 3 gb ram. Запускаем сразу 100 потоков, каждый обрабатывает 1 файл, и вуаля - 100 файлов обратнаны за 0.1 с.
  19. Думаю не подходит. Не обязательно делать привязку к cpu. Идея вообще такая: На сервер стучится до 100 пользователей, которым необходимо обработать данные, пропустив их через нейронку. Новые данные поступают в очередь, и worker распределяет их по "потокам". С gpu, это возможно сделать? Что если у каждого юзера имеется до 200 файлов? Здесь необходима параллельная обработка, чтобы не было задержки у конкретного юзера. Причем запускать несколько экземпляров процесса тоже не рационально в связи с нехваткой памяти железа.
  20. Про процессор. Я пробовал запустить 2 процесса ( 2 скрипта ), каждый разворачивал сеть и принимал данные на классификацию. Так вот, время обработки одного изображения при одном запущенном процессе ~2.5 sec., при двух запущенных процессах ~ 5-6 sec. Я подозреваю, что виной всему openblas. В bash_profile я выставил export OPENBLAS_NUM_THREADS=(16). Когда я собирал caffe с blas - такого эффекта не наблюдалось. Время обработки одного изображения было ~9 sec. И при запуске двух процессов замедления не было обнаружено.
  21. Алгоритмы сегментации

    Здравствуйте! Интересует собственно, какие вы знаете алгоритмы сегментации реализованные с поддержкой вычислений на gpu. А задача такая - имеется исходное изображение ( rgb ), имеется маска при помощи которой необходимо "отсегментировать" исходное изображение ( 1 - объект, 0 - фон ) В данный момент использую алгоритм grabcut реализованный в opencv. Справляется с поставленной задачей очень-очень хорошо, но есть недостатки: Для качественной сегментации одного изображения требуется 2 запуска алгоритма. 1 - первичное уточнение прямоугольной областью 2 - Удаление фона Так как в opencv grabcut вычисляет все на cpu, получается ну очень долго ( 4 - 5 секунд: img 1500*2500px ) Nvidia реализовала очень давно grabcut, и запихнула все это дело в примеры cuda. Но так как cuda обновилась уже несколько раз, этот код не рабочий на новых версиях cuda.
  22. Алгоритмы сегментации

    Вообще не припомню чтобы когда-то там в примерах была версия для gpu
  23. Добрый вечер. В университете дали задачу простой классификации. Определить, что на фото имеется президент РФ. Я не понимаю как происходит аннотация изображений для обучения нейросети. Я пополнил выборку 1000 изображениями, в которых 500 фото президента и 500 фото обычных людей. Мне необходимо как я понимаю 2 класса: человек, президент. Вообще, где посмотреть как аннотировать, тренировать сети на классификацию (любой фреймворк)?
  24. Добрый вечер. Чем воспользоваться для следующей задачи: Имеется исходное изображение, откорректированное изображение ( цветовой баланс, яркость, насыщенность, баланс белого и т.д). Необходимо научить сеть выставлять наилучшие значения для данных параметров: - ББ -Насыщенность -Яркость -Цветовой баланс Что есть в сети данные параметры, как их описать и использовать?
  25. cpu быстрее gpu

    Добрый вечер. Провел тесты следующего кода, в котором реализован ресайз фото на процессоре и видеокарте. Оборудование следующее: Intel® Core™ i5-4670 CPU @ 3.40GHz × 4 GeForce GTX 650/PCIe/SSE2 2Gb GDDR5 Ubuntu 12.04 x64 Результаты грустные: gpu 0.4890(sec) / 2.0448(fps) cpu 0.1623(sec) / 6.1632(fps) Неужели gtx 650 очень дрова? Та же ситуация обстоит с pycuda. Тестовый скрипт ( https://wiki.tiker.net/PyCuda/Examples/SimpleSpeedTest ) выводит следующее время: Using nbr_values == 8192 Calculating 100000 iterations SourceModule time and first three results: 0.080705s, [ 0.005477 0.005477 0.005477] Elementwise time and first three results: 0.161862s, [ 0.005477 0.005477 0.005477] Elementwise Python looping time and first three results: 0.780193s, [ 0.005477 0.005477 0.005477] GPUArray time and first three results: 3.765418s, [ 0.005477 0.005477 0.005477] CPU time and first three results: 2.716871s, [ 0.005477 0.005477 0.005477] #код ресайза фотографий #include <iostream> #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include "opencv2/calib3d.hpp" #include "opencv2/cudalegacy.hpp" #include "opencv2/cudaimgproc.hpp" #include "opencv2/cudaarithm.hpp" #include "opencv2/cudawarping.hpp" #include "opencv2/cudafeatures2d.hpp" #include "opencv2/cudafilters.hpp" #include "opencv2/cudaoptflow.hpp" #include "opencv2/cudabgsegm.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/opencv.hpp" using namespace std; using namespace cv; using namespace cv::cuda; void ProccTimePrint( unsigned long Atime , string msg) { unsigned long Btime=0; float sec, fps; Btime = getTickCount(); sec = (Btime - Atime)/getTickFrequency(); fps = 1/sec; printf("%s %.4lf(sec) / %.4lf(fps) \n", msg.c_str(), sec, fps ); } void processUsingOpenCvGpu(string input_file, string output_file); void processUsingOpenCvCpu(std::string input_file, std::string output_file); int main(){ processUsingOpenCvGpu("/home/maksim/Изображения/1.jpg", "/home/maksim/Изображения/1_rG.jpg"); processUsingOpenCvCpu("/home/maksim/Изображения/1.jpg", "/home/maksim/Изображения/1_rC.jpg"); return 0; } void processUsingOpenCvGpu(string input_file, string output_file) { unsigned long AAtime=0; AAtime = getTickCount(); //Read input image from the disk cv::Mat inputCpu = cv::imread(input_file,CV_LOAD_IMAGE_COLOR); cv::cuda::GpuMat input (inputCpu); if(input.empty()) { cout<<"Image Not Found: "<< input_file << endl; return; } //Create output image cv::cuda::GpuMat output; cv::cuda::resize(input, output, cv::Size(), .05, 0.05, CV_INTER_AREA); // downscale 4x on both x and y ProccTimePrint(AAtime , "gpu"); cv::Mat outputCpu; output.download(outputCpu); cv::imwrite(output_file, outputCpu); input.release(); output.release(); } void processUsingOpenCvCpu(std::string input_file, std::string output_file) { unsigned long AAtime=0; AAtime = getTickCount(); //Read input image from the disk Mat input = imread(input_file, CV_LOAD_IMAGE_COLOR); if(input.empty()) { std::cout<<"Image Not Found: "<< input_file << std::endl; return; } //Create output image Mat output; cv::resize(input, output, Size(), .05, 0.05, CV_INTER_AREA); // downscale 4x on both x and y ProccTimePrint(AAtime , "cpu"); imwrite(output_file, output); }
×