深度学习案例教程 课件 第5章 目标检测_第1页
深度学习案例教程 课件 第5章 目标检测_第2页
深度学习案例教程 课件 第5章 目标检测_第3页
深度学习案例教程 课件 第5章 目标检测_第4页
深度学习案例教程 课件 第5章 目标检测_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目标检测第五章01理解图像分类、目标检测和实例分割的关系学习目标CONTENTS01理解图像分类、目标检测和实例分割的关系02掌握传统方法在目标检测领域的应用学习目标CONTENTS01理解图像分类、目标检测和实例分割的关系02掌握传统方法在目标检测领域的应用03

了解深度学习中目标检测和实例分割的基本原理学习目标CONTENTS01理解图像分类、目标检测和实例分割的关系02掌握传统方法在目标检测领域的应用03

了解深度学习中目标检测和实例分割的基本原理04熟悉R-CNN、FastR-CNN、FasterR-CNN和MaskR-CNN模型的工作原理学习目标CONTENTS01提高自主学习能力,通过阅读相关文献和实践操作来提高自己的专业素养素质目标CONTENTS01提高自主学习能力,通过阅读相关文献和实践操作来提高自己的专业素养02增强团队协作意识,与他人分享所学知识,共同进步素质目标CONTENTS01提高自主学习能力,通过阅读相关文献和实践操作来提高自己的专业素养02增强团队协作意识,与他人分享所学知识,共同进步03提高解决问题的能力,能够独立分析和解决实际问题素质目标CONTENTS使用Pytorch实现行人的目标检测使用Pytorch实现行人的实例分割

实践任务第一节

梯度下降法基于梯度的优化就是优化一个函数的最终取值。假设θ是函数的输入参数,f(θ)是需要优化的函数,那么基于梯度的优化是指改变θ以得到最小或最大的f(θ)。梯度下降算法是指沿着函数值下降变化最快的方向,改变θ而获得更小的f(θ)的技术。梯度下降法描述第一节

梯度下降法梯度下降的过程类似于下山的过程,我们找到一个最陡峭的方向,从此方向下山,下到山腰的某一点,又开始新的搜索,寻找另一个更加陡峭的方向,从那个更加陡峭的地方下山,不断重复这个过程,直到成功抵达山脚下。梯度下降法描述把整个样本切分为若干份,然后在每一份样本上实施梯度下降算法进行参数更新。批量梯度下降算法梯度下降法指每个批量只有一个样本,并且只在这一个样本上实施梯度下降算法进行参数更新。采取SGD,虽然模型训练起来更灵活,但坏处是算法很难收敛,由于每次只处理一个样本,效率很低。随机梯度下降算法一个理想的情形是纵轴的震荡减少,即学习变慢,而横轴的学习加快。批量梯度下降算法的改进有三种,分别是动量梯度下降算法、均方根加速算法和自适应矩估计算法。批量梯度下降算法的改进第一节

梯度下降法批量梯度下降算法(BatchGradientDescent,BGD),就是把整个样本切分为若干份,然后在每一份样本上实施梯度下降算法进行参数更新。假设有10万个样本,随机排序后,按照5000大小切分成20份,每一份称为一个批量(Batch),在每一个Batch上计算梯度并优化,这样网络的训练效率会大大提高。批量梯度下降算法第一节

梯度下降法随机梯度下降算法(StochasticGradientDescent,SGD),是指每个批量只有一个样本,并且只在这一个样本上实施梯度下降算法进行参数更新。采取SGD,虽然模型训练起来更灵活,但坏处是算法很难收敛,由于每次只处理一个样本,效率很低。随机梯度下降算法第一节

梯度下降法梯度下降、批量梯度下降与随机梯度下降算法之间的联系与区别:联系:都是基于梯度下降算法的策略。区别:执行一次计算所需的样本量不同。

联系与区别第一节

梯度下降法无论是批量梯度下降,还是随机梯度下降,都无法避免在纵轴上的震荡问题。一个理想的情形是纵轴的震荡减少,即学习变慢,而横轴的学习加快。批量梯度下降算法的改进第一节

梯度下降法(1)动量梯度下降(GradientDescentwithMomentum)算法:考虑了历史梯度的加权平均作为速率进行优化的方法。批量梯度下降算法的改进第一节

梯度下降法(1)动量梯度下降(GradientDescentwithMomentum)算法:考虑了历史梯度的加权平均作为速率进行优化的方法。(2)均方根加速(RootMeanSquareProp,RMSProp)算法:指对历史梯度加权时,对当前梯度取了平方,并在参数更新时,让当前梯度对历史梯度开根号后的值做了除法运算。批量梯度下降算法的改进第一节

梯度下降法(1)动量梯度下降(GradientDescentwithMomentum)算法:考虑了历史梯度的加权平均作为速率进行优化的方法。(2)均方根加速(RootMeanSquareProp,RMSProp)算法:指对历史梯度加权时,对当前梯度取了平方,并在参数更新时,让当前梯度对历史梯度开根号后的值做了除法运算。(3)自适应矩估计(AdaptiveMomentEstimation,Adam)算法:一种将之前的动量梯度下降和均方根加速结合起来的优化算法。

批量梯度下降算法的改进第一节

梯度下降法第二节

反向传播算法反向传播(BackPropagation,BP)算法是一种高效地在所有参数上使用梯度下降算法的方法。前向传播可以概括为输入经过神经网络的处理,最终产生输出在训练过程中,前向传播会产生一个损失函数;反向传播则允许来自损失函数的信息通过网络向后流动,以便计算梯度。反向传播算法定义第二节

反向传播算法神经网络模型之所以不能直接应用梯度下降算法进行训练,主要有以下两个原因。(1)梯度下降可以应对带有明确求导函数的情况,或者说可以求出误差的情况。(2)对于多层神经网络,隐藏层的误差是不存在的,因此不能直接对它应用梯度下降,要先将误差反向传播至隐藏层,然后应用梯度下降。反向传播算法定义反向传播算法距离第1层是输入层,包含一个神经元x,权值和偏置分别是w1和b1。第2层是隐藏层,包含一个神经元h1,权值和偏置分别是w2和b2。第3层是输出层a,这里的激活函数默认为Sigmoid函数。第二节

反向传播算法前向传播输入层到隐藏层:计算神经元x的输入加权和,再采用Sigmoid激活函数,得到h1的输出值。隐藏层到输出层:将h1的输出a1再进行加权求和,然后采取Sigmoid激活,得至输出值a2。建立损失函数。我们得到了输出值a2,但它与真实值y还相差很远,所以需要对二者的误差建立损失函数。反向传播的计算过程第二节

反向传播算法步骤1:计算总误差。这里只有一个输出,因此只需要计算真实值和输出值之间的差异即可。反向传播的计算过程第二节

反向传播算法步骤2:隐藏层到输出层的权值更新。以权重参数w2为例,如果想知道对整体误差产生了多少影响,可以用整体误差对此求偏导得出(应用链式法则)。反向传播的计算过程第二节

反向传播算法反向传播算法步骤3:输入层到隐藏层的权值更新。以对权值w1的更新为例,其计算方法和步骤2差不多,应用链式法则可得出:反向传播的计算过程BP算法的基本工作原理,简单概括就是先向前计算得到输出值,然后反向传播更新参数,最后得到损失函数最小时的参数作为最优学习参数。简单概括第二节

反向传播算法第三节

R-CNN原理在2014年提出的R-CNN(Region-CNN)模型,被普遍认为是目标检测领域的传统阶段与深度学习阶段的分界线。在R-CNN模型之后涌现出了许多更加高性能的深度学习模型(如SPPNet、FasterR-CNN等),它们都或多或少借鉴了R-CNN成功的经验,这极大地推动了目标检测领域和相关研究领域的发展。R-CNN系列模型原理第三节

R-CNN原理本节首先介绍R-CNN、FastR-CNN和FasterR-CNN这三个目标检测模型,最后介绍MaskR-CNN模型用于实例分割。R-CNN系列模型原理第三节

R-CNN原理R-CNN(Region-CNN)是一种经典的目标检测方法。它的基本思想是通过候选区域提取和深度卷积神经网络(CNN)来实现目标检测。R-CNN原理第三节

R-CNN原理将相似的像素区域合并为候选区域候选区域提取R-CNN原理捕捉到目标的语义和视觉信息特征提取使用每个候选区域的特征向量来进行目标分类和边界框回归目标分类和边界框回归合并重叠和冗余的候选区域,并应用非极大值抑制来选择最佳的目标检测结果。候选区域的合并和非极大值抑制第三节

