深度学习案例教程 教案5.5实践任务-行人目标检测和实例分割讲解.docx
05实践任务-行人目标检测与实例分割
1
我们本节来学习实践任务行人目标检测与实例分割。
行人目标检测与实例分割在生活中可以满足行人安全监控、人流统计、智能交通、行为识别等多个方面的需求,为我们的生活和社会提供更加安全、智能和便利的环境。
主要使用场景有:
1.行人安全与监控
2.行人计数与流量统计
3.自动驾驶与智能交通
4.行人姿态分析与行为识别
5.人机交互与增强现实
2
首先,我们先来看看实践任务所使用的数据集。
Penn-Fudan是由宾夕法尼亚大学发布的一个行人检测数据集,图片拍摄自校园内和城区街道。数据集对每一张图片都标记出了行人的轮廓坐标,每张图片至少会有一个行人,总共有170张图片和345个实例。Penn-Fudan数据集的目录结构如图1所示。数据集中的图片示例如图2所示。
为了更好地使用该数据集,我们需要将它封装成数据集类,以便通过下标索引到图片和标注好的类别、边框和掩码。我们来看一下代码如何实现。
3
这段代码是一个用于处理PennFudan数据集的类PennFudanDataset。
4
-在初始化方法__init__中,它接收一个根目录路径root和一个变换函数transforms作为参数,并将它们保存在实例变量中。
5
-在__getitem__方法中,它根据给定的索引idx加载图像和掩码。
-图像路径和掩码路径通过拼接根目录路径和子目录路径得到。
-图像被打开并转换为RGB格式,而掩码被打开并转换为NumPy数组。
6
-掩码中的每个实例被编码为不同的颜色,其中第一个id是背景,所以移除它。
7
-将颜色编码的掩码拆分为一组二进制掩码
8
-接着,获取每个掩码中非零像素的位置,并计算出边界框的坐标。
9
将边界框坐标、二进制掩码都转换成张量并保存。
10
定义一个空字典对象,将边界框坐标、实例类别、二进制掩码、图像ID、边界框面积等保存到这个对象中。
接着实例化数据集并查看数据。
11
接下来,我们来搭建目标检测模型。
使用视觉工具包torchvision可以快速搭建FasterR-CNN模型,并加载预训练的模型。
下面这段代码就使用了torchvision库来加载在COCO数据集上经过预训练的MaskR-CNN模型。
模型的目标是将图像中的物体进行分割和检测。
12
首先,我们创建了一个model对象,并加载了预训练的ResNet-50FPN权重。
13
然后,我们指定了两个类别:人和背景。
接下来,我们获取了分类器的输入参数数量。
最后,我们用新的FastRCNNPredictor替换了预训练模型的分类器头部,以便进行自定义的分类任务。
14
实践任务3是改造模型以适应新的数据集
我们使用微调预训练的方式使用MaskR-CNN模型。
15
我们需要获取掩码分类器的输入特征数,然后用新的掩码预测器替换。这里的新掩码预测器就是使用的MaskR-CNN模型。
16
然后我们来看下实践任务4调用工具训练模型。
由于数据集比较小,所有我们需要做一些数据增强的工作。下述代码定义了图像变换操作,其实就是随机翻转训练图像。
17
首先,定义数据转换函数get_transform,用于将图像数据转换为模型所需的张量格式,并可选择进行随机水平翻转
18
然后创建训练数据集和测试数据集,
19
将数据集打乱并划分为训练集和测试集
20
接着,创建训练和测试数据加载器,用于批量加载数据进行训练和评估
21
实例化模型并将其移动到适当的设备上
22
定义优化器和学习率调度器,用于优化模型参数和调整学习率
23
迭代训练模型,每个epoch打印训练信息并更新学习率,
然后在测试数据集上进行评估
24
最后实践任务5:评估和测试模型
经过一段时间的运行,最终得到了训练的第1个epoch后的mAP结果。主要的输出包含两部分,即目标检测和实例分割。大家可以看一下相应的结果。
那本节的实践任务-行人目标检测与实例分割就到这里。