yolo-v3模型测试及测试结果转化

简介: yolo-v3模型测试及测试结果转化

yolo-v3模型测试及测试结果转化

训练完成生成模型后,进行模型测试。对测试集数据进行检测,得到检测结果

1.制作2019_test.txt文件

像制作训练集时生产2019_train.txt(文件内容为包含所有训练图片的路径和文件名)一样,制作2019_test.txt文件(文件内容为包含所有测试图片的路径和文件名)。
在这里插入图片描述
采用以下程序来生成测试集的 test.txt 文件,其中包含每个测试样本的路径和文件名,注意此处包含后缀

# coding=utf-8
import os
from os import listdir, getcwd
from os.path import join
if __name__ == '__main__':  # 只有在文件作为脚本文件直接执行时才执行下面代码
    source_folder='Your Path' #图片保存的路径
    dest='Your Path/test.txt' #写有图片的名字的路径
    file_list=os.listdir(source_folder)#获取各图片的名称       
    test_file=open(dest,'a')    #追加写打开              
    count = 0              
    for file_obj in file_list:  
        count += 1                
        file_path=os.path.join(source_folder,file_obj) #路径拼接  指向 图片文件的路径
        # file_name,file_extend=os.path.splitext(file_path) #分离文件名与扩展名 file_name为去掉扩展名的图片名称 
        test_file.write(file_path+'\n')  #写入去掉扩展名的文件名名称
    test_file.close() #关闭文件

然后在该.py文件的路径下,执行如下命令:

python create_test_txt.py

2. 修改./darknet/cfg/voc.data文件

修改./cfg/voc.data文件中的valid部分,将其设置为第1步中生成的test.txt路径。

classes= # 不用改
train  = # 不用改
valid  = /Your Path/test.txt
names = # 不用改
backup = # 不用改`在这里插入代码片`

3. 修改./darknet/cfg/yolov3-voc.cfg文件

将测试模式打开,将训练模式关闭,如下:

[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=16

4. 执行测试语句

在命令窗口的./darknet路径下,执行以下语句:

./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights

执行完毕之后会在./darknet/result/ 路径下生成若干个txt文件(个数和类别数一致),名称为comp4_det_test_[class_name].txt,这便是预测结果文件。

5. 转换预测结果格式

通常我们希望预测结果保存在一个个以图片名称为名字的txt文件中,例如,我所期望的文件格式如下:
在这里插入图片描述
那么我们可以使用如下程序进行格式转换:
注意:
1)需要将第4步生成的若干个txt文件重命名为:类名.txt
2)将这些类名.txt统一放到一个空文件夹下,即下面程序中的 'Your Path\raw_txt'
3)创建一个用来存放转换后txt文件的文件夹,即下面程序中的 'Your Path\converted_txt'

import os

def creat_mapping_dic(result_txt, threshold=0.0):  # 设置一个阈值,用来删掉置信度低的预测框信息
 
    mapping_dic = {}  # 创建一个字典,用来存放信息
    txt = open(result_txt, 'r').readlines()  # 按行读取TXT文件
 
    for info in txt:  # 提取每一行
        info = info.split()  # 将每一行(每个预测框)的信息切分开
 
        photo_name = info[0]  # 图片名称
        probably = float(info[1])  # 当前预测框的置信度
        if probably < threshold:
            continue
        else:
            xmin = int(float(info[2]))
            ymin = int(float(info[3]))
            xmax = int(float(info[4]))
            ymax = int(float(info[5]))
 
            position = [xmin, ymin, xmax, ymax]
 
            if photo_name not in mapping_dic:  # mapping_dic的每个元素的key值为图片名称,value为一个二维list,其中存放当前图片的若干个预测框的位置
                mapping_dic[photo_name] = []
            mapping_dic[photo_name].append(position)
    return mapping_dic
 
 
