Skip to content

simpleobject_detection

Moscowsky Anton edited this page Aug 25, 2022 · 16 revisions

Распознавание "простых объектов"

1. Аннотация

"Простые объекты" являются ядром данного решения. Простым объектом называется набор признаков, которые вместе образуют целостный объект. Каждый признак способен распознаваться тем или иным методом компьютерного зрения. Такая структура позволяет комбинировать различные атрибуты между собой, увеличивая набор объектов, которые могут быть распознаны данным решением. Детекторы признаков могут работать в трех режимах: детектирование (Detect), проверка (Check) и извлечение информации (Extract). В режиме детектирования на вход подается изображение, на выходе определяется область, соответствующая положению объекта в реальном мире. В режиме проверки на вход подается подобласть изображения, а на выходе заключение о том, удовлетворяет ли эта область признаку или нет. Режим извлечения прямым образом не влияет на процесс и результат распознавания, лишь записывает некоторую информацию об объекте, однако эту информацию могут использовать другие признаки в режиме проверки.

2. Жесткое и мягкое распознавание

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

hard mode

На изображении сверху приведен пример процесса распознавания для объекта, который описывается тремя признаками детектирования и одним признаком проверки, причем порядок в данном случае важен. На первом этапе детектор признака1 возвращает список из N1 областей, ему удовлетворяющих. То же самое происходит с признаком 2. Далее оба набора областей поступают на вход сопоставителя, который использует IOU (intersection over union) как меру похожести областей. Сопоставитель в жестком режиме распознавания удаляет области каждого признака, которые не имеют достаточной IOU с областями другого признака. Те же области, что не были удалены, объединяются друг с другом, образуя новый набор областей из N3 штук. N3 в данном случае не будет превышать минимального размера из двух первичных наборов областей, т.к. каждый объект из одного набора, может быть объединён только с одним из другого, с которым имеет наибольшую IOU-меру. Далее идет признак3, у которого режим проверки. Каждая полученная на предыдущем этапе область проверяется на соответствие данному признаку. Те области, что не прошли проверку, удаляются из набора. Далее идет опять признак в режиме проверки, который сгенерировал N5 областей. Эти области также подаются на вход IOU сопоставителя с областями, прошедшими проверку, образуя финальный список областей, которые и являются областями, соответствующие объекту на изображении.

Когда объект был распознан, рассчитывается его финальный коэффициент уверенности по формуле:

Где D - множество распознанных признаков, O - множество признаков, описывающих объект, ki - вес признака, задаваемый пользователем, pi - вклад признака, нормированный на единицу.

В режиме мягкого распознавания некоторые из признаков могут быть пропущены. Однако это повлияет на финальный коэффициент уверенности распознавания данного объекта.

soft mode

На изображении сверху приведен пример процесса распознавания такого же объекта (как в предыдущем примере), но в мягком режиме. На первых шагах признаки также генерируют наборы областей. Однако, когда они попадают на вход IOU-сопоставителя, то те области, у которых нет "пары" из списка другого признака, не удаляются. Вместо этого они также проходят сквозь сопоставитель, однако на месте вклада признака выставляется 0. Те же области, что имеют "пару", объединяются аналогичным жесткому режиму образом. При попадании списка областей в признак проверки области, которые её не прошли, также не удаляются и получают 0 во вкладе данного признака. Аналогичным образом, получившиеся области проходят сопоставитель с выходом признака 4. Далее для каждой области рассчитывается коэффициент уверенности, и если он меньше заданного порога, то объект удаляется из списка, а все остальные являются распознаными объектами.

3. XML-описание

Чтобы задать в конфигурационном файле распознавание простого объекта, требуется в тег AttributeLib поместить описание всех его признаков, а в тег SimpleObjectBase - описание самого объекта, сославшись по имени на его признаки.

<AttributeLib>
    
    <Attribute Name="HSVColorBrightYellow" Type="HSVColor" Hmin="35" Hmax="103" Smin="104" Smax="255" Vmin="0" Vmax="255"/>
  
</AttributeLib>

<SimpleObjectBase>  
      
    <SimpleObject Name="YellowSticer" ID="1">              
        <Attribute Type="Detect">HSVColorBrightYellow</Attribute>            
    </SimpleObject>  
    
</SimpleObjectBase>

Подробно примеры создания конфигурационного файла приведены в описаниях конкретных признаков. Также в пакете имеется конфигурационный файл, содержащий примеры, приведенные в данной документации.

3.1. Описание признаков

3.1.1. Параметры тега Attribute

  1. Name (string, must be set) Уникальное имя признака, на которое будет ссылаться описание простого объекта.
  2. Type (string, must be set) Тип признака, должен быть одним из следующего списка.
Тип Описание Режимы* Возможность задать точность* 3D-локализация Определение контура Ссылка на раздел
HSVcolor Цветовая фильтрация методом порогов DC C link
HaarCascade Детектирование каскадами Хаара D - link
Size Проверка размеров на изображении C - link
HistColor Цветовая гистограммная фильтрация DC C link
Hough Детектор примитивов Хафа D - link
Dimension Проверка отношений размеров объектов C - link
BasicMotion Простой детектор движения D - link
Aruco Детектор Аруко-маркеров D - link
Feature Детектор методом ключевых точек D - link
Pose Проверка положения на изображении C - link
Tensorflow Детектирование сверточными нейронными сетями с помощью API фреймворка tensorflow D D link
DNN Детектирование сверточными нейронными сетями, импортированными в OpenCV D D link
QR Детектирование QR-кодов средствами OpenCV D - link
QR_Zbar Детектирование QR-кодов средствами библиотеки Zbar D - link
LogicAnd Логическое И над двумя признаками DC - link
LogicNot Логическое НЕ для признака DC - link
LogicOR Логическое ИЛИ над двумя признаками DC - link
Blob Детектирование пятен D - link
Depth Определение расстояния до объекта E - link
RoughDist Грубое определение расстояния до объекта с известными геометрическими характеристиками E - link
Dist Проверка расстояния до объекта C - link
FaceDlib Распознавание и идентификция лиц DE - link
ExractedInfoId Проверка идентификаторов в извлеченной информации C - link
ExractedInfoString Проверка строк в извлеченной информации C - link
UnitTranslation Определение единичного смещения E - link

* - D - режимы распознавания (Detect), С - режим проверки (Check), E - режим извлечения информации (Extract).

  1. Probability (double, default: 0.75) Нижний порог коэффициента уверенности распознавания признака, если таковой поддерживается детектором.
  2. Contour (bool, default: true) Возвращает контур признака, если умеет.
  3. Остальные параметры специфичны для разных типов признаков, смотрите разделы, посвященные конкретным признакам.

3.1.2. Внутренние теги

  1. Clusterization - позволяет указать метод кластеризации для выхода признака. Подробнее читайте в разделе Кластеризация.
  2. Filter - позволяет установить дополнительный фильтр для признаков. Подробнее читайте в разделе Фильтрация.

3.2. Описание объектов

3.2.1. Параметры тега SimpleObject

  1. ID (int, must be set) Уникальный идентификатор объекта. На данный момент не реализовано автоматическое исправление дублирующих номеров, следите за сообщениями об ошибках.
  2. Name (string, must be set) Уникальное имя объекта.
  3. Probability (double, default: 0.75) Нижний порог коэффициента уверенности.
  4. IOU (double, default: 0.75) Нижний порог отношения пересечения к объединению (intersection over union).
  5. Mode (string, default: Hard) Тип распознавания (см. выше), может принимать значения Hard (жесткое) или Soft (мягкое).
  6. MergingPolicy (string, default: Intersection) Политика слияния областей и контуров. Принимает значения Intersection и Union.
  7. Weight (double, default: 1) Вес признака. См. формулу коэффициента уверенности выше.

3.1. Внутренние теги

  1. Attribute Основной тег, внутри тега помещается имя признака из AttributeLib. У данного тега имеется ряд параметров.
  • Type принимает значения Detect (по-умолчанию, режим детектирования), Check (режим проверки) или Extract (режим извлечения информации).
  • Channel принимает значения RGB (по-умолчанию) для работы с цветным изображением или DEPTH для работы с картой глубины.
  1. Tracker Позволяет настроить отслеживание объекта, подробнее см. раздел Трекинг.

3.3. Расширенный пример

Снизу представлен пример описания объекта "красная чашка". Он состоит из признака красных областей HistDarkRed, у которого объявлен фильтр, убирающий распознавания внутри своих же областей. Далее идет признак размера на изображении NotFractal, который отсеивает маленькие области, обнаруженные признаком цвета. После этого объявлен признак образа, который с использованием DNN модуля определяет чашки на изображении. К этому признаку добавлен NMS-фильтр. На этом этапе объект уже распознает красные чашки. Далее указан признак извлечения информации DepthKinect, позволяющий локализовать объект в трехмерном пространстве с использованием камеры глубины. Завершает описание объекта объявление трекера, который будет соотносить объекты на последовательных кадрах и пытаться найти объект в случае, когда детектор не может этого сделать.

<AttributeLib>    
    
    <Attribute Name="HistDarkRed" Type="HistColor" Histogram="histograms/DarkRed.yaml">    
        <Filter Type="Insider"/>
    </Attribute>
    
    <Attribute Name="NotFractal" Type="Size" MinAreaPc="0.5" MaxAreaPc="100"/>
        
    <Attribute Name="CupDnn" Type="Dnn" 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="47">    
        <Filter Type="NMS" threshold="0.5"/>
    </Attribute>
            
    <Attribute Name="DepthKinect" Type="Depth" depthScale="0.001"/>
        
</AttributeLib>

<SimpleObjectBase> 
    
    <SimpleObject Name="RedCup" ID="61" Mode="Soft" MergingPolicy="Union">           
        <Attribute Type="Detect">HistDarkRed</Attribute>                    
        <Attribute Type="Check">NotFractal</Attribute>
        <Attribute Type="Detect">CupDnn</Attribute>
        <Attribute Type="Extract" Channel="DEPTH">DepthKinect</Attribute>                  
        <Tracker IOU="0.25" decay="0.01">MOSSE</Tracker>
    </SimpleObject>
    
</SimpleObjectBase>
Clone this wiki locally