Skip to content

Commit b87427b

Browse files
authored
Merge pull request #445 from QiJune/format_py_code_1st
format python code in demo, doc, doc_cn and paddle directories
2 parents 19d8146 + 319742c commit b87427b

File tree

85 files changed

+1580
-1267
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+1580
-1267
lines changed

demo/image_classification/data/process_cifar.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import sys
1717
import os
1818
import PIL.Image as Image
19-
2019
"""
2120
Usage: python process_cifar input_dir output_dir
2221
"""
@@ -30,6 +29,7 @@ def mkdir_not_exist(path):
3029
if not os.path.exists(path):
3130
os.mkdir(path)
3231

32+
3333
def create_dir_structure(output_dir):
3434
"""
3535
Create the directory structure for the directory.
@@ -39,8 +39,8 @@ def create_dir_structure(output_dir):
3939
mkdir_not_exist(os.path.join(output_dir, "train"))
4040
mkdir_not_exist(os.path.join(output_dir, "test"))
4141

42-
def convert_batch(batch_path, label_set, label_map,
43-
output_dir, data_split):
42+
43+
def convert_batch(batch_path, label_set, label_map, output_dir, data_split):
4444
"""
4545
Convert CIFAR batch to the structure of Paddle format.
4646
batch_path: the batch to be converted.
@@ -67,11 +67,23 @@ def convert_batch(batch_path, label_set, label_map,
6767
output_dir = sys.argv[2]
6868
num_batch = 5
6969
create_dir_structure(output_dir)
70-
label_map = {0: "airplane", 1: "automobile", 2: "bird", 3: "cat", 4: "deer",
71-
5: "dog", 6: "frog", 7: "horse", 8: "ship", 9: "truck"}
70+
label_map = {
71+
0: "airplane",
72+
1: "automobile",
73+
2: "bird",
74+
3: "cat",
75+
4: "deer",
76+
5: "dog",
77+
6: "frog",
78+
7: "horse",
79+
8: "ship",
80+
9: "truck"
81+
}
7282
labels = {}
7383
for i in range(1, num_batch + 1):
74-
convert_batch(os.path.join(input_dir, "data_batch_%d" % i), labels,
75-
label_map, output_dir, "train")
76-
convert_batch(os.path.join(input_dir, "test_batch"), {},
77-
label_map, output_dir, "test")
84+
convert_batch(
85+
os.path.join(input_dir, "data_batch_%d" % i), labels, label_map,
86+
output_dir, "train")
87+
convert_batch(
88+
os.path.join(input_dir, "test_batch"), {}, label_map, output_dir,
89+
"test")

demo/image_classification/image_provider.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ def hook(settings, img_size, mean_img_size, num_classes, color, meta, use_jpeg,
4646

4747
settings.img_mean = image_util.load_meta(settings.meta_path,
4848
settings.mean_img_size,
49-
settings.img_size,
50-
settings.color)
49+
settings.img_size, settings.color)
5150

5251
settings.logger.info('Image size: %s', settings.img_size)
5352
settings.logger.info('Meta path: %s', settings.meta_path)
5453
settings.input_types = [
5554
dense_vector(settings.img_raw_size), # image feature
56-
integer_value(settings.num_classes)] # labels
55+
integer_value(settings.num_classes)
56+
] # labels
5757

5858
settings.logger.info('DataProvider Initialization finished')
5959

@@ -79,8 +79,8 @@ def processData(settings, file_list):
7979
img = image_util.decode_jpeg(data['images'][i])
8080
else:
8181
img = data['images'][i]
82-
img_feat = image_util.preprocess_img(img, settings.img_mean,
83-
settings.img_size, settings.is_train,
84-
settings.color)
82+
img_feat = image_util.preprocess_img(
83+
img, settings.img_mean, settings.img_size,
84+
settings.is_train, settings.color)
8585
label = data['labels'][i]
8686
yield img_feat.astype('float32'), int(label)

demo/image_classification/image_util.py

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,20 @@
1616
from PIL import Image
1717
from cStringIO import StringIO
1818

