navicat模型显示注释_RetinaNet模型构建面罩检测器

37a0949f0839a61494e8df1441d21d24.png

字幕组双语原文:如何使用RetinaNet模型构建面罩检测器

英语原文:How to build a Face Mask Detector using RetinaNet Model!

翻译:雷锋字幕组(李珺毅)


介绍

目标检测是计算机视觉中一个非常重要的领域,对于自动驾驶、视频监控、医疗应用和许多其他领域都是十分必要的。

我们正在努力应对一场规模空前的大流行。全球各地的研究人员都在疯狂地尝试开发COVID-19的疫苗或治疗方法,而医生们正努力防止这一流行病席卷整个世界。另一方面,许多国家发现了社交距离,戴口罩和手套是稍微抑制这种情况的一种方法。

最近我有了一个想法,用我的深度学习知识来帮助一下现在的情况。在本文中,我将向您介绍RetinaNet的实现,而不需要什么背景知识和相关工作。

最重要的是什么?我们将使用RetinaNet建立一个口罩探测器来帮助我们应对这一持续的流行病。您可以推断相同的想法,为你的智能家居构建一个启用ai的解决方案。这个人工智能解决方案将只对戴着口罩和手套的开启大楼的大门。

随着无人机的成本随着时间的推移而降低,我们看到了航拍数据的激增。因此,您可以使用这个RetinaNet模型在航空图像甚至卫星图像中检测不同的对象,如汽车(自行车、汽车等)或行人,以解决不同的业务问题。

所以,你可以看到对象检测模型的应用是无穷无尽的。

目录

1.RetinaNet是什么

2.RetinaNet的需求

3.RetinaNet网络结构

-1.主干网络

-2.目标分类自网络

-3.目标回归自网络

4.Focal loss 损失函数

5.使用RetianNet模型建立口罩检测器

-1.获取数据

-2.建立数据集

-3.模型训练

-4.模型测试

6.备注

RetianNet是什么:

RetinaNet是最好的单阶段目标检测模型之一,它已被证明可以很好地处理密集和小规模的物体。因此,它已成为我们在航空和卫星图像中使用的流行目标检测模型。

RetianNet的需求:

RetinaNet是由Facebook AI研究公司引入来解决密集检测问题的。在处理极端的前景-背景类时,需要用它来弥补YOLO和SSD等单镜头对象检测器的不平衡和不一致性。

RetinaNet的网络结构:

从本质上讲,RetinaNet是由以下基本分组成的:

1.主干网络(自下而上的边路和具有侧连接的自上而下的路径)

2.目标分类子网络

3.目标回归子网络

a0cfbf1be7b3f7d539bc06e2cf90c03d.png

为了更好地理解,让我们分别理解架构的每个组件

1.主干网络

1.自底向上路径:自底向上路径(例如,ResNet)用于特征提取。因此,它计算不同比例的特征地图,而不考虑输入图像的大小。

2.具有横向连接的自顶向下路径:自顶向下路径从更高的金字塔层次上采 样空间上较粗糙的特征图,横向连接将具有相同空间大小的自顶向下和自底向上的层合并在一起。较高层次的特征图往往具有较小的分辨率,但语义上更强。因此,更适合于检测较大的物体; 相反,来自较低级特征图的网格单元具有高分辨率,因此更擅长检测较小的对象(参见图64)。 因此,通过自上而下的路径及其与路径的自下而上的横向连接的组合,这些操作不需要太多额外的计算,因此生成的特征图的每个级别在语义和空间上都可以很强。 因此,该体系结构是规模不变的,并且可以在速度和准确性方面提供更好的性能。

2.目标分类子网络

每个FPN层都附加一个全卷积网络(FCN)进行对象分类。如图所示,该子网包含3*3个卷积层,256个滤波器,然后是3*3个卷积层,K*A滤波器,因此输出的feature map大小为W*H*KA,其中W和H与输入特征图的宽度和高度成比例,K和A分别为对象类和锚盒的数量。

最后采用Sigmoid层(不是softmax层)进行对象分类。

而最后一个卷积层之所以有KA滤波器是因为,如果从最后一个卷积层得到的feature map中的每个位置都有很多锚盒候选区域,那么每个锚盒都有可能被分类为K个类。所以输出的特征图大小将是KA通道或过滤器。

3.目标回归子网络

回归子网络与分类子网络并行附着在FPN的每个特征图上。回归子网络的设计与分类子网络相同,只是最后一个卷积层大小为3*3,有4个filter,输出的feature map大小为W*H*4A。

