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

Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров8.4K
Всего голосов 20: ↑19 и ↓1+20
Комментарии15

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

Здравствуйте, а если увеличить количество разных направлений изменений от светлого к тёмному можно ли улучшить ответ и есть ли в этом реальный смысл?

Здравствуйте, да думаю увеличение количества направлений может улучшить результат. Решение с HOG было в основном использовано для демонстрации одного из классических вариантов решения, сейчас можно использовать решения на базе NN которые будут более точными и функциональными, и возможно сравнимыми по производительности.

Приветствую.
Спасибо за работу.

> Писать или не писать нейронную сеть на С++

С выводом не согласен только, и думаю не я один.

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

Тоже есть опыт уже, когда-то писал свою обертку для использования нс в плюсах, для фр-ворка mxnet, позже и для tensorflow взялся. Заняло массу времени, главное спросить особо негде было (на so тоже ничего), только самому по коду (плюсовому) разбираться придется, потому что это не основной путь использования, а основной как раз на питоне.

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

Сколько у вас реально заняло времени и сил разобраться с плюсовым апи

статья показывает что они буквально такие же (только типы указаны, а в питоне сам догадайся)

только потом всеравно перепишут на питоне

насколько я знаю наоборот пишут на питоне, а потом нейросети переписывают на С++, и не потому что на питоне быстрее, а потому что разработчик на питоне стоит меньше

Тоже есть опыт уже, когда-то писал свою обертку для использования нс в плюсах,

библиотеки питона это буквально уже обёртка над С++ кодом, а не наоборот

статья показывает что они

да, что-то показывает, какое-то сходство есть, а много всего нет, в питоновской обертке не только ведь биндинг ф-ий, а скрытие массы бойлерпл-та, чтобы где-то одной строчкой обойтись и тд

насколько я знаю наоборот пишут на питоне, а потом нейросети переписывают

нет, вы не правы. Фрейм-ки для НСетей уже давно все написаны, переписаны, все написаны на плюсах (и мбыть си еще есть мало). На питоне используют уже, потому что быстрее, проще писать и поддерживать. Стоит не программист буквально, а его время, точнее время для выхода продукта (time to market), потом развитие продукта.

библиотеки питона это буквально уже обёртка над С++ кодом, а не наоборот

уточню. Я писал обертку не для питона, а для исходной либы (которая на плюсах).
Зачем писать обертку, если можно сразу использовать плюсовой интр-с?
А его нельзя просто взять и использовать как на питоне, надо разбираться глубоко, и вся команда не будет этим заниматься. А использовать надо многим (проектов однотипных много, где переиспользуется код база), поэтому пишутся обертки, которые многое скрывают, чтобы в итоге торчали только нужные методы.

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

Еще дополню. Зайдите на любой сайт этих фрейм-ов для нс, и увидите массу туториалов с картинками и примерами (на питоне все конечно), кучу форумов забитых ответами на все вопросы начинающих. Потом поищите "а как на плюсах использовать", увидите куцый пример в папке examples на гитхабе, и все на этом.

 в питоновской обертке не только ведь биндинг ф-ий, а скрытие массы бойлерпл-та

...

кучу форумов забитых ответами на все вопросы начинающих. Потом поищите "а как на плюсах использовать", увидите куцый пример в папке examples на гитхабе, и все на этом.

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

Тут возникает вопрос: не кажется ли Вам, что самостоятельно пришлось разбираться потому, что небыло вот такой статьи на Хабре? И, может быть, если бы Вы ее написали, то идущим по проторенной Вами дороге было бы легче. И все делалось бы "одной строкой"?

Нет, языки разные, находятся в противополож концах сложности, плюсы один из самых сложных, питон наоборот. Никогда на плюсах ничего не будет решаться одной строкой, это не его подход, у него основной приоритет скорость, у питона читаемость. И одной статьей (и даже кучей статей) делу не поможешь, и не надо помогать, каждый язык должен свое дело делать хорошо, что и происходит - плюсы под капотом все соки выжимают из машины, питон предоставляет легкий интр-с пользователю.

А как же Философия Unix и Три принципа Макилроя (пишите программы, которые делают что-то одно и делают это хорошо; и т.д.)? Все как в питоне, для пользователя одна строка, а написано все на си\с++ . И килотонны кода за ширмой, прямо как в питоне. Как пример curl, wget, cat, grep и т.д.

И по поводу "простого питона", вопрос интересный.
Не знаю можно ли тут оставлять ссылку на youtube, рискну. "Простой Python": ложь, большая ложь и метаклассы / Григорий Петров https://youtu.be/_EHgMxtrOmE?si=2oXGghYbMgtt0A08

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

Не всегда имеется возможность использовать Python. Например, на iOS и Android это довольно непростая задача, интерпретатор весит немало, производительность будет так себе с такими прослойками. Тот же Tensorflow использует JNI на Android, а на iOS вообще можно статически слинковать. Если написать нейронную сеть на C++ в виде библиотеки, то в большинстве случаев её можно подключить к любому своему приложению: либо слинковать, либо через FFI

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

Добрый день. Есть ли какие-то данные по сравнению производительности с кодом на Python?

Здравствуйте, в общем случае увеличения производительности не будет, так используется одно и тоже ядро библиотеки. Получить выигрыш в скорости можно, например если будут использоваться специальные методы обработки данных оптимизированные c использованием C/С++/SIMD и таким образом можно исключить преобразование/передачу данных в структуры Python. Такая обработка может быть как в начале pipeline так внутри сети если использовать динамический граф. Ещё как вариант если сеть/pipeline описана на C++ может быть проще работать со специализированными расширениями для того же PyTorch, например если нужен прямой доступ к тензорам(их памяти), так не надо прокидывать специализированную функциональность через python bindings.

Были ли эксперименты по автогенерации кода на с\с++ из кода на python вместо самостоятелтного написания кода на c++?

Ха.. Интересен тест на таком фото

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