我有一些图像,我用MATLAB的imageLabler工具进行了注释。因此,我得到了gtruth.mat文件(它包含所有图像的注释)。
现在,我想使用这些注释来训练一个简单的对象检测器。但是,我使用的对象检测器(dlib对象检测器)只接受XML格式。
是否有可能将该.mat文件转换为XML文件,以便使我的所有注释保持不变,并且能够训练我的自定义对象检测器?如果是的话,我怎样才能做到呢?
发布于 2018-12-26 14:02:58
我首先要说的是,这只是你的问题的部分解决方案,这应该允许你自己解决剩下的问题。
这个问题似乎涉及将groundTruth对象转换为对dlib友好的XML。
首先,我们需要问自己,什么是groundTruth对象?我已经做了一个玩具例子使用图像标记器和一些图像在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 (上面包含了3种可用标签中的2种,第3种是像素标签,我决定在这里跳过它。)
现在,对dlib友好的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-type标签的图像中,创建一个<box>节点。gTruth.LabelData中所拥有的四元素向量需要转换为top='26' left='33' width='78' height='73'。<label>节点。
<label>节点。Scene-type标签的图像,将不会有一个包含<label>的<box>节点。<part>节点是干什么用的。在上述基础上创建一个转换器应该是很简单的。您可以使用struct2xml来帮助您和/或xmlwrite。
https://stackoverflow.com/questions/53931713
复制相似问题