yolov5 deepsort训练图片数据集,如何更改代码,使result.txt与每张图片对应

yolov5 deepsort训练图片数据集,如何更改代码,使result.txt,每张图片生成一个txt文件

要实现每张图片生成一个txt文件,您需要更改yolov5_deepsort/utils/results.py中的代码。

打开yolov5_deepsort/utils/results.py文件。
找到def write_results函数。
在函数中找到以下代码块:

for *xyxy, conf, cls in reversed(det):
    if save_txt:  # Write to file
        xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4))).view(-1).tolist()  # normalized xywh
        line = (cls, *xywh, conf) if save_conf else (cls, *xywh)  # label format
        with open(save_path + '.txt', 'a') as f:
            f.write(('%g ' * len(line)).rstrip() % line + '\n')
    if save_img or view_img:  # Add bbox to image
        label = f'{names[int(cls)]} {conf:.2f}'
        plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)

将上述代码块替换为以下代码块:

for *xyxy, conf, cls in reversed(det):
    if save_txt:  # Write to file
        xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4))).view(-1).tolist()  # normalized xywh
        line = (cls, *xywh, conf) if save_conf else (cls, *xywh)  # label format
        save_file = save_path + f'_{count}.txt'  # Generate unique file name for each image
        with open(save_file, 'w') as f:
            f.write(('%g ' * len(line)).rstrip() % line + '\n')
        count += 1
    if save_img or view_img:  # Add bbox to image
        label = f'{names[int(cls)]} {conf:.2f}'
        plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)

保存文件。
现在,每张图片将生成一个独立的txt文件,文件名为原始图片文件名加上一个数字。例如,如果原始图片文件名为image.jpg,那么生成的txt文件名将为image_0.txt,image_1.txt,依此类推。

没有具体的代码。
如果是一张图片多个txt,思路就是将with open(xxxx.txt,"a") 这句代码提到遍历每张图片pred的for循环外面去,这样就会变成每张图片生成一个txt。
如果是多张图片一个txt,思路就是将with open(xxxx.txt,"a") 提到总的for循环里面去,这样让每张图片生成一个txt。但是要注意这种需要自己修改下txt的文件名,不然就都写到一个文件里面去了

  • 这篇博客: 目标检测与跟踪 yolov5 + deepsort中的 数据集均标注txt格式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 烟火数据集 10000+
    安全帽数据集 11000+
    口罩数据集 8000+
    抽烟数据集 7000+
    打电话数据集 10000+
    电动车数据集 未知
    睡觉数据集 未知

  • 以下回答由chatgpt基于相关博客总结生成:

    根据您给出的问题和参考资料,我可以提供一种解决方案。首先,我们需要对yolov5 deepsort的源代码进行修改,使其在训练过程中为每张图片生成独立的result.txt文件。下面是实现此目标的步骤:

    1. 定位代码文件: 找到和训练相关的代码文件,通常是train.py或者相似的文件。

    2. 导入必要的库: 在代码文件的开头导入Python的os库,以便后面可以处理文件和目录。

    import os
    
    1. 在适当的位置生成独立的result.txt文件: 在代码中找到保存检测结果的部分,一般是在检测函数的最后,例如infer()函数。在保存结果前,我们需要获取当前图片的文件名,并使用文件名创建一个对应的result.txt文件。
    # 在检测函数最后保存结果的位置
    
    # 获取当前图片的文件名(假设图片文件名存储在变量img_filename中)
    img_filename = 'example.jpg'  # 请根据实际情况修改图片文件名获取的方式
    
    # 创建和图片文件名对应的result.txt文件
    txt_filename = os.path.splitext(img_filename)[0] + '.txt'
    
    1. 将结果保存到对应的result.txt文件: 继续修改代码,在保存结果的位置将结果保存到对应的result.txt文件中。
    # 在保存结果的位置,将结果保存到对应的result.txt文件
    with open(txt_filename, 'w') as f:
        for box in result:
            # 将box的坐标等信息写入result.txt文件
            f.write(...)  # 请根据实际情况修改保存结果的方式
    

    完成上述步骤后,代码应该可以在训练过程中为每张图片生成独立的result.txt文件。

    请注意,上述代码示例中的文件名和结果保存的方式仅为示例,您需要根据实际情况进行修改。此外,由于我无法查看具体的源代码和数据集结构,上述代码仅为参考,您可能需要根据实际情况进行调整和改进。

    如果您需要更具体的解决方案或代码实现,请提供更多的细节和代码片段,以便我可以更好地帮助您。