Конвертировать файл аннотации .mat в файл XML - PullRequest
0 голосов
/ 26 декабря 2018

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

Теперь я хотел бы обучить простой детектор объектов, используя эти аннотации.Однако используемый мной детектор объектов (детектор объектов dlib) принимает только формат XML.

Возможно ли преобразовать этот файл .mat в файл XML, чтобы все мои аннотации оставались нетронутыми, и яможно обучить мой пользовательский детектор объектов?Если так, как я могу это сделать?

1 Ответ

0 голосов
/ 26 декабря 2018

Я начну с того, что это только частичное решение вашей проблемы, которое должно позволить вам решить остальную часть самостоятельно.


Похожечто этот вопрос касается преобразования groundTruth объекта в дружественный к dlib XML.

Итак, сначала мы должны спросить себя, что такое groundTruth объект?Я сделал игрушечный пример, используя Image Labeler и некоторые изображения, доступные в папке установки MATLAB.Вот что я получил:

gTruth = 
  groundTruth with properties:

          DataSource: [1×1 groundTruthDataSource]
    LabelDefinitions: [6×3 table]
           LabelData: [9×6 table]

>> gTruth.DataSource
ans = 
groundTruthDataSource for an image collection with properties

                      Source: {
                              ' ...\MATLAB\R2018b\help\symbolic\mupad_ref\adaptivemesh-d0e330.png';
                              ' ...\MATLAB\R2018b\help\symbolic\mupad_ref\adaptivemesh-d0e338.png';
                              ' ...\MATLAB\R2018b\help\symbolic\mupad_ref\adaptivemesh-d0e348.png'
                               ... and 6 more
                              }

>> gTruth.LabelDefinitions
ans =
  6×3 table
       Name         Type              Description        
    __________    _________    __________________________
    'Axis1'       Rectangle    ''                        
    'Axis2'       Rectangle    ''                        
    'Axis3'       Rectangle    ''                        
    'Equation'    Scene        'Image shows an equation.'
    'ThreeD'      Scene        'Image shows a 3D chart.' 
    'TwoD'        Scene        'Image shows a 2D chart.' 

>> gTruth.LabelData
ans =
  9×6 table
       Axis1           Axis2           Axis3        Equation    ThreeD    TwoD 
    ____________    ____________    ____________    ________    ______    _____
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    []              []              []               true       false     false
    []              []              []               true       false     false
    []              []              []               true       false     false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    []               false      false     true 

(Вышеприведенное содержит 2 из 3 доступных типов меток, третий - Пиксельные метки , которые я решил пропустить здесь.)

Теперь, как выглядит дружественный к XML XML?Я не совсем уверен, поэтому я пойду с этим:

<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type='text/xsl' href='image_metadata_stylesheet.xsl'?>
<dataset>
<name>imglab dataset</name>
<comment>Created by imglab tool.</comment>
<images>
  <image file='rel-path\1.jpg'>
    <box top='26' left='33' width='78' height='73'>
      <label>LabelName</label>
      <part name='1' x='67' y='68'/>
    </box>
  </image>
  ...
<images>
</dataset>

Таким образом, вам нужно следующее отображение:

  • Для каждого изображения создайте <image> узел, чей атрибут file указывает на gTruth.DataSource.Source{1...n}.
  • В изображениях, имеющих метку Rectangle -типа, создайте узел <box>.
    • Четырехэлементный вектор, который мы имеем в gTruth.LabelData, необходимо преобразовать, например, в top='26' left='33' width='78' height='73'.
    • Имя метки относится к узлу <label>.
  • (Угадайте # 1) Изображения, имеющие несколько меток, будут иметь более одного узла <label>.
  • (Угадайте # 2) Изображения, имеющие тип Sceneметка, не будет иметь <box> узла, включающего <label>.
  • Понятия не имею, для чего предназначен узел <part>.

Создание конвертерана основании вышесказанного должно быть просто.Вы можете использовать struct2xml, чтобы помочь вам, и / или xmlwrite.

...