Есть специфичные техники как drop connect, sample pairing, mixup (статьи гуглятся по этим названиям), которые независят от весов и модифицируют именно входные данные. При этом, по своему эффекту они ближе к регуляризации, чем к аугментации, так как создают неправдоподбные изображения. Они не являются универсальными, но иногда могут помочь.
На самом деле да, ПЛИС очень разные. Но выбор платформы для конкретного решения часто ограничен какими-то дополнительными факторами, и не стоит бездумно использовать стандартные решения, без оглядки на оборудование. А оптимизированные fp16 для сеток — это тоже прекрасно.
Пример для Intel c SSE4 был тут, для AVX-512 VNNI все еще проще, потому что это расширение специально под нейронные сети. Можно оценить и сложность на элемент матрицы, и прикинуть время, это не выглядит сложной задачей. В первую очередь мы хотели показать, как привычные методы могут повести себя на конкретном не слишком обычном вычислителе, и насколько важно задуматься об архитектуре процессора перед оптимизацией.
Основная фишка нашего продукта заключается в том, что мы выполняем все вычисления непосредственно на устройстве (без использования внешних высокопроизводительных серверов), быстро и точно.
В задаче распознавания паспорта РФ использование EML и интринсиков (для реализации функций, которых пока нет в EML) ускоряет вычисления где-то в 2 раза на Эльбрус-401PC. Сейчас научная статья, включающая эти результаты, находится в печати.
По первому замечанию: Вам действительно интересен код, замусоренный обработкой «хвостика» массива? На производительность это не влияет. Код — элементарный. А тема поста — производительность. Маловероятно, что среди читателей есть разработчики на Эльбрусе, мечтающие именно о 16-битном сложении и надеющиеся на готовую копипасту. Поэтому мы выкинули то, что ухудшило бы подачу материала. Напротив, невыровненность начала массива — это ключевая проблема. Отдельной обработкой «начала» она не лечится. Что же касается второго замечания, то, простите, не ясно, что именно вызывает раздражение. Не уточните?
Спасибо за поздравления)
Вопрос аугментации на GPU обычно рассматривается, когда процесс обучения сетей замедляется из-за недостаточной скорости подготовки данных на лету. Как раз обрезка, поворот, сдвиги, простые яркостные искажения делаются достаточно быстро и на CPU, а вот например маштабирование и проективные искажения иногда переносим на вторую GPU для ускорения раздутия данных.
Очень рады, что Вам понравилось)
Кроме Отцу и Ниблэка мы так же пробовали алгоритмы Nicholas R. Howe Binarization и Sauvola binarization
Скорость работы алгоритма во многом зависит от целого ряда факторов и здесь можно дать несколько ответов.
Например при среднем соотношении скорость — качество (за счёт частоты нарезки окон, определённая нейронная сеть и т.д.) скорость бинаризации одного изображения составляет около 5 секунд при использованни GPU Titan X.
При необходимости повысить качество — время работы возрастает в десятки раз из-за многократного применения сети / сетей.
При необходимости повысить скорость (или впихнуть этого U-net крокодила на мобильник) можно использовать например многопроходную схему:
На первом этапе можно применить несетевой метод бинаризации.
На втором этапе применить сетевой метод только к тем окнам, где возможно находится текст (результат работы 1-го этапа)
На третьем этапе применить U-net сеть для уточния работы алгоритма на 2ом этапе.
Благодаря подобному подходу возможно многократное ускорение алгоритма бинаризации с помощью сетей.
Планов пока нет, но и проблем с этим мы не видим, тем более потому, что Go поддерживается SWIG-ом. Будет заказчик, который попросит Go — будет и поддержка Go. :)
Работа с данными в большей степени происходит на cpu. Именно поэтому, при большом числе раздутий, применяемых к данным, подающимся на обучение нейронной сети, может возникать ситуация, когда предыдущий минибатч уже использовался в обучении, а новый ещё не готов. В такой ситуации gpu простаивает, сетка не учится, время обучения сети увеличивается.
Вопрос аугментации на GPU обычно рассматривается, когда процесс обучения сетей замедляется из-за недостаточной скорости подготовки данных на лету. Как раз обрезка, поворот, сдвиги, простые яркостные искажения делаются достаточно быстро и на CPU, а вот например маштабирование и проективные искажения иногда переносим на вторую GPU для ускорения раздутия данных.
Кроме Отцу и Ниблэка мы так же пробовали алгоритмы Nicholas R. Howe Binarization и Sauvola binarization
Скорость работы алгоритма во многом зависит от целого ряда факторов и здесь можно дать несколько ответов.
Например при среднем соотношении скорость — качество (за счёт частоты нарезки окон, определённая нейронная сеть и т.д.) скорость бинаризации одного изображения составляет около 5 секунд при использованни GPU Titan X.
При необходимости повысить качество — время работы возрастает в десятки раз из-за многократного применения сети / сетей.
При необходимости повысить скорость (или впихнуть этого U-net крокодила на мобильник) можно использовать например многопроходную схему:
На первом этапе можно применить несетевой метод бинаризации.
На втором этапе применить сетевой метод только к тем окнам, где возможно находится текст (результат работы 1-го этапа)
На третьем этапе применить U-net сеть для уточния работы алгоритма на 2ом этапе.
Благодаря подобному подходу возможно многократное ускорение алгоритма бинаризации с помощью сетей.