keras-fcn
所属分类:人工智能/神经网络/深度学习
开发工具:Python
文件大小:1153KB
下载次数:14
上传日期:2018-09-11 16:13:35
上 传 者:
Ryo
说明: 利用keras编程实现语义分割经典模型FCN
(Using keras programming to realize semantic segmentation classical model FCN)
文件列表:
keras-fcn\.travis.yml (2286, 2018-07-28)
keras-fcn\data\VOC2011 (40, 2018-07-28)
keras-fcn\data\VOC2012 (40, 2018-07-28)
keras-fcn\fcn_vgg16.png (127772, 2018-07-28)
keras-fcn\keras_fcn\backend\common.py (1306, 2018-07-28)
keras-fcn\keras_fcn\backend\tensorflow_backend.py (254, 2018-07-28)
keras-fcn\keras_fcn\backend\__init__.py (548, 2018-07-28)
keras-fcn\keras_fcn\blocks.py (7561, 2018-07-28)
keras-fcn\keras_fcn\callbacks.py (1265, 2018-07-28)
keras-fcn\keras_fcn\decoders.py (4183, 2018-07-28)
keras-fcn\keras_fcn\encoders.py (6171, 2018-07-28)
keras-fcn\keras_fcn\layers.py (5953, 2018-07-28)
keras-fcn\keras_fcn\losses.py (665, 2018-07-28)
keras-fcn\keras_fcn\metrics.py (815, 2018-07-28)
keras-fcn\keras_fcn\models.py (3321, 2018-07-28)
keras-fcn\keras_fcn\__init__.py (70, 2018-07-28)
keras-fcn\LICENSE (1086, 2018-07-28)
... ...
# keras-fcn
[![Build Status](https://travis-ci.org/JihongJu/keras-fcn.svg?branch=master)](https://travis-ci.org/JihongJu/keras-fcn) [![codecov](https://codecov.io/gh/jihongju/keras-fcn/branch/master/graph/badge.svg)](https://codecov.io/gh/jihongju/keras-fcn)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
A re-implementation of Fully Convolutional Networks with Keras
## Installation
### Dependencies
1. [keras](https://keras.io/#installation)
2. [tensorflow](https://www.tensorflow.org/install/)
### Install with `pip`
```bash
$ pip install git+https://github.com/JihongJu/keras-fcn.git
```
### Build from source
```bash
$ git clone https://github.com/JihongJu/keras-fcn.git
$ cd keras-fcn
$ pip install --editable .
```
## Usage
### FCN with VGG16
```python
from keras_fcn import FCN
fcn_vgg16 = FCN(input_shape=(500, 500, 3), classes=21,
weights='imagenet', trainable_encoder=True)
fcn_vgg16.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
fcn_vgg16.fit(X_train, y_train, batch_size=1)
```
### FCN with VGG19
```python
from keras_fcn import FCN
fcn_vgg19 = FCN_VGG19(input_shape=(500, 500, 3), classes=21,
weights='imagenet', trainable_encoder=True)
fcn_vgg19.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
fcn_vgg19.fit(X_train, y_train, batch_size=1)
```
### Custom FCN (VGG16 as an example)
```python
from keras.layers import Input
from keras.models import Model
from keras_fcn.encoders import Encoder
from keras_fcn.decoders import VGGUpsampler
from keras_fcn.blocks import (vgg_conv, vgg_fc)
inputs = Input(shape=(224, 224, 3))
blocks = [vgg_conv(***, 2, 'block1'),
vgg_conv(128, 2, 'block2'),
vgg_conv(256, 3, 'block3'),
vgg_conv(512, 3, 'block4'),
vgg_conv(512, 3, 'block5'),
vgg_fc(4096)]
encoder = Encoder(inputs, blocks, weights='imagenet',
trainable=True)
feat_pyramid = encoder.outputs # A feature pyramid with 5 scales
feat_pyramid = feat_pyramid[:3] # Select only the top three scale of the pyramid
feat_pyramid.append(inputs) # Add image to the bottom of the pyramid
outputs = VGGUpsampler(feat_pyramid, scales=[1, 1e-2, 1e-4], classes=21)
outputs = Activation('softmax')(outputs)
fcn_custom = Model(inputs=inputs, outputs=outputs)
```
And implement a custom Fully Convolutional Network becomes simply define a series of convolutional blocks that one stacks on top of another.
### Custom decoders
```python
from keras_fcn.blocks import vgg_upsampling
from keras_fcn.decoders import Decoder
decode_blocks = [
vgg_upsampling(classes=21, target_shape=(None, 14, 14, None), scale=1),
vgg_upsampling(classes=21, target_shape=(None, 28, 28, None), scale=0.01),
vgg_upsampling(classes=21, target_shape=(None, 224, 224, None), scale=0.0001)
]
outputs = Decoder(feat_pyramid[-1], decode_blocks)
```
The `decode_blocks` can be customized as well.
```python
from keras_fcn.layers import BilinearUpSampling2D
def vgg_upsampling(classes, target_shape=None, scale=1, block_name='featx'):
"""A VGG convolutional block with bilinear upsampling for decoding.
:param classes: Integer, number of classes
:param scale: Float, scale factor to the input feature, varing from 0 to 1
:param target_shape: 4D Tuples with targe_height, target_width as
the 2nd, 3rd elements if `channels_last` or as the 3rd, 4th elements if
`channels_first`.
>>> from keras_fcn.blocks import vgg_upsampling
>>> feat1, feat2, feat3 = feat_pyramid[:3]
>>> y = vgg_upsampling(classes=21, target_shape=(None, 14, 14, None),
>>> scale=1, block_name='feat1')(feat1, None)
>>> y = vgg_upsampling(classes=21, target_shape=(None, 28, 28, None),
>>> scale=1e-2, block_name='feat2')(feat2, y)
>>> y = vgg_upsampling(classes=21, target_shape=(None, 224, 224, None),
>>> scale=1e-4, block_name='feat3')(feat3, y)
"""
def f(x, y):
score = Conv2D(filters=classes, kernel_size=(1, 1),
activation='linear',
padding='valid',
kernel_initializer='he_normal',
name='score_{}'.format(block_name))(x)
if y is not None:
def scaling(xx, ss=1):
return xx * ss
scaled = Lambda(scaling, arguments={'ss': scale},
name='scale_{}'.format(block_name))(score)
score = add([y, scaled])
upscore = BilinearUpSampling2D(
target_shape=target_shape,
name='upscore_{}'.format(block_name))(score)
return upscore
return f
```
## Try Examples
1. Download [VOC2011](http://host.robots.ox.ac.uk/pascal/VOC/voc2011/) dataset
```bash
$ wget "http://host.robots.ox.ac.uk/pascal/VOC/voc2011/VOCtrainval_25-May-2011.tar"
$ tar -xvzf VOCtrainval_25-May-2011.tar
$ mkdir ~/Datasets
$ mv TrainVal/VOCdevkit/VOC2011 ~/Datasets
```
2. Mount dataset from host to container and start bash in container image
From repository `keras-fcn`
```bash
$ nvidia-docker run -it --rm -v `pwd`:/root/workspace -v ${Home}/Datasets/:/root/workspace/data jihong/keras-gpu bash
```
or equivalently,
```bash
$ make bash
```
3. Within the container, run the following codes.
```bash
$ cd ~/workspace
$ pip setup.py -e .
$ cd voc2011
$ python train.py
```
More details see source code of the example in [Training Pascal VOC2011 Segmention](https://github.com/JihongJu/keras-fcn/blob/master/voc2011/train.py)
### Model Architecture
FCN8s with VGG16 as base net:
![fcn_vgg16](fcn_vgg16.png)
### TODO
- Add ResNet
近期下载者:
相关文件:
收藏者: