• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

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

人工智能 月照银海似蛟龙 1289次浏览 0个评论

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

文章目录

  • yolo-v3模型测试及测试结果转化
    • 1.制作2019_test.txt文件
    • 2. 修改./darknet/cfg/voc.data文件
    • 3. 修改./darknet/cfg/yolov3-voc.cfg文件
    • 4. 执行测试语句
    • 5. 转换预测结果格式

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

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 针对自己数据集得检测与测试 结果转化 。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明yolo-v3模型测试及测试结果转化
喜欢 (0)

您必须 登录 才能发表评论!

加载中……