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

Merge pull request #1335 from kebinC/metric

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