目录
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。
注意
我们在我们的本次实验中
4.2.1 代码实现
我们不需要对model.fit*(
因为默认就是用图运算,除非你用eager自定义神经网络 这时候我们才要采取图运算