问题如上图所示,出现场景:图像增强后,xml文件转txt文件。
解决方法1(无脑粗暴,一秒见效):直接把负值转成正值,不影响标注与训练结果,代码如下:
import os
def process_files_in_folder(folder_path):
# 获取文件夹中的所有文件
file_list = os.listdir(folder_path)
for file_name in file_list:
# 检查文件扩展名是否为txt
if file_name.endswith('.txt'):
file_path = os.path.join(folder_path, file_name)
# 读取文件内容
with open(file_path, 'r') as file:
lines = file.readlines()
# 处理文件中的负数
processed_lines = []
for line in lines:
numbers = line.split()
processed_numbers = []
for number in numbers:
try:
number = float(number)
if number ==0:
number=int(number)
if number < 0:
number = abs(number) # 将负数转换为正数
except ValueError:
pass
processed_numbers.append(str(number))
processed_line = ' '.join(processed_numbers)
processed_lines.append(processed_line)
# 将处理后的内容写回文件
with open(file_path, 'w') as file:
file.write('\n'.join(processed_lines))
# 指定文件夹路径
folder_path = r'D:\datasets\oil\train\labels'#只需修改成你的txt路径
process_files_in_folder(folder_path)
解决方法2(抽丝剥茧,根本解决):看了一篇csdn文章:说是图像增强的时候,最大值可能会小于最小值,所以出现负数,我感觉很有道理,按照其修改方法,在xml转txt的文件中加入以下代码:
if xmlbox.find('xmin').text > xmlbox.find('xmax').text:
# int.temp
temp = xmlbox.find('xmin').text
xmlbox.find('xmin').text = xmlbox.find('xmax').text
xmlbox.find('xmax').text = temp
if xmlbox.find('ymin').text > xmlbox.find('ymax').text:
# int.temp
temp = xmlbox.find('ymin').text
xmlbox.find('ymin').text = xmlbox.find('ymax').text
xmlbox.find('ymax').text = temp
b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
有意思的来了,以前带负数的txt文件是非负了,但是以前不带负数的txt文件又带负数了,搞了半天,发现上面大佬的另一篇文章发现了问题所在。(不过看着挺麻烦的,感觉不如我自己的解决方法一哈哈)