【云驻共创】华为云AI实战营:物体检测

天阳 发表于 2021/12/02 21:06:31 2021/12/02
【摘要】 物体检测是计算机视觉中的经典问题之一,其包含识别和定位两个重要的子任务。其任务是用框去标出图像中物体的位置,并给出物体的类别。从传统的人工设计特征加浅层分类器的框架,到基于深度学习的端到端的检测框架,物体检测一步步变得愈加成熟。未来物体检测一定是朝着更准确、高速的方向发展,如更完善的特征金字塔构造过程、无需候选框的物体检测和分割方法,以及向弱监督、无监督物体检测。

前言:

AI正在改变我们的生活,正在改变我们身边的各行各业,但是这条通往智能世界的路并不平坦,其中一个巨大鸿沟就是AI人才的稀缺。在中国庞大的IT从业群体,AI开发者缺口达百万级

AI将成为全民普及性的技能,所以今天华为云EI为大家带来《2020华为云AI实战营》免费课程,大幅降低AI学习门槛,帮助庞大的软件开发者群体快速掌握AI技能,把AI用起来。

课程主要内容包括图像分类、物体检测、图像分割、人脸识别、OCR、视频分析、自然语言处理和语音识别这八大热门AI领域的基础知识、经典数据集和经典算法的介绍,每章课程都是实战案例,模型训练、测试、评估全流程覆盖,配合代码讲解和课后作业,帮助您掌握八大热门AI领域的模型开发能力。

 

2020年华为云AI实战营  第二章 物体检测

一、物体检测介绍

什么是物体检测?

物体检测是一种使计算机能在图像中自动发现感兴趣的物体,并判断物体的类别、位置的技术。具体来讲,物体检测解决的问题是物体是什么,以及在什么位置这两个基本问题。传统的物体检测方法以滑动窗口法为代表,给定一幅输入图像,算法首先对图像进行扫描得到一系列的子窗口;然后在这些子窗口内部提取相应的特征,针对这些特征进行计算和识别,得到子窗口的识别结果。最新的物体检测模型取代了基于传统人工设计特征的候选框生成算法。

物体检测应用场景--自动驾驶

用于自动驾驶车辆的物体检测系统对针对在其上正在驾驶所述自动驾驶车辆的路段所获取的包括一个或多个图像的传感器数据进行处理.所述物体检测系统将所述图像与路段的三维(3D)环境数据进行比较,以对所述图像中的与在所述3D环境数据中先前未被识别的物体相对应的像素进行确定.然后,所述物体检测系统分析所述像素以对在所述3D环境数据中先前未被识别的所述物体进行分类

.

物体检测开源数据集

PASCAL VOC(The PASCAL Visual Object Classes)是一个世界级的计算机视觉挑战赛,第一届比赛在2005年举办,随后一年举办一次,直到2012年最后一次。PASCAL的全称是Pattern Analysis, Statistical modelling and ComputAtional Learning,官方地址是 http://host.robots.ox.ac.uk/pascal/VOC/

MS COCO数据集是目标检测领域中另一个非常有名的大型数据集(前面介绍过 PASCAL VOC ),其中COCO是Common Objects in COntext的缩写,由微软公司构建,其中包含了detection、segmentation、keypoints等任务,目前主要的赞助者有Microsoft、Facebook、Google等大厂。

与 PASCAL VOC数据集相比,MS COCO中的图片数据,目标更多,尺寸更小且图片背景更加复杂,因此,在此数据集上的任务就显得更难。对于现在的检测算法来讲,在MS COCO上的检测结果俨然成为了衡量模型好坏的事实标准。

MS COCO总共包含91个stuff categories,80个object cagegories也就是我们常说的物体类别,下图是与PASCAL VOC的一个类别及数据量对比

FasterRCNN算法原理

FasterRCNN网络是一种二阶段的目标检测方法,目标检测方法旨在给定的图片中找出目标物体的坐标位置和所属类别。
Faster RCNN其实可以分为4个主要内容:
  1. Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
  2. Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
  3. Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
  4. Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

Yolo算法原理

目标检测分两大门派:single-shot detectors以及two-stage detectors。前者注重检测的速度,后者注重检测的精度,当然后者所用的训练时间长。yolo属于前者

YOLO将对象检测重新定义为一个回归问题。它将单个卷积神经网络(CNN)应用于整个图像,将图像分成网格,并预测每个网格的类概率和边界框。YOLO将物体检测作为回归问题求解,它将输入图像分成SxS个格子,每个格子输出B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。Bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。因此,YOLO网络最终的全连接层的输出维度是 S*S*(B*5 + C)

FasterRCNN VS YoLoV3

FasterRCNN 推理速度慢,但推理精度高,可以在自动驾驶等精度要求高的场景。YoLoV3速度快,推理精度Label精度相对较低,图像扭曲,无背景过滤。可以应用在实时检测场景。


二、零代码人车检测模型开发

ModelArts自动学习

 ModelArts自动学习能力,可根据用户标注数据全自动进行模型设计、参数调优、模型训练、模型压缩和模型部署全流程。无需任何代码编写和模型开发经验,即可利用ModelArts构建AI模型应用在实际业务中。

零编码,零AI基础,三步构建AI模型

  ModelArts自动学习可以大幅降低AI使用门槛与成本,较之传统AI模型训练部署,使用自动学习构建将降低成本90%以上。

零代码人车检测模型开发:ModelArts-Lab/readme.md at master · huaweicloud/ModelArts-Lab · GitHub

在自动驾驶技术实现的过程中,物体检测是其中一个重要环节。本案例基于ModelArts自动学习功能,让开发者体验AI模型的开发过程,完成数据标注、模型训练和部署,开发一个物体检测AI应用。

ModelArts自动学习具有零代码、零AI背景、泛化能力强的特点,可以帮助AI初学者快速体验AI应用开发流程,同时自动学习训练生成的模型也可以部署到生产环境中使用。

动手实践

实验目标

1.掌握从AI Gallery下载数据集的方法;

2.掌握使用自动学习功能进行数据标注、模型训练和部署在线服务的方法。

准备数据

下载训练数据集

华为云AI Gallery中有开发者分享了丰富的数据集,大家可以前往订阅使用。本案例采用自动驾驶场景的数据集,数据集中有两种物体,人和车。我们从华为云AI Gallery订阅数据集至ModelArts,然后就可以在ModelArts中使用了。

准备数据

下载训练数据集

华为云AI Gallery中有开发者分享了丰富的数据集,大家可以前往订阅使用。本案例采用自动驾驶场景的数据集,数据集中有两种物体,人和车。我们从华为云AI Gallery订阅数据集至ModelArts,然后就可以在ModelArts中使用了。

请点击此处,进入该数据集主页,点击car,进入下载详情,按照如下提示填写下载详情:

1、先下载数据集。然后,解压。

2、上传数据到OBS,用obs客户端来上传。

下载方式:选择ModelArts数据集

目标区域:华北-北京四

目标位置:选择一个OBS路径,作为数据集的存储位置。

名称:自定义。

填写好参数后,点击food按钮,然后点击food按钮。等待数据集状态变为推送成功(约2分钟),即可在ModelArts数据集列表中查看到下载的数据集。

下载测试数据集

请点击此链接下载数据到本地,解压。可以看到car_and_person_150文件夹。测试集位于car_and_person_150\test目录下。

创建项目

登录ModelArts管理控制台,点击左侧导航栏的自动学习,进入自动学习页面;

点击右侧项目页面中的物体检测的创建项目按钮。 

create_job

在创建自动学习项目页面,计费模式默认“按需计费”,填写“名称”并选择“训练数据”的存储路径。

名称:自定义

数据来源:新建数据集

数据集输入位置:选择刚刚从AI Gallery订阅的人车检测数据集。

最后点击“创建项目”按钮完成物体检测项目创建。

下载本机,解压。也是有2个文件夹train和test

   上传文件夹car_and_person

3、进入moderarts,创建自动学习的项目。

数据标注

同步数据源

点击“同步数据源”按钮,等待右上角出现“数据同步完成”提示信息,可以看到界面显示的图像。共有100张未标注的图片和50张已经标注的图片。

labeldata1

模型训练

点击“开始训练”按钮,设置最大训练时长为12分钟,预期推理硬件选择CPU,其他默认。然后点击"确认"按钮,提交训练作业。如下图所示:

train

训练完成后,等待一会,会出现开始“发布”。然后在进行下一步“部署”。还有就是,时间比较长10多分钟,耐心等待

 4、预测图片

5、测试样例图片

在线服务本质上是一个RESTful API,可以通过HTTP请求访问。本案例在网页上测试在线服务。

页面中间是服务测试,点击上传,选择test目录中一张图片上传,然后点击预测,在页面的右侧可以查看预测结果。

result

查看在线服务详情

如果想要查看在线服务的详情,可以在“部署上线”->“在线服务”中找到相应的在线服务,然后点击名称进去查看详情,如下图所示:

result


API在线服务详情页有该API的调用指南和配置信息等信息。

关闭在线服务

实验完成后,为了防止继续扣费,点击“停止”按钮,把在线服务关闭,在线服务停止后可以重新启动。

至此,本案例完成。


三、使用FasterRCNN预置算法基于海量数据训练人车检测模型

ModelArts预置算法

30+预置模型;所有模型已基于开源或行业数据集训练完毕,实现精度和速度优化。一键训练:仅需配置数据和日志输出路径,使用预置模型进行迁移学习,自动超参调优,自动模型压缩((量化、修剪),零编码模型训练优化

  ModelArts预置算法是指 ModelArts平台自带的算法,仅需提供数据即可自动训练,在采用预置算法训练之前,开发者仅需要按照规范准备好数据集,无须关心具体的调练代码及训练启动后镜像容器的上传、下载等其他工作,预置算法会自动将调练好的模型和 Tensorboard日志文件上传到开发者定的OBS中供查看。

查看预置算法

在ModelArts管理控制台,选择“训练管理 > 训练作业”,然后单击“预置算法”页签,进入预置算法列表页面。在预置算法列表中,您可以单击算法名称前的,查看该算法的详情。

另外,您还可以在算法的“操作”列,单击“创建训练”,快速创建一个训练作业,将此算法用于训练作业中的“算法来源”。


其中目前的算法包括

yolo_v3

yolov3_resnet18

retinanet_resnet_v1_50

inception_v3

darknet_53

SegNet_VGG_BN_16

ResNet_v2_50

ResNet_v1_50

Faster_RCNN_ResNet_v2_101

Faster_RCNN_ResNet_v1_50


还可以去市场里找更多的算法使用,只需要订阅之后即可使用,使用方法与预置算法基本一样,非常方便。

ModelArts预置算法应用案例

动手实践

使用FasterRCNN预置算法基于海量数据训练人车检测模型:

https://github.com/huaweicloud/ModelArts-Lab/blob/master/train_inference/Car_And_Person_Detection_Builtin_Algorithm/readme.md

在自动驾驶方案实现的过程中,物体检测是其中一个重要的技术。本案例基于ModelArts AI Gallery中官方发布的物体检测算法FasterRCNN,训练一个人车检测模型,并部署成在线服务,生成一个人车检测AI应用。

ModelArts的AI Gallery有丰富的算法,使用这些算法,无需自己开发训练代码和推理代码,只要准备并标注好数据,就可以轻松快速训练并部署模型。

准备工作

参考此文档,完成ModelArts准备工作,包括注册华为云账号、ModelArts全局配置和OBS相关操作。

准备数据

下载训练数据集

本案例采用自动驾驶场景的数据集,数据集中有两种物体,人和车。

本案例的数据集已经发布在AI Gallery,我们从华为云AI Gallery订阅数据集至ModelArts,然后就可以在ModelArts中使用了。点击此链接进入下载详情页,下载详情页示例如下:

下载方式:选择ModelArts数据集

目标区域:华北-北京四

目标位置:选择一个OBS路径,作为数据集的存储位置。

名称:自定义。

填写好参数后,点击food按钮,然后点击food按钮。等待数据集状态变为推送成功,即可在ModelArts数据集列表中查看到下载的数据集。

发布数据集

点击进入ModelArts数据集列表,找到刚订阅的数据集,点击“发布”按钮,填写训练集比例为0.8,发布数据集。数据集发布之后,才可在训练中使用。

create_dataset

等待数据集发布成功。

订阅算法

本实验中,我们从AI Gallery订阅ModelArts官方发布的物体检测算法FasterRCNN来训练模型。

点击进入AI GalleryFasterRCNN算法主页,点击页面右上方的food按钮。然后点击页面下方的food按钮,再点击food按钮,选择华北-北京四区域,最后点击food按钮进入算法管理页面,可以看到刚刚订阅的算法。

点击“同步”按钮,同步算法,可以点击food按钮,刷新状态。当状态变成就绪时,表示同步成功。

food

模型训练

我们使用创建的人车检测数据集,提交一个人车检测训练作业,训练会生成一个人车检测模型。

创建训练作业

回到ModelArts训练管理页面,在【训练管理】选择训练作业,点击【创建】,如下图所示:

create_obs

在创建训练作业页面中选择算法:

选择算法

选择算法,(算法列表是按订阅时间显示的,找到名称为物体检测-FasterRCNN_ResNet50的算法,选中它)

算法管理

计费模式:按需计费

名称:自定义

算法来源:算法管理

算法名称:物体检测-FasterRCNN_ResNet50

数据来源:数据集

选择数据集和版本:选择刚刚发布的人车数据集及其版本

训练输出:选择OBS路径/lftiny/car_and_person_detection/output/(此OBS路径如果不存在,可以使用OBS客户端创建)。训练输出位置用来保存训练生成的模型。

调优参数:用于设置算法中的超参。算法会加载默认参数,但是可以更改和添加参数。设置learning_rate_strategy=20:0.001,表示训练20轮,学习率固定为0.001。其他调优参数保持默认。

作业日志路径:选择OBS路径/lftiny/car_and_person_detection/log/(此OBS路径如果不存在,可以使用OBS客户端创建)。

资源池:公共资源池。

规格: [限时免费]GPU: 1*NVIDIA-V100-pcie-32gb(32GB) | CPU: 8 核 64GB,如图所示。

计算节点个数:选择1,表示我们运行一个单机训练任务。

所有字段填写好之后,确认参数无误,点击“下一步”按钮,然后点击“提交”按钮,开始训练。

使用V100 GPU资源,训练时长预计30分钟左右。

查看训练结果

训练作业完成后,可以查看训练作业的运行结果。

在训练作业页面,点击作业名称,进入配置信息页面。可以查看到训练作业的详情。

food

切换到“日志”页签,查看训练作业的训练日志,还可以下载日志到本地查看。

训练日志中会打印一些训练的精度和训练速度等信息。

训练生成的模型会放到训练输出位置OBS路径下,可以直接下载到本地使用。

模型部署

导入模型

点击“创建模型”按钮,创建模型。

food

元模型来源:从训练中选择

选择训练作业及版本:刚刚的训练作业及版本,会自动加载

部署类型:默认

推理代码:自动加载

其他保持默认。

点击“立即创建”按钮,开始导入模型,等待模型导入成功。

部署上线

等待模型状态为正常,然后点击部署下拉框中的“在线服务”,如下图所示:

food

计费模式:按需计费

名称:自定义

是否自动停止:开启,一小时后。会在1小时后自动停止该在线服务。

food

资源池:公共资源池。如果您购买了专属资源池,也可以选择专属资源池部署。

模型来源:我的模型

模型:选择刚刚导入美食人车检测的模型和版本,会自动加载。

计算节点规格:选择[限时免费]CPU:1 核 4 GiB

计算节点个数:1。如果想要更高的并发数,可以增加计算节点个数,会以多实例的方式部署。

填写好所有参数,点击“下一步”按钮,然后点击“提交”按钮,最后点击查看服务详情。状态栏会显示部署进度,大概3分钟左右会部署完成。

在线服务测试

在线服务的本质是RESTful API,可以通过HTTP请求访问,在本案例中,我们直接在网页上访问在线服务。

等待在线服务的状态变成运行中。

先点此链接下载测试集,解压,再切换到预测标签,点击上传按钮,进行测试

预测结果会出现在右边的输出框:

food

预测结果中的detection_classes字段,表示识别的分类(人与车)

预测结果中的detection_boxes字段,表示识别框的四个角坐标

预测结果中的detection_scores字段,表示图片为每种类别的置信度

关闭在线服务

为了避免持续扣费,案例完成后,需要关闭在线服务,点击“停止”按钮即可:

food

确认关闭所有计费项

点击此链接,进入ModelArts总览页面,如果所有计费中的数字都是0,表示所有计费项都关闭了。

train

案例完成。


四、FasterRCNN和YoLOV3算法完成物体检测

Faster RCNN是由Ross Girshick由何凯明等人在2016年将其用于目标检测任务中,能够完成高效的与传统的RCNN相比,利用RPN(Region Proposal Networks)完成候选框的选择,Fast RCNN的结构如下图所示:

如图,Faster R-CNN网络分为两部分,一是Region Proposal Network(RPN),二是Fast R-CNN。其中RPN包括图中proposals和conv layers,Fast R-CNN包括卷积层、ROI pooling及后面全连接层等部分。 Faster RCNN首先将整张图片输进CNN,提取图片的feature maps。将图片特征输入到到RPN,得到候选框的特征信息。RPN对于候选框中提取出的特征,使用分类器判别是否属于待识别的目标的候选框,将属于某一类别的候选框,用回归器进一步调整其位置。最后将目标框和图片的特征向量输入到Roi pooling层,再通过分类器进行分类,完成目标检测的任务。RPN能够协助Fast RNN将注意力集中在候选框中。

卷积层

Faster RCNN首先将整张图片输进CNN,提取图片的feature map,再将其输入到到RPN,得到候选框的特征信息。这里我们采用VGG16完成feature map的提取。卷积层是被RPN和Fast R-CNN两部分共享的。

RPN

相比于Fast RCNN,Faster R-CNN引入RPN(Region Proposal Network)完成候选框的提取,使得算法效率得到进一步提升。
RPN将任意尺寸大小的图片作为输入,输出若干个矩形候选框。为了生成区域候选框,在卷积层最后一层feature map上滑动一个(n*n)的网络,将卷积生成的feature map与(n*n)的窗口进行卷积运算。每一个滑动窗口都映射为一个更低维的特征。得到的特征送入两个分支中,一个用于框分类,另一个用于框回归。此网络执行滑动窗口形式,所有空间位置都共享全连接层。

滑动窗口的中心在图像上对应一片区域,计算出该区域的中心位置后以该位置为中心,按3种scale、每种scale各有3种长宽比取9个矩形区域。这些区域就是提取到的anchors boxes。可见,feature maps中的一个位置,共有9个anchors,3种scale可以根据具体情况更改的,更改时最好能使最大的scale能基本将input image覆盖。 在确定好k个anchor box之后,就能确定相应的位置信息,通过2次bounding-box regression对位置进行修正。 首先判断anchors是否为前景,使用classifier对anchors进行二分类,输出两个概率值,即图中左侧对应的2k score。其次,计算对于anchors的bounding box regression偏移量(x,y,w,h),以修正边框位置,即图中右侧4k coordinates。 最后将两者结合生成region proposals,同时剔除太小和超出边界的proposals,最后将提取到的proposals提交给后面的Roi Pooling层。

Roi Pooling

Fast R-CNN改进了R-CNN,应用了Roi Pooling。 由于在全连接层,需要输入固定大小的特征向量,R-CNN网络经过warp操作统一成固定的大小再送入后续网络,导致图像的变形和扭曲。而且每一个proposal均需要单独进行特征提取,重复计算量大。Poipooling通过卷积计算将图像统一成固定大小的特征向量。Roi Pooling的输入是卷积层得到的feature map和RNP得到的anchor,将其分割成7 * 7大小的子窗口,对每个子窗口进行max-pooling操作,输出ROI(region of interest)的feature map。输入后续的全连接层判断目标。

Classifier

在这一步,分类器完成对候选区域的检测。利用RoI feature maps计算ROI类别,同时再次bounding box regression获得目标最终的位置。

后记

从原始的CNN增加候选框的提取过程形成RCNN。接下来,RCNN加入Roi pooling形成Fast RCNN。然后,Faster RNN引入了RPN完成候选框的提取,并与FRCNN共享卷积层。模型不断的改善,弥补之前的不足,使得目标检测任务更准确和迅速。

物体检测是计算机视觉中的一个重要的研究领域,在人流检测,行人跟踪,自动驾驶,医学影像等领域有着广泛的应用。不同于简单的图像分类,物体检测旨在对图像中的目标进行精确识别,包括物体的位置和分类,因此能够应用于更多高层视觉处理的场景。例如在自动驾驶领域,需要辨识摄像头拍摄的图像中的车辆、行人、交通指示牌及其位置,以便进一步根据这些数据决定驾驶策略。本期学习案例,我们将聚焦于YOLO算法,YOLO(You Only Look Once)是一种one-stage物体检测算法。

算法开发流程:准备数据到搭建神经网络,模型训练,最后进行模型推理测试。

动手实践

物体检测Faster R-CNN实践:

https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_image_object_detection_faster/Faster-R-CNN.ipynb

物体检测YOLOv3实践:

https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_image_object_detection_yolo/object_detection_yolo.ipynb

物体检测-Faster R-CNN

物体检测是计算机视觉中的经典问题之一,其包含识别和定位两个重要的子任务。其任务是用框去标出图像中物体的位置,并给出物体的类别。从传统的人工设计特征加浅层分类器的框架,到基于深度学习的端到端的检测框架,物体检测一步步变得愈加成熟。物体检测模型的好坏受到多种因素影响。在这些影响因素中,特征、搜索空间和框架起到了至关重要的作用。近6年物体检测领域飞速发展。未来物体检测一定是朝着更准确、高速的方向发展,如更完善的特征金字塔构造过程、无需候选框的物体检测和分割方法,以及向弱监督、无监督物体检测。

注:本文整理自华为云社区内容共创活动之华为云AI实战营:物体检测

查看活动详情:https://bbs.huaweicloud.com/blogs/308924

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。