deeplab v3+在pascal_voc 2012数据集上进行训练

2024-02-02 03:48

本文主要是介绍deeplab v3+在pascal_voc 2012数据集上进行训练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

前边我曾经写了一篇名为《语义分割之deeplab v3+ 》的文章,在那篇文章中我主要讲了deeplab v3+的原理--当然主要也就是论文上边的内容。因此在开始阅读本篇文章之前,建议首先阅读一下上边那篇文章。

本文我主要讲环境搭建以及pascal_voc_2012的训练以及可视化相关的内容。关于deeplab v3+迁移学习部分的内容--即如何使用deeplab v3+训练自己的个人数据,我后续后单独写一篇文章来讲。好,话不多少,我们下边正式开始。

环境搭建

关于环境搭建部分,其实官方给了一些说明,感兴趣可以参考官方说明《Installation》。虽然说官方给了环境搭建的 指南,但是某些细节部分它并没有具体进行说明,因此如果我们只是一味按照官方说明来搭建环境的话,中间也可能会出现这样或者那样的问题。因此,在该部分我会以官方的指南作为主体,结合自己在搭建环境过程中的一些细节问题,来记录deeplab v+环境搭建的整个过程。

第一步 创建python环境

使用conda创建python环境,应该是我们复现算法的时候必须先做的一步。通过conda创建的新环境我们事先和本地环境的隔离,可以更摆弄各种变量(😄 )。

关于conda安装的部分内容,我这里就不在进行详述,网上有许多相关的教程。在这里我就简单说一下如何使用conda创建满足deeplab v3+算法运行的基础环境。

执行如下命令,创建python3.6基础环境:

conda create -n deeplab python=3.6
  • 其中 -n后边的参数指的是环境的名称,此处我使用的是deeplab,你可以换成任意你喜欢的名称。
  • 等号后边的3.6指的是创建python环境的版本,此处建议使用python3.6(因为我之前使用3.7总出现各种各样的错误)。

执行完成之后会出现如下执行结果

image-20200822142651277

输入y之后基础环境就创建完成。

然后通过命令

conda activate deeplab

进入到刚刚创建的名字为deeplab的环境中。

执行的结果如下:

image-20200822142908385

从图中我们可以看到执行完成之后,括号里边的名称由base变成了环境名称(deeplab)。

至此python的基础环境搭建完成。

第二步 安装依赖

  • Numpy
  • Pillow 1.0
  • tf Slim (which is included in the "tensorflow/models/research/" checkout)
  • Jupyter notebook
  • Matplotlib
  • Tensorflow(建议使用1.14,不推荐使用2.0以上版本,否则后边总出各种问题)

安装TensorFlow

执行如下命令(二选一):

# 使用cpu版本
pip install tensorflow==1.14
# 使用GPU版本
pip install tensorflow-gpu

安装python依赖库(安装默认版本即可)

sudo apt-get install python-pil python-numpy
pip install --user jupyter
pip install --user matplotlib
pip install --user PrettyTable

第三步 设置python的依赖路径

由于官方给的deeplab代码是在一个TensorFlow的model库中,因此它的代码使用了一些其他位置的代码文件。如果不进行环境变量的设置,在运行的过程中会报“slim模块或者deeplab模块找不到的错误”。因此我们需要执行如下命令对代码所用的依赖路径进行设置:

#进入代码的research目录里边
cd ~/models/research
# 将slim以及deeplab目录添加到python的依赖环境目录中
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim:`pwd`/deeplab

首先执行命令之前必须要保证在代码的research目录中。

接着我们执行如下命令,来对环境进行测试,看环境是否已经满足要求。

# 进入/research/deeplab目录下
cd ~/models/research/deeplab
# 执行model_test.py
python model_test.py

如果执行过程中没有出现错误或者异常,并且最终出现如下结果,则证明基础环境搭建成功。

image-20200822145944720

训练与可视化

在前边,我们基础环境搭建完成之后,我们便可以进行训练以及可视化操作。由于pascal voc 2012是官方认定的测试集之一,因此官方给了一个脚本,直接运行之后,可以自动下载预训练权重,训练,评估,以及对结果进行可视化等一系列步骤。

执行命令如下:

#在tensorflow/models/research/deeplab目录下执行
bash local_test.sh

执行完成之后我们进入deeplab/datasets目录下

image-20200822150559321

我们发现多了一个名为pascal_voc_seg的目录,该目录里面包含了pascal端原始数据集、预训练权重、导出的checkpoint文件、以及训练结果等。

下边我们对其常用的目录进行一些说明

tfrecord

目录名称含义
exp结果文件夹,包含训练后的权重、评估的结果、可视化后的图片等
init_models下载的预训练权重位置
tfrecord转换成的tfrecord文件所在目录
VOCdevkitpascal voc 2012原本的数据集

总结

本文主要写了关于deeplab v3+使用pascal voc 2012数据集进行训练的过程,并且在官方文档的基础结合自己在训练过程中所踩的坑来写了这篇文章。希望能给那些训练deeplab v3+模型的伙伴以帮助

扩展

同时我们学习一个模型之后,进行迁移学习可能也是一个必不可少的环节。因此在后续我也写一篇关于如何使用deeplabv3+训练自己数据集的文章--《deeplab v3+训练个人数据集》,欢迎诸位阅读、批评与指正。

引用

  • https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/installation.md

这篇关于deeplab v3+在pascal_voc 2012数据集上进行训练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669380

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)