初步接触图像分割领域,跑一个经典的代码看看效果,挖掘灵感
这是2017年CVPR上的工作《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》
ubuntu16下的环境搭建
首先,需要下载以下几个文件:代码链接中的工程文件,deeplab_resnet.ckpt这个训练好的模型参数,VOC2012数据集(其中SegmentationClass需要替换为SegmentationClassAug)。这些东西代码链接中都有,仔细看看。
然后,搭建python2.7下的tensorflow的环境
首先安装anaconda,然后在控制台输入以下命令
conda create -n easytensor27 python=2.7//创建名为easytensor27的虚拟环境
source activate easytensor27 //进入虚拟环境
anaconda search -t conda tensorflow //查看tensorflow的链接
anaconda show anaconda/tensorflow-gpu
conda install --channel https://conda.anaconda.org/anaconda tensorflow-gpu //安装tensorflow
python
source activate easytensor27
pip install -r requirements.txt //进入工程目录下,安装依赖的包
用pycharm打开工程,应用虚拟环境,修改train.py中的三个地方
DATA_DIRECTORY=''中间写数据集存储的地方
load函数中,写上模型参数存储的地方
再根据GPU显存大小,修改一下BATCH_SIZE的大小
即可运行train.py
代码阅读(按照程序运行流程)
-
命令行参数解析
Python标准库推荐使用的命令行参数解析模块——Argparse
- add_argument()方法,用来设置程序可接受的命令行参数。
- 现在要运行程序,就必须设置一个参数(或者有defualt)。
- parse_args()方法实际上从我们的命令行参数中返回了一些数据
args = get_arguments()
-
获取窗口大小
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
h, w = map(int, args.input_size.split(','))
input_size = (h, w)
-
设置graph级别的随机种子
在Graph中,我们通过tf.set_random_seed()函数对该图资源下的全局随机数生成种子进行设置,使得不同Session中的random系列函数表现出相对协同的特征,这就是Graph-Level的表现。
tf.set_random_seed(args.random_seed)
-
数据获取与线程管理
载入数据的教程
首先要知道TensorFlow(TF)是怎么样工作的。
TF的核心是用C++写的,这样的好处是运行快