目录
2.3.1.1spatial pyramind pooling
2.4.3R-CNN、SPPNet、Fast R-CNN效果对比
2.7SSD(Single Shot MultiBox Detector)
2.7.1.4.2localization与confidence
0.1.1项目结构
-
数据采集层:数据标注,数据的存储格式
-
深度模型层:数据预处理,模型一个多GPU训练,得到模型
-
TensorFlow seving进行模型部署 +web后台
-
用户层:网页、小程序,获取识别检测结果
0.1.2项目安排
第一阶段:算法模型
-
PCNN以及相关算法
-
YOLO与SSD
-
算法接口介绍
第二阶段:数据集处理
-
数据集标记格式
-
数据集存储与读取
第三阶段:项目实现
-
数据接口实现
-
模型接口实现
-
训练设备部署逻辑实现
-
TensorFlow serving部署模型
-
Web server+TensorFlow serving Client
-
小程序
1.1图像识别背景
1.1.1图像识别三大任务
-
目标识别:或者说分类、定性目标,确定目标是什么
-
目标检测:定位目标,确定目标是什么及位置
-
目标分别:像素级的对前景与背景进行分类,将背景识别,将背景删除
1.1.2图像识别的发展
-
通用场景
图片识别平台
-
垂直场景
医疗领域:医疗影像的检测
林木产业:模板树种检测识别
1.2什么是目标识别
1.2.1目标检测定义
识别图片中有哪些物体以及物体的位置(坐标位置)
1.2.1.1物体
即图像中存在的物体对象,但是能检测哪些物体会受到人为设定限制
目标检测中能检测出来的物体取决于当前任务(数据集)需要检测的物体有哪些,假设我们目标检测模型的定位是检测动物(牛、羊、猪、狗五种结果),那么模型对任何一张图片输出结果不会输出鸭子、书集等其它类型的结果
1.2.1.2位置
目标检测位置一般有两种格式(左上角一般设置为(0,0))
-
极坐标表示:
xmin,ymin:x,y坐标的最小值
xmax,ymax:x,y坐标的最大值
-
中心点坐标表示:
x_center,y_center:目标检测框架的中心点坐标
w,h:目标检测框的宽、高
1.3目标检测应用场景
1.3.1行业
-
公安行业的应用
公安行业用户的迫切需求是在海量的视频信息中,发现犯罪嫌疑人的线索,人工智能能在视频内容的特征提取、内容理解方面有着天然的优势。可实时分析视频内容,检测运动对象,识别人、车属性信息,并通过网络传递到后端人工智能的中心数据库进行存储
-
农作物的应用
农业中的农作物表面的病虫害识别也需要用到目标检测技术
-
医疗影像检测
人工智能在医学中的应用目前是一个热门话题,医学影像中病变部位的检测和识别对于诊断的自动化 ,提供了优质的治疗具有重要的意义
-
电商行业的应用
电商行业中充满无数的商品,利用检测功能查询相关商品,快速找到用户需要的商品类型或者品牌类别,从而提高电商领域的客户满意度
1.3.2virtualenv介绍及基本使用
1.3.2.1virtualenv介绍
在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而virtualenv就是解决这种情况的,virtualenv通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰,
1.3.2.2virtualenv运行使用
使用pycharm来作为本示例的编辑器,选择python2.7工作环境,新建工程virtualenvDemo,在控制台中输入命令:
virtualenv venv
这时候便会在当前的项目中创建venv文件夹,为当前项目的虚拟python运行环境,
本机此时默认的python环境为python2.7,那么此时创建的虚拟环境就是以python2.7创建的虚拟化环境,如果需要选择一个python解释器来创建虚拟化环境,命令则为:
virtualenv -p /usr/bin/python2.7 venv
1.3.2 .3启用
激活虚拟化环境的命令为:
source venv/bin/activate
激活后,在控制台会有一个带有(venv)的标志,
1.3.2.4安装依赖
在以上完成之后就可以通过命令pip install 来安装python包了,这里安装python包就不需要root权限了,直接就可以安装十分方便。在venv的环境中,使用pip安装的包都不会再是全局性的包,只会在当前的虚拟环境中起作用,避免了污染系统环境。
1.3.2.5退出当前系统环境
在控制台中输入命令deactivate后,就会推出当前的venv虚拟化环境。
1.3.2.6virtualenv其他命令
$ virtualenv [OPTIONS] DEST_DIR 选项: –version 显示当前版本号。 -h, –help 显示帮助信息。 -v, –verbose 显示详细信息。 -q, –quiet 不显示详细信息。 -p PYTHON_EXE, –python=PYTHON_EXE 指定所用的python解析器的版本,比如 –python=python2.5 就使用2.5版本的解析器创建新的隔离环境。 默认使用的是当前系统安装(/usr/bin/python)的python解析器 –clear 清空非root用户的安装,并重头开始创建隔离环境。 –no-site-packages 令隔离环境不能访问系统全局的site-packages目录。 –system-site-packages 令隔离环境可以访问系统全局的site-packages目录。 –unzip-setuptools 安装时解压Setuptools或Distribute –relocatable 重定位某个已存在的隔离环境。使用该选项将修正脚本并令所有.pth文件使用相当路径。 –distribute 使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效要。 –extra-search-dir=SEARCH_DIRS 用于查找setuptools/distribute/pip发布包的目录。可以添加任意数量的–extra-search-dir路径。 –never-download 禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。 –prompt==PROMPT 定义隔离环境的命令行前缀。
Python 3.3 及以上版本自带了 venv 模块,可以用来创建虚拟环境,而不需要安装额外的软件包。你可以在命令行中运行 python -m venv venv
2目标检测算法原理
-
为什么:
1.提高算法基础
2.能够很快上手,熟悉TensorFlow算法啊API的使用
-
目标:能够清晰的记住算法的识别流程,解决某些问题用到的关键技术点
2.1目标检测任务描述
2.1.1目标算法的分类
-
两步走的目标检测:先进行区域推荐,而后进行目标分类(推荐区域+分类)
代表:R-CNN、SPP-net、Faster R-CNN
-
端到端的目标检测:采用一个网络一步到位(一个网络,输入到输出,类别+位置)
代表:YOLO、SSD
2.1.2目标检测任务
2.1.2.1分类原理回顾
-
分类:得出每个类别的概率,比较得到最大概率
-
分类的损失与优化
在训练的时候需要计算每个样本的损失,那么CNN做分类的时候使用softmax函数计算结果,损失为交叉熵损失
常见的CNN模型
AlexNet、VGG、 GoodLeNet、 ResNet
-
当图片中有一个物体的时候:分类+定位
分类:准确率
定位:loU = Area of Overlap/Area of Union
目标的位置框:专业(Bounding Box)
两种BX:Grounding-truth bounding box:图片当中真实标记的值
Predicted bounding box:预测的时候标记的值
-
多个物体:目标检测
2.1.2.2检测的评价指标
任务:检测和定位
description:在输入图片中找出存在的物体类别和位置(可能存在多种物体)
输入:图片
输出:类别标签和位置
评价标准:LoU、mAP
2.1.3目标定位的简单实现
回归位置
全连接层,即为FC1,FC2
FC1:作为类别的输出
FC2:作为这个物体位置数值的输出
假设十个类别,一个物体,输出p1、p2、p3.....然后输出这一个对象的四个位置信息,同理知道要网络输出什么,如何衡量网络的损失
对于分类的概率,还是要使用交叉熵损失
位置信息具体的数值,可使用MSE均方误差损失(L2损失)
位置数值的处理:
对于输出的位置信息是四个比较大的像素大小值,在回归的时候不合适,目前统一的做法是,每个位置除以图片本身像素大小
预测:300 200 100 200(前两个数值为中心点坐标,后面为长宽)
真实:310 200 130 200
x=x/x_image.y/y_image.w/y_image.h/x_image.h/y_image
2.2R-CNN
图片中存在多个物体的时候,网络输出多个不确定,全连接层回归输出的坐标
2.2.1目标检测 Overfeat模型
从左到右,从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口,即把图片变成每张图片输出类别及位置,变为分类问题,需要提前设置K个窗口,每个窗口提取M个,总共是KM个图片
暴力穷举法的方式,会消耗大量的计算力量,并且由于窗口大小的问题可能会造成效果不准确,但提供了一种解决目标检测问题的思路