Улучшение обнаружения объектов MLKit

Вопрос:

Используя MLKit, я знаю, как настроить классификатор, но есть ли способ настроить или переобучить модель обнаружения объектов?

Фон

Я работаю над проектом робототехники, где робот на базе Android должен обнаруживать других роботов и зарядные станции. Я работаю над переобучением классификатора изображений, чтобы правильно классифицировать роботов и зарядные станции, и это кажется довольно простым, учитывая достаточно большой набор изображений. Чтобы сгенерировать этот набор изображений, я провожу случайную прогулку с роботом и заставляю его делать снимки каждый раз, когда объект распознается, и продолжаю делать снимки каждые 0,5 секунды, пока указанный объект находится в рамке обзора. Я также обрезаю изображение до ограничивающей рамки и называю его с помощью классификатора для упрощения группировки. Проработав примерно полчаса, я изучил изображения и обнаружил, что сами роботы довольно легко обнаруживаются различными классификаторами, а зарядные станции - нет. Моя случайная прогулка сгенерировала около 1000 изображений, и 100-150 из них были других роботов, в то время как я сделал только около 5 изображений зарядных станций.

Когда я пытаюсь вручную расположить роботов вокруг зарядных станций, я замечаю, что размещение должно быть очень конкретным, прежде чем объект будет обнаружен. Это привело меня к мысли, что я хотел бы каким-то образом переобучить модель обнаружения объектов, чтобы лучше распознавать мои зарядные станции. Все, что я могу найти в документации, - это способы переобучить классификатор, а не обнаружение объектов. Есть какой-либо способ сделать это?

Код

Хотя я немного изменил его для захвата изображений и других роботизированных вещей, базовым кодом для того, что я использую, является код по умолчанию vision-quickstart с настраиваемым классификатором.

Изображений

Робот  Зарядная станция

Обратите внимание, что зарядная станция (справа) немного больше, чем одно из колес робота (слева) для масштабирования, и она помещается под роботом между колесами, если это также помогает визуализировать ее.

Редактировать 1

Я только что опробовал образец приложения для обнаружения объектов TF Lite который находится вне MLKit, и сразу становится очевидным, что он намного лучше справляется с обнаружением зарядных станций и более мелких объектов в целом. Я попытался использовать модель обнаружения, используемую в этом примере, в mlkit, но похоже, что они несовместимы. Я получаю ошибки:

E/native: calculator_graph.cc:772 INVALID_ARGUMENT: CalculatorGraph::Run() failed in Run: 
    Calculator::Open() for node "[BoxClassifierCalculator, BoxClassifierCalculator with output stream: detection_results0]" failed: #vk Unexpected number of dimensions for output index 0: got 3D, expected either 2D (BxN with B=1) or 4D (BxHxWxN with B=1, W=1, H=1). [type.googleapis.com/mediapipe.StatusList='\n\xb7\x02\x08\x03\x12\x85\x02\x43\x61lculator::Open() for node \"[BoxClassifierCalculator, BoxClassifierCalculator with output stream: detection_results0]\" failed: #vk Unexpected number of dimensions for output index 0: got 3D, expected either 2D (BxN with B=1) or 4D (BxHxWxN with B=1, W=1, H=1).\x1a+\n$tflite::support::TfLiteSupportStatus\x12\x03\x34\x30\x30']

Может быть, я смогу переделать это в соответствии с требованиями модели? Или я пытаюсь вставить квадратный колышек в круглое отверстие?


person topher217    schedule 09.10.2020    source источник


Ответы (1)


В настоящее время мы не предоставляем API для замены детектора на ODT в MLKIt. У нас есть план сделать детектор также сменным.

Модель из образца TFLite представляет собой единую модель, содержащую как детектор, так и классификатор, в то время как модели в MLKit представляют собой две отдельные модели. Поменять местами только модель детектора было бы нетривиально. Давайте сначала попробуем обходное решение ниже:

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

Чтобы упростить обнаружение зарядной станции, вы можете попытаться нанести больше «текстуры» на точку зарядки по сравнению с фоном. Например, точки разного цвета по краям точек зарядки.

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

person Shiyu    schedule 09.10.2020
comment
Вот что я подозревал. Спасибо за подробности и подтверждение. Я не уверен, как могут помочь цветные точки, поскольку вся шайба для зарядки кардинально отличается по цвету от ковра, на котором она сидит. Вы все еще думаете, что это как-то поможет? Я не знал о требованиях к центру для режима одного объекта. Я поиграю с логикой, чтобы выбрать один из многих в многообъектном подходе, и посмотрю, поможет ли это. - person topher217; 12.10.2020
comment
Детектор объектов не только использует цвет, чтобы отличить объект от фона, он также использует «характерные точки» объектов. Например, красочную коробку легче обнаружить по сравнению с красной коробкой на том же белом фоне. - person Shiyu; 14.10.2020
comment
Дополнительная информация: Зарядная станция представляет собой небольшой объект. Наша модель была разработана для обнаружения крупных / заметных объектов с визуальным поиском в качестве варианта использования (IKEA, Adidas и т. Д., Пользователь не робот и может кадрировать) и эффективности (мощность / задержка). Иногда он может обнаруживать небольшие объекты, но не очень хорош. Модель, сравниваемая с Edit 1, как минимум в 5 раз больше / медленнее, чем модель MLKit (работающая с почти двукратным входным разрешением), поэтому лучше подходит для обнаружения мелких объектов. - person Dong Chen; 16.10.2020
comment
@DongChen, извини, я полностью пропустил твой комментарий. Что вы имеете в виду под Edit 1? Если вы можете предоставить ссылку на эту или альтернативные версии примера приложения mlkit vision, я бы с удовольствием попробовал. Пока что TL-lite, о котором я упоминал (за пределами MLkit), кажется, намного лучше обнаруживает шайбы. Мы заметили, что это также базовое приложение, которое Intel использовала в своей недавно выпущенной платформе для смартфонов с открытой робототехникой. - person topher217; 20.11.2020
comment
@ topher217 Под Edit 1 я имел в виду модель, которую вы упомянули в разделе Edit 1 этого сообщения. В этом разделе вы сказали, что я только что опробовал пример приложения для обнаружения объектов TF Lite, которое находится вне MLKit, и сразу становится очевидным, что оно намного лучше справляется с обнаружением зарядных станций и более мелких объектов в целом. - person Dong Chen; 04.12.2020