R-CNN原理R-CNN首先通过选择性搜索(SelectiveSearch)等算法在输入图像中生成一系列候选区域。它是一种基于图像分割和合并的方法,通过将相似的像素区域合并为候选区域。这些候选区域代表了可能包含目标的图像区域。候选区域提取第三节

R-CNN原理对于每个候选区域,R-CNN将其裁剪为固定大小的正方形,并进行尺寸归一化和图像预处理。通过CNN模型(如AlexNet、VGG等)对每个候选区域的图像进行特征提取。可以将图像转换为高维特征向量,捕捉到目标的语义和视觉信息。特征提取第三节

R-CNN原理R-CNN使用每个候选区域的特征向量来进行目标分类和边界框回归。首先,针对每个候选区域,使用一个支持向量机(SVM)来对其进行目标分类,将其归为预定义的目标类别或背景类别。同时,使用回归器来精确定位目标的边界框,调整候选区域的位置和尺寸,更准确地包围目标。目标分类和边界框回归第三节

R-CNN原理R-CNN的最后一步是对候选区域进行合并和筛选。由于选择性搜索生成的候选区域可能存在重叠和冗余,因此需要进行合并。此外,为了去除重复的检测结果,还需要应用非极大值抑制(NMS)来选择最佳的目标检测结果。NMS会根据检测框之间的重叠程度和类别置信度进行评估和筛选,保留最具代表性的检测结果。候选区域的合并和非极大值抑制第三节

R-CNN原理R-CNN通过候选区域提取和深度卷积神经网络的结合,实现了准确的目标检测。通过利用CNN的强大特征提取能力和分类能力,捕捉到目标的高层语义信息,通过候选区域的选择和调整实现目标的精确定位。R-CNN的优点第三节

R-CNN原理R-CNN存在训练和推断速度慢的问题,因为每个候选区域都需要独立地进行特征提取和分类。R-CNN的缺点第四节

FastR-CNN原理、MaskR-CNN原理FastR-CNN是R-CNN的改进版本,旨在解决R-CNN中的训练和推断速度慢的问题。FastR-CNN通过引入区域池化(RoIpooling)和共享特征提取来实现更高的检测速度。FastR-CNN原理区域池化引入了区域池化层,用于将每个候选区域映射到固定大小的特征图上。目标分类和边界框回归将每个候选区域的特征表示输入全连接层,进行目标分类和边界框回归。FastR-CNN原理损失计算和训练使用多任务损失函数来同时优化目标分类和边界框回归。候选区域生成使用选择性搜索等算法生成一系列候选区域。特征提取在整个图像上仅使用一次卷积操作来提取特征与R-CNN类似,FastR-CNN使用选择性搜索等算法生成一系列候选区域。这些候选区域代表了可能包含目标的图像区域。候选区域生成FastR-CNN原理FastR-CNN在整个图像上仅使用一次卷积操作来提取特征,而不是对每个候选区域单独进行特征提取。它将整个图像输入卷积神经网络(如VGG、ResNet等)中,得到图像的共享特征图。特征提取FastR-CNN原理在FastR-CNN中引入了区域池化层(RoIpoolinglayer),用于将每个候选区域映射到固定大小的特征图上。区域池化层将候选区域分割为固定大小的子区域,并在每个子区域上进行最大池化操作,得到固定大小的特征表示。这样,所有候选区域都可以使用相同大小的特征表示,方便后续的分类和边界框回归。区域池化FastR-CNN原理在区域池化后,FastR-CNN将每个候选区域的特征表示输入全连接层,进行目标分类和边界框回归。目标分类采用多类别softmax分类器,根据特征表示预测目标的类别概率。边界框回归则使用回归器对候选区域的位置和尺寸进行调整,以更准确地框住目标。目标分类和边界框回归FastR-CNN原理FastR-CNN使用多任务损失函数来同时优化目标分类和边界框回归。损失函数由分类损失(如交叉熵损失)和回归损失(如平滑L1损失)组成。通过反向传播和梯度下降优化算法,可以训练FastR-CNN模型。损失计算和训练FastR-CNN原理FastR-CNN相比于R-CNN具有更快的训练和推断速度,因为特征提取共享了整个图像的卷积操作,避免了重复计算。此外,区域池化的引入使得候选区域的特征表示更加统一,方便了后续的分类和回归操作。FastR-CNN的改进为后续更高效的目标检测方法奠定了基础,例如FasterR-CNN和MaskR-CNN。FastR-CNN的优势FastR-CNN原理FasterR-CNN是在FastR-CNN的基础上进一步改进的目标检测方法,它引入了区域提议网络(RegionProposalNetwork,RPN),实现了端到端的目标检测。FasterR-CNN相比于FastR-CNN具有更快的速度和更准确的检测结果。FasterR-CNN的原理FasterR-CNN原理区域池化和目标分类使用区域池化层将每个候选区域映射到固定大小的特征图上边界框回归使用回归器对候选区域的边界框进行精确定位FasterR-CNN原理训练过程同时训练区域提议网络(RPN)和目标分类网络候选区域生成通过区域提议网络(RPN)来生成候选区域共享特征提取与FastR-CNN一样,通过共享的卷积神经网络来提取整个图像的特征FasterR-CNN通过引入区域提议网络(RPN)实现了更快速和准确的目标检测。RPN通过端到端的训练方式生成候选区域,并与FastR-CNN共享特征提取层,从而提高了检测的效率和准确性。这使得FasterR-CNN成为目标检测领域的重要里程碑,为后续的目标检测方法提供了基础。FasterR-CNN的优势FasterR-CNN原理MaskR-CNN原理MaskR-CNN是在FasterR-CNN的基础上进一步扩展,实现了实例分割的能力。除了目标检测的功能,MaskR-CNN还能够对每个检测到的目标生成精确的分割掩码。MaskR-CNN原理候选区域生成和共享特征提取使用区域提议网络(RPN)生成候选区域,并共享特征提取层区域分类和边界框回归使用区域池化层将候选区域映射到固定大小的特征图上,并通过全连接层进行目标分类和边界框回归掩码预测引入了一个新的分支,用于预测每个检测到的目标的分割掩码MaskR-CNN原理损失计算和训练损失函数由四部分组成,主要用于训练模型的分类、定位和分割能力。MaskR-CNN原理MaskR-CNN使用与FasterR-CNN相同的区域提议网络(RPN)生成候选区域,并共享特征提取层。RPN负责生成候选区域的边界框和类别概率,而特征提取层从整个图像中提取共享的特征表示。候选区域生成和共享特征提取MaskR-CNN原理类似于FasterR-CNN,MaskR-CNN使用区域池化层将候选区域映射到固定大小的特征图上,并通过全连接层进行目标分类和边界框回归。这一步骤用于确定每个候选区域的类别和精确位置。区域分类和边界框回归MaskR-CNN原理MaskR-CNN引入了一个新的分支,用于预测每个检测到的目标的分割掩码。这个分支在每个候选区域上使用卷积神经网络,生成与目标实例尺寸相匹配的二进制掩码。每个像素点都被标记为属于目标或背景,从而实现精确的实例分割。掩码预测MaskR-CNN原理MaskR-CNN的损失函数由四部分组成:目标分类损失边界框回归损失掩码二进制交叉熵损失掩码边界框回归损失这些损失函数用于训练模型的分类、定位和分割能力。损失计算和训练MaskR-CNN原理通过引入掩码预测分支,MaskR-CNN能够在目标检测的同时实现像素级的实例分割。这使得MaskR-CNN成为处理需要更精细定位和分割的应用场景的有力工具。它在许多领域如医学图像分析、自动驾驶和人脸识别等都取得了显著的成果。MaskR-CNN的优势第五节

实践任务-行人目标检测与实例分割行人目标检测与实例分割在生活中可以满足行人安全监控、人流统计、智能交通、行为识别等多个方面的需求,为我们的生活和社会提供更加安全、智能和便利的环境。主要使用场景有:1.行人安全与监控2.行人计数与流量统计3.自动驾驶与智能交通4.行人姿态分析与行为识别5.人机交互与增强现实学习情景第五节

实践任务-行人目标检测与实例分割Penn-Fudan是由宾夕法尼亚大学发布的一个行人检测数据集,图片拍摄自校园内和城区街道。数据集对每一张图片都标记出了行人的轮廓坐标,每张图片至少会有一个行人,总共有170张图片和345个实例。实践任务1:使用数据集图2图1实践任务importosimportnumpyasnpimporttorchfromPILimportImageclassPennFudanDataset(object):def__init__(self,root,transforms):self.root=rootself.transforms=transforms#loadallimagefiles,sortingthemto#ensurethattheyarealignedself.imgs=list(sorted(os.listdir(os.path.join(root,"PNGImages"))))self.masks=list(sorted(os.listdir(os.path.join(root,"PedMasks"))))代码实现实践任务importosimportnumpyasnpimporttorchfromPILimportImageclassPennFudanDataset(object):def__init__(self,root,transforms):self.root=rootself.transforms=transforms#loadallimagefiles,sortingthemto#ensurethattheyarealignedself.imgs=list(sorted(os.listdir(os.path.join(root,"PNGImages"))))self.masks=list(sorted(os.listdir(os.path.join(root,"PedMasks"))))代码实现实践任务def__getitem__(self,idx):#loadimagesandmasksimg_path=os.path.join(self.root,"PNGImages",self.imgs[idx])mask_path=os.path.join(self.root,"PedMasks",self.masks[idx])img=Image.open(img_path).convert("RGB")

mask=Image.open(mask_path)mask=np.array(mask)#instancesareencodedasdifferentcolorsobj_ids=np.unique(mask)#firstidisthebackground,soremoveitobj_ids=obj_ids[1:]#splitthecolor-encodedmaskintoasetmasks=mask==obj_ids[:,None,None]代码实现实践任务def__getitem__(self,idx):#loadimagesandmasksimg_path=os.path.join(self.root,"PNGImages",self.imgs[idx])mask_path=os.path.join(self.root,"PedMasks",self.masks[idx])img=Image.open(img_path).convert("RGB")

mask=Image.open(mask_path)mask=np.array(mask)#instancesareencodedasdifferentcolorsobj_ids=np.unique(mask)#firstidisthebackground,soremoveitobj_ids=obj_ids[1:]#splitthecolor-encodedmaskintoasetmasks=mask==obj_ids[:,None,None]代码实现实践任务def__getitem__(self,idx):#loadimagesandmasksimg_path=os.path.join(self.root,"PNGImages",self.imgs[idx])mask_path=os.path.join(self.root,"PedMasks",self.masks[idx])img=Image.open(img_path).convert("RGB")

mask=Image.open(mask_path)mask=np.array(mask)#instancesareencodedasdifferentcolorsobj_ids=np.unique(mask)#firstidisthebackground,soremoveitobj_ids=obj_ids[1:]#splitthecolor-encodedmaskintoasetmasks=mask==obj_ids[:,None,None]代码实现实践任务#getboundingboxcoordinatesforeachmasknum_objs=len(obj_ids)boxes=[]foriinrange(num_objs):pos=np.where(masks[i])xmin=np.min(pos[1])xmax=np.max(pos[1])ymin=np.min(pos[0])ymax=np.max(pos[0])boxes.append([xmin,ymin,xmax,ymax])boxes=torch.as_tensor(boxes,dtype=torch.float32)#thereisonlyoneclasslabels=torch.ones((num_objs,),dtype=64)masks=torch.as_tensor(masks,dtype=torch.uint8)image_id=torch.tensor([idx])area=(boxes[:,3]-boxes[:,1])*(boxes[:,2]-boxes[:,0])iscrowd=torch.zeros((num_objs,),dtype=64)代码实现实践任务#getboundingboxcoordinatesforeachmasknum_objs=len(obj_ids)boxes=[]foriinrange(num_objs):pos=np.where(masks[i])xmin=np.min(pos[1])xmax=np.max(pos[1])ymin=np.min(pos[0])ymax=np.max(pos[0])boxes.append([xmin,ymin,xmax,ymax])boxes=torch.as_tensor(boxes,dtype=torch.float32)#thereisonlyoneclasslabels=torch.ones((num_objs,),dtype=64)masks=torch.as_tensor(masks,dtype=torch.uint8)image_id=torch.tensor([idx])area=(boxes[:,3]-boxes[:,1])*(boxes[:,2]-boxes[:,0])iscrowd=torch.zeros((num_objs,),dtype=64)代码实现实践任务target={}target["boxes"]=boxestarget["labels"]=labelstarget["masks"]=maskstarget["image_id"]=image_idtarget["area"]=areatarget["iscrowd"]=iscrowdifself.transformsisnotNone:img,target=self.transforms(img,target)returnimg,targetdef__len__(self):returnlen(self.imgs)##实例化数据集,查看数据#dataset=PennFudanDataset('./dataset/PennFudanPed',None)代码实现实践任务使用视觉工具包torchvision可以快速搭建FasterR-CNN模型,并加载预训练的模型。importtorchvisionfromtorchvision.models.detection.faster_rcnnimportFastRCNNPredictorfrom

