初入深度学习3——如何分解与学习一个深度学习库

这篇具有很好参考价值的文章主要介绍了初入深度学习3——如何分解与学习一个深度学习库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习前言

在学会使用一个深度学习库之后,如果想要进一步融入自己的想法,要对深度学习库进行分解,如何分解与学习,是提升效率的关键。
初入深度学习3——如何分解与学习一个深度学习库

深度学习库的组成

一般来讲,深度学习库的功能包括两个部分,一部分是训练模型,另一部分是利用模型进行预测。
在训练模型时,需要考虑模型本身,训练参数,数据加载与损失函数。
在预测模型时,需要考虑模型本身,数据加载,预测后处理。

综合起来,一个能用的深度学习库需要包含如下5个部分:
模型本身,训练参数,数据加载,损失函数,预测后处理。

一、模型本身

一般来讲,模型本身在仓库中的名字是net(网络)或者model(模型)。

以YoloV5仓库为例,https://github.com/ultralytics/yolov5,网络结构的部分就存储在model文件夹中,基本上网络的组成与构建,都会在这个部分完成。如果想要修改与了解网络结构,一般是在这一部分进行操作。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库
打开每一个.py文件可知,YoloV5的结构模块保存在common.py文件中,整体模型的构建在yolo.py文件中,下面第一幅图是common.py文件的内容,第二部图是yolo.py文件的内容。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库
YoloV5的库通过Yaml文件进行模型的构建,看起来不算特别清晰,但也确实挺方便的。

接下来以我提供的YoloV4仓库为例,https://github.com/bubbliiiing/yolov4-pytorch,网络结构的部分就存储在nets文件夹中。基本上网络的组成与构建,都会在这个部分完成。如果想要修改与了解网络结构,一般是在这一部分进行操作。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库
打开每一个.py文件可知,YoloV4的主干部分保存在CSPdarknet.py文件中,整体模型的构建在yolo.py文件中,下面第一幅图是CSPdarknet.py文件的内容,第二部图是yolo.py文件的内容。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库

二、训练参数

训练参数一般伴随着训练文件,因此一般在train.py文件里面,每一个库指定参数的方式不同,有些喜欢通过yaml文件指定,有些喜欢通过cfg文件指定,有些甚至通过py文件指定,都不一样,这个需要参考每一个库的组成去分析。但大多数库都可以在train.py文件中找到蛛丝马迹。

以YoloV5仓库为例,https://github.com/ultralytics/yolov5,我们打开其train.py,寻找对应的训练参数。简单浏览整个train.py文件,找到入口函数,分析可知,yolov5通过argparse指定参数。argparse是python自带的命令行参数解析包,可以用来方便地读取命令行参数。结合yolov5训练的指令可知,yolov5利用argparse通过命令行获取参数。

python train.py --data coco.yaml --cfg yolov5n.yaml --weights '' --batch-size 128

初入深度学习3——如何分解与学习一个深度学习库
除此之外,yolov5其实还通过hyps的yaml文件指定参数,也是一些训练参数,有关数据增强,学习率,损失函数等。
初入深度学习3——如何分解与学习一个深度学习库
这种yaml文件其实用起来也蛮方便的,毕竟创建一个新的yaml文件就可以重新设置一套新的参数。有利有弊,对于新手而言,yaml文件与训练文件分离,有些时候会看不过来。对于老手而言,这样用起来就非常方便了。

接下来以我提供的YoloV4仓库为例,https://github.com/bubbliiiing/yolov4-pytorch,我们打开其train.py,寻找对应的训练参数。简单浏览整个train.py文件,找到入口函数,可以很容易发现,该仓库使用指定变量的方式来指定参数,
初入深度学习3——如何分解与学习一个深度学习库
结合注释比较容易理解,这种方式同样有利有弊,对于新手而言,这种设定方式非常直观,前面写后面用。对于老手而言,如果要配置多套训练参数,非常繁琐。