最后一个卷积层有4个过滤器的原因是,为了定位类对象,回归子网络为每个锚定盒产生4个数字,这些数字预测锚定盒和真实框锚盒之间的相对偏移量(根据中心坐标、宽度和高度)。因此,回归子网的输出特征图具有4A滤波器或通道。

Focal Loss损失函数

Focal Loss(FL)是Cross-Entropy Loss(CE)的改进版本,它通过为困难的或容易错误分类的示例(即具有嘈杂纹理或部分对象或我们感兴趣的对象的背景)分配更多权重来尝试处理类不平衡问题 ,并简化简单的示例(即背景对象)。

因此,“Focal Loss”减少了简单示例带来的损失贡献,并提高了纠正错误分类的示例的重要性。 焦点损失只是交叉熵损失函数的扩展,它将降低简单示例的权重,并将训练重点放在困难样本上。

所以为了实现这些研究人员提出了-

abdfbcd21695315e59f170534b3b2787.png

1- pt代表交叉熵损失,可调聚焦参数≥0。 RetinaNet物体检测方法使用焦距损失的α平衡变体,其中α= 0.25,γ= 2效果最佳。

598fbcd98cfe486dd1ba15fcbec8e19a.png

所以focal loss 的定义是:

28dff2a17cc3be418f363adef8852998.png

对于γ∈[0,5]的几个值,可以看到Focal Loss,请参见图1。我们将注意到聚焦损耗的以下特性:

1.当示例分类错误且pt小时,调制因子接近1并且不影响损失。

2.当pt→1时,因子变为0,并且可以很好地权衡分类良好的示例的损失。

3.Focal loss γ平滑地调整了简单示例的权重。 随着γ的增加,调制因子的 作用也同样增加。 (经过大量实验和试验,研究人员发现γ= 2最有效)

注意:-当FL = 0时,FL等于CE。如图蓝色曲线所示

直观地看,调制因子减小了简单例的损耗贡献,扩展了例的低损耗范围。

你可以在这篇文章中读到关于Focal loss的详细信息(链接到我的focal loss文章),在这篇文章中我讨论了交叉熵演变成focal loss,focal loss的需要,focal loss和交叉熵的比较

最重要的是,我用了几个例子来解释为什么focal loss比交叉熵好。

现在让我们看看用Python实现RetinaNet来构建口罩检测器。

使用RetianNet模型建立口罩检测器

获取数据

任何深度学习模型都需要大量的训练数据才能在测试数据上得到好的结果。在这篇文章中(链接到我的Web文章),我谈到了为您的深度学习项目收集大量图像的Web方法。

创建数据集

我们首先使用LabelImg工具为训练和验证数据集创建注释。这个优秀的注释工具允许您快速注释对象的边框,以训练机器学习模型。

您可以在anaconda命令提示符中使用下面的命令来安装它

您可以使用如下所示的labelmg工具对每个JPEG文件进行注释,它将生成带有每个边框坐标的XML文件。我们将使用这些xml文件来训练我们的模型。

237b357b7a6366e5e27a34209b2587d7.png

模型训练

第一步:克隆安装keras-retinaNet代码仓库

第二步:导入所需要的包

第三步:导入图片和xml文件

第三步:编写一个可以在训练集上显示边界框的函数

28c18c8b0e450c46e2cbd1940bc6ebae.png

d81c620d10659ea263b7323a200f9470.png

注意:最好从一个预先训练好的模型开始,而不是从头开始训练一个模型。我们将使用已经在Coco数据集上预先训练好的ResNet50模型。

第四步:训练RetinaNet模型

注意:如果您正在使用谷歌Colab,您可以使用下面的代码片段来训练您的模型。

但如果你重新训练你的本地Jupyter Notebook或不同的IDE训练,然后你可以从命令提示符下面的命令

让我们解释一下传递给脚本train.py的每个参数。

1.freeze-backbone:冻结主干层,当我们使用小数据集时特别有用,以避免过拟合

2.random-transform:随机变换数据集以获得数据增强

3.weights:使用一个预先训练好的模型(您自己的模型或者Fizyr发布的模型)初始化模型

4.batch-size:训练批量大小,值越高,学习曲线越平滑

5.step:迭代的步数

6.epochs:迭代的次数

7.csv:上面的脚本生成的注释文件

第五步:加载训练好的模型

模型测试

第六步:使用模型进行预测

ec2116bdc8cb3725256669df0d84fe06.png

