关于神经网络模型评估的一些笔记

自己学习的笔记,欢迎各位指正。

mAP

mean of Average Precision的缩写,意思是平均精确度(average precision)的平均(mean),是object detection中模型性能的衡量标准。

TP : True Positives(真正例)
FP : False Positives(假正例)
TN : True Negatives(真负例)
FN : False Negatives(假负例)
为了获取TP和FP要用IOU,计算IOU,我们从而确定一个检测结果(Positive)是正确的(True)还是错误的(False),最常用的阈值是0.5。同时类别正确置信度大于一定阈值。
P r e c i s i o n = T P T P + F P Precision=\frac {TP}{TP+FP} Precision=TP+FPTP
要计算Recall要TN,FN。但图像中大部分没有物体也没检测到物体的部分都是TN,我们可以只计算FN。
R e c a l l = T P T P + F N Recall=\frac {TP}{TP+FN} Recall=TP+FNTP
随着阈值增加P和R都会减小。

计算mAP

AP是计算单类别的模型平均准确度。
AP=平滑后PR曲线下包围的面积
不同数据集上的AP和mAP计算定义略不同。
VOC数据集中的mAP计算的是固定IoU_threshold=0.5,再综合考虑各个P_threshold下的模型平均准确度。
而COCO是取IoU_threshold=0.5,0.55, 0.6,… , 0.95时,各个mAP的均值。

FLOPS and FLOPs

FLOPS:指每秒浮点运算次数,可以理解为计算的速度。是衡量硬件性能的一个指标。
FLOPs:指浮点运算数,理解为计算量。可以用来衡量算法/模型的时间复杂度。(模型) 在论文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)

C o n v 2 d ( C o u t , C i n , k e r n e l = K , s t r i d e = S , p a d d i n g = P , b i a s = F a l s e ) Conv2d( C_{out}, C_{in}, kernel= K, stride= S, padding= P, bias= False) Conv2d(Cout,Cin,kernel=K,stride=S,padding=P,bias=False)
输入Feature map: ( B , C i n , W i n , H i n ) (B,C_{in},W_{in},H_{in}) (B,Cin,Win,Hin),输出 Feature map: ( B , C o u t , W o u t , H o u t ) (B,C_{out},W_{out},H_{out}) (B,Cout,Wout,Hout), 计算如下:

F L O P s = ( 2 × C i n × K 2 − 1 ) × W o u t × H o u t × C o u t \mathrm{FLOPs}=\left(2\times C_{in}\times K^2-1\right)\times W_{out}\times H_{out}\times C_{out} FLOPs=(2×Cin×K21)×Wout×Hout×Cout

L i n e r ( C i n , C o u t , b i a s = F a l s e ) Liner(C_{in},C_{out},bias=False) Liner(Cin,Cout,bias=False),输入 sequence : ( B , n u m , C i n ) :(B,num,C_{in}) :(B,num,Cin), 输出 sequence: ( B , n u m , C o u t ) (B,num,C_{out}) (B,num,Cout),计算如下:

F L O P s = B × [ ( 2 × C i n − 1 ) × C o u t ] \mathrm{FLOPs}=B\times[(2\times C_{in}-1)\times C_{out}] FLOPs=B×[(2×Cin1)×Cout]
BatchNorm2D层经常和卷积层连用,而在程序里面,这两个可以合并运算,因此不会增加 FLOPs。

计算

import torch
from thop import profile

net = Model()  
inputs = torch.randn(1, 3, 112, 112)
flops, params = profile(net, (inputs,))
print('FLOPs: ', flops, 'params: ', params)

用torchstat也行。
但是只看FLOPs作为指标并不准确,它没有考虑到MAC(内存访问成本)和并行度
分组卷积会比较消耗MAC。

Roofline

计算模型在计算平台上所能达到理论计算性能上限。

计算平台的指标

  • 算力 π \pi π :理论性能峰值,单位是 FLOPS or FLOP/s
  • 带宽 β \beta β :计算平台的带宽上限。单位是Byte/s
  • 计算强度 I max ⁡ I{\max} Imax I max ⁡ = π β I{\max}=\frac{\pi}{\beta} Imax=βπ
    理论性能峰值 = 频率 ∗ 512 ∗ A V X 数量 ∗ F M A 32 / 64 理论性能峰值=\frac{频率*512*AVX数量*FMA}{32/64} 理论性能峰值=32/64频率512AVX数量FMA

AVX和FMA并不是必要的,32/64取决于当前处理问题是单精度(32)或者双精度(64)

模型的两个指标:计算量 与 访存量

  • 计算量:指的是输入单个样本(对于CNN而言就是一张图像),模型进行一次完整的前向传播所发生的浮点运算个数,也即模型的时间复杂度(FLOPs)。
  • 访存量:指的是输入单个样本,模型完成一次前向传播过程中所发生的内存交换总量,也即模型的空间复杂度。在理想情况下(即不考虑片上缓存),模型的访存量就是模型各层权重参数的内存占用(Kernel Mem)与每层所输出的特征图的内存占用(Output Mem)之和。单位是Byte。由于数据类型通常为float32 ,因此需要乘以四。
  • 模型的计算强度 I I I :由计算量除以访存量就可以得到模型的计算强度,它表示此模型在计算过程中,每Byte内存交换到底用于进行多少次浮点运算。单位是FLOPs/Byte。可以看到,模计算强度越大,其内存使用效率越高。
  • 模型的理论性能 P P P:我们最关心的指标,即模型在计算平台上所能达到的每秒浮点运算次数(理论值)。单位是 FLOPS or FLOP/s。

其实 Roof-line Model 说的是很简单的一件事:模型在一个计算平台的限制下,到底能达到多快的浮点计算速度。更具体的来说,Roof-line Model 解决的,是“计算量为A且访存量为B的模型在算力为C且带宽为D的计算平台所能达到的理论性能上限E是多少”这个问题。

参考:
手把手建立Roofline模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值