torchvision.models.detection.mask_rcnnimportMaskRCNNPredictor,

MaskRCNN_ResNet50_FPN_Weightsmodel=torchvision.models.detection.maskrcnn_resnet50_fpn(weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT)num_classes=2#分类人和背景in_features=model.roi_heads.box_predictor.cls_score.in_featuresmodel.roi_heads.box_predictor=FastRCNNPredictor(in_features,num_classes)实践任务2:搭建目标检测模型实践任务importtorchvisionfromtorchvision.models.detection.faster_rcnnimportFastRCNNPredictorfromtorchvision.models.detection.mask_rcnnimportMaskRCNNPredictor,

MaskRCNN_ResNet50_FPN_Weightsmodel=torchvision.models.detection.maskrcnn_resnet50_fpn(weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT)num_classes=2#分类人和背景in_features=model.roi_heads.box_predictor.cls_score.in_featuresmodel.roi_heads.box_predictor=FastRCNNPredictor(in_features,num_classes)代码实现实践任务importtorchvisionfromtorchvision.models.detection.faster_rcnnimportFastRCNNPredictorfromtorchvision.models.detection.mask_rcnnimportMaskRCNNPredictor,

MaskRCNN_ResNet50_FPN_Weightsmodel=torchvision.models.detection.maskrcnn_resnet50_fpn(weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT)num_classes=2#分类人和背景in_features=model.roi_heads.box_predictor.cls_score.in_featuresmodel.roi_heads.box_predictor=FastRCNNPredictor(in_features,num_classes)代码实现实践任务在本节中,我们使用微调预训练的方式使用MaskR-CNN

模型。实践任务3:改造模型以适应新的数据集实践任务defget_model_instance_segmentation(num_classes):model=torchvision.models.detection.maskrcnn_resnet50_fpn(weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT)in_features=model.roi_heads.box_predictor.cls_score.in_featuresmodel.roi_heads.box_predictor=FastRCNNPredictor(in_features,num_classes)in_features_mask=model.roi_heads.mask_predictor.conv5_mask.in_channelshidden_layer=256model.roi_heads.mask_predictor=MaskRCNNPredictor(in_features_mask,hidden_layer,num_classes)returnmodel代码实现实践任务由于数据集比较小,所有我们需要做一些数据增强的工作。定义了图像变换操作,其实就是随机翻转训练图像。fromengineimporttrain_one_epoch,evaluateimportutilsimporttransformsasTdefget_transform(train):transforms=[]transforms.append(T.PILToTensor())iftrain:transforms.append(T.RandomHorizontalFlip(0.5))returnT.Compose(transforms)实践任务4:调用工具训练模型实践任务由于数据集比较小,所有我们需要做一些数据增强的工作。定义了图像变换操作,其实就是随机翻转训练图像。fromengineimporttrain_one_epoch,evaluateimportutilsimporttransformsasTdefget_transform(train):transforms=[]transforms.append(T.PILToTensor())iftrain:transforms.append(T.RandomHorizontalFlip(0.5))returnT.Compose(transforms)实践任务4:调用工具训练模型实践任务dataset=PennFudanDataset('./dataset/PennFudanPed',get_transform(train=True))dataset_test=PennFudanDataset('./dataset/PennFudanPed',get_transform(train=False))indices=torch.randperm(len(dataset)).tolist()dataset=torch.utils.data.Subset(dataset,indices[:-50])dataset_test=torch.utils.data.Subset(dataset_test,indices[-50:])代码实现实践任务dataset=PennFudanDataset('./dataset/PennFudanPed',get_transform(train=True))dataset_test=PennFudanDataset('./dataset/PennFudanPed',get_transform(train=False))indices=torch.randperm(len(dataset)).tolist()dataset=torch.utils.data.Subset(dataset,indices[:-50])dataset_test=torch.utils.data.Subset(dataset_test,indices[-50:])代码实现实践任务#definetrainingandvalidationdataloadersdata_loader=torch.utils.data.DataLoader(dataset,batch_size=1,shuffle=True,num_workers=1,collate_fn=utils.collate_fn)data_loader_test=torch.utils.data.DataLoader(dataset_test,batch_size=1,shuffle=False,num_workers=1,collate_fn=utils.collate_fn)#getthemodelusingourhelperfunctionmodel=get_model_instance_segmentation(num_classes)model.to(device)代码实现实践任务#definetrainingandvalidationdataloadersdata_loader=torch.utils.data.DataLoader(dataset,batch_size=1,shuffle=True,num_workers=1,collate_fn=utils.collate_fn)data_loader_test=torch.utils.data.DataLoader(dataset_test,batch_size=1,shuffle=False,num_workers=1,collate_fn=utils.collate_fn)#getthemodelusingourhelperfunctionmodel=get_model_instance_segmentation(num_classes)model.to(device)代码实现实践任务#constructanoptimizerparams=[pforpinmodel.parameters()ifp.requires_grad]optimizer=torch.optim.SGD(params,lr=0.002,momentum=0.9,weight_decay=0.0005)#andalearningrateschedulerlr_scheduler=torch.optim.lr_scheduler.StepLR(optimizer,step_size=3,gamma=0.1)#let'strainitfor10epochsnum_epochs=10代码实现实践任务forepochinrange(num_epochs):#trainforoneepoch,printingevery10iterationstrain_one_epoch(model,optimizer,data_loader,device,epoch,print_freq=10)#updatethelearningratelr_scheduler.step()#evaluateonthetestdatasetevaluate(model,data_loader_test,device=device)代码实现实践任务经过一段时间的运行,最终得到了训练的第1个epoch后的mAP结果。主要的输出包含两部分,即目标检测和实例分割。IoUmetric:bboxAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=

