用TensorFlow和TF-Slim实现图像分类与分割
Tensorflow and TF-Slim | Jun 5, 2017
author : Xie Zhongzhao
原文地址: Image Classification and Segmentation with Tensorflow and TF-Slim
- Google的Tensorflow是一个偏底层的库,实际使用时开发人员需要编写大量的代码,阅读他人的代码也很费劲,因此大家早就需要这样一个简洁的库。而slim非常干净,用预训练的模型对Tensorflow做了轻量级的封装。
- Tensorflow的网站上有卷积神经网络的教程
1. 环境准备
import sys
import os
'''
(1)指定tensorflow使用第一块GPU,否则tensorflow默认会占用所有可用的内存资源
(2)添加克隆下来的代码路径,这样Python执行的时候就能找到需要的代码
'''
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
sys.path.append("/home/xzz/code/python_tensorflow/models-master/slim")
'''
下载VGG-16模型,我们采用它来对图像做分类和分割,也可以选用其他占用内存较少的网络模型
(例如,AlexNet)
'''
from datasets import dataset_utils
import tensorflow as tf
url = "http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz"
# 指定保存路径
checkpoints_dir = '/home/xzz/code/python_tensorflow/VGG-16'
if not tf.gfile.Exists(checkpoints_dir):
tf.gfile.MakeDirs(checkpoints_dir)
dataset_utils.download_and_uncompress_tarball(url, checkpoints_dir)
>> Downloading vgg_16_2016_08_28.tar.gz 100.0%
Successfully downloaded vgg_16_2016_08_28.tar.gz 513324920 bytes.
2. 图像分类
(1)我们刚刚下载的模型可以将图像分成1000类。类别的覆盖度非常广。在本文中,我们就用这个预训练的模型来给图片分类、标注和分割,映射到这1000个类别。
(2)下面是一个图像分类的例子。图像首先要做预处理,经过缩放和裁剪,输入的图像尺寸与训练集的图片尺寸相同。
%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
import os
import tensorflow as tf
import urllib2
from datasets import imagenet
from nets import vgg
from preprocessing import vgg_preprocessing
checkpoints_dir = '/home/xzz/code/python_tensorflow/VGG-16'
slim = tf.contrib.slim
# 网络模型的输入图像有默认的尺寸