Технический форум по робототехнике.
Правила форума
В этом форуме новые темы не создаются, однако обсуждение допустимо.
=DeaD= » 27 май 2009, 13:54
EDV писал(а):Нет, это всего сколько образов (всех объектов какие есть) хранится в дереве. А вот сколько образов соответствует конкретному объекту узнать не получится. Такой функции пока что не реализовано (но можно сделать).
А зачем эта информация при возврате распознанного образа?
EDV » 27 май 2009, 14:00
Ну, в функции call-back распознавателя (который с GUI) я в окне вывожу счётчик общего количества образов (ассоциативных ядер). В принципе, для такого рода статистики.
=DeaD= » 27 май 2009, 14:01
Vorral писал(а):настоящую навигацию
Что за терминология у вас антинаучная? Сначала "алгоритм без недостатков", теперь еще и "настоящая навигация"...
Так и до "окончательно истинной карты помещения" недалеко
Vorral » 27 май 2009, 14:07
>Что за терминология у вас антинаучная? Сначала "алгоритм без недостатков", теперь еще и "настоящая навигация"...
Я уже вставил слово "существенных" и коммент по этому поводу. Насчёт навигации, цитирую сообщения автора "Исходные тексты «Навигатора»" По вашему эта программа действительно заслуживает называться навигатором? Подчёркивая своё отношение к положению вещей я добавил перед навигация слово "настоящая". Ни в первом, ни во втором случаи не вижу критических ошибок в терминологии.
EDV » 27 май 2009, 14:23
=DeaD= писал(а):EDV писал(а):Эти методы были добавлены специально для «Optical flow». Там всё изображение разбивается на отдельные области и по каждой области своё ассоциативное дерево создаётся. Эти деревья хранят информацию об фрагментах предыдущего изображения, и при получении следующего изображения отчищаются (ClearTreeData) и перезаписываются новыми данными по полученному следующему кадру.
В общем понял примерно, хотя с функцией удаления образа не ясно - она просто не реализована, потому что не надо было или она сложно реализуется?
В функции удаления ассоциативных ядер по экземпляру данных (по индексу объекта) просто пока не было надобности. Такую функцию не сложно будет реализовать (если потребуется).
=DeaD= » 27 май 2009, 14:44
EDV писал(а):В функции удаления ассоциативных ядер по экземпляру данных (по индексу объекта) просто пока не было надобности. Такую функцию не сложно будет реализовать (если потребуется).
Просто если делать робота, который не будет перезапускаться в обязательном порядке - надо иметь возможность почистить память.
Добавлено спустя 8 минут 50 секунд:2EDV: Я вечером накидаю наверное эскиз интерфейса для работы с распознавалкой и можно будет посмотреть как оно ложится на то что есть у тебя, так пойдёт?
EDV » 27 май 2009, 14:57
=DeaD= писал(а):Просто если делать робота, который не будет перезапускаться в обязательном порядке - надо иметь возможность почистить память.
Очистка дерева поиска от неиспользуемых образов уже реализована. У каждого ассоциативного ядра есть счётчик попаданий (HitCounter) и при вызове метода OptimizeAssociativeTree те ядра, у которых этот счётчик меньше 40 (параметр ptMaxClusterAge) просто удаляются из дерева. Функция оптимизации дерева вызывается автоматически каждые 45 секунд (параметр ptOptimizeLoop). Эти параметры можно изменять методом SetParam.
Я вечером накидаю наверное эскиз интерфейса для работы с распознавалкой и можно будет посмотреть как оно ложится на то что есть у тебя, так пойдёт?
Да, конечно, я не против, пора приняться за работу, и внести свою лепту в развитие робототехники
galex1981 » 27 май 2009, 15:05
А как он работает в начале программы, когда 100% счетчик <40?
EDV » 27 май 2009, 15:11
Ну, у всех ядер есть время в 45 секунд, что бы набрать свои 40 попаданий. А ещё после создания нового ядра у него есть иммунитет от удаления по времени, признак «Создан только что». Оптимизатор при обработке такого ядра вначале должен сбросит этот признак (и ядро будет удалено только на следующий раз, через 45 секунд, если конечно не отгребёт свои 40 попаданий).
=DeaD= » 27 май 2009, 15:41
EDV писал(а):Очистка дерева поиска от неиспользуемых образов уже реализована. У каждого ассоциативного ядра есть счётчик попаданий (HitCounter) и при вызове метода OptimizeAssociativeTree те ядра, у которых этот счётчик меньше 40 (параметр ptMaxClusterAge) просто удаляются из дерева.
Это слишком "в лоб". Должен быть критерий важности образа. Например опасные образы должны помниться лучше, чем просто предметы окружения, по которым я ориентируюсь.
EDV » 27 май 2009, 15:52
Тогда в будущем можно будет ввести параметр типа «Мера опасности» и учитывать его при оптимизации.
=DeaD= » 27 май 2009, 15:55
Можно просто "вес образа"
Добавлено спустя 37 секунд:И еще надо бы оптимизировать не всё что меньше такого-то по весу, а еще и в режиме "оставить не более 10Мб на образы".
EDV » 27 май 2009, 16:27
Эх, не всё так просто. Интуитивно понятно - что бы увеличить скорость поиска нужно сделать ассоциативное дерево более ветвистым (добавить избыточные «кластерные» матрицы). И вот тут то оказывается, что не все объекты дают «кластера», некоторые изображения не поддаются равномерному разбиению на иерархические группы (дисперсия разности матриц слишком велика) и тогда масса образов пытаются прописаться в какую то одну группу. В результате получаем замедление поиска по дереву. Так что до таких объемов пока что далеко, в начале нужно придумать, как увеличить эффективность поиска.
=DeaD= » 27 май 2009, 16:30
Ну про оптимизацию структуры образов под объем - это действительно может подождать, а про время поиска я даже пока не начинал говорить
EDV » 27 май 2009, 16:40
В этой задаче быстродействие критическая величина. Если скорость обработки на один кадр перевалит через отметку в 40 ms (за пределы real-time), то выполнять навигацию будет практически невозможно. Так что с оптимизацией поиска по ассоциативному дереву придется бороться самым тщательным образом.