Как стать автором
Обновить

Разработка кросплатформенного приложения на Qt с использованием нейросетей, обученных на tensorflow

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров9.4K
Всего голосов 20: ↑17 и ↓3+14
Комментарии16

Комментарии 16

НЛО прилетело и опубликовало эту надпись здесь

А я минимального размера приложения которое получается

Приложение вместе со обученной нейросетью получается примерно 30MB плюс размер весов нейросети.

Целью статьи было поделится знаниями по применению нейросетей на c++ с использованием Qt, не демонстрация конкретного приложения, в статье есть ссылка на github с готовым проектом приложения.

Отмечу достаточно важный, с точки зрения, конечного результата факт. Так собранный Tensorflow будет очень медленно работать. Моя команда 2 года назад сравнивала inference и получалось, что на Python работает в 2 раза быстрее. И, вопрос: зачем тогда C++? Так вот, чтобы собрать правильно, есть смысл покапаться в том, как собирают pip-пакет с Tensorflow, взять оттуда настройки bazel и собирать с ними.

Если вы разбирались может поделитесь как это сделать, ещё отмечу, что я пытался использовать делегат nnapi для чтобы задействовать аппаратное ускорение на моём redmi note 7, там в базеле для этого нужно nnapi как зависимость добавить, но программа при этом крашилась, пока не разобрался почему.

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

Я замерил что код python и c++ у меня дают примерно одинаковое время инференса.

Год назад проблема еще была, у меня есть подтверждение от третьей стороны. Может сейчас TF собирается по другому и работает теперь быстрее после дефолтной сборки. А может вы замеры не так делаете.

Если хотите, могу посмотреть. Можете оформить в виде репо ваши замеры времени на обоих ЯП и приложить список команд для сборки TF. Очень хочется верить, что Вы правы, но мой внутренний скептик кричит, что это не так :)

Я не знаю как оформить в виде репо, я замерял текущее время непосредственно до и после инференса на обоих моделях у меня получилось следующее:

Если я при компиляции tensorflow не использовал опцию --copt=-march=native
то есть не оптимизировал для своего процессора, то в обоих случаях у меня получалось около 100-110 мс. Если же я использовал данную опцию, то на с++ у меня получалось 50-60мс.

python писал: This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operati
ons:  AVX2 FMA

То есть если бы я компилировал TensorFlow и для python у меня скорее всего тоже получилось бы примерно 50-60мс.

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

Спасибо автору огромное. Прям ложка к обеду. Работаю над проектом на с++/qt с применением нейросетей. Qt был выбран как кроссплатформенной решение, с перспективой написания приложений под андроид. И вот стать как раз кстати. Мне как раз и нужна была инструкция для входа в реализацию приложения для андроид.

Кстати, размер в 300мб я не считаю минусом в современное время. Думаю должно быть понимание того, что приложения должны ставится на мощные телефоны. Это как с играми, никто делая киберпанк. Хочешь играть - купи мощный комп. Тоже мы и должны делать с телефонами.

Игра геншинтмпакт весит более 15гб и мелочится на +-300мб не стоит.

А как насчёт PyTorch?

Я знаю только Tensorflow, можно ли так же с PyTorch не знаю. Я мог что то упустить из того что делал, так что если что не получается спрашивайте.

Обратите внимание, я ещё про оптимизацию под андрюшку добавил.

Зачем демонстрировать .pro файлы? Гораздо полезнее было бы реализовать и показать на cmake! Никто уже .pro не использует в нормальных больших проектах, лишний апендикс

В целом и общем статья может показаться полезной.

Не кричите. Еще как используют.

Это легаси, Qt рекомендует использовать cmake, развитие qmake прекращено.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации