Почти сразу же после запуска и рекордного роста у Prisma появились «конкуренты». Mail.Ru Group, соинвестор Prisma, выпустил сразу два «клона» — Vinci от команды vk.com и Artisto от my.com. Технический директор компании "2Товарища" Виталий Махинов изучил код трех приложений и разобрался, как они работают и в чем разница между ними.
Не знаю, было ли это командой «сверху» или инициативой проектов — здесь можно долго рассуждать об этичности и стратегии. Я же решил посмотреть на эти продукты с технической точки зрения, насколько «клоны» MRG отличаются друг от друга и насколько они «конкуренты» для Prisma.
Беглый осмотр приложений показывает явное сходство фильтров Vinci и Artisto. Cпустя пару дней, пока я писал эту заметку, приложения получили ряд обновлений и фильтры стали отличаться, но сходство всё равно присутствует. Prisma тем временем по качеству и количеству фильтров ушла уже очень далеко.
Vinci, собственно, и не скрывает, что использует чужой алгоритм обработки изображений. Я не нашёл информации про Artisto, но фильтры очень похожи на те, что показаны как пример в источнике выше. Несмотря на то, что в Prisma нет видео, энтузиасты в сети уже делают целые фильмы под их фильтрами. Какие-то буквально на пару секунд, иные на несколько минут. Можно предположить, что функция обработки видео в Prisma тоже скоро появится.
Кроме чисто пользовательского впечатления я покопался и в «начинке» приложений. Помимо бинарника приложение так же представляет из себя кучу метафайлов. Этот анализ даёт понять, что Artisto и Vinci — это одно и то же приложение с разными иконками или всё же разные разработки. Как я и думал, это разные приложения. Более того, если Vinci, как и Prisma, написан на Swift нативным методом, у меня есть все основания полагать, что Artisto реализован на какой-то кроссплатформенной технологии. В любом случае, это точно разные проекты и разные команды с разным подходом к разработке.
Более ничего интересного при ковырянии приложений я не нашёл, кроме модуля для работы с видео в Prisma, но это и так будет скоро объявлено, я думаю. Также был разный мусор в приложениях, которого вообще быть там не должно. Например, в Prisma валяется фотка друга основателя, 100кб к весу приложения. Подобное всегда ставит в тупик: тратишь кучу времени, чтобы на выяснить, что это, но чаще приходишь к выводу, что это не подсказка и не уязвимость, а просто разработчик положил и забыл.
Но вообще глупо судить ребят за какой-то беспорядок и хаос внутри приложений. Приходится очень быстро делать и заливать непростые вещи. Код приложений ответил на основной вопрос — идём дальше.
Логично, что приложения являются client-server. Приложение делает или берёт фото, отправляет на сервер, он всё обрабатывает и присылает результат. Прелесть нейросети в том, что даже мелкая сеть будет занимать очень приличный объём. Помню, я писал крестики-нолики в институте. Игра с заложенным алгоритмом для бота весила считанные килобайты. С простейшей нейросетью — сотни мегабайт. В ближайшее время мы вряд ли получим рабочую Prisma — как ни назови приложение — с offline-работой. Все клоны будут работать только с наличием интернета. Это нам на руку, поэтому следующим шагом проверим http траффик.
Vinci и Artisto удивили. Со своими серверами они общаются по голому http. Возможно, сделано это не случайно, а в том числе для экономии траффика. Допустим что так, но Vinci не обладал вообще никакой защитой. По голому http загружается фотка, в ответ получается некий хэш. Подставляем его в URL — вуаля, любая фотка с нужным тебе фильтром от Vinci.
Artisto всё же в этом плане оказался более продвинутым. При загрузке видео API также требовал некоего хэша. Так разработчики пытаются обезопасить себя от таких, как я. Помимо самого видео просят хэш, который является чаще всего чексуммой от файла с видео (md5, sha256 и т.п.) плюс ещё что-то, что знают только разработчики. Таким образом при попытке залить файл не через приложение нас ждёт облом. Есть выход — дизассемблировать приложение, искать точку входа для генерации хеша и вытаскивать алгоритм.
Prisma, к слову, защищается примерно так же — с помощью хэша. Помимо этого, весь траффик ходит по https, а сертификат проверяется на источник. Это сильно усложняет попытки снифать траффик, но я решил попробовать провести MITM-атаку. Было обидно после всех махинаций получить API, но обнаружить там сверку по хэшу, однако это правильно. С точки зрения безопасности Prisma снова далеко впереди.
Напоследок я посмотрел входные и выходные данные. Vinci делает фото в 250кб, на выходе имеем 400кб. 2-х секундное видео в Artisto, весом в 430кб, превращается в 240кб mp4-видео. Приложение отдаёт реально mp4-видео. Учитывая качество (никакущее), я был уверен, что найду там GIF и звук отдельно, но никак не видео. Интересно, сколько пользователей онлайн расплавит сервера MRG, которые делают mp4-видео на лету? Кстати, ещё я заметил, что сервера Artisto обрабатывают видео намного быстрее, чем отдают их обратно на устройство. Т.е. время работы Artisto немного утыкается в исходящий канал. Возможно, это просто погрешность моей сети, но с другими подопытными такого замечено не было. Prisma загружает файл в 100кб и на выходе имеем 170кб. При этом что Vinci, что Prisma на выходе дают 1080x1080px квадраты. Скорость работы и Vicni и Artisto на порядок выше, что логично, так как у Prisma на порядок больше активных пользователей. Если доверять статистике Google Play, то у Vinci + Artisto = 110к-550к установок. У Prisma — 10 млн-50 млн установок, даже с учётом того, что приложение Prisma для Android вышло относительно поздно.
В общем, Vinci и Artisto — не такие уж и «клоны» Prisma. А Prisma — не такой уж и «близкий» конкурент для этих приложений. Не смотря на этическую составляющую, MRG запустил 2 технически разных продукта, которые решают разные задачи. Им ещё очень далеко до «идеала» Prisma, которая ушла далеко вперёд и по DAU, и по качеству и количеству фильтров, но проекты настроены серьезно. Обновления приложений выходят очень часто, меняются они с колоссальной скоростью. Стоит ли бояться Prisma?
Лично я думаю, что нет. У них прекрасная команда, которая пока не допускала серьезных ошибок, что позволяет оставаться «первой». Лично моё мнение, Prisma соберёт все сливки, тогда как Vinci и Artisto в лучшем случае интегрируются в другие проекты MRG. На этом минутка технических подробностей подходит к концу, дальше можно снова холиварить на этические темы. Например, я знаю один фонд, который плясал от радости, что пробил встречу с основателями Prisma, когда всё начиналось. А теперь пляшет от радости, что не успел в уходящий поезд и не инвестировал в проект. Говорит, что совсем не хочет инвестировать в то, на что очень зол MRG и уже начал клепать конкурентов. Вот и делай стартапы в России.
Добавить 15 комментариев
Да-да, быстро, за неделю можем, будет наше приложение, Алишер Бурханович:
«Vinci и Artisto удивили. Со своими серверами они общаются по голому http. Возможно, сделано это не случайно, а в том числе для экономии траффика. Допустим что так, но Vinci не обладал вообще никакой защитой. По голому http загружается фотка, в ответ получается некий хэш. Подставляем его в URL — вуаля, любая фотка с нужным тебе фильтром от Vinci.
Artisto всё же в этом плане оказался более продвинутым. При загрузке видео API также требовал некоего хэша. Так разработчики пытаются обезопасить себя от таких, как я. Помимо самого видео просят хэш, который является чаще всего чексуммой от файла с видео (md5, sha256 и т. п.) плюс ещё что-то, что знают только разработчики. Таким образом при попытке залить файл не через приложение нас ждёт облом. Есть выход — дизассемблировать приложение, искать точку входа для генерации хеша и вытаскивать алгоритм.
>Прелесть нейросети в том, что даже мелкая сеть будет занимать очень приличный объём. Помню, я писал крестики-нолики в институте. Игра с заложенным алгоритмом для бота весила считанные килобайты. С простейшей нейросетью — сотни мегабайт.
Тем не менее гугльтранслейт вполне себе работает на стороне клиента с помощью нейросетей: https://research.googleblog.com/2015/07/how-google-translate-squeezes-deep.html
>Прелесть нейросети в том, что даже мелкая сеть будет занимать очень приличный объём. Помню, я писал крестики-нолики в институте. Игра с заложенным алгоритмом для бота весила считанные килобайты. С простейшей нейросетью — сотни мегабайт.
Бред, характеризующий уровень компетенции автора. Что сотни мегабайт? Что нужно хранить кроме коэффициентов? Там 1 миллион нейронов было для крестиков ноликов? Сам алгоритм работы нейросети — «считанные килобайты». Даже если представить обучающее множество для крестиков-ноликов, оно микроскомпическое.
Я не претендую на гуру в нейросетях, я сталкивался с ними только в институте. Алгоритм весит копейки, обученные крестики-нолики, которые могли выиграть всегда или почти всегда (все ходы можно просчитать) у меня получилась в 130 метров, если я ничего не путаю. Точно слишком много для того времени, помещалось моё творчество только на cd. Можно ли уместить крутую нейросеть для крестиков-ноликов в мелкий объем — скорее всего можно.
Можно ли уместить обученную нейросеть для рисования аля призмы на телефон?
> Можно ли уместить обученную нейросеть для рисования аля призмы на телефон?
Можно, но будет приложение большое, что помешает дистрибуции, плюс все конкуренты получат бесплатно все ноу-хау.
Правильно я понимаю, что вы только что подтвердили мою теорию о том, что подобных нейросетей не будет оффлайн на устройствах?
Их не будет в приложениях, где допустима задержка, и они будут в интерактивных приложениях (например, использующих дополненную реальность), вроде Google Project Tango.
Т.е. вы согласны с моим выводом, что в ближайшее время мы не увидим таких приложений в сторах, что все они будет клиент-сервер?
Google Project Tango это не приложение, а технология. И для её реализации смартфон или иной девайс должен иметь доп. железо. Тот же Lenovo Phab 2 Pro имеет стереокамеру, датчик глубины, датчик слежения за объектом и делает 3д модель пространства с частотой 250 000 измерений в секунду.
Да, с таким набором железа можно ускорить алгоритмы, скажем MSQRD и вывести их фильтры на новый лад, но призму таким железом упростить не получится. Усложнить да ) можно сделать более крутые фильтры итп.
>> Т.е. вы согласны с моим выводом, что в ближайшее время мы не увидим таких приложений в сторах, что все они будет клиент-сервер?
я не согласен. дорого стоит обучить сеть, а использовать — дешево. пример photos.app из iOS 10\macOS, там с помощью нейросети распознают около 4000 объектов на фотографиях в offline
Вы про распознавание лиц? Да, такая нейросеть, действительно, весит копейки. Кстати, интересно, судя по функционалу, там реализован механизм дообучения. Хорошая идея для призмы. Пользователь загружает свой рисунок чего угодно в любом стиле и фото. А призма конвертит фото на лад рисунка.
>> Вы про распознавание лиц?
нет, я про распознавание объектов.
Alligators, Gator, Gators, Almond, Almonds, Ammunition, Ammo, Ammos, Ammunitions, Amusement Park, Amusement Parks, Funfair, Funfairs, Pleasure Ground, Pleasure Grounds, Theme Park, Theme Parks, Anchovy, Anchovies, Angelfish, Angel Shark, Angel Sharks, Monkfish, Spadefish, Animal, Animals, Fauna, Faunas, Ant, Ants, Antenna, Aerial, Aerials, Antennas, Feeler, Feelers, Antipasti, Anvil, Anvils, Apartment, Apartments, Condo, Condos, Flat, Flats, Apple, Apples, Applesauce, Apple Sauce, Apple Sauces, Applesauces, Appliance, Appliances, Contraption, Contraptions, Gadget, Gadgets, Gizmo, Gizmos, Apricot, Apricots, Apron, Aprons, Aquarium, Aquariums, Fish Tank, Fish Tanks, Marine Museum, Marine Museums, Arachnid, Arachnids, Arch, Arches, Archway, Archways, Archery, Archeries, Arena, Arenas, Field, Fields, Sports Stadium, Sports Stadiums, Armchair, Armchairs, Art, Artistic Creation, Artistic Creations, Artistries, Artistry, Arts, Artwork, Artworks, Arthropods, Arthropod, Arthropods, Artichoke, Artichokes, Arugula, Arugulas, Garden Rocket, Garden Rockets, Rocket Salad, Rocket Salads, Roquette, Roquettes, Asparagus, Asparaguses, ATM, ATMs, Automated Teller, Automated Teller Machine, Automated Teller Machines, Automated Tellers, Automatic Teller, Automatic Teller Machine, Automatic Teller Machines, Automatic Tellers, Cash Dispenser, Cash Dispensers, Cash Machine, Cash Machines, ATV, ATVs, All Terrain Vehicle, All Terrain Vehicles, Auditorium, Amphitheater, Amphitheaters, Auditoriums, Concert Hall, Concert Halls, Music Hall, Music Halls, Aurora, Auroras, Australian Shepherd, Australian Shepherds, Automobile, Auto, Automobiles, Autos, Car, Cars, Motorcar,
>> Вы про распознавание лиц?
нет, я про распознавание объектов.
Alligators,
Gator, Gators, Almond, Almonds, Ammunition, Ammo, Ammos, Ammunitions, Amusement Park, Amusement Parks, Funfair, Funfairs, Pleasure Ground, Pleasure Grounds, Theme Park, Theme Parks, Anchovy, Anchovies, Angelfish, Angel Shark, Angel Sharks, Monkfish, Spadefish, Animal, Animals, Fauna, Faunas, Ant, Ants, Antenna, Aerial, Aerials, Antennas,
Feeler, Feelers, Antipasti, Anvil, Anvils, Apartment, Apartments, Condo, Condos, Flat, Flats, Apple, Apples, Applesauce,
Apple Sauce, Apple Sauces, Applesauces, Appliance, Appliances, Contraption, Contraptions, Gadget, Gadgets, Gizmo, Gizmos, Apricot, Apricots, Apron, Aprons, Aquarium, Aquariums, Fish Tank, Fish Tanks,
Marine Museum, Marine Museums, Arachnid, Arachnids, Arch, Arches, Archway, Archways, Archery, Archeries, Arena, Arenas, Field, Fields, Sports Stadium, Sports Stadiums, Armchair, Armchairs, Art,
Artistic Creation, Artistic Creations, Artistries, Artistry, Arts, Artwork, Artworks, Arthropods, Arthropod, Arthropods, Artichoke,
Artichokes, Arugula, Arugulas, Garden Rocket, Garden Rockets, Rocket Salad, Rocket Salads, Roquette, Roquettes, Asparagus, Asparaguses, ATM, ATMs, Automated Teller, Automated Teller Machine,
Automated Teller Machines, Automated Tellers, Automatic Teller, Automatic Teller Machine, Automatic Teller Machines, Automatic Tellers, Cash Dispenser, Cash Dispensers, Cash Machine, Cash Machines, ATV, ATVs, All Terrain Vehicle, All Terrain Vehicles, Auditorium, Amphitheater,
Amphitheaters, Auditoriums, Concert Hall, Concert Halls, Music Hall, Music Halls, Aurora, Auroras, Australian Shepherd, Australian Shepherds, Automobile, Auto, Automobiles, Autos, Car, Cars, Motorcar,
У меня в 10.10.5 этого нет, с какой версии macos Photo.app имеет такой функционал и сколько весит такой app?
этим летом анонсировали.
повторюсь, что распознавание объектов доступно и на iOS.
почему серверсайд, я склонен к этой версии — приложение большое, что помешает дистрибуции, плюс все конкуренты получат бесплатно все ноу-хау.
Нейронные сети вполне возможно засовывать в мобильные приложения. Например, мобильный google translate в офлайне работает именно на нейросетях. Более того, относительно недавно Google выпустила в опенсорс мобильную версию своей библиотеки для глубинного обучения TensorFlow. Вот пример android прилоежения, использующего inception network: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
Сами нейросети тоже можно весьма эффективно сжимать. Авторы этой статьи, например, созали нейросеть весом 500 килобайт, показывающую на imagenet результаты, сопоставимые с 240-мегабайтной state-of-art моделью 2012 года:
https://arxiv.org/abs/1602.07360
Тут вопрос скорее в том, что алгоритмы переноса стиля (по крайней мере, опубликованные) требуют довольно больших вычислительных затрат и на телефоне будут работать непозволительно долго.