75619b50ec60cbcb4f997522541fccf2.png

84badeb84c23c699242bd638bd900a7f.png

37f9e9e6c50d7d71554e970f970417ae.png

0092ea7897c158b25171944c91e99d9a.png

c4a2359e02ea30abb2ac079de0753dd0.png

f1612b70c07931595629d867951dfbb3.png

a789ef2e44b3e9895963f2bce48c4b8c.png

引用

http://arxiv.org/abs/1605.06409.

https://arxiv.org/pdf/1708.02002.pdf

https://developers.arcgis.com/python/guide/how-retinanet-works/

https://analyticsindiamag.com/what-is-retinanet-ssd-focal-loss/

https://github.com/fizyr/keras-retinanet

https://www.freecodecamp.org/news/object-detection-in-colab-with-fizyr-retinanet-efed36ac4af3/

https://deeplearningcourses.com/

https://blog.zenggyu.com/en/post/2018-12-05/retinanet-explained-and-demystified/

备注:

总而言之,我们完成了使用RetinaNet制作面罩检测器的整个过程。 我们创建了一个数据集,训练了一个模型并进行了测试(这是我的笔记本和数据集的Github存储库)。

Retina Net是一个功能强大的模型,使用Feature Pyramid Networks&ResNet作为其骨干。 我能够通过非常有限的数据集和极少的迭代(每个迭代有500个步长,共6次迭代)获得口罩检测器的良好结果。当然你也可以更改阈值。

注意:

1.确保你训练你的模型至少20次迭代,以获得好的结果。

2.一个好的想法是提交使用RetinaNet模型构建口罩检测器的方法。 人们总是可以根据业务需求调整模型,数据和方法。

一般来说,RetinaNet是开始目标检测项目的一个很好的选择,特别是如果您需要快速获得良好的结果。


雷锋字幕组是一个由 AI 爱好者组成的翻译团队,汇聚五百多位志愿者的力量,分享最新的海外AI资讯,交流关于人工智能技术领域的行业变革与技术创新的见解。

团队成员有大数据专家、算法工程师、图像处理工程师、产品经理、产品运营、IT咨询人、在校师生;志愿者们来自IBM、AVL、Adobe、阿里、百度等知名企业,北大、清华、港大、中科院、南卡罗莱纳大学、早稻田大学等海内外高校研究所。

如果,你也是位热爱分享的AI爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。

5f74de44b9e29084ec8a49ca51e0dd87.png

雷锋网雷锋网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中parse.add_argument()简单用法

argparse模块简单使用流程以及与命令行的交互1.导入模块2.创建解析器3.添加参数4.解析参数5使用参数完整代码与命令行的交互argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块。下面以例子来简单记下模块使用流程。1.导入模块 import argparse2.创建解析器 该…

java最好学习的方法_学习Java的最佳方法

java最好学习的方法Java是有些人可能说很难学习的语言之一,而其他人则认为它与其他语言具有相同的学习曲线。 两种观察都是正确的。 但是,由于Java具有平台无关性,因此在语言方面具有相当大的优势。 Java是一种低级语言,它以一种…

什么是整数

整数(integer)是正整数、零、负整数的集合。 整数的全体构成整数集,整数集是一个数环。在整数系中,零和正整数统称为自然数。-1、-2、-3、…、-n、…(n为非零自然数)为负整数。则正整数、零与负整数构成整数…

镜像电流源特点_模电中的电流源电路

在模电中,电流源电路也称恒流源电路,经常作为放大电路中的偏置电路(即为放大电路提供合适的静态工作点的电路)、有源负载以及电压-电流转换电路等。在一些名牌大学的期末考试或研究生入学考试中,也经常出一道和恒流源相关的题。不同学校的教材…

java改变变量编码方式_Java 10将如何改变您的编码方式

java改变变量编码方式突出显示Java 10中新的Java局部变量类型推断功能 早在2016年,Java社区就掀起了新的JDK增强提案(JEP): JEP 286 。 现在,两年后,局部变量类型推断可以说是Java 10中最值得注意的功能。…

vim 批量注释技巧

文章目录一、块选择模式批量注释取消注释二、替换命令批量注释取消注释一、块选择模式 批量注释 Ctrl v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按 …

深度学习Pytorch--梯度与反向传播笔记

Pytorch梯度与反向传播相关概念导数偏导数方向导数梯度梯度下降法自动求梯度概念Tensor反向传播求梯度相关概念 先来理解一下从导数到梯度的相关概念。 导数 一元函数中导数就是该函数所代表的曲线在这一点上的切线斜率。 多元函数的导数可以称为全导数,可以得到…

