vieyahn2017 / iBlog

44 stars 0 forks source link

12.5 目标检测之ImageAI #335

Closed vieyahn2017 closed 7 months ago

vieyahn2017 commented 4 years ago

https://github.com/OlafenwaMoses/ImageAI

vieyahn2017 commented 4 years ago

开源项目推荐——ImageAI目标检测

https://blog.csdn.net/weixin_38907560/article/details/81276630

ImageAI A python library built to empower developers to build applications and systems with self-contained Deep Learning and Computer Vision capabilities using simple and few lines of code.

支持网络框架: DenseNet-BC-121-32.h5 inception_v3_weights_tf_dim_ordering_tf_kernels.h5 resnet50_coco_best_v2.0.1.h5 resnet50_weights_tf_dim_ordering_tf_kernels.h5 squeezenet_weights_tf_dim_ordering_tf_kernels.h5 yolo-tiny.h5 yolo.h5

开源地址:https://github.com/OlafenwaMoses/ImageAI

中文手册:https://imageai-cn.readthedocs.io/zh_CN/latest/index.html

vieyahn2017 commented 4 years ago

如何借助ImageAI轻松实现目标检测(只需十行代码)

2018-11-23 10:27:45 Thorrrrrrrrrr 阅读数 559 收藏 更多 分类专栏: 深度学习 图像识别 知乎转载https://www.zhihu.com/question/26483508/answer/447708695 https://blog.csdn.net/sinat_33487968/article/details/84375199

只需10行Python代码,我们就能实现计算机视觉中目标检测。

from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))
for eachObject in detections:
print(eachObject["name"] + " : " + eachObject["percentage_probability"] )

没错,用这寥寥10行代码,就能实现目前AI产品中应用广泛的目标检测技术。

目标检测简介

人工智能的一个重要领域就是计算机视觉,它是指计算机及软件系统识别和理解图像与视频的科学。计算机视觉包含很多细分方向,比如图像识别、目标检测、图像生成和图像超分辨率等。其中目标检测由于用途广泛,在计算机视觉领域的意义最为深远。

目标检测是指计算机和软件系统能够定位出图像/画面中的物体,并识别出它们。目标检测技术已经广泛应用于人脸检测、车辆检测、人流量统计、网络图像、安防系统和无人车等领域。和其它计算机视觉技术一样,目标检测未来会进一步成为人工智能的重要组成部分,有着广阔的发展前景。

不过,在软件应用和系统中使用现代目标检测方法以及根据这些方法创建应用,并非简单直接。早期的目标检测实现主要是应用一些经典算法,比如OpenCV中支持的算法。然而这些算法的表现并不稳定,在不同情况下差异巨大。

2012年深度学习技术的突破性进展,催生了一大批高度精准的目标检测算法,比如R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet和既快又准的SSD及YOLO。使用这些基于深度学习的方法和算法,需要理解大量的数学和深度学习框架。现在全世界有数以百万计的开发者在借助目标检测技术创造新产品新项目,但由于理解和使用较为复杂困难,仍有很多人不得要领。

为了解决这个困扰开发者们的问题,计算机视觉专家Moses Olafenwa带领团队推出了Python库ImageAI,能让开发人员只需寥寥数行代码就能很容易的将最先进的计算机视觉技术应用到自己的项目和产品中。

如何借助ImageAI轻松实现目标检测

使用ImageAI执行目标检测,你只需以下4步: 1.在电脑上安装Python

2.安装ImageAI及其环境依赖

3.下载目标检测模块文件

4.运行示例代码,就是我们展示的那10行

通过该链接下载RetinaNet 模型文件用于目标检测。 https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

到了这里我们已经安装好了所有依赖,就可以准备写自己的首个目标检测代码了。 创建一个Python文件,为其命名(比如FirstDetection.py),然后将如下代码写到文件中,再把RetinaNet模型文件以及你想检测的图像拷贝到包含该Python文件的文件夹里。

vieyahn2017 commented 4 years ago

ImageAI目标检测和resnet50_coco_best_v2.0.1.h5模型文件

2019-06-21 17:09:19 IT_BOY__ 阅读数 672 收藏 更多 分类专栏: 深度学习 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/IT_BOY__/article/details/93205706 最近在学习使用ImageAI库中的目标检测库,有个模型文件官网下载速度让人捉急,动不动就0kb/s,在这里共享一下这个模型文件(resnet50_coco_best_v2.0.1.h5),供大家学习使用。

资源链接: 链接:https://pan.baidu.com/s/1MMwCXRODROFRXwx8k1Ki0g 提取码:epnr

参考博客: 【1】https://blog.csdn.net/github_39611196/article/details/83059057#commentsedit 【2】https://blog.csdn.net/buptgshengod/article/details/80959504

