zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Tensorflow入门与实战学习笔记(十二)-图像定位

定位笔记学习入门 实战 图像 Tensorflow 十二
2023-09-11 14:20:00 时间

目录

1 图像定位的理论知识

1.1 常见的图像处理任务

(1)分类

(2)分类+定位

(3)语义分割

(4)目标检测

(5)实例分割

2 图像定位

2.1 分类+回归模型的神经网络架构

2.2 训练集解析

2.3 创建管道

2.4 模型定位与创建

2.5 预测结果

2.6 模型的定位与预测

3 图像定位的优化、评价和应用简介

3.1 图片定位的优化

1、先大后小

2、滑动窗口的方式

3、针对不定个数的预测问题:

4、尝试使用全卷积网络,去掉全链接层,变回归为分类问题

3.2 图像定位的评价

3.3 图像定位的应用

4 补充知识

4.1 GPU使用于分配

4.1.1 获取当前主机上运算设备的列表

4.1.2 设置显卡的使用策略

4.2 自动图运算

4.2.1 代码实现


1 图像定位的理论知识

1.1 常见的图像处理任务

(1)分类

我们常见的分类问题,这也是核心以及基础

图像和位置数据的解析和可视化

(2)分类+定位

(3)语义分割

区分到图中每一个点像素点,而不仅仅是矩形框框住

(4)目标检测

目标检测简单来说就是回答图片里面有什么?分别在哪里(把他们用矩形框住)

常见的有F-CNN

(5)实例分割

实例分割是目标检测+语义分割的结合。

相对目标检测的边界框实例分割可精确到物体边缘

相对于语义分割,实例分割需要标注出图上同个物体的不同个体

接下来我们先从简单的入手-图像定位

2 图像定位

对于单纯的分类问题,比较容易理解,给定一幅图片,我们输出一个标签类别,我们已经跟很熟悉

而定位有点负责,需要输出四个数字(x,y,w,h),图像中某一个点的坐标(x,y),以及图像的高度和宽度

有了这四个数字,我们就可以找到物体边框

2.1 分类+回归模型的神经网络架构

是一个监督问题,我们采用XCEPTION 进行

我们采用Oxford-IIIT数据集,包含37种宠物,每种宠物200张

2.2 训练集解析

我们选用的数据集有猫的图片以及头像的位置(xml)

考虑到每张图片的大小不一样,因为这个红框的位置和我们的图片大小有关,我们需要进行等比放缩

2.3 创建管道

2.4 模型定位与创建

2.5 预测结果

2.6 模型的定位与预测

模型保存:model.save(detect_v1.h5) 以及读取模型与前面一章类似

利用训练好的模型,我们来查看我们的预测结果

我们的实验只做下面这一部分

3 图像定位的优化、评价和应用简介

预测图像位置本质上是一个回归问题,直接回归出位置,有两个缺点:

1、回归位置不准确---利用坐标不精确

2、泛化能力不好---如果前景和背景非常类似图片做测试,泛化能力不好

3、目前算法只能预测单个实例(这个不算缺点)---这里只是为了说明如果多个头像在一张图片上则无法识别

3.1 图片定位的优化

1、先大后小

现在整个图片预测出关键点,然后再在预测出的关键点周边,进行二次预测

2、滑动窗口的方式

用一个小的窗口在图片上滑动,每一次做两个预测

  • 是否有关键点
  • 关键点位置

3、针对不定个数的预测问题:

可以先检测多个对象,再在多个对象上分别回归出位置

4、尝试使用全卷积网络,去掉全链接层,变回归为分类问题

3.2 图像定位的评价

可以使用IOU来评价图像定位的精度

IoU的全称为交并比(Inersection over Union

IoU计算的是“预测的边框”和“真实的边框”交集和并集比值

因此取值在[0,1 ]之间

3.3 图像定位的应用

比如这里有14个点,我们就可以得到其姿态

先评估关键点,再组合关键点,这是一个研究的方向,感兴趣可以深研

4 补充知识

4.1 GPU使用于分配

4.1.1 获取当前主机上运算设备的列表

设置当前程序可见的设备范围

注意:

4.1.2 设置显卡的使用策略

默认情况下,tf将使用几乎所有可用的显存,以避免内存碎片化所带来的性能损失

TF提供了两种灵活控制显存的方法

1、仅在需要的时候申请

2、限制消耗固定大小的显存  

4.2 自动图运算

TF 2.0汇集了eager模式的简易性和TF 1.0的强大图运算功能。这个合并的核心是tf.function。

注意:
如果代码了使用多个函数,则无需对它们进行全部装饰。
 
@tf.function装饰器使用静态编译将函数内的代码转换成计算图
小结:
 

注意

我们在我们的本次实验中

4.2.1 代码实现

我们不需要对model.fit*(

因为默认就是用图运算,除非你用eager自定义神经网络 这时候我们才要采取图运算