工业机器人打磨抛光编程员工资_一种工业机器人打磨抛光工作平台的制作方法...

本实用新型涉及工业机器人领域,具体是一种工业机器人打磨抛光工作平台。背景技术:随着手机的使用量逐年增加,人们对手机外观的要求越来越高,手机壳的打磨和抛光工艺变得越来越严格。由于在拉伸和其他冲压工序中,容易使…

jdk10 换成jdk8_JDK 10的摘要Javadoc标签

jdk10 换成jdk8JDK 10通过发行JDK-8173425 引入了Javadoc标签{summary} (“ Javadoc需要一个新标签来指定摘要。”)。 这个新标签允许开发人员显式指定Javadoc注释的哪一部分出现在“摘要”中,而不是依靠Javadoc的默认处理来寻找一段时间和空…

深度学习pytorch--线性回归(一)

线性回归线性回归案例提出问题模型定义模型训练(1) 训练数据(2) 损失函数(3) 优化算法模型预测线性回归的表示方法神经网络图矢量计算小结线性回归案例 线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销…

关于 vim 的 magic 设置

文章目录一、magic 介绍二、设置 magic(一)长效设置(二)临时设置(三)magic 示例1. 匹配由 3 个以字母 a 开头,以字母 c 结尾,中间是任意一个字符的子串组成的字符串(1&am…

语言逻辑运算符两侧运算对象_5.3 C语言逻辑运算符与表达式

01优先次序 1、有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和Pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在C语言中不能再程…

rabbitmq 传递文件_使用RabbitMQ进行消息传递

rabbitmq 传递文件RabbitMQ是一个强大的消息代理,可用于实现不同的消息传递模式。 即使有出色的教程 (使用不同的语言和框架),也很难理解这些概念。 在这篇文章中,我想展示一些可以用RabbitMQ实现的不同范例&#xff0…

正则表达式的贪婪模式、非贪婪模式、占有模式

文章目录一、Greediness(贪婪型)(一)贪婪模式示例(二)贪婪模式的匹配过程(贪婪模式的回溯)二、Reluctant(勉强型)(一)非贪婪模式示例&…

深度学习pytorch--线性回归(二)

线性回归无框架实现线性回归的从零开始实现生成数据集(简单的人工构造)读取数据初始化模型参数定义模型定义损失函数定义优化算法训练模型小结完整代码(可直接运行)线性回归的从零开始实现 为了深入理解深度学习是如何工作的,本节不使用强大的深度学习框架&#xf…

乱码 设置界面_和平精英:压轴更新后BUG频出,设置界面崩盘,界面全白变乱码...

引言:陌瑾出品,争做精品!大家好,我是你们的老朋友,陌瑾。和平精英作为当下比较热门的一款PVP即时战斗手游,在6月17日,海岛2.0版本也重装上阵,此次地图更新是和平精英游戏上线以来第1…

spring mvc教程_Spring MVC教程

spring mvc教程1.简介 作为企业Java开发人员,这项工作的主要重点之一是开发Web应用程序。 对于Web应用程序,后果还包括许多挑战。 具体来说,其中一些是状态管理,工作流和验证。 HTTP协议的无状态性质只会使事情变得更加复杂。 Spr…

正则表达式实例解读

文章目录正则式 a?正则式 ^\w\d正则式 (\d){4}|\1{2}正则式 \d{4}|\d{2}正则式 a? 正则式&#xff1a;a? 被匹配的字符串&#xff1a;a<>aava</>ab 看下面的 Java 代码&#xff1a; String test "a<>aava</>abb"; String reg "a…

深度学习pytorch--线性回归(三)

线性回归pytorch框架实现线性回归的简洁实现生成数据集读取数据定义模型初始化模型参数定义损失函数定义优化算法训练模型小结完整代码:线性回归的简洁实现 随着深度学习框架的发展&#xff0c;开发深度学习应用变得越来越便利。实践中&#xff0c;我们通常可以用比上一节更简…

smpp客户端_SMPP Java示例(客户端)

smpp客户端这篇文章通过创建一个简单的SMPP客户端向移动用户发送短信来提供SMPP Java示例&#xff0c;使用该客户端我们可以简单地提交以将消息发送给单个移动用户&#xff0c;也可以一次将消息广播给多个移动用户。另外&#xff0c;我们将验证交货收据。 出于客户端的目的&…