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
2a444073
Commit
2a444073
authored
Oct 06, 2016
by
Yuxin Wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more augmentor
parent
0266827f
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
84 additions
and
42 deletions
+84
-42
examples/Inception/inception-bn.py
examples/Inception/inception-bn.py
+1
-1
examples/Inception/inceptionv3.py
examples/Inception/inceptionv3.py
+5
-5
examples/cifar-convnet.py
examples/cifar-convnet.py
+1
-1
tensorpack/dataflow/dataset/ilsvrc.py
tensorpack/dataflow/dataset/ilsvrc.py
+1
-1
tensorpack/dataflow/imgaug/base.py
tensorpack/dataflow/imgaug/base.py
+25
-17
tensorpack/dataflow/imgaug/imgproc.py
tensorpack/dataflow/imgaug/imgproc.py
+15
-2
tensorpack/dataflow/imgaug/meta.py
tensorpack/dataflow/imgaug/meta.py
+32
-3
tensorpack/models/nonlin.py
tensorpack/models/nonlin.py
+4
-12
No files found.
examples/Inception/inception-bn.py
View file @
2a444073
...
@@ -57,7 +57,7 @@ class Model(ModelDesc):
...
@@ -57,7 +57,7 @@ class Model(ModelDesc):
outs
.
append
(
x4
)
outs
.
append
(
x4
)
return
tf
.
concat
(
3
,
outs
,
name
=
'concat'
)
return
tf
.
concat
(
3
,
outs
,
name
=
'concat'
)
with
argscope
(
Conv2D
,
nl
=
BNReLU
()
,
use_bias
=
False
):
with
argscope
(
Conv2D
,
nl
=
BNReLU
,
use_bias
=
False
):
l
=
Conv2D
(
'conv0'
,
image
,
64
,
7
,
stride
=
2
)
l
=
Conv2D
(
'conv0'
,
image
,
64
,
7
,
stride
=
2
)
l
=
MaxPooling
(
'pool0'
,
l
,
3
,
2
,
padding
=
'SAME'
)
l
=
MaxPooling
(
'pool0'
,
l
,
3
,
2
,
padding
=
'SAME'
)
l
=
Conv2D
(
'conv1'
,
l
,
64
,
1
)
l
=
Conv2D
(
'conv1'
,
l
,
64
,
1
)
...
...
examples/Inception/inceptionv3.py
View file @
2a444073
...
@@ -36,7 +36,7 @@ class Model(ModelDesc):
...
@@ -36,7 +36,7 @@ class Model(ModelDesc):
def
_build_graph
(
self
,
input_vars
):
def
_build_graph
(
self
,
input_vars
):
image
,
label
=
input_vars
image
,
label
=
input_vars
image
=
image
/
128.0
-
1
# ?
image
=
image
/
255.0
# ?
def
proj_kk
(
l
,
k
,
ch_r
,
ch
,
stride
=
1
):
def
proj_kk
(
l
,
k
,
ch_r
,
ch
,
stride
=
1
):
l
=
Conv2D
(
'conv{0}{0}r'
.
format
(
k
),
l
,
ch_r
,
1
)
l
=
Conv2D
(
'conv{0}{0}r'
.
format
(
k
),
l
,
ch_r
,
1
)
...
@@ -70,8 +70,8 @@ class Model(ModelDesc):
...
@@ -70,8 +70,8 @@ class Model(ModelDesc):
.
Conv2D
(
'conv277ba'
,
ch_r
,
[
7
,
1
])
.
Conv2D
(
'conv277ba'
,
ch_r
,
[
7
,
1
])
.
Conv2D
(
'conv277bb'
,
ch
,
[
1
,
7
])())
.
Conv2D
(
'conv277bb'
,
ch
,
[
1
,
7
])())
nl
=
BNReLU
(
decay
=
0.9997
,
epsilon
=
1e-3
)
with
argscope
(
Conv2D
,
nl
=
BNReLU
,
use_bias
=
False
),
\
with
argscope
(
Conv2D
,
nl
=
nl
,
use_bias
=
False
):
argscope
(
BatchNorm
,
decay
=
0.9997
,
epsilon
=
1e-3
):
l
=
(
LinearWrap
(
image
)
l
=
(
LinearWrap
(
image
)
.
Conv2D
(
'conv0'
,
32
,
3
,
stride
=
2
,
padding
=
'VALID'
)
#299
.
Conv2D
(
'conv0'
,
32
,
3
,
stride
=
2
,
padding
=
'VALID'
)
#299
.
Conv2D
(
'conv1'
,
32
,
3
,
padding
=
'VALID'
)
#149
.
Conv2D
(
'conv1'
,
32
,
3
,
padding
=
'VALID'
)
#149
...
@@ -269,8 +269,8 @@ def get_config():
...
@@ -269,8 +269,8 @@ def get_config():
callbacks
=
Callbacks
([
callbacks
=
Callbacks
([
StatPrinter
(),
ModelSaver
(),
StatPrinter
(),
ModelSaver
(),
InferenceRunner
(
dataset_val
,
[
InferenceRunner
(
dataset_val
,
[
ClassificationError
(
'wrong-top1'
,
'val-
top1-error
'
),
ClassificationError
(
'wrong-top1'
,
'val-
error-top1
'
),
ClassificationError
(
'wrong-top5'
,
'val-
top5-error
'
)]),
ClassificationError
(
'wrong-top5'
,
'val-
error-top5
'
)]),
ScheduledHyperParamSetter
(
'learning_rate'
,
ScheduledHyperParamSetter
(
'learning_rate'
,
[(
5
,
0.03
),
(
9
,
0.01
),
(
12
,
0.006
),
[(
5
,
0.03
),
(
9
,
0.01
),
(
12
,
0.006
),
(
17
,
0.003
),
(
22
,
1e-3
),
(
36
,
2e-4
),
(
17
,
0.003
),
(
22
,
1e-3
),
(
36
,
2e-4
),
...
...
examples/cifar-convnet.py
View file @
2a444073
...
@@ -41,7 +41,7 @@ class Model(ModelDesc):
...
@@ -41,7 +41,7 @@ class Model(ModelDesc):
tf
.
image_summary
(
"train_image"
,
image
,
10
)
tf
.
image_summary
(
"train_image"
,
image
,
10
)
image
=
image
/
4.0
# just to make range smaller
image
=
image
/
4.0
# just to make range smaller
with
argscope
(
Conv2D
,
nl
=
BNReLU
()
,
use_bias
=
False
,
kernel_shape
=
3
):
with
argscope
(
Conv2D
,
nl
=
BNReLU
,
use_bias
=
False
,
kernel_shape
=
3
):
logits
=
LinearWrap
(
image
)
\
logits
=
LinearWrap
(
image
)
\
.
Conv2D
(
'conv1.1'
,
out_channel
=
64
)
\
.
Conv2D
(
'conv1.1'
,
out_channel
=
64
)
\
.
Conv2D
(
'conv1.2'
,
out_channel
=
64
)
\
.
Conv2D
(
'conv1.2'
,
out_channel
=
64
)
\
...
...
tensorpack/dataflow/dataset/ilsvrc.py
View file @
2a444073
...
@@ -156,7 +156,7 @@ class ILSVRC12(RNGDataFlow):
...
@@ -156,7 +156,7 @@ class ILSVRC12(RNGDataFlow):
def
get_data
(
self
):
def
get_data
(
self
):
"""
"""
Produce original images of shape [h, w, 3], and label,
Produce original images of shape [h, w, 3
(BGR)
], and label,
and optionally a bbox of [xmin, ymin, xmax, ymax]
and optionally a bbox of [xmin, ymin, xmax, ymax]
"""
"""
idxs
=
np
.
arange
(
len
(
self
.
imglist
))
idxs
=
np
.
arange
(
len
(
self
.
imglist
))
...
...
tensorpack/dataflow/imgaug/base.py
View file @
2a444073
...
@@ -6,10 +6,10 @@ from abc import abstractmethod, ABCMeta
...
@@ -6,10 +6,10 @@ from abc import abstractmethod, ABCMeta
from
...utils
import
get_rng
from
...utils
import
get_rng
from
six.moves
import
zip
from
six.moves
import
zip
__all__
=
[
'ImageAugmentor'
,
'AugmentorList'
]
__all__
=
[
'
Augmentor'
,
'
ImageAugmentor'
,
'AugmentorList'
]
class
Image
Augmentor
(
object
):
class
Augmentor
(
object
):
""" Base class for an
image
augmentor"""
""" Base class for an augmentor"""
__metaclass__
=
ABCMeta
__metaclass__
=
ABCMeta
def
__init__
(
self
):
def
__init__
(
self
):
...
@@ -24,37 +24,32 @@ class ImageAugmentor(object):
...
@@ -24,37 +24,32 @@ class ImageAugmentor(object):
def
reset_state
(
self
):
def
reset_state
(
self
):
self
.
rng
=
get_rng
(
self
)
self
.
rng
=
get_rng
(
self
)
def
augment
(
self
,
img
):
def
augment
(
self
,
d
):
"""
"""
Perform augmentation on the image in-place.
Perform augmentation on the data.
:param img: an [h,w] or [h,w,c] image
:returns: the augmented image, always of type 'float32'
"""
"""
img
,
params
=
self
.
_augment_return_params
(
img
)
d
,
params
=
self
.
_augment_return_params
(
d
)
return
img
return
d
def
_augment_return_params
(
self
,
img
):
def
_augment_return_params
(
self
,
d
):
"""
"""
Augment the image and return both image and params
Augment the image and return both image and params
"""
"""
prms
=
self
.
_get_augment_params
(
img
)
prms
=
self
.
_get_augment_params
(
d
)
return
(
self
.
_augment
(
img
,
prms
),
prms
)
return
(
self
.
_augment
(
d
,
prms
),
prms
)
@
abstractmethod
@
abstractmethod
def
_augment
(
self
,
img
,
param
):
def
_augment
(
self
,
d
,
param
):
"""
"""
augment with the given param and return the new image
augment with the given param and return the new image
"""
"""
def
_get_augment_params
(
self
,
img
):
def
_get_augment_params
(
self
,
d
):
"""
"""
get the augmentor parameters
get the augmentor parameters
"""
"""
return
None
return
None
def
_fprop_coord
(
self
,
coord
,
param
):
return
coord
def
_rand_range
(
self
,
low
=
1.0
,
high
=
None
,
size
=
None
):
def
_rand_range
(
self
,
low
=
1.0
,
high
=
None
,
size
=
None
):
if
high
is
None
:
if
high
is
None
:
low
,
high
=
0
,
low
low
,
high
=
0
,
low
...
@@ -62,6 +57,19 @@ class ImageAugmentor(object):
...
@@ -62,6 +57,19 @@ class ImageAugmentor(object):
size
=
[]
size
=
[]
return
self
.
rng
.
uniform
(
low
,
high
,
size
)
return
self
.
rng
.
uniform
(
low
,
high
,
size
)
class
ImageAugmentor
(
Augmentor
):
def
augment
(
self
,
img
):
"""
Perform augmentation on the image in-place.
:param img: an [h,w] or [h,w,c] image
:returns: the augmented image, always of type 'float32'
"""
img
,
params
=
self
.
_augment_return_params
(
img
)
return
img
def
_fprop_coord
(
self
,
coord
,
param
):
return
coord
class
AugmentorList
(
ImageAugmentor
):
class
AugmentorList
(
ImageAugmentor
):
"""
"""
Augment by a list of augmentors
Augment by a list of augmentors
...
...
tensorpack/dataflow/imgaug/imgproc.py
View file @
2a444073
...
@@ -7,7 +7,7 @@ import numpy as np
...
@@ -7,7 +7,7 @@ import numpy as np
import
cv2
import
cv2
__all__
=
[
'Brightness'
,
'Contrast'
,
'MeanVarianceNormalize'
,
'GaussianBlur'
,
__all__
=
[
'Brightness'
,
'Contrast'
,
'MeanVarianceNormalize'
,
'GaussianBlur'
,
'Gamma'
,
'Clip'
]
'Gamma'
,
'Clip'
,
'Saturation'
]
class
Brightness
(
ImageAugmentor
):
class
Brightness
(
ImageAugmentor
):
"""
"""
...
@@ -111,9 +111,22 @@ class Gamma(ImageAugmentor):
...
@@ -111,9 +111,22 @@ class Gamma(ImageAugmentor):
class
Clip
(
ImageAugmentor
):
class
Clip
(
ImageAugmentor
):
def
__init__
(
self
,
min
=
0
,
max
=
255
):
def
__init__
(
self
,
min
=
0
,
max
=
255
):
assert
delta
>
0
self
.
_init
(
locals
())
self
.
_init
(
locals
())
def
_augment
(
self
,
img
,
_
):
def
_augment
(
self
,
img
,
_
):
img
=
np
.
clip
(
img
,
self
.
min
,
self
.
max
)
img
=
np
.
clip
(
img
,
self
.
min
,
self
.
max
)
return
img
return
img
class
Saturation
(
ImageAugmentor
):
""" Saturation, see 'fb.resnet.torch' https://github.com/facebook/fb.resnet.torch/blob/master/datasets/transforms.lua#L218"""
def
__init__
(
self
,
alpha
=
0.4
):
super
(
Saturation
,
self
)
.
__init__
()
assert
alpha
<
1
self
.
_init
(
locals
())
def
_get_augment_params
(
self
,
_
):
return
1
+
self
.
_rand_range
(
-
self
.
alpha
,
self
.
alpha
)
def
_augment
(
self
,
img
,
v
):
grey
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_BGR2GRAY
)
return
img
*
v
+
(
grey
*
(
1
-
v
))[:,:,
np
.
newaxis
]
tensorpack/dataflow/imgaug/meta.py
View file @
2a444073
...
@@ -6,7 +6,8 @@
...
@@ -6,7 +6,8 @@
from
.base
import
ImageAugmentor
from
.base
import
ImageAugmentor
__all__
=
[
'RandomChooseAug'
,
'MapImage'
,
'Identity'
,
'RandomApplyAug'
]
__all__
=
[
'RandomChooseAug'
,
'MapImage'
,
'Identity'
,
'RandomApplyAug'
,
'RandomOrderAug'
]
class
Identity
(
ImageAugmentor
):
class
Identity
(
ImageAugmentor
):
def
_augment
(
self
,
img
,
_
):
def
_augment
(
self
,
img
,
_
):
...
@@ -15,8 +16,8 @@ class Identity(ImageAugmentor):
...
@@ -15,8 +16,8 @@ class Identity(ImageAugmentor):
class
RandomApplyAug
(
ImageAugmentor
):
class
RandomApplyAug
(
ImageAugmentor
):
""" Randomly apply the augmentor with a prob. Otherwise do nothing"""
""" Randomly apply the augmentor with a prob. Otherwise do nothing"""
def
__init__
(
self
,
aug
,
prob
):
def
__init__
(
self
,
aug
,
prob
):
super
(
RandomApplyAug
,
self
)
.
__init__
()
self
.
_init
(
locals
())
self
.
_init
(
locals
())
super
(
RandomApplyAug
,
self
)
.
__init__
()
def
_get_augment_params
(
self
,
img
):
def
_get_augment_params
(
self
,
img
):
p
=
self
.
rng
.
rand
()
p
=
self
.
rng
.
rand
()
...
@@ -41,7 +42,6 @@ class RandomChooseAug(ImageAugmentor):
...
@@ -41,7 +42,6 @@ class RandomChooseAug(ImageAugmentor):
"""
"""
:param aug_lists: list of augmentor, or list of (augmentor, probability) tuple
:param aug_lists: list of augmentor, or list of (augmentor, probability) tuple
"""
"""
super
(
RandomChooseAug
,
self
)
.
__init__
()
if
isinstance
(
aug_lists
[
0
],
(
tuple
,
list
)):
if
isinstance
(
aug_lists
[
0
],
(
tuple
,
list
)):
prob
=
[
k
[
1
]
for
k
in
aug_lists
]
prob
=
[
k
[
1
]
for
k
in
aug_lists
]
aug_lists
=
[
k
[
0
]
for
k
in
aug_lists
]
aug_lists
=
[
k
[
0
]
for
k
in
aug_lists
]
...
@@ -49,6 +49,7 @@ class RandomChooseAug(ImageAugmentor):
...
@@ -49,6 +49,7 @@ class RandomChooseAug(ImageAugmentor):
else
:
else
:
prob
=
1.0
/
len
(
aug_lists
)
prob
=
1.0
/
len
(
aug_lists
)
self
.
_init
(
locals
())
self
.
_init
(
locals
())
super
(
RandomChooseAug
,
self
)
.
__init__
()
def
reset_state
(
self
):
def
reset_state
(
self
):
super
(
RandomChooseAug
,
self
)
.
reset_state
()
super
(
RandomChooseAug
,
self
)
.
reset_state
()
...
@@ -64,6 +65,34 @@ class RandomChooseAug(ImageAugmentor):
...
@@ -64,6 +65,34 @@ class RandomChooseAug(ImageAugmentor):
idx
,
prm
=
prm
idx
,
prm
=
prm
return
self
.
aug_lists
[
idx
]
.
_augment
(
img
,
prm
)
return
self
.
aug_lists
[
idx
]
.
_augment
(
img
,
prm
)
class
RandomOrderAug
(
ImageAugmentor
):
def
__init__
(
self
,
aug_lists
):
"""
Shuffle the augmentors into random order.
:param aug_lists: list of augmentor, or list of (augmentor, probability) tuple
"""
self
.
_init
(
locals
())
super
(
RandomOrderAug
,
self
)
.
__init__
()
def
reset_state
(
self
):
super
(
RandomOrderAug
,
self
)
.
reset_state
()
for
a
in
self
.
aug_lists
:
a
.
reset_state
()
def
_get_augment_params
(
self
,
img
):
# Note: If augmentors change the shape of image, get_augment_param might not work
# All augmentors should only rely on the shape of image
idxs
=
self
.
rng
.
permutation
(
len
(
self
.
aug_lists
))
prms
=
[
self
.
aug_lists
[
k
]
.
_get_augment_params
(
img
)
for
k
in
range
(
len
(
self
.
aug_lists
))]
return
idxs
,
prms
def
_augment
(
self
,
img
,
prm
):
idxs
,
prms
=
prm
for
k
in
idxs
:
img
=
self
.
aug_lists
[
k
]
.
_augment
(
img
,
prms
[
k
])
return
img
class
MapImage
(
ImageAugmentor
):
class
MapImage
(
ImageAugmentor
):
"""
"""
Map the image array by a function.
Map the image array by a function.
...
...
tensorpack/models/nonlin.py
View file @
2a444073
...
@@ -63,15 +63,7 @@ def LeakyReLU(x, alpha, name=None):
...
@@ -63,15 +63,7 @@ def LeakyReLU(x, alpha, name=None):
name
=
'output'
name
=
'output'
return
tf
.
mul
(
x
,
0.5
,
name
=
name
)
return
tf
.
mul
(
x
,
0.5
,
name
=
name
)
# I'm not a layer, but I return a nonlinearity.
def
BNReLU
(
x
,
name
=
None
):
def
BNReLU
(
is_training
=
None
,
**
kwargs
):
x
=
BatchNorm
(
'bn'
,
x
,
use_local_stat
=
None
)
"""
x
=
tf
.
nn
.
relu
(
x
,
name
=
name
)
:param is_traning: boolean
return
x
:param kwargs: args for BatchNorm
:returns: an activation function that performs BN + ReLU (a too common combination)
"""
def
BNReLU
(
x
,
name
=
None
):
x
=
BatchNorm
(
'bn'
,
x
,
use_local_stat
=
is_training
,
**
kwargs
)
x
=
tf
.
nn
.
relu
(
x
,
name
=
name
)
return
x
return
BNReLU
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