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

YOLOV4对象检测

YOLOV4对象检测算法综述:

COCO 模型上的检测数据

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

加权残差连接(WRC)

跨阶段部分连接(CSP)

跨小批量标准化(CmBN)

自对抗训练(SAT)

Mish激活

马赛克数据增强

CmBN

DropBlock正则化

CIoU Loss

对象检测

模型中的名词

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

架构选择

架构选择

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

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

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

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

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

YOLOv4的架构:

  • backbone:CSPResNext50

  • additional block:SPP-block

  • path-aggregation neck:PANet

  • heads:YOLOv3的heads

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

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

Mosaic法和Self-AdversarialTraining

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

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

SAM,PAN

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

python+opencv 实现YOLOV4

python+opencv 实现YOLOV4

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

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

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

YOLOV4 图片识别

模型初始化

import numpy as npimport 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参数

代码截图

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

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的检测时间

代码截图

遍历检测结果

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 = []

代码截图

通过以上代码便实现了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)

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

代码截图

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

YOLOV4

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

下期预告

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

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

  1. python包裹和运费_这个Python库真的太好用了,10行代码就能轻松搞定目标检测

    目标检测是指计算机和软件系统对图像或场景中的目标进行定位和识别的任务. 目标检测已广泛应用于人脸检测.车辆检测.人流量统计.网络图像.安防系统和无人驾驶等多个领域. 早期目标检测的实现基于经典算法,比 ...

  2. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现

    继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装, ...

  3. python图色检测_利用python打开摄像头及颜色检测方法

    最近两周由于忙于个人项目,一直未发言了,实在是太荒凉了....,上周由于项目,见到Python的应用极为广泛,用起来也特别顺手,于是小编也开始着手学习Python,-下面我就汇报下今天的学习成果吧 小 ...

  4. python在线搭建教程_理解python web开发,轻松搭建web app!

    大家好,今天分享给大家的是理解python web开发,轻松搭建web app,希望大家学有所获! 因为 python代码的优雅美观且易于维护这一特点,越来越多的人选择使用 Python做web开发. ...

  5. python实现目标识别眼镜_用Python快速实现YOLO目标检测

    文章也同步更新到微信公众号:R语言和Python学堂想获取本文完整代码和数据的下载链接,可关注微信公众号"R语言和Python学堂",并回复发文日期"20181223&q ...

  6. python的ai写作_使用Python创建AI比你想象的轻松

    可能对AI领域,主要开发阶段,成就,结果和产品使用感兴趣.有数百个免费源和教程描述使用Python的AI.但是,没有必要浪费你的时间看他们.这里是一个详细的指南,你需要知道在使用Python构建人工智 ...

  7. python画交互式地图_使用Python构建交互式地图-入门指南

    python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...

  8. python大数据免费_用python做大数据

    不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...

  9. python实现数据恢复软件_恢复python

    centos 7 python2.7.5升级到3.5.2 centos 7 python2.7.5升级到3.5.2 下载python3.5.2 wget https://www.python.org/ ...

最新文章

  1. 百度paddle学习笔记
  2. 基于tcp协议的socket
  3. 架设nagios+rrdtool+pnp4nagios监控windows主机
  4. Mybatis 一对多 结果集映射 简单入门 易懂
  5. 用纯css来实现一个优惠券
  6. 循环buffer的实现_Go并发编程-Channel的设计实现
  7. pmp考试有题库么?
  8. f分布表完整图a=0.01_SQL数据库完整性
  9. 卡内基梅隆大学计算机专业系,卡内基梅隆大学计算机
  10. 《人工智能及其应用》练习题
  11. C语音:输入两个整数,要求输出其中值较大者。要求用函数来找到大数。
  12. R语言开发之EXCEL文件的读写操作了解下
  13. win7系统安装高版本node
  14. Collections.sort对List排序的两种方法
  15. NEON优化:软件性能优化、降功耗怎么搞?
  16. oracle怎么取绝对值,Oracle数值处理函数 (绝对值、取整...)
  17. 985高校大数据专业教学究竟怎么样?在校生有话说
  18. 使用这45个小技巧,帮助你写出更优雅的代码
  19. 致第一次安装RIME的你
  20. 强化学习 五子棋算法

热门文章

  1. centOS 搭建pipelineDB docs
  2. 超出内容用省略号替代
  3. MFC关键技术-消息映射机制
  4. Leetcode--738. 单调递增的数字
  5. java.lang.math.trunc,java – JPA/Hibernate返回BigDecimal不长
  6. 收件服务器主机名未响应,邮箱收件服务器主机名是什么
  7. linux脚本 scp 管道,scp命令详解(全)
  8. python 笔记本_Python笔记本
  9. excel进销存管理系统_【实例分享】勤哲Excel服务器做企业进销存财务管理系统...
  10. keras.metrics中的accuracy