Вопрос:
Используя 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']
Может быть, я смогу переделать это в соответствии с требованиями модели? Или я пытаюсь вставить квадратный колышек в круглое отверстие?