python 实现显著性检测_使用python轻松实现高大上的YOLOV4对象检测算法

YOLO系列对象检测算法,算是人工智能技术领域的一匹黑马,当开发者宣布不再为YOLO系列检测算法更新时,很多开发者瞬间失去了”精神食粮“。突然,当YOLOV4检测算法发布的时候,让很多开发者喜出望外。

19c9007f5f58d9d68cdd5731193539f7.png

YOLOV4对象检测

YOLOV4对象检测算法综述:

0303cc2aa1f618e543c0aa88bf8fb5d6.png

COCO 模型上的检测数据

43.5%mAP+65FPS 精度速度最优平衡,YOLOV4无论是在速度上,还是在精度上,都绝对碾压很多对象检测算法,在论文中,作者也是采用了大量的调优算法来加速YOLOV4的检测模型

加权残差连接(WRC)

跨阶段部分连接(CSP)

跨小批量标准化(CmBN)

自对抗训练(SAT)

Mish激活

马赛克数据增强

CmBN

DropBlock正则化

CIoU Loss

c0a236473eadeeb3fc9ab198b8886a62.png

对象检测

模型中的名词

Input:算法的输入,包括整个图像,一个patch,或者是image pyramid

Backbone:可以理解为提取图像特征的部分,可以参考经训练好的网络,例如(VGG16,ResNet-50, ResNeXt-101, Darknet53等)

Neck:特征增强模块,前面的backbone已经提取到了一些相关的浅层特征,由这部分对backbone提取到的浅层特征(low-level feature)进行加工,增强,从而使得模型学到的特征是想要的特征。

Head:检测头。如果想直接得到bbox,那就可以接conv来输出结果,例如Yolo,SSD

因此,一个检测算法可以理解为:

Object Detection = Input+Backbone + Neck + Head

Bag of freebies

什么叫Bag of freebies?在目标检测中是指:用一些比较有用的训练技巧来训练模型,从而使得模型取得更好的准确率但是不增加模型的复杂度,也就不增加推理(inference)是的计算量(cost)。在目标检测中,提到bag of freebies,首先会想到的 就是Data augmentation。

Data augmentation

目的在于增加训练样本的多样性,使得检测模型具有高的鲁棒性。常见的数据增强方式包括两个方面:几何增强以及色彩增强。

  • 几何增强包括:随机翻转(水平翻转较多,垂直翻转较少),随机裁剪(crop),拉伸,以及旋转。

  • 色彩增强包括:对比度增强,亮度增强,以及较为关键的HSV空间增强。

.Bag of specials

什么叫做bag of specials:就是指一些plugin modules(例如特征增强模型,或者一些后处理),这部分增加的计算量(cost)很少,但是能有效地增加物体检测的准确率,我们将这部分称之为Bag of specials

架构选择

b66e8b26458f957cf8eefde0e88962bf.png

架构选择

一个模型的分类效果好不见得其检测效果就好,想要检测效果好需要以下几点:

  • 更大的网络输入分辨率——用于检测小目标

  • 更深的网络层——能够覆盖更大面积的感受野

  • 更多的参数——更好的检测同一图像内不同size的目标

为了增大感受野,作者使用了SPP-block,使用PANet代替FPN进行参数聚合以适用于不同level的目标检测。

YOLOv4的架构:

  • backbone:CSPResNext50

  • additional block:SPP-block

  • path-aggregation neck:PANet

  • heads:YOLOv3的heads

YOLOV4的改进,作者不仅增加了以上的优化算法,更是改进了其他方面的技术,比如:

  • 一种新的数据增强Mosaic法和Self-AdversarialTraining 自对抗训练法。

64237877c0672dfe65c40a621bdb2ae2.png

Mosaic法和Self-AdversarialTraining

  • 应用遗传算法选择最优超参数。

  • 改进SAM,改进PAN,和交叉小批量标准化(CmBN),使设计适合于有效的训练和检测

5a2fef37eb72c40db45357401c3d4a86.png

SAM,PAN

更加详细的技术,大家可以参考作者的论文以及GitHub源代码进行分享学习

python+opencv 实现YOLOV4

cd33cb144602871de22648aada1d413e.png

python+opencv 实现YOLOV4

