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

网友投稿 561 2022-05-29

前言:

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算法原理

Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。

Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。

Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。

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中使用了。

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

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

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

下载方式:选择ModelArts数据集

目标区域:华北-北京四

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

名称:自定义。

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

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

创建项目

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

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

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

名称:自定义

数据来源:新建数据集

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

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

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

上传文件夹car_and_person

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

数据标注

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

模型训练

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

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

4、预测图片

5、测试样例图片

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

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

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

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路径,作为数据集的存储位置。

名称:自定义。

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

发布数据集

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

等待数据集发布成功。

订阅算法

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

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

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

模型训练

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

创建训练作业

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

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

选择算法,(算法列表是按订阅时间显示的,找到名称为物体检测-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分钟左右。

查看训练结果

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

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

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

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

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

模型部署

导入模型

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

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

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

部署类型:默认

推理代码:自动加载

其他保持默认。

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

部署上线

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

计费模式:按需计费

名称:自定义

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

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

模型来源:我的模型

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

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

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

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

在线服务测试

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

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

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

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

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

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

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

关闭在线服务

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

确认关闭所有计费项

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

案例完成。

四、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

进入环境

进入ModelArts

点击如下链接:https://www.huaweicloud.com/product/modelarts.html , 进入ModelArts主页。点击“立即使用”按钮,输入用户名和密码登录,进入ModelArts使用页面

创建ModelArts notebook

下面,我们在ModelArts中创建一个notebook开发环境,ModelArts notebook提供网页版的Python开发环境,可以方便的编写、运行代码,并查看运行结果。

第一步:在ModelArts服务主界面依次点击“开发环境”、“创建”

第二步:填写notebook所需的参数:

第三步:配置好notebook参数后,点击下一步,进入notebook信息预览。确认无误后,点击“立即创建“

第四步:创建完成后,返回开发环境主界面,等待Notebook创建完毕后,打开Notebook,进行下一步操作

在ModelArts中创建开发环境

接下来,我们创建一个实际的开发环境,用于后续的实验步骤。

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

第一步:点击下图所示的“打开”按钮,进入刚刚创建的Notebook,

第二步:创建一个Python3环境的的Notebook。点击右上角的\"New\",然后选择Pytorch-1.0.0开发环境。

第三步:点击左上方的文件名\"Untitled\",并输入一个与本实验相关的名称,

在Notebook中编写并执行代码

在Notebook中,我们输入一个简单的打印语句,然后点击上方的运行按钮,可以查看语句执行的结果:",

开发环境准备好啦,接下来可以愉快地写代码啦!"

数据准备

首先,我们将需要的代码和数据下载到Notebook。

本案例我们使用PASCAL VOC 2007数据集训练模型,共20个类别的物体。

安装依赖并引用

神经网络搭建

模型训练超参设置

为了减少训练时间,我们在预训练模型的基础上进行训练。这里,我们使用VGG16作为FasterRCNN的主干网络。

定义读取数据集函数

数据集的标注格式是PASCAL VOC格式。

设置模型训练参数

定义神经网络结构

使用PyTorch搭建神经网络。

部分实现细节可以去相应的文件夹查看源码。

开始训练

测试部分

在这部分中,我们利用训练得到的模型进行推理测试。

结果绘制

将预测的标签和边界框绘制在原图上。

准备测试图片

我们将测试图片传到test文件夹下,我们准备了两张图片进行测试,大家也可以通过notebook的upload按钮上传自己的测试数据。注意,测试数据需要是图片,并且放在test文件夹下。

In [16]:

test_file = "./test"

模型推理

这里我们加载一个预先训练好的模型,也可以选择案例中训练的模型。

物体检测YOLOv3实践

在Notebook中编写并执行代码

在Notebook中,我们输入一个简单的打印语句,然后点击上方的运行按钮,可以查看语句执行的结果:

开发环境准备好啦,接下来可以愉快地写代码啦!

数据和代码下载

运行下面代码,进行数据和代码的下载和解压

本案例使用coco数据,共80个类别。

准备数据

文件路径定义

模型训练

本案例使用Keras深度学习框架搭建YOLOv3神经网络。

可以进入相应的文件夹路径查看源码实现。

构建神经网络

可以在./yolo3/model.py文件中查看细节

训练回调函数定义

开始训练

保存模型

In [9]:

import os os.makedirs(save_path) # 保存模型 model.save_weights(os.path.join(save_path, 'trained_weights_final.h5'))

模型测试

打开一张测试图片

图片预处理,构建模型,加载模型权重,或将模型路径替换成上一步训练得出的模型路径;

定义IOU以及score:

IOU: 将交并比大于IOU的边界框作为冗余框去除

score:将预测分数大于score的边界框筛选出来

构建输出[boxes, scores, classes]

进行预测

将预测结果绘制在图片上

总结:

零代码人车检测模型开发的基础上进行数据集扩充已达到模型调优的目的。零代码开发,相信大家在第一章的学习中已经领略到了ModelArts的魅力,没错,零代码的确能训练出一个精度还可以的模型。一般来说,ModelArts上的零代码开发模型有两种方式:一是自动学习、二是预置算法(或者市场订阅算法)。

FasterRCNN的工作原理是首先通过卷积层来提取图像的特征,得到特征图。而卷积层可以是vgg16、resnet50或resnet101等网络结构中的其中一种,不同网络结构的卷积层可以在此处进行灵活的替换。我。卷积层其实有个专业的名称,中文名称为主干网络,英文名称为backbone,它的作用是从图片中提取特征得到特征图。业界常用的图像领域主干网络有AlexNet、VGG、GoogleNet、Xception、Inception、ResNet、ResNext、DenseNet、MobileNet、SENet等等。在已经训练好的主干网络的基础上继续训练自己的数据集,这样可以提升模型训练效率,不用完全从零开始训练。这里直接在之前拉取的代码中进行实现。

在YOLOv3课程案例中,我们使用200张coco数据集的图片跑通了训练,这部分图片在coco/coco_data目录中,标注文件是一个txt,路径是coco/coco_train.txt,如下图所示,该文件中的每一行是一张图片的所有物体框标注,标注的格式是“图片的路径 xmin,ymin,xmax,ymax,label_id ...”,物体检测算法就是根据这些标注框的信息来进行学习。anchor这个词目前没有一个贴切的中文翻译,从作用上理解,anchor就是从训练集的所有标注框中统计出来的、在训练集中最经常出现的一些标注框的尺寸大小值和宽高比值。比如,有个检测行人的任务,训练集中出现站立姿态的人非常多,那么常见的宽高比就是0.3:1,这样模型在学习的时候,就直接告诉它 “你多尝试0.3:1的检测框,放宽松一点的话,你也可以试试0.2:1和0.4:1,就不要瞎尝试其他比例的形状了”,比如10:1的形状就不要试了,不会有身体宽度是身高10倍的人。这样,引入anchor其实是把人的一些先验知识加了进来,让模型更有效地学习。

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

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

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

AI 云学院

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:八千字硬核长文梳理Linux内核概念及学习路线
下一篇:2021年前端技术趋势洞察
相关文章