1 项目概述
1.1 原始项目简介
本项目基于百度AIStudio课程【手把手带你零基础入门深度学习-2.0版本】中课节12的内容——目标检测YOLOv3算法和AI识虫比赛改编。在课程页面加入课程后,便可点击上述链接查看课节12的内容。
该节课程使用了百度与林业大学合作开发的林业病虫害防治项目中用到昆虫数据集。课程项目训练了一个YOLOv3模型,并基于它检测图像数据中的昆虫。
目标检测YOLOv3算法课程讲解了YOLOv3的基础知识以及一些对昆虫数据集的预处理操作,AI识虫比赛课程则讲解了模型的“训练”、“评估”、“预测”步骤。本项目为了简化流程,只将Pipeline运用于AI识虫比赛的课程内容,故下文中出现的“原始项目”一词均指代AI识虫比赛
1.2 为什么使用Pipeline
| 特性 | 传统方法 | Pipeline |
|---|---|---|
| 自动化 | 运行一个完整流程需要用户多次操作,来执行多个步骤。 | Pipeline将多个步骤有机的结合成一个整体,实现一次操作便可自动化的运行整个流程的效果。 具体操作方式可查看2.4节。 |
| 标准化 | 开发前需要商定多个步骤间传递数据的方式。 | Pipeline具有标准化接口,有利于多人合作开发,提升开发效率。 |
| 高可复用性 | 一个步骤难以在多个流程中使用。 | 所有步骤都被封装成Op,能更好的支持复用,减少开发工作量。 百度某热门AI项目使用Pipeline后,开发效率提升3倍。 |
| 可视化 | 无可视化功能,从而难以整体把控全流程。 | Pipeline可以将流程进行图形化展示,从而更易掌控全流程。 |
| 快速复现 | 实验记录易丢失,导致实验难以复现。 | Pipeline会保存运行记录,可以根据记录中的信息(如本项目中使用的模型类型、模型的超参数等),对实验进行快速复现。 |
| 产出管理 | 实验的产出难以管理。 | Pipeline会对实验的产出进行系统化的管理。 |
Pipeline的详细介绍可参考Pipeline简介。
Op是Pipeline运行时的基本调度单位,Pipeline中的每一个节点都需要是一个Op。Op的具体介绍请查看Op详细介绍
2 构建并运行Pipeline
2.1 Pipeline构建思路
原始项目做的事情主要有“模型训练”、“模型评估”、“模型预测”。而针对一个原始项目,我们想基于它构建一个Pipeline,最重要的是以下2点。
-
构建Op:构建每个步骤对应的Op。可以设计一个函数来决定Op的运行逻辑,也可以让Op直接调用一个能完成该步骤的脚本文件。由于原始项目中已实现了所有步骤,所以本项目可以直接调用对应的脚本文件。
-
编排Op:设计Op之间的数据传递关系。原始项目中,“模型”以读写文件的形式在3个步骤间传递,那么对应的Op之间也应该合理的传递“模型”。以读写本地文件的方式传递,可拓展性较差,且不便于保存和管理”模型”。为了解决这个问题,我们可以利用Pipeline的特性,以输入Artifact和输出Artifact的形式传递”模型“。
关于Artifact:
Artifact是由Op生成的文件,在实际的Pipeline运行过程中,Op的输入和输出是以“Artifact”的形式保存和传递的。
Op在运行前,会从Artifact仓库把对应的文件下载到指定的输入存储路径下;Op在运行完后,会把指定的输出存储路径下的文件上传到Artifact仓库保存。
这样的机制能更科学的管理实验时运行的产出。更具体的描述可参考这里。
另外,我们也可以根据需要对原始项目的脚本进行优化。比如本项目优化了“模型训练”步骤,使它可以基于预训练模型进行训练。
至于具体如何构建Op,以及如何指定Op之间的关系,本文2.3将会介绍。现在我们先看下根据上述的设计思路,最终本项目设计出来的Pipeline的流程是怎样的。
2.2 Pipeline概述
2.2.1 Pipeline流程

根据上述的Pipeline构建思路,本项目的主要流程如上图所示,整个Pipeline由3类Op组成,分别为“模型训练”Op、“模型评估”Op、“模型预测”Op。
-
首先是“模型训练”Op,该Op的功能是,在指定的训练数据集上,训练一个YOLOv3模型,用户可以指定是否在预训练模型的基础上进行训练。模型训练完后,会保存训练完的模型,并作为输出Artifact传给下游的“模型评估”Op。
-
其次是“模型评估”Op,该Op通过将上游的“模型训练”Op的输出Artifact,即模型,指定为输入Artifact来获取这些训练好的模型。评估所使用的数据集由用户指定。评估阶段会计算每个模型在评估数据集上评估所得到的mAP,并将其写入到日志中。同时,该Op会将最好的模型(暂时规定为mAP最高的模型)保存下来。该模型也将作为输出传给下游的“模型预测”Op。
-
最后是“模型预测”Op,该Op会使用从”模型评估“Op得到的模型,在用户指定的预测数据集上进行预测,最终预测结果会以标注框的形式显示在图像数据上,并保存下来。
2.2.2 文件目录结构
为了更好的理解后面讲到的各个函数的参数的含义,需要先简单浏览一下本案例的文件的目录结构。
可点击链接昆虫检测下载项目代码
bug_detection/
├── bug_detection.ppl
├── dataset
│ ├── test
│ │ └── images
│ │ ├── 1833.jpeg
│ │ ├── 1838.jpeg
│ │ └── ...
│ ├── train
│ │ ├── annotations
│ │ │ └── xmls
│ │ │ ├── 1.xml
│ │ │ ├── 2.xml
│ │ │ └── ...
│ │ └── images
│ │ ├── 1.jpeg
│ │ ├── 2.jpeg
│ │ └── ...
│ └── val
│ ├── annotations
│ │ ├── 1221.xml
│ │ ├── 1277.xml
│ │ └── ...
│ └── images
│ ├── 1221.jpeg
│ ├── 1277.jpeg
│ └── ...
├── pretrained_model
│ └── yolo_epoch50.pdparams
└── script
├── anchor_lables.py
├── box_utils.py
├── calculate_map.py
├── darknet.py
├── draw_anchors.py
├── draw_results.py
├── eval.py
├── image_utils.py
├── insects_reader.py
├── map_utils.py
├── multinms.py
├── predict.py
├── reader.py
├── train.py
└── yolov3.py
如上所示,pipeline.ppl构建了一个Pipeline;数据集存放在dataset文件夹下,预训练模型存放在pretrained_model文件夹下;而script文件夹下存放了Python脚本,这些脚本文件是基于课程中的脚本文件修改的,其中除了主要的train.py、eval.py、preadict.py外,其他的文件主要包含了一些功能函数,它们的主要内容如下所示:
| 文件名 | 主要内容 |
|---|---|
anchor_lables.py |
获取锚框的属性的函数 |
box_utils.py |
Bounding Box的相关计算函数,如IoU的计算 |
calculate_map.py |

该项目基于百度AIStudio的课程,介绍了如何使用Pipeline实现目标检测YOLOv3算法的训练、评估和预测流程。通过Pipeline,实现了自动化、标准化的数据处理,提高了开发效率。项目中,训练和评估阶段支持预训练模型,模型评估选择了最佳模型进行预测。Pipeline的构建包括Op的构建和编排,其中Op以ScriptOp形式运行Python脚本,通过输入和输出Artifact传递模型和数据。最终,项目提供了在CodeLab上运行和调试Pipeline的方法。
最低0.47元/天 解锁文章
1854

被折叠的 条评论
为什么被折叠?