19+
1920
def resize_image(img, target_size):
2021
"""
2122
Resize an image so that the shorter edge has length target_size.
2223
img: the input image to be resized.
2324
target_size: the target resized image size.
2425
"""
25-
percent = (target_size/float(min(img.size[0], img.size[1])))
26-
resized_size = int(round(img.size[0] * percent)), int(round(img.size[1] * percent))
26+
percent = (target_size / float(min(img.size[0], img.size[1])))
27+
resized_size = int(round(img.size[0] * percent)), int(
28+
round(img.size[1] * percent))
2729
img = img.resize(resized_size, Image.ANTIALIAS)
2830
return img
2931

32+
3033
def flip(im):
3134
"""
3235
Return the flipped image.
@@ -38,6 +41,7 @@ def flip(im):
3841
else:
3942
return im[:, ::-1]
4043

44+
4145
def crop_img(im, inner_size, color=True, test=True):
4246
"""
4347
Return cropped image.
@@ -50,20 +54,22 @@ def crop_img(im, inner_size, color=True, test=True):
5054
If True, crop the center of images.
5155
"""
5256
if color:
53-
height, width = max(inner_size, im.shape[1]), max(inner_size, im.shape[2])
57+
height, width = max(inner_size, im.shape[1]), max(inner_size,
58+
im.shape[2])
5459
padded_im = np.zeros((3, height, width))
5560
startY = (height - im.shape[1]) / 2
5661
startX = (width - im.shape[2]) / 2
5762
endY, endX = startY + im.shape[1], startX + im.shape[2]
58-
padded_im[:, startY: endY, startX: endX] = im
63+
padded_im[:, startY:endY, startX:endX] = im
5964
else:
6065
im = im.astype('float32')
61-
height, width = max(inner_size, im.shape[0]), max(inner_size, im.shape[1])
66+
height, width = max(inner_size, im.shape[0]), max(inner_size,
67+
im.shape[1])
6268
padded_im = np.zeros((height, width))
6369
startY = (height - im.shape[0]) / 2
6470
startX = (width - im.shape[1]) / 2
6571
endY, endX = startY + im.shape[0], startX + im.shape[1]
66-
padded_im[startY: endY, startX: endX] = im
72+
padded_im[startY:endY, startX:endX] = im
6773
if test:
6874
startY = (height - inner_size) / 2
6975
startX = (width - inner_size) / 2
@@ -72,19 +78,21 @@ def crop_img(im, inner_size, color=True, test=True):
7278
startX = np.random.randint(0, width - inner_size + 1)
7379
endY, endX = startY + inner_size, startX + inner_size
7480
if color:
75-
pic = padded_im[:, startY: endY, startX: endX]
81+
pic = padded_im[:, startY:endY, startX:endX]
7682
else:
77-
pic = padded_im[startY: endY, startX: endX]
83+
pic = padded_im[startY:endY, startX:endX]
7884
if (not test) and (np.random.randint(2) == 0):
7985
pic = flip(pic)
8086
return pic
8187

88+
8289
def decode_jpeg(jpeg_string):
8390
np_array = np.array(Image.open(StringIO(jpeg_string)))
8491
if len(np_array.shape) == 3:
8592
np_array = np.transpose(np_array, (2, 0, 1))
8693
return np_array
8794

95+
8896
def preprocess_img(im, img_mean, crop_size, is_train, color=True):
8997
"""
9098
Does data augmentation for images.
@@ -99,6 +107,7 @@ def preprocess_img(im, img_mean, crop_size, is_train, color=True):
99107
pic -= img_mean
100108
return pic.flatten()
101109

