Pull to refresh

Comments 10

Ребят, спасибо за статью, интересно!
Сколько у вас в итоге весит моделька?
Если оптимизировали для tf-lite под мобильные, то расскажите насколько уменьшилась :)
Спасибо за вопрос! Модель весит 20 Мб и достаточно шустро работает под TF-Lite на мобильном. Оптимизацией модели пока не занимались, но рассчитываем это сделать в ближайшей перспективе и рассказать о результатах в следующей статье. По теме редукции нейронных сетей советуем недавнюю публикацию на Хабре
UFO just landed and posted this here
Мы пока что ничего такого не искали и не рассматривали
Помнится тут на хабре была статья о том, почему задача распознавания ценников в магазине на самом деле пример плохой задачи для машинного зрения. Задача кажется простой и понятной пока вы смотрите на базу из десятка идеальных фоточек ценников, но при любой попытке применить эту технологию в реальности — все разваливается.

Основная проблема — то что даже в пределах одной торговой сети формат ценников может очень сильно отличаться — шрифты, расположение цены, цвет. Плюс к этому в любом реальном кейсе использования фотографии часто будут нерезкими, размытыми (так как снимаются в недостаточно освещенном торговом зале на дешевую мобилку клиента или мерчандайзера), с засветами и бликами от вспышки или ламп, с кучей артефактов по краям (т.к. неровно обрезают бумажки), куча ценников подряд, частично перекрывающих друг друга и т.п. В той статье есть примеры всего этого, да и любой из нас может просто пойти в ближайший супермаркет, и в тесноте у полок попробовать сделать идеальную фоточку ценника.

В итоге получается что на тестовой выборке все хорошо, но реального применения такая система не выдерживает.
Да, моя статья:)
С тех пор реально стало всё получше. Мы в двух разных компаниях внедрили математику и процесс который хорошую локализацию и ценников и товаров делает.
Модельки появились неплохие. Но главное появилось понимание как объединять автоматические распознавания и ручной труд. Без этого понимания смысла нет. Какая бы хорошая модель не была — всё равно будет масса ошибок, с которыми надо работать, которые надо понимать как преодолеть.
Надо выстраивать многоуровневую автоматизацию труда, когда идёт оценка работы на каждом шаге независимая того что делает сотрудник а что сеть.
По тому как тут написано — сразу скажу что всё будет работать плохо:
1) SSD не разбирает варианты наложения. Любая молочка такого плана — это сразу треш-выдача:

Мы тестировали с SSD, но правильно сконструированная под задачу модель даёт сильно лучше качество. Если надо не ценники, а товары искать — SSD вообще не будет работать. И всё равно этого в боевом применении не всегда достаточно.
2) Обучающая выборка в ~400 примеров просто ни о чём. Хоть какая-то приемлемая точность по детекции возникает начиная с 3-4 тысяч изображений на каждой их которых ценников хотя бы пяток. Есть одна фирма которая предоставляет такие услуги по распознаванию, которая даже полноценный 3Д движок сделала для генерации семплов. На мой взгляд это оверкил, который плохо работает, но всё же.
3) Даже в рамках одного магазина ценник бывает принципиально разным. При этом доля основного ценника может составлять 60-70%.

Тут вообще не рассматривалось как всё плохо будет.
Мы обучали модель чтобы была стабильна даже к разным магазинам. Но, опять же — не SSD.
4) Мне нравиться как в задаче такого плана пишут «цена распознана более-менее правильно»:) И показывают кучу ошибок. Реально на боевых данных с ценой всё ооочень плохо. И видно, что тут авторы даже не пробовали начинать копать в эту сторону. Использование Тесеракта (какого, кстати? В новом, который месячной давности не всё так плохо, там сеточки хотя бы появились) — это уже дурной тон.
А вообще лучше без CTC-потерь и обучения соответствующих сетей ничего в эту сторону не делать. Даже использования распознавания гугла по текстам — и то более перспективно.

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

Советую пока что погуглить по сетки которые могут делать детекции при наличии большого числа объектов рядом (даже на Kaggle были неплохие конкурсы с участием таких сетей). Потом погуглить как делается распознавание текста. И да, без вашего модуля всё будет плохо.
И базы-базы. 80% работы любой компании в области DL — это не модели и обучение. Это сбор, разметки и подготовка хороших баз. Советую научиться использовать Яндекс Толоку или Механического Турка.
UFO just landed and posted this here
Cпасибо за ценные комментарии!

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

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

Будем рады вашим советам!

Пока ещё ни в одной статье не встретилась информация по поводу того, как именно размечаются изображения, в какую структуру хранения эти данные превращаются, как затем преобразуются в понятные нейросетям числа в диапазоне от 0 до 1. Расскажете свой вариант?

В нашем случаи мы использовали небольшую программу LabelImg. В этой программе, как и было описано, мы выделяли на фотографии интересующие нас объекты рамкой. Далее — для каждой фотографии программа создает XML файл с координатами рамок и именем этой рамки. Затем все эти XML файлы собираются в два CSV файла для тренировочной и тестовой выборки. Оба данных файла вместе с изображениями передаются в object detection.

Более подробно про object detection можно почитать здесь. Тут — хорошая пошаговая инструкция с установкой, разметкой и обучением. А здесь хорошая серия из 6 уроков, в котором человек в видео и текстовом варианте рассказывает про object detection и обучает модель.
Sign up to leave a comment.