diff --git a/fluid/metric_learning/losses/datareader.py b/fluid/metric_learning/losses/datareader.py index c3f04eb96665fee339d8e70fa86d691a26c09031..286bf9503aa9b2801cd71b3e1628abc021cc2067 100644 --- a/fluid/metric_learning/losses/datareader.py +++ b/fluid/metric_learning/losses/datareader.py @@ -1,7 +1,6 @@ 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(): diff --git a/fluid/metric_learning/losses/emlloss.py b/fluid/metric_learning/losses/emlloss.py index 2349cedba3871006deadd2ad285f5d2192d492c5..362b0ae0701008a7b36320abd2136fec9248f649 100644 --- a/fluid/metric_learning/losses/emlloss.py +++ b/fluid/metric_learning/losses/emlloss.py @@ -1,9 +1,9 @@ -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() diff --git a/fluid/metric_learning/losses/metrics.py b/fluid/metric_learning/losses/metrics.py index 08b9d6f6721b9e11eb3b2be8975df395f1759133..51805bdef51103812bef1c2b51449747dfebbf11 100644 --- a/fluid/metric_learning/losses/metrics.py +++ b/fluid/metric_learning/losses/metrics.py @@ -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 diff --git a/fluid/metric_learning/losses/quadrupletloss.py b/fluid/metric_learning/losses/quadrupletloss.py index 8615a20fdddd871e47cffa0380ee9b2032f06656..b80af96e444b47a641cbc2f1ae277a88b9fa107f 100644 --- a/fluid/metric_learning/losses/quadrupletloss.py +++ b/fluid/metric_learning/losses/quadrupletloss.py @@ -1,8 +1,8 @@ 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() diff --git a/fluid/metric_learning/losses/tripletloss.py b/fluid/metric_learning/losses/tripletloss.py index 65f0cebf02c50acf6605e909318f72acedbb65b3..02ad989c8676f0ea8f0c5eff9b411b954d710f3e 100644 --- a/fluid/metric_learning/losses/tripletloss.py +++ b/fluid/metric_learning/losses/tripletloss.py @@ -1,4 +1,4 @@ -import datareader as reader +from . import datareader as reader import paddle.fluid as fluid class tripletloss(): diff --git a/fluid/metric_learning/models/resnet.py b/fluid/metric_learning/models/resnet.py index 77d0256aab71c661760b09f3f9fbcfa79be2767c..7fbe65b6c324e277a7ee746936720f85818f263d 100644 --- a/fluid/metric_learning/models/resnet.py +++ b/fluid/metric_learning/models/resnet.py @@ -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) diff --git a/fluid/metric_learning/models/se_resnext.py b/fluid/metric_learning/models/se_resnext.py index 828f5872e53fdb1eaca770056b155a180510de63..16cc31bc78a9db8400875f1400aecc8f9c744b81 100644 --- a/fluid/metric_learning/models/se_resnext.py +++ b/fluid/metric_learning/models/se_resnext.py @@ -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) diff --git a/fluid/metric_learning/train.py b/fluid/metric_learning/train.py index 4ef75b268c4fdeb141b22fef447ec65d2dc7c409..d3705bf55f3f9f9ccdb0da2ea6916de0d5d18d4d 100644 --- a/fluid/metric_learning/train.py +++ b/fluid/metric_learning/train.py @@ -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) diff --git a/fluid/metric_learning/utility.py b/fluid/metric_learning/utility.py index 506e6007ceb9059caf1163befb6ff594d67b547a..d8fe4164eebbef30e1493f56f635694bcc5877cb 100644 --- a/fluid/metric_learning/utility.py +++ b/fluid/metric_learning/utility.py @@ -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("------------------------------------------------")