Yolov8训练,Json转txt标注文件时,txt文件存在负值,导致在训练时出现警告或者报错

原因:可能在标注数据时,使用了图像翻转或反转批量生成新数据和新Json文件,这时再进行Json文件转txt文件时由于转换代码的原因会把转换后原本先标注的坐标点当成后标注的像素点,这时再进行矩形框长宽计算时,可能会产生负值。
原转化代码,我参考了这篇文章:https://blog.csdn.net/fjlaym/article/details/123992962?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168722415116800180654496%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168722415116800180654496&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-123992962-null-null.142%5Ev88%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=yolov5%E5%88%B6%E4%BD%9C%E8%87%AA%E5%B7%B1%E7%9A%84%E6%95%B0%E6%8D%AE%E9%9B%86&spm=1018.2226.3001.4187
解决:将转换结果用abs函数确保转换成正值。在原代码的基础上对convert函数做如下更改:

```python
def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = abs(x * dw)
    w = abs(w * dw)
    y = abs(y * dh)
    h = abs(h * dh)
    return (x, y, w, h)
```

### 回答1: 如果你想要批量更改YOLO标签类别,需要进行以下步骤: 1. 打开YOLO标签文件夹,保存所有标签文件的路径。 2. 读取每个标签文件,将文件的类别编号替换为新的类别编号。 3. 将修改后的标签文件保存回原来的路径。 以下是一个Python代码示例,用于将YOLO标签文件的所有标签文件的类别编号从1更改为2: ```python import os # 定义旧类别编号和新类别编号 old_class_id = 1 new_class_id = 2 # 定义YOLO标签文件夹路径 label_folder_path = '/path/to/label/folder/' # 获取YOLO标签文件所有标签文件的路径 label_files = os.listdir(label_folder_path) label_files = [os.path.join(label_folder_path, f) for f in label_files if f.endswith('.txt')] # 循环读取每个标签文件,替换类别编号,并保存回原路径 for file_path in label_files: with open(file_path, 'r') as f: lines = f.readlines() with open(file_path, 'w') as f: for line in lines: line = line.strip().split() if int(line[0]) == old_class_id: line[0] = str(new_class_id) f.write(' '.join(line) + '\n') ``` 请注意,这只是一个简单的示例,你可能需要根据自己的具体情况进行修改。如果你不确定如何修改代码,请咨询专业人士的帮助。 ### 回答2: 批量更改YOLO标签类别可以通过以下步骤完成。 1. 首先,需要分析和了解YOLO标签的数据结构。YOLO标签通常是以文本文件的形式存在,每个文件对应着一张图片的标注信息。标签文件的每一行代表一个物体的标注,包含了物体的类别、边界框的位置坐标及尺寸等信息。 2. 然后,准备一个映射表,将原有的类别和需要更改的类别一一对应起来。例如,如果需要将类别"dog"更改为"class1",则需要创建一个映射关系:{"dog": "class1"}。 3. 接下来,遍历所有的标签文件,读取每个标签文件的内容,并逐行进行处理。对于每一行,我们可以使用字符串的替换功能,将原有的类别替换为新的类别。例如,如果读取到一行标签信息为"dog 0.1 0.2 0.3 0.4",则可以将其替换为"class1 0.1 0.2 0.3 0.4"。 4. 将替换后的标签信息写回到原标签文件,或者写入一个新的标签文件,以备后续使用。 5. 重复上述步骤,直到处理完所有的标签文件。 通过以上步骤,我们可以实现批量更改YOLO标签类别的功能。这个方法适用于需要在大量标注数据批量更改标签类别的场景,能够提高效率和准确性。 ### 回答3: 批量更改YOLO标签类别是指对一组已经标注好的图像数据集的物体类别进行修改。下面是关于如何进行批量更改YOLO标签类别的步骤: 1. 首先,需要将所有的标注数据文件(通常是txt格式)和对应的图像文件存在同一个文件。 2. 接下来,读取每个标注文件的内容,并进行修改。每个标注文件通常包含一行或多行文本,每行表示一个物体的位置和类别信息。在YOLO标签文件,每行的格式通常是:类别编号、心点坐标、宽度、高度。 3. 针对每个标注文件,可以使用Python文件读写操作来逐行读取和修改其的类别编号。可以通过使用字符串的替换功能,将原先的类别编号替换为新的目标类别编号。 4. 完成修改后,将修改后的标注数据文件保存。 5. 最后,可以使用修改后的标注文件和对应的图像进行进一步的训练或应用。 需要注意的是,在进行批量更改YOLO标签类别之前,建议先备份原始的标注数据文件,以防止错误修改导致数据丢失或混乱。此外,确保修改后的标签类别与实际物体类别一致,以提高模型的准确性和性能。 完成以上步骤后,即可实现对YOLO标签类别的批量更改。根据数据集的大小和计算机性能,该过程可能需要一定的间和计算资源。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值