Комментарии 16
А я минимального размера приложения которое получается
Целью статьи было поделится знаниями по применению нейросетей на 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?
Зачем демонстрировать .pro файлы? Гораздо полезнее было бы реализовать и показать на cmake! Никто уже .pro не использует в нормальных больших проектах, лишний апендикс
В целом и общем статья может показаться полезной.
Разработка кросплатформенного приложения на Qt с использованием нейросетей, обученных на tensorflow