基于深度学习的自动检测与语义图像分割

deeposlandia的Python项目详细描述



在本项目中,我们使用[mapillary]提供的一组图像(https://www.mapillary.com/)来调查一些典型街道场景对象(车辆、道路、
行人……)的存在。Mapillary于2017年7月发布了这个数据集,它可以[在其网站上](https://www.mapillary.com/dataset/vistas)
,并且可以免费下载用于研究目的。

作为输入,Mapillary在"图像"存储库中提供了一组不同大小的街道场景图像。以及在
"实例"和"标签"存储库中过滤后的相同图像。后者至关重要,因为过滤后的
图像实际上是由一组缩减颜色中的像素组成的。实际上,
每种对象类型有一种颜色;总共有66种对象类型。

![图像示例,带过滤版本](./images/mvd_m2kh24n9c72sico990uew.png)


训练集中有18000个图像,验证集中有2000个图像,
测试集中有5000个图像。该测试集仅用于
模型测试,不包含图像的过滤版本。

为了完成该项目,使测试更容易,还可以使用随机生成的形状模型。在这个数据集中,一些简单的彩色几何图形被插入到每张图片中,
在完全随机模式下。每个图像可以有一个矩形、一个圆和/或一个三角形,或者两者都不能。它们在每个图像中的位置是随机生成的(它们不能太靠近图像边界)。形状和背景颜色也是随机生成的。


下面的图片显示了这样生成的图像示例:

![形状图像示例](./images/shape_.png)

在[oslandia blog](http://oslandia.com/en/blog/)上发布了关于这个主题的
+[deeposlandia](./deeposlandia)包含了主要的python模块来训练和测试卷积
神经网络
+[images](./images)也包含了一些示例图像来说明mapillary数据集。正如
一些预处理分析结果
+[笔记本](./笔记本)包含一些jupyter笔记本,这些笔记本旨在描述数据或基本的
神经网络结构
+[测试](./测试)包含一些测试模块,以保证一堆代码片段的功能;
` pytest`框架。

运行代码可能会在数据存储库中生成额外的子目录。

+pil
+tensorflow

作为注释,该代码已使用python3(版本3.5)运行。这些依赖项在
`setup.py`文件中调用,开发目的的附加依赖项列在
`requirements-dev.txt`.

安装-r requirements-dev.txt
```

在进行任何神经网络训练之前,必须生成原始mapillary数据集的预处理版本:

````
python deeposlandia/datagen.py-d mapillary-s 224-a-p./any data path-t 18000-v 2000-t 5000
```

基于Mapillary数据集的图像。原始
数据集必须位于`./any data path/input`。如果指定了"-a"参数,则预处理的
数据集将存储在`./any data path/preprocessed/224_aggregated`,否则将
存储在`./any data path/preprocessed/224_full`。该聚合应用于数据集标签,
可按mapillary大小写分组(且仅限mapillary大小写),以将其数目从65个减少到11个。

此外,预处理的数据集可能包含的图像比原始数据集少:t `,`-v`
和"-t"参数分别指训练、验证和测试图像数量。作为示例显示的
数量与原始数据集大小相对应。


在shapes数据集的情况下,此预处理步骤将从头生成一堆图像。

出现在预处理的数据集中)。

512*512地图图像将从训练特征检测
模型中得到利用。在这里,训练将进行五个阶段。在培训结束时,总是要进行推理步骤。


这里是这个程序处理的参数:
+`-a`:聚合标签(*例如.*car`、`truck`或`caravan`…)在"车辆"标签中;如果应用于"形状"数据集,则不执行任何操作。
+`-b`:指示批大小(每个训练批的图像数,默认为50个)。
+`-d`:数据集(mapillary或"形状")。
+`-d`:训练过程中丢失的神经元百分比。默认值为1.0,无脱落。
+`-e`:历元数(一个历元表示扫描每个训练图像)。默认值=0,
模型未经过训练,从上次训练的模型开始推理。
+`-h`:显示帮助消息。
+`-ii`:测试图像数(根据Mapillary数据集,默认值为5000)。
+`-it`:训练图像数(默认值为18000,根据mapillary数据集)。
+`-iv`:验证图像数(根据mapillary数据集,默认为2000个)。
+`l`:开始学习速率。默认值为0.001。
+`L`:学习率衰减(根据[ADAM优化器定义](https://keras.io/optimizers/adam))。默认为1e-4。
+`-m`:考虑到研究问题,要么是"特征检测"(确定图像上是否有标记的对象)要么是"语义分割"(对图像的每个像素进行分类)。
+`-n`:神经网络架构,要么是"简单"(默认值),要么是"vgg16"特征
检测问题,"simple"是语义分割的唯一处理架构。
+`-n`:神经网络名称,用于检查点路径命名。默认为"cnn"。
+`-p`:文件系统上数据集的路径。默认为`./data`.
+`-s`:图像大小,以像素为单位(高度=宽度)。默认值为256。

模型测试

经过训练的模型可以在训练过程之后进行测试。模型训练完成后,检查点结构将记录在`<;datapath>;/<;dataset>;/output/<;problem>;/检查点/<;instance name>;`。这是
推理的关键点。

对于
功能检测案例中的"shapes"数据集。默认情况下,通过假设已生成优化模型(例如有关超参数的*
),将在
`<;datapath>;/<;dataset>;/output/<;problem>;/checkpoints/`'中恢复训练模型。如果指定了超参数(训练批
大小、辍学率、st学习率、学习率衰减、模型结构甚至模型名称),知道图像大小是由第一个测试图像给定的,训练后的模型在`<;datapath>;/<;dataset>;/output/<;problem>;/checkpoints/<;instance>;/`,其中`<;实例>;`is
定义为:

```
<;模型名称>;-<;图像大小>;-<;网络结构>;-<;批量大小>;-<;聚合模式>;-<;退出>;-<;启动<;lr>;-<;lr衰变>;
```

标签预测是从头开始的
(而且会相当不准确……。

已处理参数的列表如下:
+`-a`:聚合标签。用于指出精确的配置文件,以便获取数据集中的
标签数。
+`-b`:训练图像批大小。默认为"无"(目的是识别训练模型)。
+`-d`:数据集(mapillary或shapes)
+`-d`:训练过程中丢失的神经元百分比。默认为"none"(用于
识别训练模型)。
+`-i`:测试图像的路径,可以处理用于多图像选择的regex。
+`l`:开始学习速率。默认为"none"(目的是识别经过训练的模型)。
+`l`:学习率下降(根据[adam优化器定义](https://keras.io/optimizers/\adam))。默认为"无"(目的是识别经过训练的模型)。"特征检测"(确定图像上是否有标记的对象)或"语义分割"(对图像的每个像素进行分类)。
+`-n`:训练的模型神经网络结构。默认为"none"(目的是识别经过训练的
模型)。
+`-n`:神经网络名称。默认为"none"(目的是识别经过训练的模型)。
+`-p`:文件系统上数据集的路径。默认为`./data`.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置