-
Notifications
You must be signed in to change notification settings - Fork 6
complexobject_detection
!!! Для использования этой части пакета, необходима установка библиоткеки igraph.
Сложные (или составные) объекты представляют собой набор простых объектов с заданными отношениями между ними. На текущий момент отношения носят сравнительный (больше, меньше) или пространственный (быть внутри, быть на расстоянии) характер. Имея данный инструмент, можно сильно расширить набор объектов, которые могут быть распознаны системой. Часто в научной литературе для такого определения объектов используют термин "сцена" или "ситуация", иногда дополняя его различными конструкциями, например контекстом. На изображении снизу приведен пример всем хорошо известной картины, на которой показаны, как между объектами могут быть заданы отношения.


Задачей алгоритмов распознавания сложных объектов на данном примере может быть "найти человека с веревкой" или "найти человека, стоящего на дороге перед кустом", "найти двух людей, держащихся за руки". В первом случае ответом будет одна группа объектов, во втором две, в третьем тоже две. Для задачи распознавания сложных объектов используется теория графов. Наблюадемая сцена и описание сложного объекта представляется в виде графов, где простые объекты - вершины, а отношения - ребра. Далее решается задача поиска изоморфных подграфов.
Аналогично задаче распознавания простых объектов, распознавание сложных должно быть произведено в двух режимах: жестком и мягком.
- Жесткий - когда наличие всех объектов и связей обязательно для распознавания.
- Мягкий - когда берутся группы объектов, частично попадающие под заданное описание, и рассчитывается коэффициент уверенности для этой группы.
Расчет коэффициента уверенности для сложных объектов прорисходит по следюущей формуле:
Описания сложных объектов располагаются в теге ComplexObjectBase, ссылаясь на простые объекты из SimpleObjectBase и отношения из RelationLib.
Как уже говорилось, отношения указываются в теге RelationLib. Для каждого отношения создается тег RelationShip, у которого имеются следующие параметры:
- Name (string, must be set) Уникальное имя отношения.
- Type (string, must be set) Тип отношения, должно быть одним из таблицы ниже.
- Другие параметры специфичны для каждого типа отношения.
Тип | Описание | Рабочее пространство* | Коммутативно | Ссылка на раздел |
---|---|---|---|---|
ImageRange | Отношение расстояния между объектами на изображении | I | ✔✔❌ (зависит от режима) | link |
3DRange | Отношение расстояние между объектами в трехмерном пространстве | 3D | ✔ | link |
LogicAnd | Логическое И над двумя отношениями | Унаследовано** | Унаследовано** | link |
LogicOr | Логическое ИЛИ над двумя отношениями | Унаследовано** | Унаследовано** | link |
LogicNot | Логическое НЕ к отношению | Унаследовано** | Унаследовано** | link |
SpaceIn | Проверяет что один объект полностью внутри другого | I | ❌ | link |
SpaceOut | Проверяет что один объект полностью вне другого | I | ✔ | link |
SpaceUp | Проверяет что центр объекта выше центра другого | I | ❌ | link |
SpaceDown | Проверяет что центр объекта ниже центра другого | I | ❌ | link |
SpaceLeft | Проверяет что центр объекта левее центра другого | I | ❌ | link |
SpaceRight | Проверяет что центр объекта правее центра другого | I | ❌ | link |
SizeSame | Проверят идентичность площади объектов | I | ✔ | link |
SameExtractedInfo | Проверят совпадение ключей извлекаемой информации | - | ✔ | link |
* - Может быть как I, что означает что объекты сравниваются в координатах изображения, так и 3D, что означает что отношение оперирует в трехмерном пространстве, однако для этого варианта, объекты должны иметь признаки, определяющие трехмерное положение.
** - Логические отношения принимают параметры отношений, к которым они применены.
Все сложные объекты описываются внутри тега ComplexObjectBase, и каждый из них должен быть заключен в тег ComplexObject.
- ID (int, must be set) Уникальный идентификатор сложного объекта. Может совпадать с идентификаторами простых объектов.
- Name (string, must be set) Уникальное имя сложного объекта.
- Mode (string, default: hard) Режим распознавания, принимает варианты Hard и Soft.
- Probability (double, default: 0.75) Максимальный порог степени уверенности.
- SimpleObject - эти теги отписывают, какие простые объекты составляют сложный
- Class (string, must be set) Имя простого объекта в базе.
- InnerName (string, must be set) Некоторое внутреннее имя, которое будет использовано при задании отношений.
- Weight (double, default: 1) Коэффициент значимости объекта.
- Relation - эти теги описывают как простые объекты соединены отношениями
- Obj1 (string) Внутреннее имя первого объекта, соединенного отношением.
- Obj2 (string) Внутреннее имя второго объекта, соединенного отношением.
- Relationship (string) Имя отношения из RelationLib.
- Weight (double, default: 1) Коэффициент значимости отношения.
Примером сложного объекта, состоящего из простых, может выступать человек с распознанным лицом. Для этого отдельно распознаются лица и фигуры людей, которые сопоставляются друг другу по принципу нахождения лица в прямоугольнике всей фигуры. Описать такой сложный объект в терминах системы можно следующим образом.
<?xml version="1.0" ?>
<AttributeLib>
<Attribute Name="KeyboardDnn" Type="Dnn" Weight="4" framework="tensorflow" weights="ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb" config="ssd_mobilenet_v1_coco_2017_11_17/config.pbtxt" labels="ssd_mobilenet_v1_coco_2017_11_17/mscoco_label_map.pbtxt" inputWidth="300" inputHeight="300" Probability="0.75" obj_id="76"/>
<Attribute Name="ScreenDnn" Type="Dnn" Weight="4" framework="tensorflow" weights="ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb" config="ssd_mobilenet_v1_coco_2017_11_17/config.pbtxt" labels="ssd_mobilenet_v1_coco_2017_11_17/mscoco_label_map.pbtxt" inputWidth="300" inputHeight="300" Probability="0.75" obj_id="72"/>
<Attribute Name="MouseDnn" Type="Dnn" Weight="4" framework="tensorflow" weights="ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb" config="ssd_mobilenet_v1_coco_2017_11_17/config.pbtxt" labels="ssd_mobilenet_v1_coco_2017_11_17/mscoco_label_map.pbtxt" inputWidth="300" inputHeight="300" Probability="0.5" obj_id="74"/>
<Attribute Name="MouseBlob" Type="Blob" Weight="1" minThreshold="10" maxThreshold="297" blobColor="0" minArea="554" minCircularity="0.10" minConvexity="0.87" minInertiaRatio="0.01"/>
<Attribute Name="MouseBlack" Type="HistColor" Histogram="histograms/Black.yaml" Probability="0.75" Contour="FALSE"/>
</AttributeLib>
<SimpleObjectBase>
<SimpleObject Name="Keyboard" ID="1">
<Attribute Type="Detect">KeyboardDnn</Attribute>
</SimpleObject>
<SimpleObject Name="Mouse" ID="2" Mode="Soft" Probability="0.5">
<Tracker IOU="0.3" decay="0.01" soft_prob="0.2">NONE</Tracker>
<Attribute Type="Detect">MouseBlack</Attribute>
<Attribute Type="Detect">MouseDnn</Attribute>
</SimpleObject>
<SimpleObject Name="Screen" ID="3">
<Attribute Type="Detect">ScreenDnn</Attribute>
</SimpleObject>
</SimpleObjectBase>
<RelationLib>
<RelationShip Type="SpaceLeft" Name="left"/>
<RelationShip Type="SpaceUp" Name="up"/>
<RelationShip Type="SpaceOut" Name="out"/>
<RelationShip Type="LogicAnd" Name="out-left" A="out" B="left"/>
</RelationLib>
<ComplexObjectBase>
<ComplexObject ID="1" Name="PC" Mode="Hard" Probability="0.2">
<SimpleObject Class="Screen" InnerName="Screen" Weight="2"/>
<SimpleObject Class="Mouse" InnerName="Mouse"/>
<SimpleObject Class="Keyboard" InnerName="Keyboard"/>
<Relation Obj1="Keyboard" Obj2="Mouse" Relationship="out-left"/>
<Relation Obj1="Screen" Obj2="Keyboard" Relationship="up"/>
<Relation Obj1="Screen" Obj2="Mouse" Relationship="up"/>
</ComplexObject>
</ComplexObjectBase>
- ROS-интерфейс
- Взаимодействие посредством конфигурационного файла
- Установка
- Руководства
- Проблемы
- Разработка