YOLOV4的实现,除了作者分享的Darknet之外,现在还有了tensorflow、Pytorch、keras等等方法的实现,但是始终没有比较简答的代码实现(毕竟tensorflow、Pytorch、keras技术,不是很好掌握)

opencv4.4版本的发布,宣布支持最新的YOLOV4对象检测算法,同时还优化了大量的工作

本部分代码需要升级一下你的opencv版本到4.4

YOLOV4 图片识别

模型初始化

import numpy as np
import timeimport cv2import oslabelsPath = "yolo-coco/coco.names"
LABELS = Nonewith open(labelsPath,'rt') as f:
LABELS = f.read().rstrip('\n').split("\n")
np.random.seed(42)
COLORS = np.random.randint(0, 255, size=(len(LABELS), 3),dtype="uint8")
weightsPath = "yolo-coco/yolov4.weights"
configPath = "yolo-coco/yolov4.cfg"
net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)

1-5行:首先我们导入第三方库

7-10行:我们加载YOLOV4在COCO训练集上的对象名称

12-13行:初始化随机的颜色,这里主要是为后续检测到不同的对象,进行不同颜色的边框画图

15-17:初始化YOLOV4的模型,cv2.dnn.readNetFromDarknet(configPath, weightsPath)函数来加载模型的CFG以及weights参数

347a1e5fb0ffe414af00feef2af11c17.png

代码截图

加载图片进行神经网络检测

image = cv2.imread("images/3.jpg")
(H, W) = image.shape[:2]
ln = net.getLayerNames()ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416),swapRB=True, crop=False)
net.setInput(blob)start = time.time()
layerOutputs = net.forward(ln)end = time.time()
print("[INFO] YOLO took {:.6f} seconds".format(end - start))

19-20行:输入图片,获取图片的长度与宽度

22-28行:计算图片的blob值,输入神经网络,进行前向反馈预测图片,只不过net.forward里面是ln, 神经网络的所有out层,这里我们定义了一个time函数,用来计算YOLOV4的检测时间

e0e7d3e7060a0c15706b4122d485fc9c.png

代码截图

遍历检测结果

boxes = []
confidences = []classIDs = []for output in layerOutputs:
for detection in output:
scores = detection[5:]
classID = np.argmax(scores) confidence = scores[classID] if confidence > 0.5:
box = detection[0:4] * np.array([W, H, W, H])
(centerX, centerY, width, height) = box.astype("int")
x = int(centerX - (width / 2))
y = int(centerY - (height / 2))
boxes.append([x, y, int(width), int(height)])
confidences.append(float(confidence))
classIDs.append(classID)

32-34:首先初始化一些参数,主要用来存检测到的结果数据

36-42:遍历所有的检测层,提取检测到的图片对象置信度以及label ID

44-53:我们过滤到置信度小于0.5的对象,提取大于0.5置信度的对象,分别计算每个检测对象的BOX、置信度以及label ID,并保存在如下先前建立的初始化参数list里面

boxes = []

confidences = []

classIDs = []

53a2e79297be88a258d1f5b3636e08f1.png

代码截图

通过以上代码便实现了python的YOLOV4对象检测,但是检测的结果并不理想,对于每个对象,Yolo4 会框出 3 个左右的区域,但是我们只需要显示出最合适的区域。非最大值抑制算法,就是搜索出局部最大值,将置信度最大的框保存,其余删除。

非最大值抑制来定义最大的边框

idxs = cv2.dnn.NMSBoxes(boxes, confidences, 0.5,0.4)
if len(idxs) > 0: for i in idxs.flatten(): (x, y) = (boxes[i][0], boxes[i][1])
(w, h) = (boxes[i][2], boxes[i][3])
color = [int(c) for c in COLORS[classIDs[i]]] cv2.rectangle(image, (x, y), (x + w, y + h), color, 2) text = "{}: {:.4f}".format(LABELS[classIDs[i]], confidences[i]) cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX,
0.5, color, 2)cv2.imshow("Image", image)cv2.waitKey(0)

最后,我们使用非最大值抑制算法,把每个对象的最大边框显示出来,以便我们检测模型的结果

336fca214ccfb1a8df52ec1754d47980.png