def creat_result_txt(raw_txt_path, target_path, threshold=0.0):  # raw_txt_path为yolo按类输出的TXT的路径 target_path 为转换后的TXT存放路径
 
    all_files = os.listdir(raw_txt_path)  # 获取所以的原始txt
 
    for each_file in all_files:  # 遍历所有的原始txt文件,each_file为一个文件名,例如‘car.txt’
 
        each_file_path = os.path.join(raw_txt_path, each_file)  # 获取当前txt的路径
        map_dic = creat_mapping_dic(each_file_path, threshold=threshold)  # 对当前txt生成map_dic
 
        for each_map in map_dic:  # 遍历当前存放信息的字典
            target_txt = each_map + '.txt'  # 生成目标txt文件名
            target_txt_path = os.path.join(target_path, target_txt)  # 生成目标txt路径
 
            if target_txt not in os.listdir(target_path):
                txt_write = open(target_txt_path, 'w')  # 如果目标路径下没有这个目标txt文件,则创建它,即模式设置为“覆盖”
            else:
                txt_write = open(target_txt_path, 'a')  # 如果目标路径下有这个目标txt文件,则将模式设置为“追加”
 
            class_name = each_file[:-4]  # 获取当前原始txt的类名
            txt_write.write(class_name)  # 对目标txt写入类名
            txt_write.write('\n')  # 换行
 
            for info in map_dic[each_map]:  # 遍历某张图片的所有预测框信息
                txt_write.write(str(info[0]) + ' ' + str(info[1]) +
                                ' ' + str(info[2]) + ' ' + str(info[3]) + ' ')  # 写入预测框信息
                txt_write.write('\n')  # 换行
 
creat_result_txt('Your Path\\raw_txt',
                 'Your Path\converted_txt',
                 threshold=0.1)

运行完毕后,在Your Path\converted_txt文件夹中会产生每个图片对应得检测结果
在这里插入图片描述

至此完成了 基于yolo-v3 针对自己数据集得检测与测试 结果转化 。

相关文章
|
27天前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141111 24
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
23天前
|
机器学习/深度学习 自然语言处理 API
阿里云零门槛、轻松部署您的专属 DeepSeek模型体验测试
DeepSeek R1是基于Transformer架构的先进大规模深度学习模型,2025年1月20日发布并开源,遵循MIT License。它在自然语言处理等任务上表现出色,高效提取特征,缩短训练时间。阿里云推出的满血版方案解决了服务器压力问题,提供100万免费token,云端部署降低成本,用户可快速启动体验。虽然回答速度有待提升,但整体表现优异,备受关注。
118 8
|
26天前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
通义灵码, 作为国内首个 AI 程序员,从最开始的内测到公测,再到通义灵码正式发布第一时间使用,再到后来使用企业定制版的通义灵码,再再再到现在通义灵码2.0,我可以说“用着”通义灵码成长的为数不多的程序员之一了吧。咱闲言少叙,直奔主题!今天,我会聊一聊通义灵码的新功能和通义灵码2.0与1.0的体验感。
|
22天前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
|
4月前
|
编解码 人工智能 自然语言处理
迈向多语言医疗大模型:大规模预训练语料、开源模型与全面基准测试
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据,无需标准化。其核心创新包括任意分辨率编码和动态压缩器模块,适用于从微小图标到长时间视频的多种应用场景。Oryx 在长上下文检索和空间感知数据方面表现出色,并且已开源,为多模态研究提供了强大工具。然而,选择合适的分辨率和压缩率仍需谨慎,以平衡处理效率和识别精度。论文地址:https://www.nature.com/articles/s41467-024-52417-z
85 2
|
5月前
|
测试技术
谈谈【软件测试的基础知识,基础模型】
谈谈【软件测试的基础知识,基础模型】
54 5
|
5月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
311 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
5月前
|
API
2024-05-14 最新!OpenAI 新模型 GPT-4 omni 简单测试,4o速度确实非常快!而且很便宜!
2024-05-14 最新!OpenAI 新模型 GPT-4 omni 简单测试,4o速度确实非常快!而且很便宜!
93 0
|
5月前
|
机器学习/深度学习 人工智能 并行计算
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
89 0
|
6月前
|
人工智能 测试技术 PyTorch
AI计算机视觉笔记二十四:YOLOP 训练+测试+模型评估
本文介绍了通过正点原子的ATK-3568了解并实现YOLOP(You Only Look Once for Panoptic Driving Perception)的过程,包括训练、测试、转换为ONNX格式及在ONNX Runtime上的部署。YOLOP由华中科技大学团队于2021年发布,可在Jetson TX2上达到23FPS,实现了目标检测、可行驶区域分割和车道线检测的多任务学习。文章详细记录了环境搭建、训练数据准备、模型转换和测试等步骤,并解决了ONNX转换过程中的问题。

热门文章

最新文章