Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
seminar-breakout
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shashank Suhas
seminar-breakout
Commits
fbfc8413
Commit
fbfc8413
authored
Jan 09, 2019
by
Yuxin Wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update docs about augmentor and tfutils
parent
7bf5581a
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
108 additions
and
30 deletions
+108
-30
docs/modules/dataflow.imgaug.rst
docs/modules/dataflow.imgaug.rst
+26
-0
docs/modules/tfutils.rst
docs/modules/tfutils.rst
+17
-2
docs/tutorial/extend/augmentor.md
docs/tutorial/extend/augmentor.md
+33
-17
examples/FasterRCNN/eval.py
examples/FasterRCNN/eval.py
+1
-1
tensorpack/dataflow/imgaug/base.py
tensorpack/dataflow/imgaug/base.py
+13
-2
tensorpack/dataflow/imgaug/meta.py
tensorpack/dataflow/imgaug/meta.py
+2
-0
tensorpack/tfutils/argscope.py
tensorpack/tfutils/argscope.py
+4
-0
tensorpack/tfutils/export.py
tensorpack/tfutils/export.py
+10
-7
tensorpack/tfutils/sessinit.py
tensorpack/tfutils/sessinit.py
+2
-1
No files found.
docs/modules/dataflow.imgaug.rst
View file @
fbfc8413
...
@@ -2,11 +2,37 @@ tensorpack.dataflow.imgaug package
...
@@ -2,11 +2,37 @@ tensorpack.dataflow.imgaug package
==================================
==================================
This package contains Tensorpack's augmentors.
This package contains Tensorpack's augmentors.
The imgaug module is designed to allow the following usage:
1. Factor out randomness and determinism.
An augmentor may be randomized, but you can call
`augment_return_params <#tensorpack.dataflow.imgaug.Augmentor.augment_return_params>`_
to obtain the randomized parameters and then call
`augment_with_params <#tensorpack.dataflow.imgaug.Augmentor.augment_with_params>`_
on other data with the same randomized parameters.
2. Because of (1), tensorpack's augmentor can augment multiple images together
easily. This is commonly used for augmenting an image together with its masks.
3. An image augmentor (e.g. flip) may also augment a coordinate, with
`augment_coords <#tensorpack.dataflow.imgaug.ImageAugmentor.augment_coords>`_.
In this way, images can be augmented together with
boxes, polygons, keypoints, etc.
Coordinate augmentation enforces floating points coordinates
to avoid quantization error.
4. Reset random seed. Random seed can be reset by
`reset_state <#tensorpack.dataflow.imgaug.Augmentor.reset_state>`_.
This is important for multi-process data loading, and
it is called automatically if you use tensorpack's
`image augmentation dataflow <dataflow.html#tensorpack.dataflow.AugmentImageComponent>`_.
Note that other image augmentation libraries can be wrapped into Tensorpack's interface as well.
Note that other image augmentation libraries can be wrapped into Tensorpack's interface as well.
For example, `imgaug.IAAugmentor <#tensorpack.dataflow.imgaug.IAAugmentor>`_
For example, `imgaug.IAAugmentor <#tensorpack.dataflow.imgaug.IAAugmentor>`_
and `imgaug.Albumentations <#tensorpack.dataflow.imgaug.Albumentations>`_
and `imgaug.Albumentations <#tensorpack.dataflow.imgaug.Albumentations>`_
wrap two popular image augmentation libraries.
wrap two popular image augmentation libraries.
.. container:: custom-index
.. container:: custom-index
.. raw:: html
.. raw:: html
...
...
docs/modules/tfutils.rst
View file @
fbfc8413
...
@@ -7,6 +7,14 @@ tensorpack.tfutils package
...
@@ -7,6 +7,14 @@ tensorpack.tfutils package
<script type="text/javascript" src='../_static/build_toc_group.js'></script>
<script type="text/javascript" src='../_static/build_toc_group.js'></script>
tensorpack.tfutils.argscope module
------------------------------------
.. automodule:: tensorpack.tfutils.argscope
:members:
:undoc-members:
:show-inheritance:
tensorpack.tfutils.collection module
tensorpack.tfutils.collection module
------------------------------------
------------------------------------
...
@@ -87,11 +95,18 @@ tensorpack.tfutils.varreplace module
...
@@ -87,11 +95,18 @@ tensorpack.tfutils.varreplace module
:undoc-members:
:undoc-members:
:show-inheritance:
:show-inheritance:
tensorpack.tfutils.export module
------------------------------------
.. automodule:: tensorpack.tfutils.export
:members:
:undoc-members:
:show-inheritance:
Other functions in tensorpack.tfutils module
Other functions in tensorpack.tfutils module
---------------------------------------------
---------------------------------------------
.. automethod:: tensorpack.tfutils.get_default_sess_config
.. automethod:: tensorpack.tfutils.get_default_sess_config
.. automethod:: tensorpack.tfutils.get_global_step_var
.. automethod:: tensorpack.tfutils.get_global_step_var
.. automethod:: tensorpack.tfutils.get_global_step_value
.. automethod:: tensorpack.tfutils.get_global_step_value
.. automethod:: tensorpack.tfutils.argscope
.. automethod:: tensorpack.tfutils.get_tf_version_tuple
.. automethod:: tensorpack.tfutils.get_arg_scope
docs/tutorial/extend/augmentor.md
View file @
fbfc8413
### Design of Tensorpack's imgaug Module
The
[
imgaug module
](
../../modules/dataflow.imgaug.html
)
is designed to allow the following usage:
1.
Factor out randomness and determinism.
An augmentor may be randomized, but you can call
[
augment_return_params
](
../../modules/dataflow.imgaug.html#tensorpack.dataflow.imgaug.Augmentor.augment_return_params
)
to obtain the randomized parameters and then call
[
augment_with_params
](
../../modules/dataflow.imgaug.html#tensorpack.dataflow.imgaug.Augmentor.augment_with_params
)
on other data with the same randomized parameters.
2.
Because of (1), tensorpack's augmentor can augment multiple images together
easily. This is commonly used for augmenting an image together with its masks.
3.
An image augmentor (e.g. flip) may also augment a coordinate, with
[
augment_coords
](
../../modules/dataflow.imgaug.html#tensorpack.dataflow.imgaug.ImageAugmentor.augment_coords
)
.
In this way, images can be augmented together with
boxes, polygons, keypoints, etc.
Coordinate augmentation enforces floating points coordinates
to avoid quantization error.
4.
Reset random seed. Random seed can be reset by
[
reset_state
](
../../modules/dataflow.imgaug.html#tensorpack.dataflow.imgaug.Augmentor.reset_state
)
.
This is important for multi-process data loading, and
it is called automatically if you use tensorpack's
[
image augmentation dataflow
](
../../modules/dataflow.html#tensorpack.dataflow.AugmentImageComponent
)
.
### Write an Image Augmentor
### Write an Image Augmentor
...
@@ -8,17 +34,20 @@ to do whatever operations to your data, rather than writing an augmentor.
...
@@ -8,17 +34,20 @@ to do whatever operations to your data, rather than writing an augmentor.
Augmentors just sometimes make things easier.
Augmentors just sometimes make things easier.
An image augmentor maps an image to an image.
An image augmentor maps an image to an image.
If you have such a mapping function
`f`
already, you can simply use
`imgaug.MapImage(f)`
as the
If you have such a mapping function
`f`
already, you can simply use
augmentor, or use
`MapDataComponent(dataflow, f, index)`
as the DataFlow.
[
imgaug.MapImage(f)
](
../../modules/dataflow.imgaug.html#tensorpack.dataflow.imgaug.MapImage
)
as the augmentor, or use
[
MapDataComponent(dataflow, f, index)
](
../../modules/dataflow.html#tensorpack.dataflow.MapDataComponent
)
as the DataFlow.
In other words, for simple mapping you do not need to write an augmentor.
In other words, for simple mapping you do not need to write an augmentor.
An augmentor may do something more than just applying a mapping.
An augmentor may do something more than just applying a mapping.
The interface you will need to implement is:
T
o do complicated augmentation, t
he interface you will need to implement is:
```
python
```
python
class
MyAug
(
imgaug
.
ImageAugmentor
):
class
MyAug
(
imgaug
.
ImageAugmentor
):
def
_get_augment_params
(
self
,
img
):
def
_get_augment_params
(
self
,
img
):
#
g
enerated random params with self.rng
#
G
enerated random params with self.rng
return
params
return
params
def
_augment
(
self
,
img
,
params
):
def
_augment
(
self
,
img
,
params
):
...
@@ -29,16 +58,3 @@ class MyAug(imgaug.ImageAugmentor):
...
@@ -29,16 +58,3 @@ class MyAug(imgaug.ImageAugmentor):
# coords is a Nx2 floating point array, each row is (x, y)
# coords is a Nx2 floating point array, each row is (x, y)
return
augmented_coords
return
augmented_coords
```
```
It does the following extra things for you:
1.
`self.rng`
is a
`np.random.RandomState`
object,
guaranteed to have different seeds when you use multiprocess prefetch.
In multiprocess settings, you have to use this rng to generate random numbers.
2.
The logic of random parameter generation and the actual augmentation is separated in different methods.
This allows you to apply the
same transformation to several images together (with
`AugmentImageComponents`
),
which is essential to tasks such as segmentation.
Or apply the same transformations to images plus coordinate labels (with
`AugmentImageCoordinates`
),
which is essential to tasks such as detection and localization.
examples/FasterRCNN/eval.py
View file @
fbfc8413
...
@@ -15,7 +15,7 @@ import tqdm
...
@@ -15,7 +15,7 @@ import tqdm
import
tensorflow
as
tf
import
tensorflow
as
tf
from
tensorpack.callbacks
import
Callback
from
tensorpack.callbacks
import
Callback
from
tensorpack.tfutils
import
get_tf_version_tuple
from
tensorpack.tfutils
.common
import
get_tf_version_tuple
from
tensorpack.utils
import
logger
from
tensorpack.utils
import
logger
from
tensorpack.utils.utils
import
get_tqdm
from
tensorpack.utils.utils
import
get_tqdm
...
...
tensorpack/dataflow/imgaug/base.py
View file @
fbfc8413
...
@@ -36,6 +36,9 @@ class Augmentor(object):
...
@@ -36,6 +36,9 @@ class Augmentor(object):
"""
"""
Perform augmentation on the data.
Perform augmentation on the data.
Args:
d: input data
Returns:
Returns:
augmented data
augmented data
"""
"""
...
@@ -45,8 +48,10 @@ class Augmentor(object):
...
@@ -45,8 +48,10 @@ class Augmentor(object):
def
augment_return_params
(
self
,
d
):
def
augment_return_params
(
self
,
d
):
"""
"""
Augment the data and return the augmentation parameters.
Augment the data and return the augmentation parameters.
The returned parameters can be used to augment another data with identical transformation.
If the augmentation is non-deterministic (random),
This can be used in, e.g. augmentation for image, masks, keypoints altogether.
the returned parameters can be used to augment another data with the identical transformation.
This can be used for, e.g. augmenting image, masks, keypoints altogether with the
same transformation.
Returns:
Returns:
(augmented data, augmentation params)
(augmented data, augmentation params)
...
@@ -64,6 +69,10 @@ class Augmentor(object):
...
@@ -64,6 +69,10 @@ class Augmentor(object):
"""
"""
Augment the data with the given param.
Augment the data with the given param.
Args:
d: input data
param: augmentation params returned by :meth:`augment_return_params`
Returns:
Returns:
augmented data
augmented data
"""
"""
...
@@ -137,6 +146,8 @@ class ImageAugmentor(Augmentor):
...
@@ -137,6 +146,8 @@ class ImageAugmentor(Augmentor):
Args:
Args:
coords: Nx2 floating point numpy array where each row is (x, y)
coords: Nx2 floating point numpy array where each row is (x, y)
param: augmentation params returned by :meth:`augment_return_params`
Returns:
Returns:
new coords
new coords
"""
"""
...
...
tensorpack/dataflow/imgaug/meta.py
View file @
fbfc8413
...
@@ -145,6 +145,8 @@ class MapImage(ImageAugmentor):
...
@@ -145,6 +145,8 @@ class MapImage(ImageAugmentor):
"""
"""
Args:
Args:
func: a function which takes an image array and return an augmented one
func: a function which takes an image array and return an augmented one
coord_func: optional. A function which takes coordinates and return augmented ones.
Coordinates have the same format as :func:`ImageAugmentor.augment_coords`.
"""
"""
super
(
MapImage
,
self
)
.
__init__
()
super
(
MapImage
,
self
)
.
__init__
()
self
.
func
=
func
self
.
func
=
func
...
...
tensorpack/tfutils/argscope.py
View file @
fbfc8413
...
@@ -72,7 +72,9 @@ def enable_argscope_for_function(func, log_shape=True):
...
@@ -72,7 +72,9 @@ def enable_argscope_for_function(func, log_shape=True):
"""Decorator for function to support argscope
"""Decorator for function to support argscope
Example:
Example:
.. code-block:: python
.. code-block:: python
from mylib import myfunc
from mylib import myfunc
myfunc = enable_argscope_for_function(myfunc)
myfunc = enable_argscope_for_function(myfunc)
...
@@ -113,7 +115,9 @@ def enable_argscope_for_module(module, log_shape=True):
...
@@ -113,7 +115,9 @@ def enable_argscope_for_module(module, log_shape=True):
It has been only tested to work well with `tf.layers` module.
It has been only tested to work well with `tf.layers` module.
Example:
Example:
.. code-block:: python
.. code-block:: python
import tensorflow as tf
import tensorflow as tf
enable_argscope_for_module(tf.layers)
enable_argscope_for_module(tf.layers)
...
...
tensorpack/tfutils/export.py
View file @
fbfc8413
...
@@ -87,10 +87,18 @@ class ModelExporter(object):
...
@@ -87,10 +87,18 @@ class ModelExporter(object):
signature_name
=
'prediction_pipeline'
):
signature_name
=
'prediction_pipeline'
):
"""
"""
Converts a checkpoint and graph to a servable for TensorFlow Serving.
Converts a checkpoint and graph to a servable for TensorFlow Serving.
Use
SavedModelBuilder
to export a trained model without tensorpack dependency.
Use
TF's `SavedModelBuilder`
to export a trained model without tensorpack dependency.
Remarks:
Args:
filename (str): path for export directory
tags (list): list of user specified tags
signature_name (str): name of signature for prediction
Note:
This produces
This produces
.. code-block:: none
variables/ # output from the vanilla Saver
variables/ # output from the vanilla Saver
variables.data-?????-of-?????
variables.data-?????-of-?????
variables.index
variables.index
...
@@ -98,11 +106,6 @@ class ModelExporter(object):
...
@@ -98,11 +106,6 @@ class ModelExporter(object):
Currently, we only support a single signature, which is the general PredictSignatureDef:
Currently, we only support a single signature, which is the general PredictSignatureDef:
https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/signature_defs.md
https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/signature_defs.md
Args:
filename (str): path for export directory
tags (list): list of user specified tags
signature_name (str): name of signature for prediction
"""
"""
self
.
graph
=
self
.
config
.
_maybe_create_graph
()
self
.
graph
=
self
.
config
.
_maybe_create_graph
()
...
...
tensorpack/tfutils/sessinit.py
View file @
fbfc8413
...
@@ -219,7 +219,8 @@ class DictRestore(SessionInit):
...
@@ -219,7 +219,8 @@ class DictRestore(SessionInit):
class
ChainInit
(
SessionInit
):
class
ChainInit
(
SessionInit
):
""" Initialize a session by a list of :class:`SessionInit` instance, executed one by one.
"""
Initialize a session by a list of :class:`SessionInit` instance, executed one by one.
This can be useful for, e.g., loading several models from different files
This can be useful for, e.g., loading several models from different files
to form a composition of models.
to form a composition of models.
"""
"""
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment