yolo 学习系列(四):训练结果评估

yolo 学习系列(四):训练结果评估


1 评价参数

参考这里

1.1 召回率 Recall 和 精确率 Precision

具体公式不在赘述

以在大雁和飞机的图片中识别飞机为例:

  • Precision其实就是在识别出来的图片中,飞机所占的比率
  • Recall 是被正确识别出来的飞机个数与测试集中所有飞机的个数的比值
1.2 平均正确率 Average_precision(AP)
  • 调节阈值K,可以得到不同的(P-R),最终可以让recall变化从0到1.
  • 每一类都可以根据recall和precision绘制P-R曲线,AP就是该曲线下的面积。而mAP就是所有类AP的平均值。
2 结果评估

参考这里
YOLO-V3可视化训练过程中的参数

2.1 训练日志保存
./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 2>1 | tee yolo-voc.txt
2.2 验证命令
darknet.exe detector valid data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights -out -gpu 0 -thresh .5

darknet.exe detector valid data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights -thresh .5

python reval_voc_py3.py --year 2007 --classes data/voc.names --image_set test --voc_dir data/mkw/VOCdevkit/ results
2.3 召回率
darknet.exe detector recall data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights
2.4 mAP
darknet.exe detector map data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights
2.5 生成loss-iter曲线

在执行训练命令的时候加一下管道,tee一下log

./darknet detector train cfg/voc.data cfg/yolo-voc.cfg | tee training.log

将下面的python代码保存为drawcurve.py,并执行

python  drawcurve.py training.log 0

python的代码为

import argparse
import sys
import matplotlib.pyplot as plt
def main(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument("log_file",  help = "path to log file"  )
    parser.add_argument( "option", help = "0 -> loss vs iter"  )
    args = parser.parse_args()
    f = open(args.log_file)
    lines  = [line.rstrip("\n") for line in f.readlines()]
    # skip the first 3 lines
    lines = lines[3:]
    numbers = {'1','2','3','4','5','6','7','8','9','0'}
    iters = []
    loss = []
    for line in lines:
        if line[0] in numbers:
            args = line.split(" ")
            if len(args) >3:
                iters.append(int(args[0][:-1]))
                loss.append(float(args[2]))
    plt.plot(iters,loss)
    plt.xlabel('iters')
    plt.ylabel('loss')
    plt.grid()
    plt.show()
if __name__ == "__main__":
    main(sys.argv)
3 mAP计算与PR曲线绘制

参考这里

3.1 运行detector valid指令,生成对测试集的检测结果

命令格式: ./darknet detector valid <voc.data文件路径> <cfg文件路径> <weights文件路径> -out “”

例如:

./darknet detector valid ./cfg/voc.data cfg/yolov2-tiny-voc.cfg results/yolov2-tiny-voc_10000.weights -out ""

验证集在voc.data文件中已定义

classes= 1
train  = /home/chris/darknet/scripts/2007_train.txt
valid  = /home/chris/darknet/scripts/2007_val.txt # 此条命令用到该路径
names = data/voc.names
backup = /home/chris/darknet/results/

运行后在…/darknet/results/下生成一个 sea cucumber.txt 文件
其中txt中数据格式为: 文件名 置信度 x y w h
将文件名修改为 comp4_det_val_sea cucumber.txt

在这里插入图片描述

3.2 计算mAP并生成pkl文件

命令格式:python reval_voc.py --voc_dir <voc文件路径> --year <年份> --image_set <验证集文件名> --classes <类名文件路径> <输出文件夹名>

例如:

python reval_voc.py --voc_dir /home/chris/darknet/scripts/VOCdevkit --year 2007 --image_set val --classes /home/chris/darknet/data/voc.names testSeacucumber
# 此处的坑是 --image_set 后是 val,要与 voc.data 名称一致

这里用到两个文件 reval_voc.py 和 voc_eval.py ,将它们放在 darknet 一级目录下运行以上命令即可得到map值,并在testSeacucumber文件夹内得到 sea cucumber_pr.pkl 文件
在这里插入图片描述

3.3 绘制PR曲线

在testSeacucumber文件夹内新建一个PR_draw.py文件,内容如下:

# -*- coding: utf-8 -*
#import _pickle as cPickle
import cPickle
import matplotlib.pyplot as plt
fr = open('sea cucumber_pr.pkl','rb')
inf = cPickle.load(fr)
fr.close()
 
x=inf['rec']
y=inf['prec']
plt.figure()
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('PR_cruve')
plt.plot(x,y)
plt.show()
 
print('AP:',inf['ap'])

运行命令

python PR_draw.py

在这里插入图片描述

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要进行 YOLO 实例分割训练,你需要准备如下内容: 1. 数据集:包含一系列图像和它们对应的标注信息,标注信息应该包括每个物体的类别和边界框坐标。 2. YOLOv3 模型:你可以从官方仓库中下载预训练YOLOv3 模型,也可以自己训练一个模型。 3. 训练工具:你可以使用 Darknet 或 PyTorch 等框架进行训练。 接下来是具体的训练步骤: 1. 准备数据集:将数据集按照一定比例划分为训练集、验证集和测试集,然后将数据集转换为 YOLO 格式,即将每张图片的标注信息保存在一个以图片名命名的 .txt 文件中,每个 .txt 文件中包含多行,每行表示一张图片中的一个物体,每行包含五个值:物体类别编号、边界框中心点的 x、y 坐标、边界框的宽和高。 2. 配置模型:修改 YOLOv3 模型的配置文件,设置训练参数,包括学习率、批大小、迭代次数等。 3. 开始训练:使用训练工具对模型进行训练训练过程中可以实时查看训练损失和验证损失,以及模型的精度和召回率等指标。 4. 模型评估训练完成后,使用测试集对模型进行测试,计算模型的精度、召回率和 F1 值等评估指标。 5. 模型优化:根据测试结果对模型进行优化,可以尝试调整模型结构、修改训练参数,或增加数据集等方法进行优化。 6. 导出模型:训练完成后,将模型导出为可用于推理的格式,如 TensorFlow、PyTorch 等格式。 以上就是 YOLO 实例分割训练的基本步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

la_fe_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值