代码截图

以上便是完整的python opencv实现YOLOV4的代码,本部分代码与YOLOV3的实现类似,小伙伴们可以参考小编往期的文章关于YOLOV3的介绍,最后我们运行一下代码,看看实现检测的效果

89da302c5c0bc097cab6cea8fb8df01e.png

YOLOV4

YOLOV4的检测,用起来,确实速度有了很大的提示,就如上图一样,检测只用了1.3S左右,速度与精度的结合,美中不足的地方是上图的人的置信度才0.777

下期预告

当然YOLOV4检测算法完全可以使用在视频检测,以及摄像头的实时对象检测,本部分代码我们下期分享

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

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

相关文章

android source镜像源_【转载】Celadon快速上路指南Part2:编译Celadon镜像

Celadon快速上路指南Part2:编译Celadon镜像From: 孙晓璐 AndroidIA Celadon 9/20一目了然 | Celadon 新手上路快速通道隆重揭晓 | 打开Celadon 的正确姿势上一期我们向您介绍了如何安装Celadon预编译镜像(Celadon快速上路指南 Part1:安装Cela…

python中os模块_Python的武器库11:os模块

说到编程语言python,有一个著名的格言"余生太短,只用python"。如果要分析为什么会存在这么一句格言?python的语法并不简单,有复杂难懂的部分,之所以有这样一句格言,是因为python中有很多强大的模…

java 同步锁_死磕 java同步系列之自己动手写一个锁Lock

问题(1)自己动手写一个锁需要哪些知识?(2)自己动手写一个锁到底有多简单?(3)自己能不能写出来一个完美的锁?简介本篇文章的目标一是自己动手写一个锁,这个锁的…

android里canvas视频帧,移动端用canvas截取视频封面,如何不截取第一帧,而是截取其它的帧?...

我在微信开发工具里截的图是可以的,但是在手机上截的图缺变成全透明的了。我猜是视频的第一帧的问题微信开发工具的截图手机的截图我的代码:JS:function captureImage(video) {var scale1var canvas document.createElement("canvas&qu…

python画正方形内切圆_python画出三角形外接圆和内切圆的方法

刚看了《最强大脑》中英对决,其中难度最大的项目需要选手先脑补泰森多边形,再找出完全相同的两个泰森多边形。在惊呆且感叹自身头脑愚笨的同时,不免手痒想要借助电脑弄个图出来看看,闲来无事吹吹牛也是极好的。 今天先来画画外接圆…

查看地区的ip段_「教程」CloudFlare 自选 IP优化网站速度

前言CloudFlare 官网虽然不提供 CNAME / AAAA / A 记录接入 CloudFlare 的 CDN ,但是我们可以通过 CloudFlare Partner 免费使用 CNAME / A 记录接入 CloudFlare 。而我们正好利用 CloudFlare 使用 A 记录接入 CDN 的方式,自定义节点 IP ,例如…

android手机可以设置屏幕锁定,安卓手机屏幕锁设置方法(九个点图案)

这里以三星S5368手机屏幕锁为例随着三星S5368手机系统功能愈来愈完善,性能愈来愈强劲,越来越多的三星S5368用户们都喜欢把一些重要的信息甚至隐私放在三星S5368手机里面,但是这就有可能会让别人看到,这样一来你的三星S5368里面的信…

python win10 连接hive_使用win10+python3.5+impyla 连接大数据平台hive表的步骤与问题解决...

环境硬件配置及Hadoop,Hive版本一、安装步骤pip install pure-saslDownloading https://pypi.tuna.tsinghua.edu.cn/packages/16/83/30eaf3765de898083 75a8358f9c15d45a3dd44ed26be991471abc0b4480b/pure_sasl-0.5.1-py2.py3-none-any.whlpip install thrift_sasl0…

python将excel表按地方拆分_Python将一个Excel拆分为多个Excel

本文实例为大家分享了Python将一个Excel拆分为多个Excel的具体代码,供大家参考,具体内容如下 原始文档如下图所示将销售部门一、二、三科分别存为三个Excel 代码如下 # -*- coding: utf-8 -*- """ Created on Mon Jul 9 20:25:31 2018 au…

华为申请注册鸿蒙商标,华为申请“鸿蒙商标”,企业注册商标有什么价值?

原标题:华为申请“鸿蒙商标”,企业注册商标有什么价值?国家知识产权局商标局网站显示,华为已申请“华为鸿蒙”商标。申请日期为2018年8月24日,注册公告日期为2019年5月14日,专用权限期是从2019年5月14日到2…

html5音乐播放器设计论文,基于微信小程序的音乐播放器设计和毕业论文

摘 要随着通信技术的发展和智能设备的普及,移动互联网在近两年发展迅猛,新兴的移动社交软件“微信”逐渐走进了手机用户的生活,深受全国数亿用户的欢迎。随着微信版本的不断更新,微信也从单纯的聊天应用逐变成媒体信息、游戏娱乐…

python后端开发学什么_零基础学Python,这是阿里Python8年开发经验写给你的学习路线图...

今天给大家分享一位前辈整理的一个Python web学习路线。这位前辈由于有编程基础,所以采用了自学Python的方式。学完后主要做后端开发。希望对你有所启发。 整理的一个 python web 学习路线,这基本就是笔者自学后做后端的学习路线。入门基础 编程语言: Py…

如何把meshlab中的圆环去掉_如何设计一座太空城?

整整半个世纪前的今天,1969年7月20日,执行阿波罗11号计划的美国宇航员阿姆斯特朗和奥尔德林登上月球。而同一年,伍德斯托克音乐节的舞台前聚集了几十万名追求和平与爱的青年。在神奇的1969年,人类文明向着更为广袤与深邃的境地突飞…

axure html 360安装扩展,win10系统360浏览器添加Axure扩展的操作方法

win10系统360浏览器添加Axure扩展的操作方法?很多win10用户在使用电脑的时候,会发现win10系统360浏览器添加Axure扩展的的现象,根据小编的调查并不是所有的朋友都知道win10系统360浏览器添加Axure扩展的的问题怎么解决,不会的朋友也不用担心…

电信计算机知识考试,2020中国电信考试试题——专业知识一

1、我国对独立型STP设备要求其信令链路数不得小于( )A、7000MSU/s;B、10000MSU/s;C、14000MSU/s;D、20000MSU/s2、GSM的多址方式为( )A、FDMA; B、TDMA; C、CDMA; D、FDMA-TDMA混合技术3、以下属于被叫控制…

full outer join 与full join的区别_sleep、yield、join都是干啥的? sleep与wait有啥区别?中篇[十五]...

点击上方 “ 布衣码农 ” ,免费订阅~选择“ 设为星标 ”,第一时间免费获得更新~「布衣码农」用不到却又不得不学习了解的底层方法1。Object中的wait、notify、notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等…

npu算力如何计算_异构计算神器来了,它能带来性能革命吗

前言:优化差有多要命?3A大作告诉您说到最近游戏圈子里的热门话题,刚刚在全平台上线的某“国产3A大作”显然绝对值得一提。一方面来说,靠着“抽卡化单机游戏”的设计,以及投入几十万元都难以实现全角色满状态的高氪金程…

画股票图csdn_这个股票今天是要弄啥?

点击上方蓝色字体,关注我们作者 | 四叶草编辑 | 易小投大盘点评今天市场上午走势相对弱势,盘中只有杀出一点点急跌的恐慌盘,有一些盘中的做T机会,但是确定性不是特别高,毕竟盘中的急跌相对幅度有限。下午指数随着一些概…

淮阴工学院计算机学院机房,实验室开放

计算机工程实验中心坚持每天14小时开放(7:30-21:30),在完成基础和专业等实验教学任务外,还承担了各级各类培训及考试、计算机技能实训、工程设计与开发等任务,同事开展了多种形式的社会服务,以及对周边学校的服务。本中心每天坚持…

照片识别出错_云投诉丨四川德阳市民文明手册咋满篇乱码?回应:电脑识别问题,已全部收回...

封面新闻记者 王攀 王祥龙“这是密码吗?”9月23日,有四川德阳市民反映,该市发放的《德阳市民文明手册》看不懂。从市民提供的照片上看,手册内页上全是乱码。当前,德阳市正争创全国文明城市,有市民表示&…