2expres 7 Report post Posted July 25, 2017 Наткнулся на сегментацию нейросетью. Результат очень впечатлил. Но возник вопрос с быстродействием. Это обработка в реальном масштабе времени? И каким компьютером? Share this post Link to post Share on other sites
iskees 32 Report post Posted July 25, 2017 http://5argon.info/portfolio/d/SegNetSummary.pdf на тесле 500*500 пикселей 33мс, на cpu 10секунд Share this post Link to post Share on other sites
2expres 7 Report post Posted July 27, 2017 В 25.07.2017 at 21:20, iskees сказал: на тесле 500*500 пикселей 33мс Спасибо за ответ. Разбирал структуру CUDA. У меня почему то все задачи по компьютерному зрению сводятся к последовательному прохождению каким-либо окном по изображению и составлению таблиц. Последовательное прохождение по изображению хорошо работает с памятью, т.к. непосредственно работаю с кешем. А вот создание таблиц - это кошмар для кеша, если таблица занимает несколько мегабайт памяти. Так как неизвестно в какую область таблицы я перейду на следующем шаге. Структура CUDA (может я ее не правильно понял) будет отлично работать только для последовательной обработки изображений. Пример, изменение яркости изображения, когда идет последовательная подкачка памяти. А как работать с таблицами в несколько мегабайт? Простейший пример, на мой взгляд неэффективности CUDA: сделать цветную гистограмму изображения(т.е. посчитать количество пикселей каждого цвета). Даже если ограничимся 6 разрядами каждого цвета RGB, итого 18 разрядов. Размер таблицы 1 МегаБайт. Share this post Link to post Share on other sites
iskees 32 Report post Posted July 27, 2017 Если вы случайно обращаетесь к памяти то никакая архитектура не поможет. Ваш пример немного не понятен, вы хотите общую гистограмму всего изображение или скользящих окон. Для общей гистограммы, так там последовательное обращение будет внутри каждого потока, а результат в разделяемой памяти А для скользящего окна, если окно достаточно крупное можно использовать интегральное изображение (по одному на регистр) и на порядок сократить обращение к глобальной памяти. 1 Share this post Link to post Share on other sites
2expres 7 Report post Posted July 28, 2017 10 часов назад, iskees сказал: Ваш пример немного не понятен, вы хотите общую гистограмму всего изображение или скользящих окон. Пример приведен для всего изображения. Да изображение я могу разбить на части и обрабатывать разными процессорами. Но создаваемая таблица размером 1 Мб должна быть доступна для всех процессоров и каждый процессор должен записывать результат непредсказуемо или в начало или в конец или середину этой таблицы. И основное время будет уходить не на вычислительные процессы, а на обращение к памяти. Как можно реализовать по другому? На CPU я могу прогрузить таблицу в кеш 2 или 3 уровня увеличив быстродействие. Как это реализовать на GPU быстрее, чем на CPU? Share this post Link to post Share on other sites
Nuzhny 238 Report post Posted July 28, 2017 На GPU будут совсем другие алгоритмы. Например, в первом kernel одна workgroup будет обрабатывать участок изображения 64х64 и сделает для него не полную гистограмму, а список того, что ей попалось. А уже второй kernel будет объединять эти результаты в глобальную гистограмму в global memory. Ещё можно применить небольшую компрессию и считать отдельно не каждый цвет, а объединять соседние в одни бины. Например, брать кубик 3х3х3 как один бин в гистограмме. Небольшой проигрыш в точности, но очевидный выигрыш в скорости. Да, программирование под видеокарты - это не такое уж простое занятие. Share this post Link to post Share on other sites
2expres 7 Report post Posted July 28, 2017 4 часа назад, Nuzhny сказал: Да, программирование под видеокарты - это не такое уж простое занятие. Я с Вами полностью согласен, поэтому хочу понять какие классы задач можно решать GPU. Если можно решить выше приведенный примитивный пример, то стоит GPU осваивать. На GPU хорошо решаются задачи выделения границ, получил частичку изображения и записал туда же откуда и взял. Это будет на порядки быстрее чем на CPU. 4 часа назад, Nuzhny сказал: можно применить небольшую компрессию Компрессию и так уже сделали уменьшив разрядность с 24 до 18. Дальнейшие уменьшение разрядности приведет к заметным искажениям. А размер таблицы гистограммы не зависит от размера изображения. 4 часа назад, Nuzhny сказал: в первом kernel одна workgroup будет обрабатывать участок изображения 64х64 и сделает для него не полную гистограмму, а список того, что ей попалось. Хорошо получаем множества таблицу другого вида, состоящую не из одного значения(количество пикселей данного цвета ), а из двух(номер цвета и количество пикселей). А вот задача получить конечную таблицу будет получить сложнее, чем просто посчитать цвета в изображении. На мой взгляд CPU данную задачу решит быстрее. Share this post Link to post Share on other sites
Smorodov 569 Report post Posted July 28, 2017 Что хорошо реализуется, а что плохо, можно прикинуть изучив основные паттерны, например здесь: http://my-it-notes.com/2013/06/gpu-processing-intro-cuda-opencl/ на каждый из них, при желании, всегда можно найти примеры реализации. Share this post Link to post Share on other sites