110+
102111
def load_meta(meta_path, mean_img_size, crop_size, color=True):
103112
"""
104113
Return the loaded meta file.
@@ -109,17 +118,18 @@ def load_meta(meta_path, mean_img_size, crop_size, color=True):
109118
mean = np.load(meta_path)['data_mean']
110119
border = (mean_img_size - crop_size) / 2
111120
if color:
112-
assert(mean_img_size * mean_img_size * 3 == mean.shape[0])
121+
assert (mean_img_size * mean_img_size * 3 == mean.shape[0])
113122
mean = mean.reshape(3, mean_img_size, mean_img_size)
114-
mean = mean[:, border: border + crop_size,
115-
border: border + crop_size].astype('float32')
123+
mean = mean[:, border:border + crop_size, border:border +
124+
crop_size].astype('float32')
116125
else:
117-
assert(mean_img_size * mean_img_size == mean.shape[0])
126+
assert (mean_img_size * mean_img_size == mean.shape[0])
118127
mean = mean.reshape(mean_img_size, mean_img_size)
119-
mean = mean[border: border + crop_size,
120-
border: border + crop_size].astype('float32')
128+
mean = mean[border:border + crop_size, border:border +
129+
crop_size].astype('float32')
121130
return mean
122131

132+
123133
def load_image(img_path, is_color=True):
124134
"""
125135
Load image and return.
@@ -130,6 +140,7 @@ def load_image(img_path, is_color=True):
130140
img.load()
131141
return img
132142

