Недавно Шон Филлипс поделился в Твиттере несколькими увлекательными снимками экрана и видео на YouTube Trinity, приложением JavaFX, над которым он работает.

Он работает инженером-программистом в Лаборатории прикладной физики Университета Джона Хопкинса (JHUAPL) и специализируется на визуализации данных для нескольких проектов. JHUAPL работает над различными проектами, начиная от медицинской работы, создания дронов, киберзащиты и интерфейсов мозг-компьютер и заканчивая системами окололунной защиты.

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

Основываясь на множестве входных данных, Trinity помогает оценить, дают ли модели машинного обучения правильные результаты. Искусственный интеллект — увлекательная технология, но как доказать, что модель работает правильно? Как исследователи могут погрузиться в огромные объемы данных, чтобы оценить результаты?

Trinity позволяет пользователям перемещаться и исследовать сотни слоев в моделях ИИ и гиперпространственных данных, визуализируя их в 3D.

История проекта

Trinity является побочным продуктом более раннего проекта Neurally Enhanced Operator (NEO), поэтому его название было найдено во вселенной Matrix.

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

Шон сознательно выбрал Java для обработки больших наборов данных на высокой скорости в многопоточной среде, а JavaFX предоставляет инструменты 2D и 3D для визуализации всего этого.

Какие данные используются

Поскольку этот инструмент используется в различных проектах, мы рассмотрим один вариант использования: интерфейсы мозг-компьютер (BCI). Для этих проектов данные собираются с помощью неинвазивных (головные уборы с множеством кабелей) и инвазивных (мозговые импланты) датчиков.

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

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

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

Эти данные могут обрабатываться Trinity в виде файлов JSON или через ZeroMQ для оперативных данных со скоростью до 20 000 сообщений в секунду. Анализируя гиперпространственные нейронные данные в Trinity и семантическое значение, выдаваемое моделью, ученые, работающие над проектом, могут оценить эффективность своих моделей.

Инструменты визуализации

Приведенные ниже видеоролики основаны на одном 14-минутном эксперименте, в ходе которого создается файл JSON объемом 100 МБ с данными.

Этот набор данных очень плотный как по вертикали, так и по горизонтали, со многими векторами данных, содержащими в общей сложности более одного миллиона точек данных.

Инструмент гиперповерхности

В первом видео показан инструмент, используемый для визуализации гиперразмерных входных данных. Это необработанные сигналы от BCI, собранные за определенное время. Есть 418 нейронных сигналов, расположенных горизонтально слева направо. Ось Z, уходящая «в экран», — это время. Ближайшие к вам данные имеют отметку времени 0, а конец записи находится дальше всех «внутри» экрана.

Величина нейронного сигнала может быть положительной или отрицательной и отображается в цветовом диапазоне от красного (= крайний) до синего (= нейтральный). Большинство сигналов можно интерпретировать как шум (синий).

Цветные шипы показывают, когда на экране появлялось изображение, и мозг участника становился более активным. Этот инструмент является интерактивным, позволяя исследователю глубже изучить спайки.

Гиперпространственный инструмент

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

В этом видео вы видите, как модель обрабатывает данные BCI через декодер через семантическое пространство, чтобы интерпретировать изображение, увиденное участником. Это позволяет исследователям взглянуть на данные визуально, вместо того, чтобы просматривать множество строк данных и пытаться найти в них закономерность.

Это помогает им определить, правильно ли модель декодирует и обрабатывает данные.

Почему Java и JavaFX — идеальные инструменты

Многие языки программирования могут обрабатывать миллионы точек данных, Java позволяет делать это быстро, а также обеспечивает простую в реализации визуализацию.

Чтобы Trinity могла свободно визуализировать все эти данные, она должна вычислить результаты в течение 15 миллисекунд. Только тогда можно будет создать плавный пользовательский интерфейс со скоростью 60 кадров в секунду. С Java решаются две самые большие проблемы: обрабатывать огромные объемы данных «за кулисами», обеспечивая при этом оптимальное взаимодействие с пользователем!

Создание 3D-рендеринга может быть сложнее, чем традиционные 2D-пользовательские интерфейсы, это действительно дополнительное измерение, которое нужно освоить как визуально, так и в коде! JavaFX имеет фантастическую систему 2D и приличное 3D. Это не идеальное решение для 3D-игры, но идеально подходит для варианта использования Trinity.

Шон считает, что с некоторой дополнительной любовью и заботой 3D-реализация JavaFX может стать отраслевым стандартом для многих других приложений, как только будут добавлены некоторые недостающие функции, такие как пользовательские шейдеры.

Что используется для Троицы?

Trinity создана благодаря множеству инструментов, предоставляемых сообществом Java:

  • Apache NetBeans, Шон никогда не перестанет использовать его в качестве своей IDE.
  • OpenJDK 18
  • OpenJFX 18
  • Мавен
  • Gradle для jlink + jpackage: собственные развертывания
  • FXyz3D: 3D-визуализация JavaFX и библиотека компонентов
  • Charts: библиотека научных диаграмм на JavaFX
  • LitFX: специальные 3D спецэффекты
  • JeroMQ: чистая Java-реализация ZeroMQ

Заключение

Шон признает, что у него есть мнение о Java, в конце концов, он чемпион Java!

Но он твердо убежден, что Java+JavaFX — одна из очень немногих комбинаций, которые могли бы предоставить ему инструменты, необходимые для выполнения этой работы за то время, которое у него было.

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

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

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

Как он утверждает: «Веб-приложения подходят для решения более простых задач. Ограниченное время, которое у меня есть в этой жизни, я хочу потратить на интересные вещи, а не на веб-приложения! Поскольку большую часть этого проекта я выполнил в свободное время с ограниченным бюджетом, я выбрал самые мощные инструменты, которые мог использовать: Java и JavaFX».

Первоначально опубликовано на https://foojay.io 9 декабря 2022 г.