yoloV5代码学习总结

YOLOV5 代码学习总结

  • 摘要 在学习YOLOV5代码过程中记录一些代码理解

计算AP值 compute_ap

def compute_ap(recall, precision):
    """ Compute the average precision, given the recall and precision curves.
    Source: https://github.com/rbgirshick/py-faster-rcnn.
    # Arguments
        recall:    The recall curve (list).
        precision: The precision curve (list).
    # Returns
        The average precision as computed in py-faster-rcnn.
    """

    # Append sentinel values to beginning and end
    mrec = recall  # np.concatenate(([0.], recall, [recall[-1] + 1E-3]))
    mpre = precision  # np.concatenate(([0.], precision, [0.]))

    # Compute the precision envelope
    mpre = np.flip(np.maximum.accumulate(np.flip(mpre)))

    # Integrate area under curve
    method = 'interp'  # methods: 'continuous', 'interp'
    if method == 'interp':
        x = np.linspace(0, 1, 101)  # 101-point interp (COCO)
        ap = np.trapz(np.interp(x, mrec, mpre), x)  # integrate
    else:  # 'continuous'
        i = np.where(mrec[1:] != mrec[:-1])[0]  # points where x axis (recall) changes
        ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])  # area under curve

    return ap, mpre, mrec
  • np.maximum.accumulate()

计算数组(或数组的特定轴)的累积最大值:
例如:d = np.array([2, 0, 3, -4, -2, 7, 9])
c = np.maximum.accumulate(d) # array([2, 2, 3, 3, 3, 7, 9])

  • np.flip()
    [参考连接](https://numpy.org/doc/stable/reference/generated/numpy.flip.html)
A = np.arange(8).reshape((2,2,2))
A
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
np.flip(A, 0)
array([[[4, 5],
        [6, 7]],
       [[0, 1],
        [2, 3]]])
np.flip(A, 1)
array([[[2, 3],
        [0, 1]],
       [[6, 7],
        [4, 5]]])
np.flip(A)
array([[[7, 6],
        [5, 4]],
       [[3, 2],
        [1, 0]]])
np.flip(A, (0, 2))
array([[[5, 4],
        [7, 6]],
       [[1, 0],
        [3, 2]]])
  • np.interp(x, xp, fp, left=None, right=None, period=None)
    参考链接
    一维线性插值返回离散数据的一维分段线性插值结果.
    参数
    x: 数组
    待插入数据的横坐标.

xp: 一维浮点数序列
原始数据点的横坐标,如果period参数没有指定那么就必须是递增的。否则,在使用xp = xp % period正则化之后,xp在内部进行排序.

fp: 一维浮点数或复数序列
原始数据点的纵坐标,和xp序列等长.

left: 可选参数,类型为浮点数或复数(对应于fp值),当x < xp[0]时的插值返回值,默认为fp[0].

right: 可选参数,类型为浮点数或复数(对应于fp值),当x > xp[-1]时的插值返回值,默认为fp[-1].
period: None或者浮点数,可选参数. 横坐标的周期. 此参数使得可以正确插入angular x-coordinates. 如果该参数被设定,那么忽略left参数和right参数。

返回值
浮点数或复数(对应于fp值)或ndarray. 插入数据的纵坐标,和x形状相同。

x = [0, 1, 1.5, 2.72, 3.14]
xp = [1, 2, 3]
fp = [3, 2, 0]
y = np.interp(x, xp, fp)  # array([ 3. ,  3. ,  2.5 ,  0.56,  0. ])
plt.plot(xp, fp, '-o')
plt.plot(x, y, 'x')
plt.show()


当对应的x序列为[0, 1, 1.5, 2.72, 3.14]时,得到的y序列是[ 3. , 3. , 2.5 , 0.56, 0. ],需要注意的是当x=0时,由于0 < xp[0],所以y被设定为fp[0],也就是3,当x=3.14时,由于3.14 > xp[-1],则y被设定为fp[-1],也就是0。

  • np.trapz(np.interp(x, mrec, mpre), x)
    参考链接
    这里np.interp(x, mrec, mpre)和x长度一致,计算两者围成的面积。
np.trapz([1,2,3])
4.0
np.trapz([1,2,3], x=[4,6,8])
8.0
np.trapz([1,2,3], dx=2)
8.0
theta = np.linspace(0, 2 * np.pi, num=1000, endpoint=True)
np.trapz(np.cos(theta), x=np.sin(theta))
3.141571941375841

未完待续……

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLOv5模型代码分析方面,有一些关键的内容需要注意。首先,模型配置文件yolov5s.yaml中的parse_model函数用于解析模型配置文件,接受两个参数d和ch,其中d是模型配置文件的字典表示,ch是输入图像的通道数。 其次,在工程代码中,模型结构被定义在models目录中。其中,common.py文件存放各个模型组件,yolo.py文件是构建模型结构的主要代码。此外,不同大小的模型结构配置(如yolov5s.yaml、yolov5m.yaml、yolov5l.yaml、yolov5x.yaml等)存放在xxx.yaml文件中。 关于yolov5模型代码的分析,还可以参考一些其他资源。例如,CSDN博客中有一篇关于指数移动平均(EMA)的原理及PyTorch实现的文章,它介绍了提高最终模型在测试数据上表现的方法。另外,还有一些关于提升分类模型准确率、YOLOV5使用的技巧、损失函数详解等主题的文章也可以作为参考。 总结来说,要进行YOLOv5模型代码的分析,需要深入研究模型配置文件和模型结构的代码,并结合其他资源对模型的优化技巧和相关原理进行学习。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [YOLOv5代码解析——模型结构篇](https://blog.csdn.net/qq_41204464/article/details/130229847)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [yolov5模型与代码解读](https://blog.csdn.net/qq_42740834/article/details/125488211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值