opencv3与tensorflow的关系,各有什么有优缺点?
OpenCV是计算机视觉库,Tensorflow是深度学习框架。OpenCV包含了大量的图像处理和计算机视觉的算法,但是在机器学习方面明显不足,ML模块只有SVM,MLP,kNN等有限的几种算法。dnn模块也是调用别的框架。Tensorflow是专为深度学习而生,可以方便的实现各种深度学习算法。二者不属于同一领域,做视觉用OpenCV,做深度学习用Tensorflow。或者二者结合做图像识别等等。
人工智能:让机器具备人的思维和意识
人工智能三学派:
行为主义:基于控制论,构建感知-动作控制系统(如平衡、行走、避障等)
符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,在再求解表达式。
链接主义:仿生学,模仿神经元连接关系。(模仿神经元链接,如感性思维)
- 用计算机仿出神经元链接关系,让计算机具有感性思维
准备数据:采集大量(特征,标签)构成数据集
搭建网络:搭建神经结构网络
优化参数:训练网络获取最佳参数(反传)
应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传)
通过前项传播输出概率值,概率值最大的一个就是分类和预测的结果
基于计算机视觉的人机交互一般可分为四个部分:
-
有没有人;
-
人在哪;
-
这个人是谁;
-
这个人在做什么;
解决的问题
目标检测 :图片中找到目标的位置,一般输出目标的位置信息
语义分割 :图片中找到目标的位置,一般输出目标的具体形状掩码
人脸识别 :识别出人脸的具体类别(身份、性别年龄等属性)
人体骨骼关键点检测 : 定位人在图像中的位置、人体各个关键点的位置
动作识别 : 检测出图像中的人在哪里,在做什么
行人重识别 : 以人的身体属性识别出人的身份,不需要高的分辨率
步态识别 :以人的身体轮廓信息识别出人的身份,不需要高的分辨率
Tensorflow
张量(Tensor):多维数组(列表) 阶:张量的维数
数据类型
- tf.int , tf.float tf.int 32, tf.float 32, tf.float 64
- tf.bool tf.constant([True,False])
- tf.string tf.constant(“Hellow,world!”)
创建Tensor
- tf.zeros(维度) #创建全为0的张量
- tf.ones(维度) #创建全为1的张量
- tf.fill(维度,指定值) #创建全为指定值的张量
维度
一维 直接写个数
二维 用[行,列]
多维 用[n,m,j,k]
- 生成正态分布随机数,默认均值为0,标准差为1
tf.random.normal(维度,mean=均值,stddev=标准差)
- 生成截断式正态分布的随机数
tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
- 生成均匀分布随机数 [minval,maxval]
tf.random.uniform{维度,minval=最小值,maxval=最大值)
- 强制tensor转换为该数据类型
tf.cast(张量名,dtype=数据类型)
- 计算张量维度上元素的最小值
tf.reduce_min(张量名)
- 计算张量维度上元素的最大值
tf.reduce_max (张量名)
- 计算张量沿着制定维度的平均值
tf.reduce_mean(张量名,axis=操作值)
- 计算张量沿着指定维度的和
tf.reduce_sum(张量名,axis=操作值)
axis =0 沿纵轴方向 =1沿横轴方向
tf.Variable(初始值)
将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。- 对应元素四则运算:tf.add, tf.subtract, tf.multipy, tf.divide
- 平方、次方与开方:tf.square, tf.pow, tf.sqrt
- 矩阵乘: tf.matmaul
- 切分传入张量的第一维度,生成输入特征/标签对,构建数据集
data=tf.data.Dataset.from_tensor_slices((输入特征,标签))
- with结构记录算过程,gradient求出张量的梯度
with tf.GradientTape() as tape:
grad=tape.gradient(函数,对谁求导)
- 将代转换数据转换为one-hot形式的数据输出
tf.one-hot(待转换数据,depth=几分类)
- 先用tf.Variable()定义变量为可训练
w.assign_sub(w要自减内容)
- 返回张量沿指定维度最大值的索引
tf.argmax(张量名,axis=操作轴)
梯度消失:loss回传时由于网络层数过多而逐渐变小,无法更新前项网络。
常用符号:
池化
神经卷积网络
优势:AlexNet能够处理非常相似的基本构造模块,这些单元往往包含大量的隐藏单元和数据;
使用了Relu激活函数