自建py文件,实现读取XML文件,并对其中值进行计算的功能

问题提出

目前项目面临着运用自学习机制进行目标识别的挑战,自学习在功能实现上可以和弱监督学习等同,通俗的说就是只给一部分训练集中的图像打标签(十分之一),然后利用弱监督网络进行训练,验证和测试。

翻阅资料,在GitHub上找到了吴恩达团队在2017年发布的一个基于医学影像的弱监督目标识别的项目代码(在这里手动@一下南南姐),前期的数据准备包括一个包含所有图像(训练、验证、测试)的文件夹、一个 train_val_list.txt 用于存放训练集和验证集的图像名称、一个 test_list.txt 用于存放测试的图像名称、一个 Data_Entry_2017_v2020.csv 用于存放病人和疾病的信息(在项目中没有调用,直接用原始信息即可)、一个 BBox_List_2017.csv 用于存放标签数据 bounding box 的信息(包括图像名称、标签名称、x、y、w、h)和一个文件夹用于存放输出图像。

其中两个txt文件生成比较顺利,主要问题存在于 BBox_List_2017.csv 中,因为我们的数据标签存放在xml文件中,如图

在这里插入图片描述

要想得到 x、y、w、h四个值,需要对xml文件进行读取,然后对 xmin xmax ymin ymax 四个值进行计算,其中,x = (xmin + xmax)/2、y = (ymin + ymax)/2、w = abs(xmax - xmin)、
h = abs(ymax - ymin),参考菜鸟教程中python读取xml文件的方法,成功读取了name、xmin、xmax、ymin、ymax四个值

在这里插入图片描述

但是在对这四个值进行计算的过程中出现了问题,最初的代码定义模块如图:

在这里插入图片描述

之后我想把 self. 强制转换成 int 型,出现如下错误:

在这里插入图片描述

原来是类型无法转换。因为我之前定义把 self 定义为了字符串,而在数据类型强制转换中,数字字符串是可以转换的,如:

在这里插入图片描述

在这里插入图片描述
可以看到,数字字符串’123’被转换成了 int 型,但非数字字符串无法被强制转换成 int 型。请教师兄,在之前定义中修改为:

在这里插入图片描述

这样,再强制转换就可以了:

在这里插入图片描述
负值是由于图像翻转的缘故。

后记

这里只是解决了项目初期的一个小问题,之后项目的一些心得体会我也会整理发出来。

参考

菜鸟教程.
CheXNet-with-localization.