0.747AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=

0.988AverageRecall

(AP)@[IoU=0.75|area=all|maxDets=100]=

0.902AverageRecall

(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=

0.365......实践任务5:评估和测试模型第六节

不同优化器对比神经网络的学习目的是找到使损失函数的值尽可能小的参数,这是寻找最优参数的问题,解决这个问题的过程称为最优化。优化器是用来更新和计算模型参数以最小化损失函数的工具。有许多不同的优化器,包括最基本的梯度下降(SGD)、带动量的梯度下降、RMSProp、Adam等。参数的更新第六节

不同优化器对比有一个性情古怪的探险家。他在广袤的干旱地带旅行,坚持寻找幽深的山谷。他的目标是要到达最深的谷底(他称之为“至深之地”)。并且,他给自己制定了两个严格的“规定”:一个是不看地图;另一个是把眼睛蒙上。因此,他并不知道最深的谷底在这个广袤的大地的何处,而且什么也看不见。在这么严苛的条件下,这位探险家如何前往“至深之地”呢?他要如何迈步,才能迅速找到“至深之地”呢?探险家的故事第六节

不同优化器对比探险家虽然看不到周围的情况,但是能够知道当前所在位置的坡度(通过脚底感受地面的倾斜情况)。于是,朝着当前所在位置的坡度最大的方向前进,就是SGD的策略。勇敢的探险家心里可能想着只要重复这一策略,总有一天可以到达“至深之地”。探险家的故事第六节

不同优化器对比SGD(StochasticGradientDescent):最基本的梯度下降方法,每次更新都使用一部分样本(一个或多个)来计算梯度。SGD第六节

不同优化器对比每一轮迭代使用的训练数据一般是小批量的,没有使用全部的训练数据,因此更新方向会发生锯齿状甚至随机震荡状;某些梯度分量的值比另外一些分量的值要大的多,导致个别分量主导了梯度的更新方向,而期望的梯度更新方向却行进的非常缓慢。SGD的缺点第六节

不同优化器对比Momentum:一种带动量的梯度下降方法,它在更新参数时不仅考虑当前的梯度,还考虑上一次的梯度方向,这样可以加速收敛,并有可能跳过局部最小值。将一段时间内的梯度向量进行了加权平均,一定程度上消除了更新过程中的不确定性因素(如摆动现象),使得梯度更新朝着一个越来越明确的方向前进。Momentum第六节

不同优化器对比RMSProp:一种自适应学习率的方法,它通过调整每个参数的学习率来加速训练。RMSProp第六节

不同优化器对比Adam(AdaptiveMomentEstimation):结合了Momentum和RMSProp的思想,既考虑了过去的梯度的指数衰减平均值,也考虑了过去的平方梯度的指数衰减平均值。Adam以下是一个简单的使用SGD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论