未验证 提交 e2131fbc 编写于 作者: Q Qiyang Min 提交者: GitHub

Merge pull request #1335 from kebinC/metric

support python3
import os import os
import math import math
import random import random
import cPickle
import functools import functools
import numpy as np import numpy as np
import paddle import paddle
...@@ -44,9 +43,9 @@ for i, item in enumerate(test_list): ...@@ -44,9 +43,9 @@ for i, item in enumerate(test_list):
test_data[label] = [] test_data[label] = []
test_data[label].append(path) test_data[label].append(path)
print "train_data size:", len(train_data) print("train_data size:", len(train_data))
print "test_data size:", len(test_data) print("test_data size:", len(test_data))
print "test_data image number:", len(test_image_list) print("test_data image number:", len(test_image_list))
random.shuffle(test_image_list) random.shuffle(test_image_list)
...@@ -213,11 +212,11 @@ def eml_iterator(data, ...@@ -213,11 +212,11 @@ def eml_iterator(data,
color_jitter=False, color_jitter=False,
rotate=False): rotate=False):
def reader(): def reader():
labs = data.keys() labs = list(data.keys())
lab_num = len(labs) lab_num = len(labs)
ind = range(0, lab_num) ind = list(range(0, lab_num))
assert batch_size % samples_each_class == 0, "batch_size % samples_each_class != 0" assert batch_size % samples_each_class == 0, "batch_size % samples_each_class != 0"
num_class = batch_size/samples_each_class num_class = batch_size // samples_each_class
for i in range(iter_size): for i in range(iter_size):
random.shuffle(ind) random.shuffle(ind)
for n in range(num_class): for n in range(num_class):
...@@ -244,9 +243,9 @@ def quadruplet_iterator(data, ...@@ -244,9 +243,9 @@ def quadruplet_iterator(data,
color_jitter=False, color_jitter=False,
rotate=False): rotate=False):
def reader(): def reader():
labs = data.keys() labs = list(data.keys())
lab_num = len(labs) lab_num = len(labs)
ind = range(0, lab_num) ind = list(range(0, lab_num))
for i in range(iter_size): for i in range(iter_size):
random.shuffle(ind) random.shuffle(ind)
ind_sample = ind[:class_num] ind_sample = ind[:class_num]
...@@ -254,7 +253,7 @@ def quadruplet_iterator(data, ...@@ -254,7 +253,7 @@ def quadruplet_iterator(data,
for ind_i in ind_sample: for ind_i in ind_sample:
lab = labs[ind_i] lab = labs[ind_i]
data_list = data[lab] data_list = data[lab]
data_ind = range(0, len(data_list)) data_ind = list(range(0, len(data_list)))
random.shuffle(data_ind) random.shuffle(data_ind)
anchor_ind = data_ind[:samples_each_class] anchor_ind = data_ind[:samples_each_class]
...@@ -276,15 +275,15 @@ def triplet_iterator(data, ...@@ -276,15 +275,15 @@ def triplet_iterator(data,
color_jitter=False, color_jitter=False,
rotate=False): rotate=False):
def reader(): def reader():
labs = data.keys() labs = list(data.keys())
lab_num = len(labs) lab_num = len(labs)
ind = range(0, lab_num) ind = list(range(0, lab_num))
for i in range(iter_size): for i in range(iter_size):
random.shuffle(ind) random.shuffle(ind)
ind_pos, ind_neg = ind[:2] ind_pos, ind_neg = ind[:2]
lab_pos = labs[ind_pos] lab_pos = labs[ind_pos]
pos_data_list = data[lab_pos] pos_data_list = data[lab_pos]
data_ind = range(0, len(pos_data_list)) data_ind = list(range(0, len(pos_data_list)))
random.shuffle(data_ind) random.shuffle(data_ind)
anchor_ind, pos_ind = data_ind[:2] anchor_ind, pos_ind = data_ind[:2]
...@@ -345,7 +344,7 @@ def quadruplet_train(class_num, samples_each_class): ...@@ -345,7 +344,7 @@ def quadruplet_train(class_num, samples_each_class):
def triplet_train(batch_size): def triplet_train(batch_size):
assert(batch_size % 3 == 0) assert(batch_size % 3 == 0)
return triplet_iterator(train_data, 'train', batch_size, iter_size = batch_size/3 * 100, \ return triplet_iterator(train_data, 'train', batch_size, iter_size = batch_size//3 * 100, \
shuffle=True, color_jitter=False, rotate=False) shuffle=True, color_jitter=False, rotate=False)
def test(): def test():
......
import datareader as reader
import math import math
import numpy as np import numpy as np
import paddle.fluid as fluid import paddle.fluid as fluid
from metrics import calculate_order_dist_matrix from . import datareader as reader
from metrics import get_gpu_num from .metrics import calculate_order_dist_matrix
from .metrics import get_gpu_num
class emlloss(): class emlloss():
def __init__(self, train_batch_size = 40, samples_each_class=2): def __init__(self, train_batch_size = 40, samples_each_class=2):
...@@ -11,9 +11,9 @@ class emlloss(): ...@@ -11,9 +11,9 @@ class emlloss():
self.samples_each_class = samples_each_class self.samples_each_class = samples_each_class
self.train_batch_size = train_batch_size self.train_batch_size = train_batch_size
assert(train_batch_size % num_gpus == 0) assert(train_batch_size % num_gpus == 0)
self.cal_loss_batch_size = train_batch_size / num_gpus self.cal_loss_batch_size = train_batch_size // num_gpus
assert(self.cal_loss_batch_size % samples_each_class == 0) assert(self.cal_loss_batch_size % samples_each_class == 0)
class_num = train_batch_size / samples_each_class class_num = train_batch_size // samples_each_class
self.train_reader = reader.eml_train(train_batch_size, samples_each_class) self.train_reader = reader.eml_train(train_batch_size, samples_each_class)
self.test_reader = reader.test() self.test_reader = reader.test()
......
...@@ -20,12 +20,14 @@ def recall_topk(fea, lab, k = 1): ...@@ -20,12 +20,14 @@ def recall_topk(fea, lab, k = 1):
import subprocess import subprocess
import os import os
def get_gpu_num(): def get_gpu_num():
visibledevice = os.getenv('CUDA_VISIBLE_DEVICES') visibledevice = os.getenv('CUDA_VISIBLE_DEVICES')
if visibledevice: if visibledevice:
devicenum = len(visibledevice.split(',')) devicenum = len(visibledevice.split(','))
else: else:
devicenum = subprocess.check_output(['nvidia-smi', '-L']).count('\n') devicenum = subprocess.check_output(
[str.encode('nvidia-smi'), str.encode('-L')]).decode('utf-8').count('\n')
return devicenum return devicenum
import paddle as paddle import paddle as paddle
......
import numpy as np import numpy as np
import datareader as reader
import paddle.fluid as fluid import paddle.fluid as fluid
from metrics import calculate_order_dist_matrix from . import datareader as reader
from metrics import get_gpu_num from .metrics import calculate_order_dist_matrix
from .metrics import get_gpu_num
class quadrupletloss(): class quadrupletloss():
def __init__(self, def __init__(self,
...@@ -14,9 +14,9 @@ class quadrupletloss(): ...@@ -14,9 +14,9 @@ class quadrupletloss():
self.samples_each_class = samples_each_class self.samples_each_class = samples_each_class
self.train_batch_size = train_batch_size self.train_batch_size = train_batch_size
assert(train_batch_size % num_gpus == 0) assert(train_batch_size % num_gpus == 0)
self.cal_loss_batch_size = train_batch_size / num_gpus self.cal_loss_batch_size = train_batch_size // num_gpus
assert(self.cal_loss_batch_size % samples_each_class == 0) assert(self.cal_loss_batch_size % samples_each_class == 0)
class_num = train_batch_size / samples_each_class class_num = train_batch_size // samples_each_class
self.train_reader = reader.quadruplet_train(class_num, samples_each_class) self.train_reader = reader.quadruplet_train(class_num, samples_each_class)
self.test_reader = reader.test() self.test_reader = reader.test()
......
import datareader as reader from . import datareader as reader
import paddle.fluid as fluid import paddle.fluid as fluid
class tripletloss(): class tripletloss():
......
...@@ -75,7 +75,7 @@ class ResNet(): ...@@ -75,7 +75,7 @@ class ResNet():
num_filters=num_filters, num_filters=num_filters,
filter_size=filter_size, filter_size=filter_size,
stride=stride, stride=stride,
padding=(filter_size - 1) / 2, padding=(filter_size - 1) // 2,
groups=groups, groups=groups,
act=None, act=None,
bias_attr=False) bias_attr=False)
......
...@@ -127,7 +127,7 @@ class SE_ResNeXt(): ...@@ -127,7 +127,7 @@ class SE_ResNeXt():
num_filters=num_filters, num_filters=num_filters,
filter_size=filter_size, filter_size=filter_size,
stride=stride, stride=stride,
padding=(filter_size - 1) / 2, padding=(filter_size - 1) // 2,
groups=groups, groups=groups,
act=None, act=None,
bias_attr=False) bias_attr=False)
......
...@@ -93,7 +93,7 @@ def train(args): ...@@ -93,7 +93,7 @@ def train(args):
elif loss_name == "emlloss": elif loss_name == "emlloss":
metricloss = emlloss( metricloss = emlloss(
train_batch_size = args.train_batch_size, train_batch_size = args.train_batch_size,
samples_each_class=2 samples_each_class = args.samples_each_class
) )
cost_metric = metricloss.loss(out[0]) cost_metric = metricloss.loss(out[0])
avg_cost_metric = fluid.layers.mean(x=cost_metric) avg_cost_metric = fluid.layers.mean(x=cost_metric)
......
...@@ -17,6 +17,7 @@ from __future__ import absolute_import ...@@ -17,6 +17,7 @@ from __future__ import absolute_import
from __future__ import division from __future__ import division
from __future__ import print_function from __future__ import print_function
import distutils.util import distutils.util
import six
import numpy as np import numpy as np
from paddle.fluid import core from paddle.fluid import core
...@@ -37,7 +38,7 @@ def print_arguments(args): ...@@ -37,7 +38,7 @@ def print_arguments(args):
:type args: argparse.Namespace :type args: argparse.Namespace
""" """
print("----------- Configuration Arguments -----------") print("----------- Configuration Arguments -----------")
for arg, value in sorted(vars(args).iteritems()): for arg, value in sorted(six.iteritems(vars(args))):
print("%s: %s" % (arg, value)) print("%s: %s" % (arg, value))
print("------------------------------------------------") print("------------------------------------------------")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册