Purdue机器学习入门(五)图像探测
文章目录
图像探测与分割
这部分是我此次学习的初衷,在见识了人工智能中深度学习的强大后,开始思考它们在哪里能够应用。以下图片均来自于 github。
图像探测与分割
如图所示,就是探测图像中存在什么内容,将其识别并标记出其区域。
原理
如何用前几天学的内容做到呢?
流行的图像识别算法
目标探测主流的算法分为两个类型:(1)提取获取关键部位(region proposal),然后对这些部位进行分类与回归,如R-CNN算法;(2)均匀的密集采样,如Yolo和SSD,主要是均匀地在图片的不同位置进行密集抽样,采用不同尺度和长宽比,利用CNN提取特征后进行分类与回归,速度快,但是训练数据量大且不均衡。算法的准确度和速度性能如图所示。
[](ssd_eccv2016_slide.pdf)
事实上,上述分类稍微有些过时了,下面是新一点的算法介绍(到2017年底)
- SSD - “SSD:Single Shot MultiBox Detector”(2016)[arXiv:1512.02325](https://arxiv.org/abs/1512.02325),[github](https://github.com/weiliu89/caffe/tree / SSD)
- DSSD - “DSSD:Deconvolutional Single Shot Detector”(2017)[arXiv:1701.06659](https://arxiv.org/abs/1701.06659)
- RRC - “使用循环滚动卷积的精确单级检测器”(2017)[arXiv:1704.05776](https://arxiv.org/abs/1704.05776),[github](https://github.com/xiaohaoChen/rrc_detection )
- RUN - “用于单级检测的剩余特征和统一预测网络”(2017)[arXiv:1707.05031](https://arxiv.org/abs/1707.05031)
- DSOD - “DSOD:从Scratch学习深度监督的物体探测器”(2017)[arXiv:1708.01241](https://arxiv.org/abs/1708.01241),[github](https://github.com/szq0214/ DSOD)
- BlitzNet - “BlitzNet:用于场景理解的实时深度网络”(2017)[arXiv:1708.02813](https://arxiv.org/abs/1708.02813),[github](https://github.com/ dvornikita / blitznet)
- RefineDet - “用于物体检测的单次细化神经网络”(2017)[arXiv:1711.06897](https://arxiv.org/abs/1711.06897),[github](https://github.com/sfzhang15/ RefineDet)
- DRBox - “使用可旋转边界框学习旋转不变检测器”(2017)[arXiv:1711.09405](https://arxiv.org/abs/1711.09405),[github](https://github.com/liulei01/ DRBox)
- Frustum PointNets - “用于从RGB-D数据进行3D物体检测的Frustum PointNets”(2017)[arXiv:1711.08488](https://arxiv.org/abs/1711.08488)
M-RCNN
- 1.锚定
框出特征区域
- 2.提取
细化提取
- 3.musk生成
生成的掩码并将它们缩放在正确位置的图像上。
- 4.Layer激活
- 5.权重直方图
SSD
- 输入图片到网络,生成一系列feature map
- 在此基础上生成 box,然后将这些 box回归到正确的位置上(一次前向传播就可以完成)。
- 输入 W×H 的feature map,生成均匀分布的 W×H 个box中心,每个中心上,生成多个不同长宽比的 box,如[1⁄3, 1⁄2, 1, 2,3]。一个feature map上可以生成的 box总数是 W×H×不同长宽比数量。
这是在Python 3,Keras和TensorFlow上实现Mask R-CNN。该模型为图像中对象的每个实例生成边界框和分割蒙版。它基于特征金字塔网络(FPN)和ResNet101骨干网。
存储库包括: *基于FPN和ResNet101构建的Mask R-CNN的源代码。 * MS COCO的培训代码 * MS COCO的预训练重量 * Jupyter笔记本可以在每一步都可视化检测管道 *用于多GPU培训的ParallelModel类 *评估MS COCO指标(AP) *您自己的数据集培训示例
代码记录在案,设计易于扩展。如果您在研究中使用它,请考虑引用此存储库(下面的bibtex)。如果您从事3D视觉工作,您可能会发现我们最近发布的Matterport3D数据集也很有用。 该数据集是由我们的客户捕获的3D重建空间创建的,这些客户同意将其公开用于学术用途。您可以在此处查看更多示例。
# 入门 * demo.ipynb是最简单的开始方式。它显示了使用在MS COCO上预训练的模型来分割您自己图像中的对象的示例。 它包括在任意图像上运行对象检测和实例分割的代码。
- train_shapes.ipynb显示了如何在您自己的数据集上训练Mask R-CNN。本笔记本介绍了一个玩具数据集(形状),以演示对新数据集的培训。
*(model.py,utils.py,config.py):这些文件包含主屏蔽RCNN实现。
inspect_data.ipynb。这款笔记本可视化不同的预处理步骤 准备培训数据。
inspect_model.ipynb本笔记本深入探讨了检测和分割对象的步骤。它提供了管道每个步骤的可视化。
inspect_weights.ipynb 这个笔记本检查训练模型的权重,并寻找异常和奇怪的模式。
#逐步检测 为了帮助调试和理解模型,有3个笔记本 (inspect_data.ipynb,inspect_model.ipynb, inspect_weights.ipynb)提供了大量可视化,并允许逐步运行模型以检查每个点的输出。这里有一些例子:
6.登录TensorBoard
TensorBoard是另一个很棒的调试和可视化工具。该模型配置为记录损失并在每个时期结束时保存权重。
6.将不同的部分组合成最终结果
#MS COCO培训
我们为MS COCO提供预先训练的砝码,使其更容易入手。您可以
使用这些权重作为起点来训练您自己在网络上的变化。
培训和评估代码在samples / coco / coco.py
中。你可以导入它
Jupyter笔记本中的模块(请参阅提供的笔记本示例)或您
可以直接从命令行运行它:
``` #从预先训练的COCO重量开始训练新模型 python3 samples / coco / coco.py train –dataset = / path / to / coco / –model = coco
#从ImageNet权重开始训练一个新模型 python3 samples / coco / coco.py train –dataset = / path / to / coco / –model = imagenet
#继续训练您之前训练过的模型 python3 samples / coco / coco.py train –dataset = / path / to / coco / –model = / path / to / weights.h5
#继续训练您训练的最后一个模型。这会找到 #模型目录中最后训练的权重。 python3 samples / coco / coc
文章作者 Jeff Liu
上次更新 2019-03-01