warning negative label/yolo标签出现负值?

问题如上图所示,出现场景:图像增强后,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文件又带负数了,搞了半天,发现上面大佬的另一篇文章发现了问题所在。(不过看着挺麻烦的,感觉不如我自己的解决方法一哈哈)

猜你喜欢

转载自blog.csdn.net/dal1223/article/details/131406109