vieyahn2017 commented 4 years ago

基于卷积神经网络的目标检测算法

2017-11-03 21:05:13 Duyuankai1992 阅读数 17719 收藏 更多 https://blog.csdn.net/qq_37879432/article/details/78439712

基于卷积神经网络的目标检测算法

1 滑窗法

滑窗法的思路及其简单,首先需要已经训练好的一个分类器,然后把图片按照一定间隔和不同的大小分成一个个窗口,在这些窗口上执行分类器。如果得到较高的分数分类,就认为是检测到了物体。把每个窗口的分类器都执行一遍,在对得到的分数做一些后处理(非极大值抑制等),最后得到物体对应的区域。

滑动法的效率及其低下。

2 Selective Search

滑动法相当于对一张图片上的子区域进行类似穷举式的搜索。而Selective Search的思路:可能存在物体的区域应该有某些相似和连续的区域。

根据以上的思想,Selective Search采用的是合并的思想。首先用分割算法在图片上产生很多小区域,然后根据这些小区域的相似性进行区域合并。衡量相似性的的标准有颜色,纹理等。最后不断迭代小区域来合并成大区域。最终获得肯能物体的区域方框。

如果你想了解更过,可以参考《Selective Search for Object Recognition》。

有了Selective Search高效的寻找可能物体的方框,那么接个CNN特征提取器,然后做个分类不就相当于检测物体了吗。因此诞生了R-CNN

3 SPP(空间金字塔池化)和ROI(感兴趣区域池化)

R-CNN在识别物体时,需要2000个框,在使用前向传播算法时,速度接收不了。

卷积层有同变性质。我们可以理解为物体通过卷积网络以后,会在语义层的响应位所特有的响应。根据这个思路,我们把图片执行一次卷积神经网络的前向计算,到激活响应的时候。通过某种方式将目标物体所在区域部分的响应图拿出来作为特征给分类器。

这样做对画面内的所有可能的物体的检测就可以共享一次卷积神经网络的前前向计算,从而大大减少了时间。 SPP具体的实现方法:

假设输入的图片中框住小马和人的框是由Selective Search选出来框。那么经过卷积神经网络,得到最后一层输出的n个通道的响应图时,原图像上的两个框也会对应两个区域,这样的区域称作感兴趣区域.

如果可以有一种方式可以把ROI的信息转换成固定维度的向量,那么只要运行一次卷积神经网络的前向计算,所有的ROI都共享同样的响应图。 详细描述:SPP分层将指定区域划分的不同数目。你可以选择划分三个层次,最底层划分为4*4=16个子区域,中间层划分为2x2个子区域,顶层直接对齐进行池化。对于每个通道,每个ROI都生成21维的向量。因为有n个通道,所以每个ROI都成21n的向量

4 Faster R-CNN

SPP用于物体的检测相比R-CNN速度提升不少,但是还有R-CNN的缺点,最明显的就是分阶段训练,不仅麻烦而且物体框回归训练中训练是割裂的,整个参数优化过程不是一致的。限制了精度的提高。

针对上述缺点,R-CNN的作者提出了两点改进。

1)第一点是ROI提取到特征后,把物体的回归和分类这两个任务的loss融合一起训练,相当于端到端的多任务训练。这个任务不在分步骤进行。

2) 把SPP换成了ROI POOLING 这就是FAST R_CNN。

如果你想了解更过有关Fast-R-CNN的更多细节参考ICCV2015年的论文 <>

5 YOLO

YOLO全称YOU ONLY Look once表达的意思只要看一眼就能感知识别的物体。YOLO的基本思想是:把每幅图片划成S*S的格子,以每个格子所在的位置和对应内容为基础来预测:

(1)物体框,包含物体框的中心相对格子中心的坐标(x,y)和物体框的宽w和高h,每个格子来预测B个物体框。 (2)每个物体框是否有物体的置信度,其中当前这个格子如果包含物体,则当前置信度为分数为当前预测的物体框和标注物体框的IOU,否则置信度的分数为0. (3)每个格子预测一共c个类别的概率分数,但是这个分数和物体框的置信分数是不相关的。

综上所述:每个格子需要输出的信息维度为Bx(4+1)+C。在YOLO的论文中B=2,C为voc 2007数据集的类的个数等于20。所以每个格子的预测的信息维度为2x5+20=30.图片里面的格子数为7,最后得到关于物体的预测的张量是一个7x7*30的张量。

论文中操作:首先将图片缩放成一个正方形的图片,论文中采用448*448,然后送到一个卷积神经网路,接着送入两层全连接层,输出的维度正好是49x30.最后49x30的张量中提取出来物体框和类别的预测信息,经过非极大值抑制,就得到最终的物体预测结果。