用到的训练参数我就不一一解析了,无论是哪个库,开发者大多数参数都会给予注释,如果开发者不给予注释的话,和前面所提的一样,建议换一个仓库、

三、数据加载

数据加载分为两部分,一部分是训练的数据加载,另一部分是预测的数据加载。

1、训练部分

训练的数据加载其实是非常重要的,直接关系到模型的训练,监督模型在训练时加载的数据一般分为两部分,一部分是输入变量,通常是图片;另一部分是标签,在目标检测中就是图片对应的框的坐标,在语义分割中就是每个像素点的种类。

一般来讲,数据加载部分,模型本身在仓库中的名字是data、datasets或者dataloader。

以YoloV5仓库为例,https://github.com/ultralytics/yolov5,网络结构的部分就存储在datasets文件中。初次看yolov5的库,可能会以为数据加载部分的内容在data文件夹中,点进去会发现,其实data都是数据集下载相关的内容,这种判断错误是正常的,毕竟这属于相似概念了

实际的数据集加载文件,datasets文件在utils文件夹中。
初入深度学习3——如何分解与学习一个深度学习库
简单翻一下datasets,可以知道该文件通过create_dataloader函数构建文件加载器,然后通过LoadImagesAndLabels这个文件加载器的类来获取图片与标签文件。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库
然后在这个LoadImagesAndLabels中,算法会进行数据增强、数据预处理等操作,最终返回输入图片与标签。下图为__getitem__方法返回的图片与标签。
初入深度学习3——如何分解与学习一个深度学习库

接下来以我提供的YoloV4仓库为例,https://github.com/bubbliiiing/yolov4-pytorch,我们比较容易的可以寻找到dataloader.py文件,也在utils文件夹中。
初入深度学习3——如何分解与学习一个深度学习库
在YoloDataset的__getitem__方法中返回图片与标签。
初入深度学习3——如何分解与学习一个深度学习库

2、预测部分

预测的数据加载和训练的数据加载相比,少了数据增强与标签处理的部分,因此会相对简单一些,主要是对输入图片进行预处理。
既然是预测部分的数据预处理,我们需要从预测文件开始寻找。

以YoloV5仓库为例,https://github.com/ultralytics/yolov5,在detect.py预测文件中可以发现,YoloV5通过文件加载器的方式获得预测的图片文件,在文件加载器中,我们会对图片文件进行预处理,比如resize到一定的大小,进行图片的归一化等。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库
接下来以我提供的YoloV4仓库为例,https://github.com/bubbliiiing/yolov4-pytorch,从predict.py预测文件开始进行分析,我们调用了YOLO类的detect_image方法。也就很容易发现,预处理的过程在yolo.py的detect_image方法中。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库

四、损失函数

一般来讲,损失函数在仓库中的名字是Loss(损失),Loss函数是模型优化的目标,在训练过程中Loss理论上是要被越优化越小的。

以YoloV5仓库为例,https://github.com/ultralytics/yolov5,我们在库中寻找一些损失函数,很容易可以发现,loss.py在utils文件夹中
初入深度学习3——如何分解与学习一个深度学习库
结合train.py调用的函数来看,可以很容易发现,yolov5计算损失时,调用的是ComputeLoss类,进一步定位Loss的计算。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库
Loss组成的话,每个仓库有每个仓库不同的组成方式,因此解析的难度是非常大的,特别是在目标检测中,正样本的选取方式多样,很难直接对Loss有个整体的认知,想要进一步了解Loss的工作,通常要对损失进行一行、一行的分析。

接下来以我提供的YoloV4仓库为例,https://github.com/bubbliiiing/yolov4-pytorch,该库并没有直接提供名为Loss.py的损失函数文件,结合train.py的执行流程进行分析,可以比较容易的知道,在yolo_training.py文件夹中,定义了一个名为YOLOLoss的类。
初入深度学习3——如何分解与学习一个深度学习库
进入yolo_training.py文件夹,这个命名为YOLOLoss的类,就是用于进行损失计算的了。
初入深度学习3——如何分解与学习一个深度学习库