143+
133144
def oversample(img, crop_dims):
134145
"""
135146
image : iterable of (H x W x K) ndarrays
@@ -152,50 +163,53 @@ def oversample(img, crop_dims):
152163
for j in w_indices:
153164
crops_ix[curr] = (i, j, i + crop_dims[0], j + crop_dims[1])
154165
curr += 1
155-
crops_ix[4] = np.tile(im_center, (1, 2)) + np.concatenate([
156-
-crop_dims / 2.0,
157-
crop_dims / 2.0
158-
])
166+
crops_ix[4] = np.tile(im_center, (1, 2)) + np.concatenate(
167+
[-crop_dims / 2.0, crop_dims / 2.0])
159168
crops_ix = np.tile(crops_ix, (2, 1))
160169

161170
# Extract crops
162-
crops = np.empty((10 * len(img), crop_dims[0], crop_dims[1],
163-
im_shape[-1]), dtype=np.float32)
171+
crops = np.empty(
172+
(10 * len(img), crop_dims[0], crop_dims[1], im_shape[-1]),
173+
dtype=np.float32)
164174
ix = 0
165175
for im in img:
166176
for crop in crops_ix:
167177
crops[ix] = im[crop[0]:crop[2], crop[1]:crop[3], :]
168178
ix += 1
169-
crops[ix-5:ix] = crops[ix-5:ix, :, ::-1, :] # flip for mirrors
179+
crops[ix - 5:ix] = crops[ix - 5:ix, :, ::-1, :] # flip for mirrors
170180
return crops
171181

182+
172183
class ImageTransformer:
173-
def __init__(self, transpose = None,
174-
channel_swap = None, mean = None, is_color = True):
184+
def __init__(self,
185+
transpose=None,
186+
channel_swap=None,
187+
mean=None,
188+
is_color=True):
175189
self.transpose = transpose
176190
self.channel_swap = None
177191
self.mean = None
178-
self.is_color = is_color
192+
self.is_color = is_color
179193

180-
def set_transpose(self, order):
194+
def set_transpose(self, order):
181195
if self.is_color:
182-
assert 3 == len(order)
196+
assert 3 == len(order)
183197
self.transpose = order
184198

185-
def set_channel_swap(self, order):
199+
def set_channel_swap(self, order):
186200
if self.is_color:
187-
assert 3 == len(order)
201+
assert 3 == len(order)
188202
self.channel_swap = order
189203

190204
def set_mean(self, mean):
191205
# mean value, may be one value per channel
192206
if mean.ndim == 1:
193-
mean = mean[:, np.newaxis, np.newaxis]
194-
else:
207+
mean = mean[:, np.newaxis, np.newaxis]
208+
else:
195209
# elementwise mean
196210
if self.is_color:
197211
assert len(mean.shape) == 3
198-
self.mean = mean
212+
self.mean = mean
199213

200214
def transformer(self, data):
201215
if self.transpose is not None:

demo/image_classification/prediction.py

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import os,sys
15+
import os, sys
1616
import numpy as np
1717
import logging
1818
from PIL import Image
@@ -24,9 +24,11 @@
2424
from paddle.trainer.PyDataProvider2 import dense_vector
2525
from paddle.trainer.config_parser import parse_config
2626

27-
logging.basicConfig(format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s')
27+
logging.basicConfig(
28+
format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s')
2829
logging.getLogger().setLevel(logging.INFO)
2930

31+
3032
class ImageClassifier():
3133
def __init__(self,
3234
train_conf,
@@ -58,18 +60,19 @@ def __init__(self,
5860
self.oversample = oversample
5961
self.is_color = is_color
6062

61-
self.transformer = image_util.ImageTransformer(is_color = is_color)
62-
self.transformer.set_transpose((2,0,1))
63+
self.transformer = image_util.ImageTransformer(is_color=is_color)
64+
self.transformer.set_transpose((2, 0, 1))
6365

6466
self.mean_file = mean_file
6567
mean = np.load(self.mean_file)['data_mean']
6668
mean = mean.reshape(3, self.crop_dims[0], self.crop_dims[1])
67-
self.transformer.set_mean(mean) # mean pixel
69+
self.transformer.set_mean(mean) # mean pixel
6870
gpu = 1 if use_gpu else 0
6971
conf_args = "is_test=1,use_gpu=%d,is_predict=1" % (gpu)
7072
conf = parse_config(train_conf, conf_args)
7173
swig_paddle.initPaddle("--use_gpu=%d" % (gpu))
72-
self.network = swig_paddle.GradientMachine.createFromConfigProto(conf.model_config)
74+
self.network = swig_paddle.GradientMachine.createFromConfigProto(
75+
conf.model_config)
7376
assert isinstance(self.network, swig_paddle.GradientMachine)
7477
self.network.loadParameters(self.model_dir)
7578

@@ -90,14 +93,14 @@ def get_data(self, img_path):
9093
# image_util.resize_image: short side is self.resize_dim
9194
image = image_util.resize_image(image, self.resize_dim)
9295
image = np.array(image)
93-
input = np.zeros((1, image.shape[0], image.shape[1], 3),
94-
dtype=np.float32)
96+
input = np.zeros(
97+
(1, image.shape[0], image.shape[1], 3), dtype=np.float32)
9598
input[0] = image.astype(np.float32)
9699
input = image_util.oversample(input, self.crop_dims)
97100
else:
98101
image = image.resize(self.crop_dims, Image.ANTIALIAS)
99-
input = np.zeros((1, self.crop_dims[0], self.crop_dims[1], 3),
100-
dtype=np.float32)
102+
input = np.zeros(
103+
(1, self.crop_dims[0], self.crop_dims[1], 3), dtype=np.float32)
101104
input[0] = np.array(image).astype(np.float32)
102105

103106
data_in = []
@@ -133,22 +136,24 @@ def predict(self, image=None, output_layer=None):
133136
lab = np.argsort(-prob)
134137
logging.info("Label of %s is: %d", image, lab[0])
135138

139+
136140
if __name__ == '__main__':
137-
image_size=32
138-
crop_size=32
139-
multi_crop=True
140-
config="vgg_16_cifar.py"
141-
output_layer="__fc_layer_1__"
142-
mean_path="data/cifar-out/batches/batches.meta"
143-
model_path=sys.argv[1]
144-
image=sys.argv[2]
145-
use_gpu=bool(int(sys.argv[3]))
146-
147-
obj = ImageClassifier(train_conf=config,
148-
model_dir=model_path,
149-
resize_dim=image_size,
150-
crop_dim=crop_size,
151-
mean_file=mean_path,
152-
use_gpu=use_gpu,
153-
oversample=multi_crop)
141+
image_size = 32
142+
crop_size = 32
143+
multi_crop = True
144+
config = "vgg_16_cifar.py"
145+
output_layer = "__fc_layer_1__"
146+
mean_path = "data/cifar-out/batches/batches.meta"
147+
model_path = sys.argv[1]
148+
image = sys.argv[2]
149+
use_gpu = bool(int(sys.argv[3]))
150+
151+
obj = ImageClassifier(
152+
train_conf=config,
153+
model_dir=model_path,
154+
resize_dim=image_size,
155+
crop_dim=crop_size,
156+
mean_file=mean_path,
157+
use_gpu=use_gpu,
158+
oversample=multi_crop)
154159
obj.predict(image, output_layer)

0 commit comments

Comments
 (0)