YOLO检测网络包括24个卷积层和2个全连接层

YOLO就是单纯的的卷积神经网络,把物体检测转换成单纯的回归问题。

6 SSD

SSD全称为 Single Shot multibox Detetor(提出了一种使用单个深层神经网络检测图像中对象的方法),可以在达到实时的时候,任然保持很高的检测的速度。

在SSD的论文中,基于VGG-16的基础模型上在300x300输入分辨率下,得到conv5是38x38的响应图,每个像素上取值K=4,经过进一步的降低采样得到19x19,10x10,5x5的响应图,则每个类别一共得到38x38x4+(19x19+10x10+5x5)x6+(3x3=1x1)x4=8732个默认物体框。

而YOLO,默认配置是448x448的分辨率,最后在7x7的格子中默认预测两个物体框。每个类别一共是7x7x2=98个分类框。

7 YOLO2和 YOLO9000

7.1 YOLO2 YOLO 2采用神经网络结构,有32层。结构比较常规,包含一些卷积和最大池化,其中有一些11卷积,采用GoogLeNet一些微观的结构。其中要留意的是,第25层和28层有一个route。例如第28层的route是27和24,即把27层和24层合并到一起输出到下一层,route层的作用是进行层的合并。30层输出的大小是1313,是指把图片通过卷积或池化,最后缩小到一个1313大小的格。每一个格的output数量是125(525),5是指对每一个1313的小格配有5个边框,25则是指每一个边框输出了25个浮点数。25个是YOLO 2对VOC的结构。VOC一共有20个class,在25个数中,有20个是class的probability,剩下的5个中,有四个表示stx、sty、tw、th,这4个来识别边框的位置和大小,还有一个数是confidence,表示边框预测里有真正的对象的概率。所以一共是1313*125个数。

7.2 YOLO900 YOLO 9000的基本触发是用少量的有检测标注的数据和大量的图像分类数据合并到一块,来互相帮助,产生出可以生成很多类的预测。它可以检测9418个类

如图所示,与之前相比,它的结构简化到24层,第23层是171728269,1717和以前YOLO 2的1313类似,只是把prediction网格变成了1717。然后每个位置有28269(3(4+1+9418)),3是指每一个位置给了三个bounding box,每个bounding box包含有stx,sty,tw,th,confidence和9418个类。给了这些数之后就可以通过WordTree产生所需要的bbox等

参考资料

https://www.leiphone.com/news/201708/7pRPkwvzEG1jgimW.html

http://blog.csdn.net/jideljd_2010/article/details/46682999

http://www.cnblogs.com/zhao441354231/p/5941190.html

https://zhuanlan.zhihu.com/p/25236464 http://blog.csdn.net/liyaohhh/article/details/50614380

http://lib.csdn.net/article/deeplearning/53059

vieyahn2017 commented 4 years ago

卷积神经网络之目标检测总结

2017-07-22 09:02:10 dlphay 阅读数 18229 收藏 更多 分类专栏: DL object detection paper 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/dlphay/article/details/75576882

概述

传统的目标检测任务主要通过人工提取特征模型建立,常用的特征包括:HOG、SIFT、Haar等,特征提取模型之后进行支持向量机或者Adaboost的分类任务,进而得到我们所关注的目标结果。由于特征模型的局限性,我们引入卷积特征,也就是经过卷积神经网络得到的特征信息,包括浅层信息和深层信息,浅层信息指的是:前级的卷积层得到的特征图,感受野更加关注的是图像细节纹理等特征。深层信息包括:后级的卷积层卷积得到的特征图信息,在语义语境方面更加抽象的高层信息。人工神经网络是根据大脑神经突触联接的结构进行信息处理的数学模型,视觉模拟系统通过稀疏编码的方式组合成为合理并且高效的图像处理系统。

参考论文:

《What makes for effective detection proposals?》

《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》 《Region-based Convolutional Networks for AccurateObject Detection and Segmentation》

《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

《You Only Look Once : Unified, Real-Time Object Detection》

《SSD: Single Shot MultiBox Detector》

《YOLO9000: Better, Faster, Stronger》

下面主要针对卷积神经网络的目标检测算法进行总结(包括以下(2)--(6)):

(1) 传统方法(DPM)

(2) R-CNN(卷积特征)

(3) SPP-NET/Fast R-CNN(卷积特征)

(4) Faster R-CNN(卷积特征)

(5) YOLO (v1 & v2)(卷积特征)

(6) SSD(卷积特征)

vieyahn2017 commented 4 years ago

https://blog.csdn.net/caicai2526/article/details/81461508 目标检测 (Object Detection) 算法汇集