五、预测后处理

预测的后处理主要包括了预测结果的解码与预测图片的可视化
既然是预测部分的后处理,我们需要从预测文件开始寻找。

以YoloV5仓库为例,https://github.com/ultralytics/yolov5,在detect.py预测文件中可以发现,YoloV5在获得预测结果之后,进行了非极大抑制,然后进行了图片的绘制与可视化。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库

接下来以我提供的YoloV4仓库为例,https://github.com/bubbliiiing/yolov4-pytorch,从predict.py预测文件开始进行分析,我们调用了YOLO类的detect_image方法。也就很容易发现,后处理的过程在yolo.py的detect_image方法中。在完成图片的预测后,我们对预测结果进行解码与非极大抑制,最后进行绘图。
初入深度学习3——如何分解与学习一个深度学习库
初入深度学习3——如何分解与学习一个深度学习库文章来源地址https://www.toymoban.com/news/detail-409541.html

到了这里,关于初入深度学习3——如何分解与学习一个深度学习库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常用Git指令|初入职Git指令学习|如何将Git项目拉至本地|如何将本地项目上传至Git|Ubuntu下Git环境配置|Ubuntu下如何利用VSCode使用Git指令

    实习入职已经一个月了,整理一下自己常用的一些指令,供自己查阅,也可以供一些新入职朋友参考。 这条博客也会不定时更新。 2022.10.26更新Ubuntu环境下的Git配置,因为最近可能需要win,Ubuntu,Mac三端代码同步,所以Git工具要用起来了! Git是一款代码同步的工具,方便团队协

    2024年02月09日
    浏览(54)
  • 【Node.JS】初入前端,学习node.js基本操作

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: npm可以分为全局安装和本地安装 Node所有API都支持回调函数,回调函数一般作为API的最后一个参数出现 阻塞代码实例 非阻塞代码示例 语法分析 具体示例 事件监听器就是

    2023年04月25日
    浏览(42)
  • 初入职场不会Git?经常被团队成员怼?手把手教你如何使用git

    简介: 用Git进行多人协作开发时,必然会合并代码,解决冲突。然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦。 Git上合并代码有git merge 以及 git rebase 两种方式。 用Git进行多人协

    2024年01月20日
    浏览(49)
  • 自己动手实现一个深度学习算法——三、神经网络的学习

    这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程 。为了使神经网络能进行学习,将导入 损失函数 这一指标。而学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。为了找出尽可能小的损失函数的值,利用了 函数斜率的梯度法 。

    2024年02月05日
    浏览(50)
  • 【C++】C++学习前言

    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

    2024年03月12日
    浏览(54)
  • 课程学习前言

    app 抓包分析可以看到有签名有加固,毕竟需要 APK 去访问服务、获取数据,都需要 APK 有完整的信息,而这些信息、代码经过各种加密,还是放在 APK 里面。说白了,就是门锁紧了,钥匙藏在门口某个地方,也许就是地垫下面 逆向流程 拿到 App 应用的 apk ; 使用工具进行查壳

    2024年02月06日
    浏览(44)
  • 如何实现一个简单的深度优先搜索(DFS)算法?

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月07日
    浏览(53)
  • Gowin FPGA学习记录——前言

            好久没有写博客了,想想是不是又该写点啥东西了么,准备写点国产FPGA的使用经历吧                  得益于目前国内的政策对国产化芯片扶持,越来越要求核心器件能够自主可控,因此作为核心芯片FPGA,国产FPGA的势头也发展很快。          现在FPGA的这

    2024年02月16日
    浏览(39)
  • 深度学习如何入门,如何快速理解深度学习

    深度学习是机器学习的一个分支,它使用深度神经网络来模拟人脑的工作方式,通过学习样本数据的内在规律和表示层次,让机器能够具有类似于人类的分析学习能力。深度学习的最终目标是实现人工智能的普及化,使机器能够识别、处理、分析和理解各种数据,如文字、图

    2024年01月24日
    浏览(35)
  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包