├── pcs ├── __init__.py ├── agents │ ├── __init__.py │ └── BaseAgent.py ├── utils │ ├── __init__.py │ ├── utils.py │ ├── datautils.py │ ├── setup.py │ └── torchutils.py ├── models │ ├── __init__.py │ ├── head.py │ ├── memorybank.py │ └── clustering.py └── run.py ├── images └── framework.png ├── requirements.txt ├── setup.py ├── config ├── office │ ├── A-D-1.json │ ├── A-W-3.json │ ├── D-W-1.json │ ├── W-D-1.json │ ├── W-D-3.json │ ├── A-D-3.json │ ├── D-A-1.json │ ├── D-A-3.json │ ├── D-W-3.json │ ├── W-A-1.json │ ├── W-A-3.json │ └── A-W-1.json ├── officehome_Ar-Cl.json ├── officehome_Rw-Pr.json └── config.yaml ├── data └── splits │ ├── office │ ├── dslr_labeled_1.txt │ ├── amazon_labeled_1.txt │ ├── webcam_labeled_1.txt │ ├── dslr_labeled_3.txt │ ├── amazon_labeled_3.txt │ ├── webcam_labeled_3.txt │ ├── dslr_labeled_5.txt │ ├── amazon_labeled_5.txt │ ├── webcam_labeled_5.txt │ ├── dslr_unlabeled_11.txt │ ├── dslr_labeled_7.txt │ ├── dslr_unlabeled_9.txt │ └── amazon_labeled_7.txt │ ├── office_home │ ├── Art_labeled_p03.txt │ ├── Real_labeled_p03.txt │ ├── Art_labeled_p06.txt │ ├── Clipart_labeled_p03.txt │ ├── Product_labeled_p03.txt │ ├── Real_labeled_p06.txt │ ├── Clipart_labeled_p06.txt │ └── Product_labeled_p06.txt │ └── domainnet │ ├── real_labeled_1.txt │ ├── sketch_labeled_1.txt │ ├── clipart_labeled_1.txt │ └── painting_labeled_1.txt ├── README.md └── .gitignore /pcs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pcs/agents/__init__.py: -------------------------------------------------------------------------------- 1 | from .BaseAgent import BaseAgent 2 | from .CDSAgent import CDSAgent -------------------------------------------------------------------------------- /images/framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhengzangw/PCS-FUDA/HEAD/images/framework.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | dotmap 2 | faiss-gpu==1.7.0 3 | scikit-learn 4 | tensorboard 5 | tqdm 6 | 7 | -------------------------------------------------------------------------------- /pcs/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from . import datautils, torchutils, utils 2 | from .setup import check_pretrain_dir, print_info, process_config 3 | from .utils import * 4 | -------------------------------------------------------------------------------- /pcs/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .clustering import compute_variance, torch_kmeans 2 | from .head import CosineClassifier 3 | from .memorybank import MemoryBank 4 | from .ssda import SSDALossModule, loss_info, update_data_memory 5 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # setup.py 2 | #!/usr/bin/env python 3 | 4 | from setuptools import find_packages, setup 5 | 6 | setup( 7 | name="pcs", 8 | version="1.0.0", 9 | description="This is pytorch implementation of Prototypical Cross-domain Self-supervised network (PCS)", 10 | packages=["pcs"], 11 | ) 12 | -------------------------------------------------------------------------------- /pcs/models/head.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | from pcs.utils.torchutils import grad_reverse 5 | from torch.autograd import Function 6 | from torchvision import models 7 | 8 | 9 | class CosineClassifier(nn.Module): 10 | def __init__(self, num_class=64, inc=4096, temp=0.05): 11 | super(CosineClassifier, self).__init__() 12 | self.fc = nn.Linear(inc, num_class, bias=False) 13 | self.num_class = num_class 14 | self.temp = temp 15 | 16 | def forward(self, x, reverse=False, eta=0.1): 17 | self.normalize_fc() 18 | 19 | if reverse: 20 | x = grad_reverse(x, eta) 21 | x = F.normalize(x) 22 | x_out = self.fc(x) 23 | x_out = x_out / self.temp 24 | 25 | return x_out 26 | 27 | def normalize_fc(self): 28 | self.fc.weight.data = F.normalize(self.fc.weight.data, p=2, eps=1e-12, dim=1) 29 | 30 | @torch.no_grad() 31 | def compute_discrepancy(self): 32 | self.normalize_fc() 33 | W = self.fc.weight.data 34 | D = torch.mm(W, W.transpose(0, 1)) 35 | D_mask = 1 - torch.eye(self.num_class).cuda() 36 | return torch.sum(D * D_mask).item() 37 | -------------------------------------------------------------------------------- /config/office/A-D-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "amazon->dslr", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "amazon", 10 | "target": "dslr", 11 | "fewshot": "1", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 20, 31 | "load_weight_epoch": 2 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.98, 35 | "thres_tgt": 0.98, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.5, 0.05, 0.5, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/A-W-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "amazon->webcam", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "amazon", 10 | "target": "webcam", 11 | "fewshot": "3", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": 50, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 5, 31 | "load_weight_epoch": 1 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.5, 0.05, 0.5, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/D-W-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "dslr->webcam", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "dslr", 10 | "target": "webcam", 11 | "fewshot": "1", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 20, 31 | "load_weight_epoch": 0 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.5, 0.05, 0.5, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/W-D-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "webcam->dslr", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "webcam", 10 | "target": "dslr", 11 | "fewshot": "1", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": 100, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 10, 31 | "load_weight_epoch": 0 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.95, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/W-D-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "webcam->dslr", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "webcam", 10 | "target": "dslr", 11 | "fewshot": "3", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": 100, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 10, 31 | "load_weight_epoch": 0 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/A-D-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "amazon->dslr", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "amazon", 10 | "target": "dslr", 11 | "fewshot": "3", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 10, 31 | "load_weight_epoch": 5 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.95, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.1, 0.01, 0.1, 0.01], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 10, 51 | "k": [31, 31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/D-A-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "dslr->amazon", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "dslr", 10 | "target": "amazon", 11 | "fewshot": "1", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 50, 31 | "load_weight_epoch": 3 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/D-A-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "dslr->amazon", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "dslr", 10 | "target": "amazon", 11 | "fewshot": "3", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 50, 31 | "load_weight_epoch": 3 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/D-W-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "dslr->webcam", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "dslr", 10 | "target": "webcam", 11 | "fewshot": "3", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 20, 31 | "load_weight_epoch": 0 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/W-A-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "webcam->amazon", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "webcam", 10 | "target": "amazon", 11 | "fewshot": "1", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": 100, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 50, 31 | "load_weight_epoch": 2 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.98, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.5, 0.05, 0.5, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/W-A-3.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "webcam->amazon", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "webcam", 10 | "target": "amazon", 11 | "fewshot": "3", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 50, 31 | "load_weight_epoch": 3 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.99, 35 | "thres_tgt": 0.99, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/office/A-W-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "office", 5 | "exp_id": "amazon->webcam", 6 | "agent": "CDSAgent", 7 | "data_params": { 8 | "name": "office", 9 | "source": "amazon", 10 | "target": "webcam", 11 | "fewshot": "1", 12 | "aug": "aug_0" 13 | }, 14 | "num_epochs": 500, 15 | "steps_epoch": null, 16 | "optim_params": { 17 | "learning_rate": 0.01, 18 | "conv_lr_ratio": 0.1, 19 | "patience": 4, 20 | "batch_size_lbd": 64, 21 | "batch_size": 64, 22 | "decay": true, 23 | "weight_decay": 5e-4, 24 | "cls_update": true 25 | }, 26 | "model_params": { 27 | "out_dim": 512, 28 | "version": "pretrain-resnet50", 29 | "load_weight": "src-tgt", 30 | "load_weight_thres": 5, 31 | "load_weight_epoch": 5 32 | }, 33 | "loss_params": { 34 | "thres_src": 0.98, 35 | "thres_tgt": 0.98, 36 | "temp": 0.1, 37 | "loss": [ 38 | "cls-so", 39 | "proto-each", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 1, 0.05, 0.05, 0.05, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 10, 51 | "k": [31, 31, 62] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /config/officehome_Ar-Cl.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "officehome", 5 | "exp_id": "Art->Clipart:p03", 6 | "data_params": { 7 | "name": "office_home", 8 | "source": "Art", 9 | "target": "Clipart", 10 | "fewshot": "p03", 11 | "aug": "aug_0" 12 | }, 13 | "num_epochs": 500, 14 | "steps_epoch": null, 15 | "optim_params": { 16 | "learning_rate": 0.01, 17 | "conv_lr_ratio": 0.1, 18 | "patience": 4, 19 | "batch_size_lbd": 32, 20 | "batch_size": 64, 21 | "decay": true, 22 | "weight_decay": 5e-4, 23 | "cls_update": true 24 | }, 25 | "model_params": { 26 | "out_dim": 512, 27 | "version": "pretrain-resnet50", 28 | "load_weight": "src-tgt", 29 | "load_weight_thres": 30, 30 | "load_weight_epoch": 5 31 | }, 32 | "loss_params": { 33 | "thres_src": 0.95, 34 | "thres_tgt": 0.98, 35 | "temp": 0.1, 36 | "loss": [ 37 | "cls-so", 38 | "proto-src", 39 | "proto-tgt", 40 | "I2C-cross", 41 | "semi-condentmax", 42 | "semi-entmin", 43 | "tgt-condentmax", 44 | "tgt-entmin" 45 | ], 46 | "weight": [1, 1, 0.5, 1, 0.5, 0.05, 0.5, 0.05], 47 | "clus": { 48 | "kmeans_freq": 1, 49 | "type": ["each"], 50 | "n_k": 15, 51 | "k": [65, 130] 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /data/splits/office/dslr_labeled_1.txt: -------------------------------------------------------------------------------- 1 | dslr/images/back_pack/frame_0008.jpg 0 2 | dslr/images/bike/frame_0004.jpg 1 3 | dslr/images/bike_helmet/frame_0001.jpg 2 4 | dslr/images/bookcase/frame_0002.jpg 3 5 | dslr/images/bottle/frame_0002.jpg 4 6 | dslr/images/calculator/frame_0011.jpg 5 7 | dslr/images/desk_chair/frame_0012.jpg 6 8 | dslr/images/desk_lamp/frame_0002.jpg 7 9 | dslr/images/desktop_computer/frame_0002.jpg 8 10 | dslr/images/file_cabinet/frame_0013.jpg 9 11 | dslr/images/headphones/frame_0006.jpg 10 12 | dslr/images/keyboard/frame_0004.jpg 11 13 | dslr/images/laptop_computer/frame_0001.jpg 12 14 | dslr/images/letter_tray/frame_0001.jpg 13 15 | dslr/images/mobile_phone/frame_0026.jpg 14 16 | dslr/images/monitor/frame_0001.jpg 15 17 | dslr/images/mouse/frame_0006.jpg 16 18 | dslr/images/mug/frame_0008.jpg 17 19 | dslr/images/paper_notebook/frame_0010.jpg 18 20 | dslr/images/pen/frame_0008.jpg 19 21 | dslr/images/phone/frame_0003.jpg 20 22 | dslr/images/printer/frame_0002.jpg 21 23 | dslr/images/projector/frame_0006.jpg 22 24 | dslr/images/punchers/frame_0004.jpg 23 25 | dslr/images/ring_binder/frame_0001.jpg 24 26 | dslr/images/ruler/frame_0005.jpg 25 27 | dslr/images/scissors/frame_0016.jpg 26 28 | dslr/images/speaker/frame_0008.jpg 27 29 | dslr/images/stapler/frame_0003.jpg 28 30 | dslr/images/tape_dispenser/frame_0022.jpg 29 31 | dslr/images/trash_can/frame_0009.jpg 30 32 | -------------------------------------------------------------------------------- /config/officehome_Rw-Pr.json: -------------------------------------------------------------------------------- 1 | { 2 | "seed": 1337, 3 | "exp_base": "./exps", 4 | "exp_name": "officehome", 5 | "exp_id": "Real->Product:p03", 6 | "data_params": { 7 | "name": "office_home", 8 | "source": "Real", 9 | "target": "Product", 10 | "fewshot": "p03", 11 | "aug": "aug_0" 12 | }, 13 | "num_epochs": 500, 14 | "steps_epoch": null, 15 | "optim_params": { 16 | "learning_rate": 0.01, 17 | "conv_lr_ratio": 0.1, 18 | "patience": 4, 19 | "batch_size_lbd": 32, 20 | "batch_size": 64, 21 | "decay": true, 22 | "weight_decay": 5e-4, 23 | "cls_update": true 24 | }, 25 | "model_params": { 26 | "out_dim": 512, 27 | "version": "pretrain-resnet50", 28 | "load_weight": "src-tgt", 29 | "load_weight_thres": 10, 30 | "load_weight_epoch": 5 31 | }, 32 | "loss_params": { 33 | "thres_src": 0.99, 34 | "thres_tgt": 0.99, 35 | "temp": 0.1, 36 | "loss": [ 37 | "cls-so", 38 | "cls-info", 39 | "proto-src", 40 | "proto-tgt", 41 | "I2C-cross", 42 | "semi-condentmax", 43 | "semi-entmin", 44 | "tgt-condentmax", 45 | "tgt-entmin" 46 | ], 47 | "weight": [1, 0.1, 1, 0.5, 1, 0.5, 0.05, 0.5, 0.05], 48 | "clus": { 49 | "kmeans_freq": 1, 50 | "type": ["each"], 51 | "n_k": 15, 52 | "k": [65, 130] 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /data/splits/office/amazon_labeled_1.txt: -------------------------------------------------------------------------------- 1 | amazon/images/back_pack/frame_0057.jpg 0 2 | amazon/images/bike/frame_0015.jpg 1 3 | amazon/images/bike_helmet/frame_0001.jpg 2 4 | amazon/images/bookcase/frame_0012.jpg 3 5 | amazon/images/bottle/frame_0003.jpg 4 6 | amazon/images/calculator/frame_0086.jpg 5 7 | amazon/images/desk_chair/frame_0089.jpg 6 8 | amazon/images/desk_lamp/frame_0011.jpg 7 9 | amazon/images/desktop_computer/frame_0013.jpg 8 10 | amazon/images/file_cabinet/frame_0046.jpg 9 11 | amazon/images/headphones/frame_0031.jpg 10 12 | amazon/images/keyboard/frame_0003.jpg 11 13 | amazon/images/laptop_computer/frame_0004.jpg 12 14 | amazon/images/letter_tray/frame_0003.jpg 13 15 | amazon/images/mobile_phone/frame_0045.jpg 14 16 | amazon/images/monitor/frame_0083.jpg 15 17 | amazon/images/mouse/frame_0080.jpg 16 18 | amazon/images/mug/frame_0062.jpg 17 19 | amazon/images/paper_notebook/frame_0079.jpg 18 20 | amazon/images/pen/frame_0060.jpg 19 21 | amazon/images/phone/frame_0020.jpg 20 22 | amazon/images/printer/frame_0012.jpg 21 23 | amazon/images/projector/frame_0024.jpg 22 24 | amazon/images/punchers/frame_0092.jpg 23 25 | amazon/images/ring_binder/frame_0015.jpg 24 26 | amazon/images/ruler/frame_0002.jpg 25 27 | amazon/images/scissors/frame_0065.jpg 26 28 | amazon/images/speaker/frame_0063.jpg 27 29 | amazon/images/stapler/frame_0032.jpg 28 30 | amazon/images/tape_dispenser/frame_0009.jpg 29 31 | amazon/images/trash_can/frame_0060.jpg 30 32 | -------------------------------------------------------------------------------- /data/splits/office/webcam_labeled_1.txt: -------------------------------------------------------------------------------- 1 | webcam/images/back_pack/frame_0025.jpg 0 2 | webcam/images/bike/frame_0015.jpg 1 3 | webcam/images/bike_helmet/frame_0004.jpg 2 4 | webcam/images/bookcase/frame_0001.jpg 3 5 | webcam/images/bottle/frame_0003.jpg 4 6 | webcam/images/calculator/frame_0030.jpg 5 7 | webcam/images/desk_chair/frame_0038.jpg 6 8 | webcam/images/desk_lamp/frame_0002.jpg 7 9 | webcam/images/desktop_computer/frame_0003.jpg 8 10 | webcam/images/file_cabinet/frame_0004.jpg 9 11 | webcam/images/headphones/frame_0025.jpg 10 12 | webcam/images/keyboard/frame_0012.jpg 11 13 | webcam/images/laptop_computer/frame_0008.jpg 12 14 | webcam/images/letter_tray/frame_0001.jpg 13 15 | webcam/images/mobile_phone/frame_0001.jpg 14 16 | webcam/images/monitor/frame_0002.jpg 15 17 | webcam/images/mouse/frame_0012.jpg 16 18 | webcam/images/mug/frame_0021.jpg 17 19 | webcam/images/paper_notebook/frame_0020.jpg 18 20 | webcam/images/pen/frame_0031.jpg 19 21 | webcam/images/phone/frame_0015.jpg 20 22 | webcam/images/printer/frame_0005.jpg 21 23 | webcam/images/projector/frame_0003.jpg 22 24 | webcam/images/punchers/frame_0006.jpg 23 25 | webcam/images/ring_binder/frame_0008.jpg 24 26 | webcam/images/ruler/frame_0001.jpg 25 27 | webcam/images/scissors/frame_0017.jpg 26 28 | webcam/images/speaker/frame_0016.jpg 27 29 | webcam/images/stapler/frame_0008.jpg 28 30 | webcam/images/tape_dispenser/frame_0003.jpg 29 31 | webcam/images/trash_can/frame_0018.jpg 30 32 | -------------------------------------------------------------------------------- /pcs/models/memorybank.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | import torch.nn as nn 4 | import torch.nn.functional as F 5 | import torchvision 6 | 7 | 8 | class MemoryBank(object): 9 | """For efficiently computing the background vectors.""" 10 | 11 | def __init__(self, size, dim): 12 | """generate random memory bank 13 | 14 | Args: 15 | size (int): length of the memory bank 16 | dim (int): dimension of the memory bank features 17 | device_ids (list): gpu lists 18 | """ 19 | self._bank = self._create(size, dim) 20 | 21 | def _create(self, size, dim): 22 | """generate randomized features 23 | """ 24 | # initialize random weights 25 | mb_init = torch.rand(size, dim, device=torch.device("cuda")) 26 | std_dev = 1.0 / np.sqrt(dim / 3) 27 | mb_init = mb_init * (2 * std_dev) - std_dev 28 | # L2 normalize so that the norm is 1 29 | mb_init = F.normalize(mb_init) 30 | return mb_init.detach() # detach so its not trainable 31 | 32 | def as_tensor(self): 33 | return self._bank 34 | 35 | def at_idxs(self, idxs): 36 | return torch.index_select(self._bank, 0, idxs) 37 | 38 | def update(self, indices, data_memory): 39 | data_dim = data_memory.size(1) 40 | data_memory = data_memory.detach() 41 | indices = indices.unsqueeze(1).repeat(1, data_dim) 42 | 43 | self._bank = self._bank.scatter_(0, indices, data_memory) 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Prototypical Cross-domain Self-supervised Learning for Few-shot Unsupervised Domain Adaptation (PCS) 2 | 3 | Pytorch implementation of PCS (Prototypical Cross-domain Self-supervised network) [[Homepage](http://xyue.io/pcs-fuda/)] [[PDF](https://arxiv.org/pdf/2103.16765.pdf)] 4 | 5 | ## Overview 6 | 7 | Architecture of Network 8 | 9 | ![Architecture of Network](./images/framework.png) 10 | 11 | Compared with state-of-the-art methods, PCS improves the mean classification accuracy over different domain pairs on FUDA by **10.5%**, **4.3%**, **9.0%**, and **13.2%** on Office, Office-Home, VisDA-2017, and DomainNet, respectively. 12 | q 13 | 14 | ## Requirements 15 | 16 | ```bash 17 | conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=10.2 -c pytorch 18 | pip install -r requirements.txt 19 | pip install -e . 20 | ``` 21 | 22 | ## Training 23 | 24 | - Download or soft-link your dataset under `data` folder (Split files are provided in `data/splits`, supported datasets are Office, Office-Home, VisDA-2017, and DomainNet) 25 | - To train the model, run following commands: 26 | 27 | ```bash 28 | CUDA_VISIBLE_DEVICES=0 python pcs/run.py --config config/${DATASET}/${DOMAIN-PAIR}.json 29 | CUDA_VISIBLE_DEVICES=0,1 python pcs/run.py --config config/office/D-A-1.json 30 | ``` 31 | 32 | [2021.06.24] We released all configs for office dataset. 33 | 34 | ## Citation 35 | 36 | ```bibtex 37 | @InProceedings{Yue_2021_Prototypical, 38 | author = {Yue, Xiangyu and Zheng, Zangwei and Zhang, Shanghang and Gao, Yang and Darrell, Trevor and Keutzer, Kurt and Sangiovanni-Vincentelli, Alberto}, 39 | title = {Prototypical Cross-domain Self-supervised Learning for Few-shot Unsupervised Domain Adaptation}, 40 | booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, 41 | month = {June}, 42 | year = {2021} 43 | } 44 | ``` 45 | 46 | ## Acknowlegdement 47 | 48 | This code is built on [[MME](https://github.com/VisionLearningGroup/SSDA_MME)]. We thank the authors for sharing their codes. 49 | -------------------------------------------------------------------------------- /data/splits/office_home/Art_labeled_p03.txt: -------------------------------------------------------------------------------- 1 | Art/Alarm_Clock/00057.jpg 0 2 | Art/Backpack/00014.jpg 1 3 | Art/Batteries/00011.jpg 2 4 | Art/Bed/00022.jpg 3 5 | Art/Bike/00064.jpg 4 6 | Art/Bottle/00005.jpg 5 7 | Art/Bottle/00086.jpg 5 8 | Art/Bottle/00091.jpg 5 9 | Art/Bucket/00015.jpg 6 10 | Art/Calculator/00007.jpg 7 11 | Art/Calendar/00012.jpg 8 12 | Art/Candles/00003.jpg 9 13 | Art/Candles/00052.jpg 9 14 | Art/Chair/00024.jpg 10 15 | Art/Chair/00063.jpg 10 16 | Art/Clipboards/00021.jpg 11 17 | Art/Computer/00007.jpg 12 18 | Art/Couch/00016.jpg 13 19 | Art/Curtains/00031.jpg 14 20 | Art/Desk_Lamp/00020.jpg 15 21 | Art/Drill/00006.jpg 16 22 | Art/Eraser/00005.jpg 17 23 | Art/Exit_Sign/00003.jpg 18 24 | Art/Fan/00008.jpg 19 25 | Art/File_Cabinet/00004.jpg 20 26 | Art/Flipflops/00017.jpg 21 27 | Art/Flowers/00032.jpg 22 28 | Art/Flowers/00063.jpg 22 29 | Art/Folder/00019.jpg 23 30 | Art/Fork/00015.jpg 24 31 | Art/Glasses/00036.jpg 25 32 | Art/Hammer/00038.jpg 26 33 | Art/Helmet/00018.jpg 27 34 | Art/Helmet/00077.jpg 27 35 | Art/Kettle/00042.jpg 28 36 | Art/Keyboard/00003.jpg 29 37 | Art/Knives/00008.jpg 30 38 | Art/Knives/00066.jpg 30 39 | Art/Lamp_Shade/00024.jpg 31 40 | Art/Laptop/00005.jpg 32 41 | Art/Laptop/00036.jpg 32 42 | Art/Marker/00016.jpg 33 43 | Art/Monitor/00039.jpg 34 44 | Art/Mop/00032.jpg 35 45 | Art/Mouse/00016.jpg 36 46 | Art/Mug/00016.jpg 37 47 | Art/Notebook/00007.jpg 38 48 | Art/Oven/00014.jpg 39 49 | Art/Pan/00015.jpg 40 50 | Art/Paper_Clip/00017.jpg 41 51 | Art/Pen/00018.jpg 42 52 | Art/Pencil/00020.jpg 43 53 | Art/Postit_Notes/00014.jpg 44 54 | Art/Printer/00010.jpg 45 55 | Art/Push_Pin/00007.jpg 46 56 | Art/Radio/00037.jpg 47 57 | Art/Refrigerator/00042.jpg 48 58 | Art/Ruler/00003.jpg 49 59 | Art/Scissors/00004.jpg 50 60 | Art/Screwdriver/00006.jpg 51 61 | Art/Shelf/00022.jpg 52 62 | Art/Sink/00025.jpg 53 63 | Art/Sneakers/00038.jpg 54 64 | Art/Soda/00033.jpg 55 65 | Art/Speaker/00007.jpg 56 66 | Art/Spoon/00010.jpg 57 67 | Art/TV/00033.jpg 58 68 | Art/Table/00011.jpg 59 69 | Art/Telephone/00024.jpg 60 70 | Art/ToothBrush/00001.jpg 61 71 | Art/Toys/00002.jpg 62 72 | Art/Trash_Can/00007.jpg 63 73 | Art/Webcam/00015.jpg 64 -------------------------------------------------------------------------------- /config/config.yaml: -------------------------------------------------------------------------------- 1 | # This file illustrate keys' meaning in configs 2 | # This file is not a training config 3 | # training conig should be `xxx.json` 4 | # some default value are defined in `run.py:adjust_config` 5 | 6 | debug: false # Disable debug mode 7 | cuda: true # Use cuda 8 | gpu_device: null # use all available devices 9 | seed: 1337 # random seed 10 | exp_base: exps # directory that `experiments` folders will be created and experiment folder will be created under `{exp_base}/experiments/{exp_name}/{exp_id}` 11 | exp_name: office # experiment name 12 | exp_id: "1:D->A" # experiment id 13 | pretrained_exp_dir: null # folder where checkpoints can be loaded 14 | num_epochs: 500 # max number of epochs to run 15 | steps_epoch: 100 # number of iterations per epoch 16 | validate_freq: 1 # validation frequency 17 | copy_checkpoint_freq: 50 # frequency to copy the checkpoint 18 | data_params: 19 | name: office # name of dataset to use 20 | source: dslr # source domain 21 | target: amazon # target domain 22 | aug_src: aug_0 # augmentation for source 23 | aug_tgt: aug_0 # augmentation for target 24 | optim_params: 25 | learning_rate: 0.01 26 | conv_lr_ratio: 0.1 # ratio of learning for convolution layer 27 | patience: 4 # patience for early stop 28 | batch_size_lbd: 32 # batch size for labeled data 29 | batch_size: 64 30 | decay: true # use learning rate scheduler 31 | weight_decay: 5.e-4 32 | cls_update: true # update classifier's weight 33 | model_params: 34 | out_dim: 512 # feature dimension 35 | version: pretrain-resnet50 # network to use 36 | load_memory_bank: true 37 | # APCU hp 38 | load_weight: src-tgt 39 | load_weight_thres: 5 # threshold to load weight for one class 40 | load_weight_epoch: 5 # load after 5 epochs 41 | loss_params: 42 | temp: 0.1 # temparature for ssl 43 | thres_src: 0.99 # threshold for source psuedo (for APCU) 44 | thres_tgt: 0.99 45 | loss: [] # a list of loss 46 | # cls-so: supervised loss 47 | # proto-each + info: Loss InSelf 48 | # I2C-cross: Loss CrossSelf 49 | # semi-condentmax + semi-entmin: Loss MIM in source 50 | # tgt-condentmax + tgt-ent: Loss MIM in target 51 | weight: [] # weight for each loss 52 | clus: {} # clustering information 53 | -------------------------------------------------------------------------------- /data/splits/office/dslr_labeled_3.txt: -------------------------------------------------------------------------------- 1 | dslr/images/back_pack/frame_0001.jpg 0 2 | dslr/images/back_pack/frame_0002.jpg 0 3 | dslr/images/back_pack/frame_0008.jpg 0 4 | dslr/images/bike/frame_0002.jpg 1 5 | dslr/images/bike/frame_0003.jpg 1 6 | dslr/images/bike/frame_0019.jpg 1 7 | dslr/images/bike_helmet/frame_0003.jpg 2 8 | dslr/images/bike_helmet/frame_0022.jpg 2 9 | dslr/images/bike_helmet/frame_0023.jpg 2 10 | dslr/images/bookcase/frame_0002.jpg 3 11 | dslr/images/bookcase/frame_0004.jpg 3 12 | dslr/images/bookcase/frame_0006.jpg 3 13 | dslr/images/bottle/frame_0001.jpg 4 14 | dslr/images/bottle/frame_0013.jpg 4 15 | dslr/images/bottle/frame_0016.jpg 4 16 | dslr/images/calculator/frame_0001.jpg 5 17 | dslr/images/calculator/frame_0006.jpg 5 18 | dslr/images/calculator/frame_0010.jpg 5 19 | dslr/images/desk_chair/frame_0008.jpg 6 20 | dslr/images/desk_chair/frame_0010.jpg 6 21 | dslr/images/desk_chair/frame_0013.jpg 6 22 | dslr/images/desk_lamp/frame_0002.jpg 7 23 | dslr/images/desk_lamp/frame_0003.jpg 7 24 | dslr/images/desk_lamp/frame_0014.jpg 7 25 | dslr/images/desktop_computer/frame_0001.jpg 8 26 | dslr/images/desktop_computer/frame_0002.jpg 8 27 | dslr/images/desktop_computer/frame_0012.jpg 8 28 | dslr/images/file_cabinet/frame_0004.jpg 9 29 | dslr/images/file_cabinet/frame_0008.jpg 9 30 | dslr/images/file_cabinet/frame_0009.jpg 9 31 | dslr/images/headphones/frame_0002.jpg 10 32 | dslr/images/headphones/frame_0009.jpg 10 33 | dslr/images/headphones/frame_0011.jpg 10 34 | dslr/images/keyboard/frame_0002.jpg 11 35 | dslr/images/keyboard/frame_0008.jpg 11 36 | dslr/images/keyboard/frame_0009.jpg 11 37 | dslr/images/laptop_computer/frame_0002.jpg 12 38 | dslr/images/laptop_computer/frame_0017.jpg 12 39 | dslr/images/laptop_computer/frame_0019.jpg 12 40 | dslr/images/letter_tray/frame_0009.jpg 13 41 | dslr/images/letter_tray/frame_0014.jpg 13 42 | dslr/images/letter_tray/frame_0016.jpg 13 43 | dslr/images/mobile_phone/frame_0003.jpg 14 44 | dslr/images/mobile_phone/frame_0010.jpg 14 45 | dslr/images/mobile_phone/frame_0021.jpg 14 46 | dslr/images/monitor/frame_0009.jpg 15 47 | dslr/images/monitor/frame_0012.jpg 15 48 | dslr/images/monitor/frame_0016.jpg 15 49 | dslr/images/mouse/frame_0004.jpg 16 50 | dslr/images/mouse/frame_0011.jpg 16 51 | dslr/images/mouse/frame_0012.jpg 16 52 | dslr/images/mug/frame_0005.jpg 17 53 | dslr/images/mug/frame_0006.jpg 17 54 | dslr/images/mug/frame_0008.jpg 17 55 | dslr/images/paper_notebook/frame_0001.jpg 18 56 | dslr/images/paper_notebook/frame_0002.jpg 18 57 | dslr/images/paper_notebook/frame_0009.jpg 18 58 | dslr/images/pen/frame_0001.jpg 19 59 | dslr/images/pen/frame_0003.jpg 19 60 | dslr/images/pen/frame_0006.jpg 19 61 | dslr/images/phone/frame_0008.jpg 20 62 | dslr/images/phone/frame_0011.jpg 20 63 | dslr/images/phone/frame_0012.jpg 20 64 | dslr/images/printer/frame_0001.jpg 21 65 | dslr/images/printer/frame_0003.jpg 21 66 | dslr/images/printer/frame_0007.jpg 21 67 | dslr/images/projector/frame_0003.jpg 22 68 | dslr/images/projector/frame_0016.jpg 22 69 | dslr/images/projector/frame_0019.jpg 22 70 | dslr/images/punchers/frame_0003.jpg 23 71 | dslr/images/punchers/frame_0006.jpg 23 72 | dslr/images/punchers/frame_0007.jpg 23 73 | dslr/images/ring_binder/frame_0001.jpg 24 74 | dslr/images/ring_binder/frame_0003.jpg 24 75 | dslr/images/ring_binder/frame_0006.jpg 24 76 | dslr/images/ruler/frame_0001.jpg 25 77 | dslr/images/ruler/frame_0005.jpg 25 78 | dslr/images/ruler/frame_0007.jpg 25 79 | dslr/images/scissors/frame_0005.jpg 26 80 | dslr/images/scissors/frame_0010.jpg 26 81 | dslr/images/scissors/frame_0015.jpg 26 82 | dslr/images/speaker/frame_0002.jpg 27 83 | dslr/images/speaker/frame_0009.jpg 27 84 | dslr/images/speaker/frame_0014.jpg 27 85 | dslr/images/stapler/frame_0002.jpg 28 86 | dslr/images/stapler/frame_0006.jpg 28 87 | dslr/images/stapler/frame_0009.jpg 28 88 | dslr/images/tape_dispenser/frame_0005.jpg 29 89 | dslr/images/tape_dispenser/frame_0010.jpg 29 90 | dslr/images/tape_dispenser/frame_0015.jpg 29 91 | dslr/images/trash_can/frame_0001.jpg 30 92 | dslr/images/trash_can/frame_0007.jpg 30 93 | dslr/images/trash_can/frame_0010.jpg 30 94 | -------------------------------------------------------------------------------- /data/splits/office_home/Real_labeled_p03.txt: -------------------------------------------------------------------------------- 1 | Real/Alarm_Clock/00001.jpg 0 2 | Real/Alarm_Clock/00015.jpg 0 3 | Real/Alarm_Clock/00057.jpg 0 4 | Real/Backpack/00005.jpg 1 5 | Real/Backpack/00012.jpg 1 6 | Real/Batteries/00011.jpg 2 7 | Real/Batteries/00013.jpg 2 8 | Real/Bed/00041.jpg 3 9 | Real/Bed/00054.jpg 3 10 | Real/Bike/00003.jpg 4 11 | Real/Bike/00004.jpg 4 12 | Real/Bike/00045.jpg 4 13 | Real/Bottle/00016.jpg 5 14 | Real/Bottle/00062.jpg 5 15 | Real/Bucket/00012.jpg 6 16 | Real/Bucket/00020.jpg 6 17 | Real/Calculator/00015.jpg 7 18 | Real/Calculator/00024.jpg 7 19 | Real/Calendar/00002.jpg 8 20 | Real/Calendar/00065.jpg 8 21 | Real/Candles/00009.jpg 9 22 | Real/Candles/00032.jpg 9 23 | Real/Candles/00063.jpg 9 24 | Real/Chair/00060.jpg 10 25 | Real/Chair/00084.jpg 10 26 | Real/Chair/00086.jpg 10 27 | Real/Clipboards/00009.jpg 11 28 | Real/Clipboards/00024.jpg 11 29 | Real/Computer/00006.jpg 12 30 | Real/Computer/00035.jpg 12 31 | Real/Couch/00003.jpg 13 32 | Real/Couch/00059.jpg 13 33 | Real/Curtains/00039.jpg 14 34 | Real/Curtains/00062.jpg 14 35 | Real/Desk_Lamp/00023.jpg 15 36 | Real/Desk_Lamp/00055.jpg 15 37 | Real/Drill/00016.jpg 16 38 | Real/Drill/00018.jpg 16 39 | Real/Eraser/00014.jpg 17 40 | Real/Eraser/00035.jpg 17 41 | Real/Exit_Sign/00059.jpg 18 42 | Real/Exit_Sign/00068.jpg 18 43 | Real/Fan/00002.jpg 19 44 | Real/Fan/00043.jpg 19 45 | Real/File_Cabinet/00011.jpg 20 46 | Real/File_Cabinet/00033.jpg 20 47 | Real/Flipflops/00019.jpg 21 48 | Real/Flipflops/00043.jpg 21 49 | Real/Flowers/00049.jpg 22 50 | Real/Flowers/00061.jpg 22 51 | Real/Folder/00004.jpg 23 52 | Real/Folder/00021.jpg 23 53 | Real/Fork/00010.jpg 24 54 | Real/Glasses/00032.jpg 25 55 | Real/Glasses/00038.jpg 25 56 | Real/Hammer/00005.jpg 26 57 | Real/Hammer/00011.jpg 26 58 | Real/Helmet/00014.jpg 27 59 | Real/Helmet/00036.jpg 27 60 | Real/Kettle/00004.jpg 28 61 | Real/Kettle/00019.jpg 28 62 | Real/Keyboard/00015.jpg 29 63 | Real/Keyboard/00045.jpg 29 64 | Real/Knives/00019.jpg 30 65 | Real/Knives/00068.jpg 30 66 | Real/Lamp_Shade/00040.jpg 31 67 | Real/Lamp_Shade/00059.jpg 31 68 | Real/Laptop/00006.jpg 32 69 | Real/Laptop/00054.jpg 32 70 | Real/Marker/00008.jpg 33 71 | Real/Monitor/00006.jpg 34 72 | Real/Monitor/00023.jpg 34 73 | Real/Mop/00008.jpg 35 74 | Real/Mouse/00010.jpg 36 75 | Real/Mouse/00020.jpg 36 76 | Real/Mug/00010.jpg 37 77 | Real/Mug/00055.jpg 37 78 | Real/Notebook/00006.jpg 38 79 | Real/Notebook/00060.jpg 38 80 | Real/Oven/00014.jpg 39 81 | Real/Oven/00042.jpg 39 82 | Real/Pan/00016.jpg 40 83 | Real/Paper_Clip/00044.jpg 41 84 | Real/Paper_Clip/00060.jpg 41 85 | Real/Pen/00006.jpg 42 86 | Real/Pen/00061.jpg 42 87 | Real/Pencil/00031.jpg 43 88 | Real/Pencil/00051.jpg 43 89 | Real/Postit_Notes/00010.jpg 44 90 | Real/Postit_Notes/00041.jpg 44 91 | Real/Printer/00047.jpg 45 92 | Real/Printer/00050.jpg 45 93 | Real/Push_Pin/00034.jpg 46 94 | Real/Push_Pin/00053.jpg 46 95 | Real/Radio/00038.jpg 47 96 | Real/Radio/00045.jpg 47 97 | Real/Refrigerator/00019.jpg 48 98 | Real/Refrigerator/00041.jpg 48 99 | Real/Ruler/00012.jpg 49 100 | Real/Scissors/00054.jpg 50 101 | Real/Scissors/00056.jpg 50 102 | Real/Screwdriver/00008.jpg 51 103 | Real/Screwdriver/00050.jpg 51 104 | Real/Shelf/00014.jpg 52 105 | Real/Shelf/00063.jpg 52 106 | Real/Sink/00013.jpg 53 107 | Real/Sink/00064.jpg 53 108 | Real/Sneakers/00025.jpg 54 109 | Real/Sneakers/00045.jpg 54 110 | Real/Sneakers/00083.jpg 54 111 | Real/Soda/00007.jpg 55 112 | Real/Soda/00045.jpg 55 113 | Real/Speaker/00021.jpg 56 114 | Real/Speaker/00075.jpg 56 115 | Real/Spoon/00010.jpg 57 116 | Real/Spoon/00018.jpg 57 117 | Real/TV/00021.jpg 58 118 | Real/TV/00047.jpg 58 119 | Real/Table/00018.jpg 59 120 | Real/Table/00054.jpg 59 121 | Real/Telephone/00010.jpg 60 122 | Real/Telephone/00011.jpg 60 123 | Real/ToothBrush/00011.jpg 61 124 | Real/ToothBrush/00030.jpg 61 125 | Real/ToothBrush/00053.jpg 61 126 | Real/Toys/00007.jpg 62 127 | Real/Toys/00041.jpg 62 128 | Real/Trash_Can/00029.jpg 63 129 | Real/Trash_Can/00065.jpg 63 130 | Real/Webcam/00012.jpg 64 131 | Real/Webcam/00043.jpg 64 132 | -------------------------------------------------------------------------------- /data/splits/office/amazon_labeled_3.txt: -------------------------------------------------------------------------------- 1 | amazon/images/back_pack/frame_0001.jpg 0 2 | amazon/images/back_pack/frame_0015.jpg 0 3 | amazon/images/back_pack/frame_0057.jpg 0 4 | amazon/images/bike/frame_0005.jpg 1 5 | amazon/images/bike/frame_0012.jpg 1 6 | amazon/images/bike/frame_0075.jpg 1 7 | amazon/images/bike_helmet/frame_0011.jpg 2 8 | amazon/images/bike_helmet/frame_0013.jpg 2 9 | amazon/images/bike_helmet/frame_0046.jpg 2 10 | amazon/images/bookcase/frame_0003.jpg 3 11 | amazon/images/bookcase/frame_0004.jpg 3 12 | amazon/images/bookcase/frame_0031.jpg 3 13 | amazon/images/bottle/frame_0002.jpg 4 14 | amazon/images/bottle/frame_0023.jpg 4 15 | amazon/images/bottle/frame_0031.jpg 4 16 | amazon/images/calculator/frame_0020.jpg 5 17 | amazon/images/calculator/frame_0060.jpg 5 18 | amazon/images/calculator/frame_0079.jpg 5 19 | amazon/images/desk_chair/frame_0012.jpg 6 20 | amazon/images/desk_chair/frame_0015.jpg 6 21 | amazon/images/desk_chair/frame_0024.jpg 6 22 | amazon/images/desk_lamp/frame_0002.jpg 7 23 | amazon/images/desk_lamp/frame_0063.jpg 7 24 | amazon/images/desk_lamp/frame_0065.jpg 7 25 | amazon/images/desktop_computer/frame_0009.jpg 8 26 | amazon/images/desktop_computer/frame_0032.jpg 8 27 | amazon/images/desktop_computer/frame_0086.jpg 8 28 | amazon/images/file_cabinet/frame_0009.jpg 9 29 | amazon/images/file_cabinet/frame_0060.jpg 9 30 | amazon/images/file_cabinet/frame_0070.jpg 9 31 | amazon/images/headphones/frame_0012.jpg 10 32 | amazon/images/headphones/frame_0077.jpg 10 33 | amazon/images/headphones/frame_0087.jpg 10 34 | amazon/images/keyboard/frame_0006.jpg 11 35 | amazon/images/keyboard/frame_0066.jpg 11 36 | amazon/images/keyboard/frame_0075.jpg 11 37 | amazon/images/laptop_computer/frame_0009.jpg 12 38 | amazon/images/laptop_computer/frame_0035.jpg 12 39 | amazon/images/laptop_computer/frame_0072.jpg 12 40 | amazon/images/letter_tray/frame_0039.jpg 13 41 | amazon/images/letter_tray/frame_0062.jpg 13 42 | amazon/images/letter_tray/frame_0083.jpg 13 43 | amazon/images/mobile_phone/frame_0032.jpg 14 44 | amazon/images/mobile_phone/frame_0035.jpg 14 45 | amazon/images/mobile_phone/frame_0046.jpg 14 46 | amazon/images/monitor/frame_0026.jpg 15 47 | amazon/images/monitor/frame_0059.jpg 15 48 | amazon/images/monitor/frame_0084.jpg 15 49 | amazon/images/mouse/frame_0003.jpg 16 50 | amazon/images/mouse/frame_0068.jpg 16 51 | amazon/images/mouse/frame_0086.jpg 16 52 | amazon/images/mug/frame_0001.jpg 17 53 | amazon/images/mug/frame_0010.jpg 17 54 | amazon/images/mug/frame_0066.jpg 17 55 | amazon/images/paper_notebook/frame_0019.jpg 18 56 | amazon/images/paper_notebook/frame_0043.jpg 18 57 | amazon/images/paper_notebook/frame_0091.jpg 18 58 | amazon/images/pen/frame_0049.jpg 19 59 | amazon/images/pen/frame_0061.jpg 19 60 | amazon/images/pen/frame_0085.jpg 19 61 | amazon/images/phone/frame_0007.jpg 20 62 | amazon/images/phone/frame_0010.jpg 20 63 | amazon/images/phone/frame_0022.jpg 20 64 | amazon/images/printer/frame_0021.jpg 21 65 | amazon/images/printer/frame_0064.jpg 21 66 | amazon/images/printer/frame_0076.jpg 21 67 | amazon/images/projector/frame_0010.jpg 22 68 | amazon/images/projector/frame_0028.jpg 22 69 | amazon/images/projector/frame_0072.jpg 22 70 | amazon/images/punchers/frame_0004.jpg 23 71 | amazon/images/punchers/frame_0019.jpg 23 72 | amazon/images/punchers/frame_0045.jpg 23 73 | amazon/images/ring_binder/frame_0015.jpg 24 74 | amazon/images/ring_binder/frame_0019.jpg 24 75 | amazon/images/ring_binder/frame_0068.jpg 24 76 | amazon/images/ruler/frame_0006.jpg 25 77 | amazon/images/ruler/frame_0040.jpg 25 78 | amazon/images/ruler/frame_0059.jpg 25 79 | amazon/images/scissors/frame_0036.jpg 26 80 | amazon/images/scissors/frame_0054.jpg 26 81 | amazon/images/scissors/frame_0085.jpg 26 82 | amazon/images/speaker/frame_0006.jpg 27 83 | amazon/images/speaker/frame_0023.jpg 27 84 | amazon/images/speaker/frame_0035.jpg 27 85 | amazon/images/stapler/frame_0020.jpg 28 86 | amazon/images/stapler/frame_0039.jpg 28 87 | amazon/images/stapler/frame_0060.jpg 28 88 | amazon/images/tape_dispenser/frame_0006.jpg 29 89 | amazon/images/tape_dispenser/frame_0050.jpg 29 90 | amazon/images/tape_dispenser/frame_0073.jpg 29 91 | amazon/images/trash_can/frame_0044.jpg 30 92 | amazon/images/trash_can/frame_0045.jpg 30 93 | amazon/images/trash_can/frame_0064.jpg 30 94 | -------------------------------------------------------------------------------- /data/splits/office/webcam_labeled_3.txt: -------------------------------------------------------------------------------- 1 | webcam/images/back_pack/frame_0004.jpg 0 2 | webcam/images/back_pack/frame_0015.jpg 0 3 | webcam/images/back_pack/frame_0025.jpg 0 4 | webcam/images/bike/frame_0001.jpg 1 5 | webcam/images/bike/frame_0003.jpg 1 6 | webcam/images/bike/frame_0019.jpg 1 7 | webcam/images/bike_helmet/frame_0002.jpg 2 8 | webcam/images/bike_helmet/frame_0022.jpg 2 9 | webcam/images/bike_helmet/frame_0023.jpg 2 10 | webcam/images/bookcase/frame_0002.jpg 3 11 | webcam/images/bookcase/frame_0006.jpg 3 12 | webcam/images/bookcase/frame_0012.jpg 3 13 | webcam/images/bottle/frame_0001.jpg 4 14 | webcam/images/bottle/frame_0008.jpg 4 15 | webcam/images/bottle/frame_0015.jpg 4 16 | webcam/images/calculator/frame_0001.jpg 5 17 | webcam/images/calculator/frame_0012.jpg 5 18 | webcam/images/calculator/frame_0026.jpg 5 19 | webcam/images/desk_chair/frame_0030.jpg 6 20 | webcam/images/desk_chair/frame_0031.jpg 6 21 | webcam/images/desk_chair/frame_0040.jpg 6 22 | webcam/images/desk_lamp/frame_0003.jpg 7 23 | webcam/images/desk_lamp/frame_0005.jpg 7 24 | webcam/images/desk_lamp/frame_0006.jpg 7 25 | webcam/images/desktop_computer/frame_0001.jpg 8 26 | webcam/images/desktop_computer/frame_0004.jpg 8 27 | webcam/images/desktop_computer/frame_0017.jpg 8 28 | webcam/images/file_cabinet/frame_0003.jpg 9 29 | webcam/images/file_cabinet/frame_0008.jpg 9 30 | webcam/images/file_cabinet/frame_0016.jpg 9 31 | webcam/images/headphones/frame_0015.jpg 10 32 | webcam/images/headphones/frame_0018.jpg 10 33 | webcam/images/headphones/frame_0022.jpg 10 34 | webcam/images/keyboard/frame_0003.jpg 11 35 | webcam/images/keyboard/frame_0020.jpg 11 36 | webcam/images/keyboard/frame_0022.jpg 11 37 | webcam/images/laptop_computer/frame_0003.jpg 12 38 | webcam/images/laptop_computer/frame_0017.jpg 12 39 | webcam/images/laptop_computer/frame_0019.jpg 12 40 | webcam/images/letter_tray/frame_0002.jpg 13 41 | webcam/images/letter_tray/frame_0003.jpg 13 42 | webcam/images/letter_tray/frame_0009.jpg 13 43 | webcam/images/mobile_phone/frame_0010.jpg 14 44 | webcam/images/mobile_phone/frame_0016.jpg 14 45 | webcam/images/mobile_phone/frame_0021.jpg 14 46 | webcam/images/monitor/frame_0016.jpg 15 47 | webcam/images/monitor/frame_0018.jpg 15 48 | webcam/images/monitor/frame_0023.jpg 15 49 | webcam/images/mouse/frame_0007.jpg 16 50 | webcam/images/mouse/frame_0021.jpg 16 51 | webcam/images/mouse/frame_0030.jpg 16 52 | webcam/images/mug/frame_0015.jpg 17 53 | webcam/images/mug/frame_0017.jpg 17 54 | webcam/images/mug/frame_0022.jpg 17 55 | webcam/images/paper_notebook/frame_0001.jpg 18 56 | webcam/images/paper_notebook/frame_0003.jpg 18 57 | webcam/images/paper_notebook/frame_0017.jpg 18 58 | webcam/images/pen/frame_0001.jpg 19 59 | webcam/images/pen/frame_0010.jpg 19 60 | webcam/images/pen/frame_0022.jpg 19 61 | webcam/images/phone/frame_0007.jpg 20 62 | webcam/images/phone/frame_0011.jpg 20 63 | webcam/images/phone/frame_0016.jpg 20 64 | webcam/images/printer/frame_0002.jpg 21 65 | webcam/images/printer/frame_0003.jpg 21 66 | webcam/images/printer/frame_0006.jpg 21 67 | webcam/images/projector/frame_0006.jpg 22 68 | webcam/images/projector/frame_0016.jpg 22 69 | webcam/images/projector/frame_0019.jpg 22 70 | webcam/images/punchers/frame_0003.jpg 23 71 | webcam/images/punchers/frame_0007.jpg 23 72 | webcam/images/punchers/frame_0018.jpg 23 73 | webcam/images/ring_binder/frame_0002.jpg 24 74 | webcam/images/ring_binder/frame_0010.jpg 24 75 | webcam/images/ring_binder/frame_0023.jpg 24 76 | webcam/images/ruler/frame_0002.jpg 25 77 | webcam/images/ruler/frame_0003.jpg 25 78 | webcam/images/ruler/frame_0009.jpg 25 79 | webcam/images/scissors/frame_0010.jpg 26 80 | webcam/images/scissors/frame_0015.jpg 26 81 | webcam/images/scissors/frame_0022.jpg 26 82 | webcam/images/speaker/frame_0002.jpg 27 83 | webcam/images/speaker/frame_0009.jpg 27 84 | webcam/images/speaker/frame_0014.jpg 27 85 | webcam/images/stapler/frame_0002.jpg 28 86 | webcam/images/stapler/frame_0006.jpg 28 87 | webcam/images/stapler/frame_0022.jpg 28 88 | webcam/images/tape_dispenser/frame_0005.jpg 29 89 | webcam/images/tape_dispenser/frame_0009.jpg 29 90 | webcam/images/tape_dispenser/frame_0010.jpg 29 91 | webcam/images/trash_can/frame_0002.jpg 30 92 | webcam/images/trash_can/frame_0005.jpg 30 93 | webcam/images/trash_can/frame_0015.jpg 30 94 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # others 2 | exps/ 3 | 4 | # Created by https://www.toptal.com/developers/gitignore/api/python 5 | # Edit at https://www.toptal.com/developers/gitignore?templates=python 6 | 7 | ### Python ### 8 | # Byte-compiled / optimized / DLL files 9 | __pycache__/ 10 | *.py[cod] 11 | *$py.class 12 | 13 | # C extensions 14 | *.so 15 | 16 | # Distribution / packaging 17 | .Python 18 | build/ 19 | develop-eggs/ 20 | dist/ 21 | downloads/ 22 | eggs/ 23 | .eggs/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | pip-wheel-metadata/ 29 | share/python-wheels/ 30 | *.egg-info/ 31 | .installed.cfg 32 | *.egg 33 | MANIFEST 34 | 35 | # PyInstaller 36 | # Usually these files are written by a python script from a template 37 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 38 | *.manifest 39 | *.spec 40 | 41 | # Installer logs 42 | pip-log.txt 43 | pip-delete-this-directory.txt 44 | 45 | # Unit test / coverage reports 46 | htmlcov/ 47 | .tox/ 48 | .nox/ 49 | .coverage 50 | .coverage.* 51 | .cache 52 | nosetests.xml 53 | coverage.xml 54 | *.cover 55 | *.py,cover 56 | .hypothesis/ 57 | .pytest_cache/ 58 | pytestdebug.log 59 | 60 | # Translations 61 | *.mo 62 | *.pot 63 | 64 | # Django stuff: 65 | *.log 66 | local_settings.py 67 | db.sqlite3 68 | db.sqlite3-journal 69 | 70 | # Flask stuff: 71 | instance/ 72 | .webassets-cache 73 | 74 | # Scrapy stuff: 75 | .scrapy 76 | 77 | # Sphinx documentation 78 | docs/_build/ 79 | doc/_build/ 80 | 81 | # PyBuilder 82 | target/ 83 | 84 | # Jupyter Notebook 85 | .ipynb_checkpoints 86 | 87 | # IPython 88 | profile_default/ 89 | ipython_config.py 90 | 91 | # pyenv 92 | .python-version 93 | 94 | # pipenv 95 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 96 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 97 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 98 | # install all needed dependencies. 99 | #Pipfile.lock 100 | 101 | # poetry 102 | #poetry.lock 103 | 104 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 105 | __pypackages__/ 106 | 107 | # Celery stuff 108 | celerybeat-schedule 109 | celerybeat.pid 110 | 111 | # SageMath parsed files 112 | *.sage.py 113 | 114 | # Environments 115 | # .env 116 | .env/ 117 | .venv/ 118 | env/ 119 | venv/ 120 | ENV/ 121 | env.bak/ 122 | venv.bak/ 123 | pythonenv* 124 | 125 | # Spyder project settings 126 | .spyderproject 127 | .spyproject 128 | 129 | # Rope project settings 130 | .ropeproject 131 | 132 | # mkdocs documentation 133 | /site 134 | 135 | # mypy 136 | .mypy_cache/ 137 | .dmypy.json 138 | dmypy.json 139 | 140 | # Pyre type checker 141 | .pyre/ 142 | 143 | # pytype static type analyzer 144 | .pytype/ 145 | 146 | # operating system-related files 147 | *.DS_Store #file properties cache/storage on macOS 148 | Thumbs.db #thumbnail cache on Windows 149 | 150 | # profiling data 151 | .prof 152 | 153 | # End of https://www.toptal.com/developers/gitignore/api/python 154 | 155 | # Created by https://www.toptal.com/developers/gitignore/api/vscode 156 | # Edit at https://www.toptal.com/developers/gitignore?templates=vscode 157 | 158 | ### vscode ### 159 | .vscode/* 160 | !.vscode/settings.json 161 | !.vscode/tasks.json 162 | !.vscode/launch.json 163 | !.vscode/extensions.json 164 | *.code-workspace 165 | 166 | # End of https://www.toptal.com/developers/gitignore/api/vscode 167 | 168 | # Created by https://www.toptal.com/developers/gitignore/api/macos 169 | # Edit at https://www.toptal.com/developers/gitignore?templates=macos 170 | 171 | ### macOS ### 172 | # General 173 | .DS_Store 174 | .AppleDouble 175 | .LSOverride 176 | 177 | # Icon must end with two \r 178 | Icon 179 | 180 | # Thumbnails 181 | ._* 182 | 183 | # Files that might appear in the root of a volume 184 | .DocumentRevisions-V100 185 | .fseventsd 186 | .Spotlight-V100 187 | .TemporaryItems 188 | .Trashes 189 | .VolumeIcon.icns 190 | .com.apple.timemachine.donotpresent 191 | 192 | # Directories potentially created on remote AFP share 193 | .AppleDB 194 | .AppleDesktop 195 | Network Trash Folder 196 | Temporary Items 197 | .apdisk 198 | 199 | # End of https://www.toptal.com/developers/gitignore/api/macos 200 | -------------------------------------------------------------------------------- /data/splits/office_home/Art_labeled_p06.txt: -------------------------------------------------------------------------------- 1 | Art/Alarm_Clock/00001.jpg 0 2 | Art/Alarm_Clock/00012.jpg 0 3 | Art/Alarm_Clock/00015.jpg 0 4 | Art/Backpack/00037.jpg 1 5 | Art/Backpack/00014.jpg 1 6 | Art/Batteries/00011.jpg 2 7 | Art/Batteries/00023.jpg 2 8 | Art/Bed/00022.jpg 3 9 | Art/Bed/00007.jpg 3 10 | Art/Bike/00003.jpg 4 11 | Art/Bike/00004.jpg 4 12 | Art/Bike/00031.jpg 4 13 | Art/Bottle/00005.jpg 5 14 | Art/Bottle/00086.jpg 5 15 | Art/Bottle/00091.jpg 5 16 | Art/Bottle/00003.jpg 5 17 | Art/Bucket/00015.jpg 6 18 | Art/Bucket/00030.jpg 6 19 | Art/Calculator/00007.jpg 7 20 | Art/Calculator/00012.jpg 7 21 | Art/Calendar/00012.jpg 8 22 | Art/Calendar/00004.jpg 8 23 | Art/Candles/00003.jpg 9 24 | Art/Candles/00052.jpg 9 25 | Art/Candles/00063.jpg 9 26 | Art/Candles/00065.jpg 9 27 | Art/Chair/00024.jpg 10 28 | Art/Chair/00063.jpg 10 29 | Art/Chair/00060.jpg 10 30 | Art/Chair/00066.jpg 10 31 | Art/Clipboards/00021.jpg 11 32 | Art/Clipboards/00019.jpg 11 33 | Art/Computer/00007.jpg 12 34 | Art/Computer/00018.jpg 12 35 | Art/Computer/00036.jpg 12 36 | Art/Couch/00016.jpg 13 37 | Art/Couch/00031.jpg 13 38 | Art/Curtains/00031.jpg 14 39 | Art/Curtains/00023.jpg 14 40 | Art/Desk_Lamp/00020.jpg 15 41 | Art/Desk_Lamp/00021.jpg 15 42 | Art/Drill/00006.jpg 16 43 | Art/Drill/00015.jpg 16 44 | Art/Eraser/00005.jpg 17 45 | Art/Eraser/00017.jpg 17 46 | Art/Exit_Sign/00003.jpg 18 47 | Art/Exit_Sign/00017.jpg 18 48 | Art/Fan/00001.jpg 19 49 | Art/Fan/00008.jpg 19 50 | Art/Fan/00022.jpg 19 51 | Art/File_Cabinet/00004.jpg 20 52 | Art/Flipflops/00017.jpg 21 53 | Art/Flipflops/00043.jpg 21 54 | Art/Flipflops/00046.jpg 21 55 | Art/Flowers/00032.jpg 22 56 | Art/Flowers/00063.jpg 22 57 | Art/Flowers/00022.jpg 22 58 | Art/Flowers/00049.jpg 22 59 | Art/Folder/00019.jpg 23 60 | Art/Fork/00015.jpg 24 61 | Art/Fork/00011.jpg 24 62 | Art/Fork/00036.jpg 24 63 | Art/Glasses/00036.jpg 25 64 | Art/Glasses/00014.jpg 25 65 | Art/Hammer/00038.jpg 26 66 | Art/Hammer/00023.jpg 26 67 | Art/Helmet/00018.jpg 27 68 | Art/Helmet/00077.jpg 27 69 | Art/Helmet/00040.jpg 27 70 | Art/Helmet/00059.jpg 27 71 | Art/Kettle/00042.jpg 28 72 | Art/Kettle/00018.jpg 28 73 | Art/Kettle/00027.jpg 28 74 | Art/Keyboard/00003.jpg 29 75 | Art/Knives/00008.jpg 30 76 | Art/Knives/00066.jpg 30 77 | Art/Knives/00035.jpg 30 78 | Art/Knives/00039.jpg 30 79 | Art/Lamp_Shade/00024.jpg 31 80 | Art/Lamp_Shade/00010.jpg 31 81 | Art/Lamp_Shade/00030.jpg 31 82 | Art/Laptop/00005.jpg 32 83 | Art/Laptop/00036.jpg 32 84 | Art/Laptop/00049.jpg 32 85 | Art/Marker/00016.jpg 33 86 | Art/Monitor/00039.jpg 34 87 | Art/Monitor/00032.jpg 34 88 | Art/Monitor/00038.jpg 34 89 | Art/Mop/00032.jpg 35 90 | Art/Mop/00031.jpg 35 91 | Art/Mouse/00016.jpg 36 92 | Art/Mug/00016.jpg 37 93 | Art/Mug/00031.jpg 37 94 | Art/Mug/00039.jpg 37 95 | Art/Notebook/00015.jpg 38 96 | Art/Notebook/00007.jpg 38 97 | Art/Oven/00017.jpg 39 98 | Art/Oven/00014.jpg 39 99 | Art/Pan/00015.jpg 40 100 | Art/Pan/00015.jpg 40 101 | Art/Paper_Clip/00010.jpg 41 102 | Art/Paper_Clip/00017.jpg 41 103 | Art/Pen/00009.jpg 42 104 | Art/Pen/00018.jpg 42 105 | Art/Pencil/00020.jpg 43 106 | Art/Pencil/00025.jpg 43 107 | Art/Postit_Notes/00006.jpg 44 108 | Art/Postit_Notes/00014.jpg 44 109 | Art/Printer/00010.jpg 45 110 | Art/Push_Pin/00007.jpg 46 111 | Art/Radio/00007.jpg 47 112 | Art/Radio/00008.jpg 47 113 | Art/Radio/00037.jpg 47 114 | Art/Refrigerator/00042.jpg 48 115 | Art/Refrigerator/00032.jpg 48 116 | Art/Refrigerator/00043.jpg 48 117 | Art/Ruler/00003.jpg 49 118 | Art/Scissors/00004.jpg 50 119 | Art/Screwdriver/00006.jpg 51 120 | Art/Screwdriver/00012.jpg 51 121 | Art/Shelf/00022.jpg 52 122 | Art/Shelf/00018.jpg 52 123 | Art/Shelf/00038.jpg 52 124 | Art/Sink/00025.jpg 53 125 | Art/Sink/00021.jpg 53 126 | Art/Sneakers/00038.jpg 54 127 | Art/Sneakers/00006.jpg 54 128 | Art/Sneakers/00029.jpg 54 129 | Art/Soda/00033.jpg 55 130 | Art/Soda/00026.jpg 55 131 | Art/Speaker/00007.jpg 56 132 | Art/Spoon/00010.jpg 57 133 | Art/Spoon/00015.jpg 57 134 | Art/Spoon/00019.jpg 57 135 | Art/TV/00006.jpg 58 136 | Art/TV/00033.jpg 58 137 | Art/Table/00011.jpg 59 138 | Art/Telephone/00024.jpg 60 139 | Art/Telephone/00020.jpg 60 140 | Art/Telephone/00030.jpg 60 141 | Art/ToothBrush/00001.jpg 61 142 | Art/ToothBrush/00017.jpg 61 143 | Art/ToothBrush/00038.jpg 61 144 | Art/Toys/00002.jpg 62 145 | Art/Trash_Can/00007.jpg 63 146 | Art/Webcam/00015.jpg 64 147 | -------------------------------------------------------------------------------- /data/splits/office_home/Clipart_labeled_p03.txt: -------------------------------------------------------------------------------- 1 | Clipart/Alarm_Clock/00010.jpg 0 2 | Clipart/Alarm_Clock/00050.jpg 0 3 | Clipart/Backpack/00019.jpg 1 4 | Clipart/Backpack/00034.jpg 1 5 | Clipart/Batteries/00019.jpg 2 6 | Clipart/Batteries/00036.jpg 2 7 | Clipart/Bed/00025.jpg 3 8 | Clipart/Bed/00065.jpg 3 9 | Clipart/Bed/00088.jpg 3 10 | Clipart/Bike/00005.jpg 4 11 | Clipart/Bike/00013.jpg 4 12 | Clipart/Bike/00046.jpg 4 13 | Clipart/Bottle/00002.jpg 5 14 | Clipart/Bottle/00016.jpg 5 15 | Clipart/Bottle/00080.jpg 5 16 | Clipart/Bucket/00007.jpg 6 17 | Clipart/Bucket/00046.jpg 6 18 | Clipart/Calculator/00040.jpg 7 19 | Clipart/Calculator/00042.jpg 7 20 | Clipart/Calendar/00059.jpg 8 21 | Clipart/Calendar/00023.jpg 8 22 | Clipart/Candles/00015.jpg 9 23 | Clipart/Candles/00056.jpg 9 24 | Clipart/Candles/00067.jpg 9 25 | Clipart/Chair/00002.jpg 10 26 | Clipart/Chair/00017.jpg 10 27 | Clipart/Chair/00057.jpg 10 28 | Clipart/Clipboards/00032.jpg 11 29 | Clipart/Clipboards/00033.jpg 11 30 | Clipart/Computer/00013.jpg 12 31 | Clipart/Computer/00018.jpg 12 32 | Clipart/Computer/00049.jpg 12 33 | Clipart/Couch/00009.jpg 13 34 | Clipart/Couch/00060.jpg 13 35 | Clipart/Curtains/00025.jpg 14 36 | Clipart/Curtains/00039.jpg 14 37 | Clipart/Desk_Lamp/00003.jpg 15 38 | Clipart/Desk_Lamp/00021.jpg 15 39 | Clipart/Drill/00003.jpg 16 40 | Clipart/Eraser/00020.jpg 17 41 | Clipart/Exit_Sign/00026.jpg 18 42 | Clipart/Fan/00005.jpg 19 43 | Clipart/Fan/00047.jpg 19 44 | Clipart/File_Cabinet/00026.jpg 20 45 | Clipart/Flipflops/00030.jpg 21 46 | Clipart/Flowers/00032.jpg 22 47 | Clipart/Flowers/00035.jpg 22 48 | Clipart/Flowers/00045.jpg 22 49 | Clipart/Folder/00018.jpg 23 50 | Clipart/Folder/00040.jpg 23 51 | Clipart/Folder/00062.jpg 23 52 | Clipart/Fork/00034.jpg 24 53 | Clipart/Fork/00047.jpg 24 54 | Clipart/Glasses/00010.jpg 25 55 | Clipart/Glasses/00035.jpg 25 56 | Clipart/Hammer/00001.jpg 26 57 | Clipart/Hammer/00010.jpg 26 58 | Clipart/Hammer/00066.jpg 26 59 | Clipart/Helmet/00014.jpg 27 60 | Clipart/Helmet/00047.jpg 27 61 | Clipart/Kettle/00004.jpg 28 62 | Clipart/Kettle/00019.jpg 28 63 | Clipart/Keyboard/00022.jpg 29 64 | Clipart/Keyboard/00053.jpg 29 65 | Clipart/Knives/00004.jpg 30 66 | Clipart/Knives/00024.jpg 30 67 | Clipart/Lamp_Shade/00030.jpg 31 68 | Clipart/Laptop/00010.jpg 32 69 | Clipart/Laptop/00021.jpg 32 70 | Clipart/Marker/00016.jpg 33 71 | Clipart/Marker/00044.jpg 33 72 | Clipart/Monitor/00004.jpg 34 73 | Clipart/Monitor/00048.jpg 34 74 | Clipart/Monitor/00098.jpg 34 75 | Clipart/Mop/00022.jpg 35 76 | Clipart/Mouse/00015.jpg 36 77 | Clipart/Mouse/00066.jpg 36 78 | Clipart/Mug/00046.jpg 37 79 | Clipart/Mug/00059.jpg 37 80 | Clipart/Mug/00086.jpg 37 81 | Clipart/Notebook/00006.jpg 38 82 | Clipart/Notebook/00053.jpg 38 83 | Clipart/Oven/00024.jpg 39 84 | Clipart/Pan/00006.jpg 40 85 | Clipart/Pan/00043.jpg 40 86 | Clipart/Paper_Clip/00036.jpg 41 87 | Clipart/Pen/00020.jpg 42 88 | Clipart/Pen/00035.jpg 42 89 | Clipart/Pen/00039.jpg 42 90 | Clipart/Pencil/00006.jpg 43 91 | Clipart/Pencil/00020.jpg 43 92 | Clipart/Pencil/00060.jpg 43 93 | Clipart/Postit_Notes/00010.jpg 44 94 | Clipart/Printer/00026.jpg 45 95 | Clipart/Printer/00050.jpg 45 96 | Clipart/Printer/00073.jpg 45 97 | Clipart/Push_Pin/00034.jpg 46 98 | Clipart/Radio/00004.jpg 47 99 | Clipart/Refrigerator/00014.jpg 48 100 | Clipart/Ruler/00012.jpg 49 101 | Clipart/Ruler/00048.jpg 49 102 | Clipart/Scissors/00022.jpg 50 103 | Clipart/Scissors/00062.jpg 50 104 | Clipart/Scissors/00081.jpg 50 105 | Clipart/Screwdriver/00023.jpg 51 106 | Clipart/Screwdriver/00012.jpg 51 107 | Clipart/Shelf/00018.jpg 52 108 | Clipart/Sink/00014.jpg 53 109 | Clipart/Sneakers/00016.jpg 54 110 | Clipart/Soda/00008.jpg 55 111 | Clipart/Soda/00016.jpg 55 112 | Clipart/Speaker/00024.jpg 56 113 | Clipart/Speaker/00047.jpg 56 114 | Clipart/Speaker/00086.jpg 56 115 | Clipart/Spoon/00001.jpg 57 116 | Clipart/Spoon/00023.jpg 57 117 | Clipart/TV/00010.jpg 58 118 | Clipart/TV/00053.jpg 58 119 | Clipart/Table/00033.jpg 59 120 | Clipart/Table/00060.jpg 59 121 | Clipart/Telephone/00022.jpg 60 122 | Clipart/Telephone/00049.jpg 60 123 | Clipart/Telephone/00098.jpg 60 124 | Clipart/ToothBrush/00033.jpg 61 125 | Clipart/Toys/00021.jpg 62 126 | Clipart/Toys/00073.jpg 62 127 | Clipart/Toys/00087.jpg 62 128 | Clipart/Trash_Can/00006.jpg 63 129 | Clipart/Trash_Can/00018.jpg 63 130 | Clipart/Webcam/00014.jpg 64 131 | Clipart/Webcam/00039.jpg 64 132 | -------------------------------------------------------------------------------- /pcs/utils/utils.py: -------------------------------------------------------------------------------- 1 | import gc 2 | import json 3 | import os 4 | import random 5 | import shutil 6 | import string 7 | from collections import Counter, OrderedDict 8 | 9 | import numpy as np 10 | import torch 11 | from dotmap import DotMap 12 | 13 | # Specific 14 | 15 | DOMAIN_V = {"source": "target", "target": "source"} 16 | 17 | 18 | def reverse_domain(domain_name): 19 | return DOMAIN_V[domain_name] 20 | 21 | 22 | def per(acc): 23 | return f"{acc * 100:.2f}%" 24 | 25 | 26 | # Debug 27 | 28 | 29 | def MB(x): 30 | return f"{x/1024/1024:.3} MB" 31 | 32 | 33 | def GB(x): 34 | return f"{x/1024/1024/1024:.3} GB" 35 | 36 | 37 | def print_occupied_mem(idx=0): 38 | print(GB(torch.cuda.memory_allocated(idx))) 39 | 40 | 41 | def size_of_tensor(x): 42 | return MB(x.element_size() * x.nelement()) 43 | 44 | 45 | def randtext(length=10): 46 | return "".join([random.choice(string.ascii_letters) for i in range(length)]) 47 | 48 | 49 | # OS 50 | 51 | 52 | def to_list(something): 53 | if something is not None and not isinstance(something, list): 54 | return [something] 55 | return something 56 | 57 | 58 | def makedirs(dir_list): 59 | if not isinstance(dir_list, list): 60 | dir_list = [dir_list] 61 | for dir in dir_list: 62 | if not os.path.exists(dir): 63 | os.makedirs(dir) 64 | 65 | 66 | # Counter 67 | 68 | 69 | class AverageMeter(object): 70 | """Computes and stores the average and current value""" 71 | 72 | def __init__(self): 73 | self.reset() 74 | 75 | def reset(self): 76 | self.val = 0 77 | self.avg = 0 78 | self.sum = 0 79 | self.count = 0 80 | 81 | def update(self, val, n=1): 82 | self.val = val 83 | self.sum += val * n 84 | self.count += n 85 | self.avg = self.sum / self.count 86 | 87 | 88 | class ProgressMeter(object): 89 | def __init__(self, num_batches, meters, prefix=""): 90 | self.batch_fmtstr = self._get_batch_fmtstr(num_batches) 91 | self.meters = meters 92 | self.prefix = prefix 93 | 94 | def display(self, batch): 95 | entries = [self.prefix + self.batch_fmtstr.format(batch)] 96 | entries += [str(meter) for meter in self.meters] 97 | print("\t".join(entries)) 98 | 99 | def _get_batch_fmtstr(self, num_batches): 100 | num_digits = len(str(num_batches // 1)) 101 | fmt = "{:" + str(num_digits) + "d}" 102 | return "[" + fmt + "/" + fmt.format(num_batches) + "]" 103 | 104 | 105 | class OrderedCounter(Counter, OrderedDict): 106 | """Counter that remembers the order elements are first encountered""" 107 | 108 | def __repr__(self): 109 | return "%s(%r)" % (self.__class__.__name__, OrderedDict(self)) 110 | 111 | def __reduce__(self): 112 | return self.__class__, (OrderedDict(self),) 113 | 114 | 115 | # Json 116 | 117 | 118 | def load_json(f_path): 119 | with open(f_path, "r") as f: 120 | return json.load(f) 121 | 122 | 123 | def save_json(obj, f_path): 124 | with open(f_path, "w") as f: 125 | json.dump(obj, f, ensure_ascii=False, indent=4) 126 | 127 | 128 | def is_div(freq, epoch, best=False): 129 | if freq is not None and best: 130 | return True 131 | return freq and epoch % freq == 0 132 | 133 | 134 | def info_gpu_usage(): 135 | for obj in gc.get_objects(): 136 | try: 137 | if torch.is_tensor(obj) or ( 138 | hasattr(obj, "data") and torch.is_tensor(obj.data) 139 | ): 140 | print(type(obj), obj.size()) 141 | except: 142 | pass 143 | 144 | 145 | # dotmap 146 | 147 | 148 | def exist_key(k): 149 | is_empty_dotmap = isinstance(k, DotMap) and len(k) == 0 150 | return isinstance(k, bool) or (not is_empty_dotmap and k is not None) 151 | 152 | 153 | def set_default(cur_config, name, value=None, callback=None): 154 | if not exist_key(cur_config[name]): 155 | if value is not None: 156 | cur_config[name] = value 157 | elif callback is not None: 158 | assert exist_key(cur_config[callback]) 159 | cur_config[name] = cur_config[callback] 160 | elif value is None and callback is None: 161 | cur_config[name] = value 162 | else: 163 | raise NotImplementedError 164 | return cur_config[name] 165 | -------------------------------------------------------------------------------- /data/splits/office_home/Product_labeled_p03.txt: -------------------------------------------------------------------------------- 1 | Product/Alarm_Clock/00015.jpg 0 2 | Product/Alarm_Clock/00057.jpg 0 3 | Product/Backpack/00001.jpg 1 4 | Product/Backpack/00012.jpg 1 5 | Product/Batteries/00003.jpg 2 6 | Product/Batteries/00043.jpg 2 7 | Product/Bed/00005.jpg 3 8 | Product/Bed/00033.jpg 3 9 | Product/Bike/00016.jpg 4 10 | Product/Bike/00023.jpg 4 11 | Product/Bottle/00010.jpg 5 12 | Product/Bottle/00036.jpg 5 13 | Product/Bucket/00002.jpg 6 14 | Product/Bucket/00023.jpg 6 15 | Product/Calculator/00062.jpg 7 16 | Product/Calculator/00080.jpg 7 17 | Product/Calendar/00060.jpg 8 18 | Product/Calendar/00079.jpg 8 19 | Product/Candles/00006.jpg 9 20 | Product/Candles/00010.jpg 9 21 | Product/Chair/00024.jpg 10 22 | Product/Chair/00053.jpg 10 23 | Product/Chair/00092.jpg 10 24 | Product/Clipboards/00019.jpg 11 25 | Product/Clipboards/00065.jpg 11 26 | Product/Computer/00009.jpg 12 27 | Product/Computer/00032.jpg 12 28 | Product/Computer/00063.jpg 12 29 | Product/Couch/00060.jpg 13 30 | Product/Couch/00070.jpg 13 31 | Product/Couch/00086.jpg 13 32 | Product/Curtains/00009.jpg 14 33 | Product/Curtains/00012.jpg 14 34 | Product/Desk_Lamp/00066.jpg 15 35 | Product/Desk_Lamp/00075.jpg 15 36 | Product/Drill/00006.jpg 16 37 | Product/Drill/00035.jpg 16 38 | Product/Eraser/00008.jpg 17 39 | Product/Eraser/00033.jpg 17 40 | Product/Exit_Sign/00039.jpg 18 41 | Product/Exit_Sign/00062.jpg 18 42 | Product/Fan/00023.jpg 19 43 | Product/Fan/00055.jpg 19 44 | Product/File_Cabinet/00032.jpg 20 45 | Product/File_Cabinet/00035.jpg 20 46 | Product/Flipflops/00034.jpg 21 47 | Product/Flipflops/00087.jpg 21 48 | Product/Flowers/00003.jpg 22 49 | Product/Flowers/00068.jpg 22 50 | Product/Flowers/00086.jpg 22 51 | Product/Folder/00001.jpg 23 52 | Product/Folder/00010.jpg 23 53 | Product/Folder/00066.jpg 23 54 | Product/Fork/00010.jpg 24 55 | Product/Fork/00022.jpg 24 56 | Product/Glasses/00023.jpg 25 57 | Product/Glasses/00055.jpg 25 58 | Product/Hammer/00004.jpg 26 59 | Product/Hammer/00011.jpg 26 60 | Product/Helmet/00012.jpg 27 61 | Product/Helmet/00051.jpg 27 62 | Product/Helmet/00064.jpg 27 63 | Product/Kettle/00010.jpg 28 64 | Product/Kettle/00021.jpg 28 65 | Product/Keyboard/00019.jpg 29 66 | Product/Keyboard/00028.jpg 29 67 | Product/Keyboard/00072.jpg 29 68 | Product/Knives/00002.jpg 30 69 | Product/Knives/00023.jpg 30 70 | Product/Lamp_Shade/00008.jpg 31 71 | Product/Lamp_Shade/00050.jpg 31 72 | Product/Laptop/00019.jpg 32 73 | Product/Laptop/00068.jpg 32 74 | Product/Laptop/00086.jpg 32 75 | Product/Marker/00020.jpg 33 76 | Product/Marker/00030.jpg 33 77 | Product/Monitor/00006.jpg 34 78 | Product/Monitor/00036.jpg 34 79 | Product/Monitor/00054.jpg 34 80 | Product/Mop/00006.jpg 35 81 | Product/Mop/00023.jpg 35 82 | Product/Mouse/00020.jpg 36 83 | Product/Mouse/00039.jpg 36 84 | Product/Mouse/00090.jpg 36 85 | Product/Mug/00010.jpg 37 86 | Product/Notebook/00006.jpg 38 87 | Product/Notebook/00060.jpg 38 88 | Product/Notebook/00073.jpg 38 89 | Product/Oven/00045.jpg 39 90 | Product/Oven/00050.jpg 39 91 | Product/Pan/00044.jpg 40 92 | Product/Pan/00064.jpg 40 93 | Product/Paper_Clip/00038.jpg 41 94 | Product/Pen/00030.jpg 42 95 | Product/Pen/00053.jpg 42 96 | Product/Pencil/00031.jpg 43 97 | Product/Postit_Notes/00003.jpg 44 98 | Product/Printer/00022.jpg 45 99 | Product/Printer/00061.jpg 45 100 | Product/Printer/00077.jpg 45 101 | Product/Push_Pin/00029.jpg 46 102 | Product/Radio/00022.jpg 47 103 | Product/Refrigerator/00010.jpg 48 104 | Product/Refrigerator/00053.jpg 48 105 | Product/Ruler/00018.jpg 49 106 | Product/Ruler/00019.jpg 49 107 | Product/Scissors/00016.jpg 50 108 | Product/Scissors/00024.jpg 50 109 | Product/Scissors/00054.jpg 50 110 | Product/Screwdriver/00028.jpg 51 111 | Product/Shelf/00012.jpg 52 112 | Product/Sink/00025.jpg 53 113 | Product/Sneakers/00014.jpg 54 114 | Product/Sneakers/00049.jpg 54 115 | Product/Sneakers/00063.jpg 54 116 | Product/Soda/00043.jpg 55 117 | Product/Speaker/00025.jpg 56 118 | Product/Speaker/00033.jpg 56 119 | Product/Speaker/00083.jpg 56 120 | Product/Spoon/00023.jpg 57 121 | Product/TV/00014.jpg 58 122 | Product/TV/00021.jpg 58 123 | Product/Table/00005.jpg 59 124 | Product/Table/00040.jpg 59 125 | Product/Telephone/00010.jpg 60 126 | Product/Telephone/00018.jpg 60 127 | Product/ToothBrush/00010.jpg 61 128 | Product/Toys/00038.jpg 62 129 | Product/Trash_Can/00010.jpg 63 130 | Product/Trash_Can/00011.jpg 63 131 | Product/Trash_Can/00093.jpg 63 132 | Product/Webcam/00061.jpg 64 133 | Product/Webcam/00084.jpg 64 134 | -------------------------------------------------------------------------------- /pcs/models/clustering.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import time 3 | from collections import Counter 4 | 5 | import faiss 6 | import numpy as np 7 | import torch 8 | import torch.nn as nn 9 | import torch.nn.functional as F 10 | import torchvision 11 | from faiss import Kmeans as faiss_Kmeans 12 | from tqdm import tqdm 13 | 14 | DEFAULT_KMEANS_SEED = 1234 15 | 16 | 17 | class Kmeans(object): 18 | def __init__( 19 | self, k_list, data, epoch=0, init_centroids=None, frozen_centroids=False 20 | ): 21 | """ 22 | Performs many k-means clustering. 23 | 24 | Args: 25 | data (np.array N * dim): data to cluster 26 | """ 27 | super().__init__() 28 | self.k_list = k_list 29 | self.data = data 30 | self.d = data.shape[-1] 31 | self.init_centroids = init_centroids 32 | self.frozen_centroids = frozen_centroids 33 | 34 | self.logger = logging.getLogger("Kmeans") 35 | self.debug = False 36 | self.epoch = epoch + 1 37 | 38 | def compute_clusters(self): 39 | """compute cluster 40 | 41 | Returns: 42 | torch.tensor, list: clus_labels, centroids 43 | """ 44 | data = self.data 45 | labels = [] 46 | centroids = [] 47 | 48 | tqdm_batch = tqdm(total=len(self.k_list), desc="[K-means]") 49 | for k_idx, each_k in enumerate(self.k_list): 50 | seed = k_idx * self.epoch + DEFAULT_KMEANS_SEED 51 | kmeans = faiss_Kmeans( 52 | self.d, 53 | each_k, 54 | niter=40, 55 | verbose=False, 56 | spherical=True, 57 | min_points_per_centroid=1, 58 | max_points_per_centroid=10000, 59 | gpu=True, 60 | seed=seed, 61 | frozen_centroids=self.frozen_centroids, 62 | ) 63 | 64 | kmeans.train(data, init_centroids=self.init_centroids) 65 | 66 | _, I = kmeans.index.search(data, 1) 67 | labels.append(I.squeeze(1)) 68 | C = kmeans.centroids 69 | centroids.append(C) 70 | 71 | tqdm_batch.update() 72 | tqdm_batch.close() 73 | 74 | labels = np.stack(labels, axis=0) 75 | 76 | return labels, centroids 77 | 78 | 79 | def torch_kmeans(k_list, data, init_centroids=None, seed=0, frozen=False): 80 | if init_centroids is not None: 81 | init_centroids = init_centroids.cpu().numpy() 82 | km = Kmeans( 83 | k_list, 84 | data.cpu().detach().numpy(), 85 | epoch=seed, 86 | frozen_centroids=frozen, 87 | init_centroids=init_centroids, 88 | ) 89 | clus_labels, centroids_npy = km.compute_clusters() 90 | clus_labels = torch.from_numpy(clus_labels).long().cuda() 91 | centroids = [] 92 | for c in centroids_npy: 93 | centroids.append(torch.from_numpy(c).cuda()) 94 | # compute phi 95 | clus_phi = [] 96 | for i in range(len(k_list)): 97 | clus_phi.append(compute_variance(data, clus_labels[i], centroids[i])) 98 | 99 | return clus_labels, centroids, clus_phi 100 | 101 | 102 | # variance 103 | 104 | 105 | @torch.no_grad() 106 | def compute_variance( 107 | data, cluster_labels, centroids, alpha=10, debug=False, num_class=None 108 | ): 109 | """compute variance for proto 110 | 111 | Args: 112 | data (torch.Tensor): data with shape [n, dim] 113 | cluster_labels (torch.Tensor): cluster labels of [n] 114 | centroids (torch.Tensor): cluster centroids [k, ndim] 115 | alpha (int, optional): Defaults to 10. 116 | debug (bool, optional): Defaults to False. 117 | 118 | Returns: 119 | [type]: [description] 120 | """ 121 | 122 | k = len(centroids) if num_class is None else num_class 123 | phis = torch.zeros(k) 124 | for c in range(k): 125 | cluster_points = data[cluster_labels == c] 126 | c_len = len(cluster_points) 127 | if c_len == 0: 128 | phis[c] = -1 129 | elif c_len == 1: 130 | phis[c] = 0.05 131 | else: 132 | phis[c] = torch.sum(torch.norm(cluster_points - centroids[c], dim=1)) / ( 133 | c_len * np.log(c_len + alpha) 134 | ) 135 | if phis[c] < 0.05: 136 | phis[c] = 0.05 137 | 138 | if debug: 139 | print("size-phi:", end=" ") 140 | for i in range(k): 141 | size = (cluster_labels == i).sum().item() 142 | print(f"{size}[phi={phis[i].item():.3f}]", end=", ") 143 | print("\n") 144 | 145 | return phis 146 | -------------------------------------------------------------------------------- /data/splits/domainnet/real_labeled_1.txt: -------------------------------------------------------------------------------- 1 | real/aircraft_carrier/real_001_000200.jpg 0 2 | real/alarm_clock/real_003_000456.jpg 1 3 | real/ant/real_007_000269.jpg 2 4 | real/anvil/real_008_000016.jpg 3 5 | real/asparagus/real_011_000496.jpg 4 6 | real/axe/real_012_000239.jpg 5 7 | real/banana/real_014_000024.jpg 6 8 | real/basket/real_019_000440.jpg 7 9 | real/bathtub/real_022_000111.jpg 8 10 | real/bear/real_024_000425.jpg 9 11 | real/bee/real_027_000300.jpg 10 12 | real/bird/real_032_000316.jpg 11 13 | real/blackberry/real_034_000189.jpg 12 14 | real/blueberry/real_035_000655.jpg 13 15 | real/bottlecap/real_038_000311.jpg 14 16 | real/broccoli/real_044_000251.jpg 15 17 | real/bus/real_048_000524.jpg 16 18 | real/butterfly/real_050_000154.jpg 17 19 | real/cactus/real_051_000152.jpg 18 20 | real/cake/real_052_000185.jpg 19 21 | real/calculator/real_053_000268.jpg 20 22 | real/camel/real_055_000344.jpg 21 23 | real/camera/real_056_000252.jpg 22 24 | real/candle/real_059_000511.jpg 23 25 | real/cannon/real_060_000247.jpg 24 26 | real/canoe/real_061_000232.jpg 25 27 | real/carrot/real_063_000028.jpg 26 28 | real/castle/real_064_000589.jpg 27 29 | real/cat/real_065_000767.jpg 28 30 | real/ceiling_fan/real_066_000069.jpg 29 31 | real/cello/real_067_000044.jpg 30 32 | real/cell_phone/real_068_000134.jpg 31 33 | real/chair/real_069_000214.jpg 32 34 | real/chandelier/real_070_000044.jpg 33 35 | real/coffee_cup/real_076_000440.jpg 34 36 | real/compass/real_077_000005.jpg 35 37 | real/computer/real_078_000209.jpg 36 38 | real/cow/real_082_000463.jpg 37 39 | real/crab/real_083_000352.jpg 38 40 | real/crocodile/real_085_000297.jpg 39 41 | real/cruise_ship/real_087_000156.jpg 40 42 | real/dog/real_092_000208.jpg 41 43 | real/dolphin/real_093_000463.jpg 42 44 | real/dragon/real_096_000214.jpg 43 45 | real/drums/real_099_000092.jpg 44 46 | real/duck/real_100_000251.jpg 45 47 | real/dumbbell/real_101_000459.jpg 46 48 | real/elephant/real_104_000017.jpg 47 49 | real/eyeglasses/real_108_000272.jpg 48 50 | real/feather/real_111_000061.jpg 49 51 | real/fence/real_112_000080.jpg 50 52 | real/fish/real_117_000375.jpg 51 53 | real/flamingo/real_118_000337.jpg 52 54 | real/flower/real_122_000021.jpg 53 55 | real/foot/real_124_000300.jpg 54 56 | real/fork/real_125_000191.jpg 55 57 | real/frog/real_126_000227.jpg 56 58 | real/giraffe/real_130_000246.jpg 57 59 | real/goatee/real_131_000255.jpg 58 60 | real/grapes/real_133_000545.jpg 59 61 | real/guitar/real_135_000044.jpg 60 62 | real/hammer/real_137_000250.jpg 61 63 | real/helicopter/real_143_000480.jpg 62 64 | real/helmet/real_144_000019.jpg 63 65 | real/horse/real_148_000068.jpg 64 66 | real/kangaroo/real_160_000357.jpg 65 67 | real/lantern/real_166_000304.jpg 66 68 | real/laptop/real_167_000267.jpg 67 69 | real/leaf/real_168_000132.jpg 68 70 | real/lion/real_175_000073.jpg 69 71 | real/lipstick/real_176_000184.jpg 70 72 | real/lobster/real_177_000036.jpg 71 73 | real/microphone/real_185_000443.jpg 72 74 | real/monkey/real_187_000205.jpg 73 75 | real/mosquito/real_189_000473.jpg 74 76 | real/mouse/real_192_000131.jpg 75 77 | real/mug/real_195_000182.jpg 76 78 | real/mushroom/real_196_000452.jpg 77 79 | real/onion/real_203_000574.jpg 78 80 | real/panda/real_209_000009.jpg 79 81 | real/peanut/real_215_000281.jpg 80 82 | real/pear/real_216_000402.jpg 81 83 | real/peas/real_217_000097.jpg 82 84 | real/pencil/real_218_000153.jpg 83 85 | real/penguin/real_219_000567.jpg 84 86 | real/pig/real_223_000158.jpg 85 87 | real/pillow/real_224_000491.jpg 86 88 | real/pineapple/real_225_000300.jpg 87 89 | real/potato/real_233_000233.jpg 88 90 | real/power_outlet/real_234_000457.jpg 89 91 | real/purse/real_235_000479.jpg 90 92 | real/rabbit/real_236_000043.jpg 91 93 | real/raccoon/real_237_000646.jpg 92 94 | real/rhinoceros/real_243_000011.jpg 93 95 | real/rifle/real_244_000256.jpg 94 96 | real/saxophone/real_251_000374.jpg 95 97 | real/screwdriver/real_255_000373.jpg 96 98 | real/sea_turtle/real_256_000591.jpg 97 99 | real/see_saw/real_257_000125.jpg 98 100 | real/sheep/real_259_000462.jpg 99 101 | real/shoe/real_260_000411.jpg 100 102 | real/skateboard/real_264_000119.jpg 101 103 | real/snake/real_270_000027.jpg 102 104 | real/speedboat/real_276_000041.jpg 103 105 | real/spider/real_277_000458.jpg 104 106 | real/squirrel/real_282_000351.jpg 105 107 | real/strawberry/real_291_000148.jpg 106 108 | real/streetlight/real_292_000011.jpg 107 109 | real/string_bean/real_293_000457.jpg 108 110 | real/submarine/real_294_000383.jpg 109 111 | real/swan/real_297_000102.jpg 110 112 | real/table/real_302_000530.jpg 111 113 | real/teapot/real_303_000389.jpg 112 114 | real/teddy-bear/real_304_000117.jpg 113 115 | real/television/real_306_000200.jpg 114 116 | real/The_Eiffel_Tower/real_309_000463.jpg 115 117 | real/The_Great_Wall_of_China/real_310_000277.jpg 116 118 | real/tiger/real_312_000581.jpg 117 119 | real/toe/real_314_000278.jpg 118 120 | real/train/real_322_000036.jpg 119 121 | real/truck/real_326_000129.jpg 120 122 | real/umbrella/real_329_000080.jpg 121 123 | real/vase/real_332_000455.jpg 122 124 | real/watermelon/real_335_000145.jpg 123 125 | real/whale/real_337_000394.jpg 124 126 | real/zebra/real_344_000380.jpg 125 127 | -------------------------------------------------------------------------------- /data/splits/domainnet/sketch_labeled_1.txt: -------------------------------------------------------------------------------- 1 | sketch/aircraft_carrier/sketch_001_000028.jpg 0 2 | sketch/alarm_clock/sketch_003_000011.jpg 1 3 | sketch/ant/sketch_007_000002.jpg 2 4 | sketch/anvil/sketch_008_000087.jpg 3 5 | sketch/asparagus/sketch_011_000069.jpg 4 6 | sketch/axe/sketch_012_000028.jpg 5 7 | sketch/banana/sketch_014_000021.jpg 6 8 | sketch/basket/sketch_019_000174.jpg 7 9 | sketch/bathtub/sketch_022_000148.jpg 8 10 | sketch/bear/sketch_024_000067.jpg 9 11 | sketch/bee/sketch_027_000070.jpg 10 12 | sketch/bird/sketch_032_000120.jpg 11 13 | sketch/blackberry/sketch_034_000009.jpg 12 14 | sketch/blueberry/sketch_035_000079.jpg 13 15 | sketch/bottlecap/sketch_038_000121.jpg 14 16 | sketch/broccoli/sketch_044_000119.jpg 15 17 | sketch/bus/sketch_048_000196.jpg 16 18 | sketch/butterfly/sketch_050_000191.jpg 17 19 | sketch/cactus/sketch_051_000014.jpg 18 20 | sketch/cake/sketch_052_000024.jpg 19 21 | sketch/calculator/sketch_053_000037.jpg 20 22 | sketch/camel/sketch_055_000015.jpg 21 23 | sketch/camera/sketch_056_000081.jpg 22 24 | sketch/candle/sketch_059_000049.jpg 23 25 | sketch/cannon/sketch_060_000013.jpg 24 26 | sketch/canoe/sketch_061_000091.jpg 25 27 | sketch/carrot/sketch_063_000034.jpg 26 28 | sketch/castle/sketch_064_000013.jpg 27 29 | sketch/cat/sketch_065_000122.jpg 28 30 | sketch/ceiling_fan/sketch_066_000004.jpg 29 31 | sketch/cello/sketch_067_000028.jpg 30 32 | sketch/cell_phone/sketch_068_000011.jpg 31 33 | sketch/chair/sketch_069_000080.jpg 32 34 | sketch/chandelier/sketch_070_000017.jpg 33 35 | sketch/coffee_cup/sketch_076_000013.jpg 34 36 | sketch/compass/sketch_077_000014.jpg 35 37 | sketch/computer/sketch_078_000002.jpg 36 38 | sketch/cow/sketch_082_000009.jpg 37 39 | sketch/crab/sketch_083_000105.jpg 38 40 | sketch/crocodile/sketch_085_000043.jpg 39 41 | sketch/cruise_ship/sketch_087_000092.jpg 40 42 | sketch/dog/sketch_092_000194.jpg 41 43 | sketch/dolphin/sketch_093_000082.jpg 42 44 | sketch/dragon/sketch_096_000047.jpg 43 45 | sketch/drums/sketch_099_000045.jpg 44 46 | sketch/duck/sketch_100_000267.jpg 45 47 | sketch/dumbbell/sketch_101_000106.jpg 46 48 | sketch/elephant/sketch_104_000135.jpg 47 49 | sketch/eyeglasses/sketch_108_000119.jpg 48 50 | sketch/feather/sketch_111_000194.jpg 49 51 | sketch/fence/sketch_112_000016.jpg 50 52 | sketch/fish/sketch_117_000264.jpg 51 53 | sketch/flamingo/sketch_118_000016.jpg 52 54 | sketch/flower/sketch_122_000292.jpg 53 55 | sketch/foot/sketch_124_000088.jpg 54 56 | sketch/fork/sketch_125_000053.jpg 55 57 | sketch/frog/sketch_126_000082.jpg 56 58 | sketch/giraffe/sketch_130_000019.jpg 57 59 | sketch/goatee/sketch_131_000020.jpg 58 60 | sketch/grapes/sketch_133_000019.jpg 59 61 | sketch/guitar/sketch_135_000038.jpg 60 62 | sketch/hammer/sketch_137_000044.jpg 61 63 | sketch/helicopter/sketch_143_000063.jpg 62 64 | sketch/helmet/sketch_144_000081.jpg 63 65 | sketch/horse/sketch_148_000002.jpg 64 66 | sketch/kangaroo/sketch_160_000075.jpg 65 67 | sketch/lantern/sketch_166_000019.jpg 66 68 | sketch/laptop/sketch_167_000075.jpg 67 69 | sketch/leaf/sketch_168_000336.jpg 68 70 | sketch/lion/sketch_175_000088.jpg 69 71 | sketch/lipstick/sketch_176_000056.jpg 70 72 | sketch/lobster/sketch_177_000061.jpg 71 73 | sketch/microphone/sketch_185_000150.jpg 72 74 | sketch/monkey/sketch_187_000031.jpg 73 75 | sketch/mosquito/sketch_189_000038.jpg 74 76 | sketch/mouse/sketch_192_000121.jpg 75 77 | sketch/mug/sketch_195_000141.jpg 76 78 | sketch/mushroom/sketch_196_000107.jpg 77 79 | sketch/onion/sketch_203_000005.jpg 78 80 | sketch/panda/sketch_209_000019.jpg 79 81 | sketch/peanut/sketch_215_000044.jpg 80 82 | sketch/pear/sketch_216_000105.jpg 81 83 | sketch/peas/sketch_217_000028.jpg 82 84 | sketch/pencil/sketch_218_000025.jpg 83 85 | sketch/penguin/sketch_219_000021.jpg 84 86 | sketch/pig/sketch_223_000157.jpg 85 87 | sketch/pillow/sketch_224_000097.jpg 86 88 | sketch/pineapple/sketch_225_000031.jpg 87 89 | sketch/potato/sketch_233_000060.jpg 88 90 | sketch/power_outlet/sketch_234_000079.jpg 89 91 | sketch/purse/sketch_235_000067.jpg 90 92 | sketch/rabbit/sketch_236_000058.jpg 91 93 | sketch/raccoon/sketch_237_000293.jpg 92 94 | sketch/rhinoceros/sketch_243_000160.jpg 93 95 | sketch/rifle/sketch_244_000065.jpg 94 96 | sketch/saxophone/sketch_251_000280.jpg 95 97 | sketch/screwdriver/sketch_255_000041.jpg 96 98 | sketch/sea_turtle/sketch_256_000104.jpg 97 99 | sketch/see_saw/sketch_257_000106.jpg 98 100 | sketch/sheep/sketch_259_000424.jpg 99 101 | sketch/shoe/sketch_260_000601.jpg 100 102 | sketch/skateboard/sketch_264_000201.jpg 101 103 | sketch/snake/sketch_270_000298.jpg 102 104 | sketch/speedboat/sketch_276_000331.jpg 103 105 | sketch/spider/sketch_277_000530.jpg 104 106 | sketch/squirrel/sketch_282_000358.jpg 105 107 | sketch/strawberry/sketch_291_000020.jpg 106 108 | sketch/streetlight/sketch_292_000191.jpg 107 109 | sketch/string_bean/sketch_293_000010.jpg 108 110 | sketch/submarine/sketch_294_000112.jpg 109 111 | sketch/swan/sketch_297_000154.jpg 110 112 | sketch/table/sketch_302_000041.jpg 111 113 | sketch/teapot/sketch_303_000313.jpg 112 114 | sketch/teddy-bear/sketch_304_000016.jpg 113 115 | sketch/television/sketch_306_000064.jpg 114 116 | sketch/The_Eiffel_Tower/sketch_309_000177.jpg 115 117 | sketch/The_Great_Wall_of_China/sketch_310_000016.jpg 116 118 | sketch/tiger/sketch_312_000231.jpg 117 119 | sketch/toe/sketch_314_000034.jpg 118 120 | sketch/train/sketch_322_000229.jpg 119 121 | sketch/truck/sketch_326_000089.jpg 120 122 | sketch/umbrella/sketch_329_000143.jpg 121 123 | sketch/vase/sketch_332_000150.jpg 122 124 | sketch/watermelon/sketch_335_000103.jpg 123 125 | sketch/whale/sketch_337_000235.jpg 124 126 | sketch/zebra/sketch_344_000036.jpg 125 127 | -------------------------------------------------------------------------------- /data/splits/domainnet/clipart_labeled_1.txt: -------------------------------------------------------------------------------- 1 | clipart/aircraft_carrier/clipart_001_000017.jpg 0 2 | clipart/alarm_clock/clipart_003_000058.jpg 1 3 | clipart/ant/clipart_007_000030.jpg 2 4 | clipart/anvil/clipart_008_000072.jpg 3 5 | clipart/asparagus/clipart_011_000042.jpg 4 6 | clipart/axe/clipart_012_000014.jpg 5 7 | clipart/banana/clipart_014_000022.jpg 6 8 | clipart/basket/clipart_019_000028.jpg 7 9 | clipart/bathtub/clipart_022_000093.jpg 8 10 | clipart/bear/clipart_024_000075.jpg 9 11 | clipart/bee/clipart_027_000169.jpg 10 12 | clipart/bird/clipart_032_000046.jpg 11 13 | clipart/blackberry/clipart_034_000034.jpg 12 14 | clipart/blueberry/clipart_035_000153.jpg 13 15 | clipart/bottlecap/clipart_038_000029.jpg 14 16 | clipart/broccoli/clipart_044_000069.jpg 15 17 | clipart/bus/clipart_048_000054.jpg 16 18 | clipart/butterfly/clipart_050_000074.jpg 17 19 | clipart/cactus/clipart_051_000090.jpg 18 20 | clipart/cake/clipart_052_000108.jpg 19 21 | clipart/calculator/clipart_053_000034.jpg 20 22 | clipart/camel/clipart_055_000130.jpg 21 23 | clipart/camera/clipart_056_000050.jpg 22 24 | clipart/candle/clipart_059_000102.jpg 23 25 | clipart/cannon/clipart_060_000006.jpg 24 26 | clipart/canoe/clipart_061_000019.jpg 25 27 | clipart/carrot/clipart_063_000029.jpg 26 28 | clipart/castle/clipart_064_000028.jpg 27 29 | clipart/cat/clipart_065_000011.jpg 28 30 | clipart/ceiling_fan/clipart_066_000016.jpg 29 31 | clipart/cello/clipart_067_000062.jpg 30 32 | clipart/cell_phone/clipart_068_000010.jpg 31 33 | clipart/chair/clipart_069_000091.jpg 32 34 | clipart/chandelier/clipart_070_000109.jpg 33 35 | clipart/coffee_cup/clipart_076_000203.jpg 34 36 | clipart/compass/clipart_077_000128.jpg 35 37 | clipart/computer/clipart_078_000073.jpg 36 38 | clipart/cow/clipart_082_000141.jpg 37 39 | clipart/crab/clipart_083_000002.jpg 38 40 | clipart/crocodile/clipart_085_000030.jpg 39 41 | clipart/cruise_ship/clipart_087_000022.jpg 40 42 | clipart/dog/clipart_092_000042.jpg 41 43 | clipart/dolphin/clipart_093_000014.jpg 42 44 | clipart/dragon/clipart_096_000085.jpg 43 45 | clipart/drums/clipart_099_000098.jpg 44 46 | clipart/duck/clipart_100_000089.jpg 45 47 | clipart/dumbbell/clipart_101_000318.jpg 46 48 | clipart/elephant/clipart_104_000082.jpg 47 49 | clipart/eyeglasses/clipart_108_000008.jpg 48 50 | clipart/feather/clipart_111_000154.jpg 49 51 | clipart/fence/clipart_112_000130.jpg 50 52 | clipart/fish/clipart_117_000054.jpg 51 53 | clipart/flamingo/clipart_118_000234.jpg 52 54 | clipart/flower/clipart_122_000195.jpg 53 55 | clipart/foot/clipart_124_000009.jpg 54 56 | clipart/fork/clipart_125_000126.jpg 55 57 | clipart/frog/clipart_126_000037.jpg 56 58 | clipart/giraffe/clipart_130_000014.jpg 57 59 | clipart/goatee/clipart_131_000251.jpg 58 60 | clipart/grapes/clipart_133_000080.jpg 59 61 | clipart/guitar/clipart_135_000031.jpg 60 62 | clipart/hammer/clipart_137_000147.jpg 61 63 | clipart/helicopter/clipart_143_000053.jpg 62 64 | clipart/helmet/clipart_144_000126.jpg 63 65 | clipart/horse/clipart_148_000089.jpg 64 66 | clipart/kangaroo/clipart_160_000053.jpg 65 67 | clipart/lantern/clipart_166_000022.jpg 66 68 | clipart/laptop/clipart_167_000021.jpg 67 69 | clipart/leaf/clipart_168_000004.jpg 68 70 | clipart/lion/clipart_175_000041.jpg 69 71 | clipart/lipstick/clipart_176_000043.jpg 70 72 | clipart/lobster/clipart_177_000080.jpg 71 73 | clipart/microphone/clipart_185_000085.jpg 72 74 | clipart/monkey/clipart_187_000038.jpg 73 75 | clipart/mosquito/clipart_189_000049.jpg 74 76 | clipart/mouse/clipart_192_000013.jpg 75 77 | clipart/mug/clipart_195_000151.jpg 76 78 | clipart/mushroom/clipart_196_000134.jpg 77 79 | clipart/onion/clipart_203_000087.jpg 78 80 | clipart/panda/clipart_209_000047.jpg 79 81 | clipart/peanut/clipart_215_000024.jpg 80 82 | clipart/pear/clipart_216_000052.jpg 81 83 | clipart/peas/clipart_217_000034.jpg 82 84 | clipart/pencil/clipart_218_000020.jpg 83 85 | clipart/penguin/clipart_219_000049.jpg 84 86 | clipart/pig/clipart_223_000091.jpg 85 87 | clipart/pillow/clipart_224_000048.jpg 86 88 | clipart/pineapple/clipart_225_000066.jpg 87 89 | clipart/potato/clipart_233_000043.jpg 88 90 | clipart/power_outlet/clipart_234_000001.jpg 89 91 | clipart/purse/clipart_235_000030.jpg 90 92 | clipart/rabbit/clipart_236_000037.jpg 91 93 | clipart/raccoon/clipart_237_000019.jpg 92 94 | clipart/rhinoceros/clipart_243_000061.jpg 93 95 | clipart/rifle/clipart_244_000074.jpg 94 96 | clipart/saxophone/clipart_251_000124.jpg 95 97 | clipart/screwdriver/clipart_255_000139.jpg 96 98 | clipart/sea_turtle/clipart_256_000009.jpg 97 99 | clipart/see_saw/clipart_257_000227.jpg 98 100 | clipart/sheep/clipart_259_000102.jpg 99 101 | clipart/shoe/clipart_260_000069.jpg 100 102 | clipart/skateboard/clipart_264_000165.jpg 101 103 | clipart/snake/clipart_270_000117.jpg 102 104 | clipart/speedboat/clipart_276_000178.jpg 103 105 | clipart/spider/clipart_277_000004.jpg 104 106 | clipart/squirrel/clipart_282_000197.jpg 105 107 | clipart/strawberry/clipart_291_000292.jpg 106 108 | clipart/streetlight/clipart_292_000139.jpg 107 109 | clipart/string_bean/clipart_293_000086.jpg 108 110 | clipart/submarine/clipart_294_000004.jpg 109 111 | clipart/swan/clipart_297_000312.jpg 110 112 | clipart/table/clipart_302_000219.jpg 111 113 | clipart/teapot/clipart_303_000095.jpg 112 114 | clipart/teddy-bear/clipart_304_000009.jpg 113 115 | clipart/television/clipart_306_000079.jpg 114 116 | clipart/The_Eiffel_Tower/clipart_309_000014.jpg 115 117 | clipart/The_Great_Wall_of_China/clipart_310_000050.jpg 116 118 | clipart/tiger/clipart_312_000005.jpg 117 119 | clipart/toe/clipart_314_000003.jpg 118 120 | clipart/train/clipart_322_000055.jpg 119 121 | clipart/truck/clipart_326_000010.jpg 120 122 | clipart/umbrella/clipart_329_000006.jpg 121 123 | clipart/vase/clipart_332_000053.jpg 122 124 | clipart/watermelon/clipart_335_000032.jpg 123 125 | clipart/whale/clipart_337_000242.jpg 124 126 | clipart/zebra/clipart_344_000111.jpg 125 127 | -------------------------------------------------------------------------------- /data/splits/domainnet/painting_labeled_1.txt: -------------------------------------------------------------------------------- 1 | painting/aircraft_carrier/painting_001_000113.jpg 0 2 | painting/alarm_clock/painting_003_000064.jpg 1 3 | painting/ant/painting_007_000234.jpg 2 4 | painting/anvil/painting_008_000082.jpg 3 5 | painting/asparagus/painting_011_000316.jpg 4 6 | painting/axe/painting_012_000050.jpg 5 7 | painting/banana/painting_014_000196.jpg 6 8 | painting/basket/painting_019_000115.jpg 7 9 | painting/bathtub/painting_022_000024.jpg 8 10 | painting/bear/painting_024_000140.jpg 9 11 | painting/bee/painting_027_000289.jpg 10 12 | painting/bird/painting_032_000022.jpg 11 13 | painting/blackberry/painting_034_000001.jpg 12 14 | painting/blueberry/painting_035_000029.jpg 13 15 | painting/bottlecap/painting_038_000299.jpg 14 16 | painting/broccoli/painting_044_000045.jpg 15 17 | painting/bus/painting_048_000055.jpg 16 18 | painting/butterfly/painting_050_000298.jpg 17 19 | painting/cactus/painting_051_000071.jpg 18 20 | painting/cake/painting_052_000062.jpg 19 21 | painting/calculator/painting_053_000006.jpg 20 22 | painting/camel/painting_055_000078.jpg 21 23 | painting/camera/painting_056_000010.jpg 22 24 | painting/candle/painting_059_000180.jpg 23 25 | painting/cannon/painting_060_000048.jpg 24 26 | painting/canoe/painting_061_000027.jpg 25 27 | painting/carrot/painting_063_000090.jpg 26 28 | painting/castle/painting_064_000113.jpg 27 29 | painting/cat/painting_065_000327.jpg 28 30 | painting/ceiling_fan/painting_066_000013.jpg 29 31 | painting/cello/painting_067_000149.jpg 30 32 | painting/cell_phone/painting_068_000049.jpg 31 33 | painting/chair/painting_069_000004.jpg 32 34 | painting/chandelier/painting_070_000043.jpg 33 35 | painting/coffee_cup/painting_076_000089.jpg 34 36 | painting/compass/painting_077_000030.jpg 35 37 | painting/computer/painting_078_000012.jpg 36 38 | painting/cow/painting_082_000082.jpg 37 39 | painting/crab/painting_083_000046.jpg 38 40 | painting/crocodile/painting_085_000115.jpg 39 41 | painting/cruise_ship/painting_087_000159.jpg 40 42 | painting/dog/painting_092_000702.jpg 41 43 | painting/dolphin/painting_093_000209.jpg 42 44 | painting/dragon/painting_096_000036.jpg 43 45 | painting/drums/painting_099_000102.jpg 44 46 | painting/duck/painting_100_000148.jpg 45 47 | painting/dumbbell/painting_101_000117.jpg 46 48 | painting/elephant/painting_104_000159.jpg 47 49 | painting/eyeglasses/painting_108_000067.jpg 48 50 | painting/feather/painting_111_000341.jpg 49 51 | painting/fence/painting_112_000037.jpg 50 52 | painting/fish/painting_117_000046.jpg 51 53 | painting/flamingo/painting_118_000048.jpg 52 54 | painting/flower/painting_122_000197.jpg 53 55 | painting/foot/painting_124_000027.jpg 54 56 | painting/fork/painting_125_000074.jpg 55 57 | painting/frog/painting_126_000065.jpg 56 58 | painting/giraffe/painting_130_000073.jpg 57 59 | painting/goatee/painting_131_000047.jpg 58 60 | painting/grapes/painting_133_000105.jpg 59 61 | painting/guitar/painting_135_000176.jpg 60 62 | painting/hammer/painting_137_000002.jpg 61 63 | painting/helicopter/painting_143_000025.jpg 62 64 | painting/helmet/painting_144_000018.jpg 63 65 | painting/horse/painting_148_000447.jpg 64 66 | painting/kangaroo/painting_160_000055.jpg 65 67 | painting/lantern/painting_166_000191.jpg 66 68 | painting/laptop/painting_167_000039.jpg 67 69 | painting/leaf/painting_168_000389.jpg 68 70 | painting/lion/painting_175_000172.jpg 69 71 | painting/lipstick/painting_176_000097.jpg 70 72 | painting/lobster/painting_177_000251.jpg 71 73 | painting/microphone/painting_185_000121.jpg 72 74 | painting/monkey/painting_187_000310.jpg 73 75 | painting/mosquito/painting_189_000012.jpg 74 76 | painting/mouse/painting_192_000433.jpg 75 77 | painting/mug/painting_195_000420.jpg 76 78 | painting/mushroom/painting_196_000155.jpg 77 79 | painting/onion/painting_203_000067.jpg 78 80 | painting/panda/painting_209_000028.jpg 79 81 | painting/peanut/painting_215_000065.jpg 80 82 | painting/pear/painting_216_000369.jpg 81 83 | painting/peas/painting_217_000076.jpg 82 84 | painting/pencil/painting_218_000104.jpg 83 85 | painting/penguin/painting_219_000205.jpg 84 86 | painting/pig/painting_223_000226.jpg 85 87 | painting/pillow/painting_224_000114.jpg 86 88 | painting/pineapple/painting_225_000132.jpg 87 89 | painting/potato/painting_233_000028.jpg 88 90 | painting/power_outlet/painting_234_000072.jpg 89 91 | painting/purse/painting_235_000024.jpg 90 92 | painting/rabbit/painting_236_000149.jpg 91 93 | painting/raccoon/painting_237_000128.jpg 92 94 | painting/rhinoceros/painting_243_000088.jpg 93 95 | painting/rifle/painting_244_000120.jpg 94 96 | painting/saxophone/painting_251_000031.jpg 95 97 | painting/screwdriver/painting_255_000068.jpg 96 98 | painting/sea_turtle/painting_256_000196.jpg 97 99 | painting/see_saw/painting_257_000025.jpg 98 100 | painting/sheep/painting_259_000314.jpg 99 101 | painting/shoe/painting_260_000198.jpg 100 102 | painting/skateboard/painting_264_000069.jpg 101 103 | painting/snake/painting_270_000263.jpg 102 104 | painting/speedboat/painting_276_000029.jpg 103 105 | painting/spider/painting_277_000088.jpg 104 106 | painting/squirrel/painting_282_000766.jpg 105 107 | painting/strawberry/painting_291_000073.jpg 106 108 | painting/streetlight/painting_292_000208.jpg 107 109 | painting/string_bean/painting_293_000044.jpg 108 110 | painting/submarine/painting_294_000115.jpg 109 111 | painting/swan/painting_297_000285.jpg 110 112 | painting/table/painting_302_000037.jpg 111 113 | painting/teapot/painting_303_000122.jpg 112 114 | painting/teddy-bear/painting_304_000120.jpg 113 115 | painting/television/painting_306_000049.jpg 114 116 | painting/The_Eiffel_Tower/painting_309_000115.jpg 115 117 | painting/The_Great_Wall_of_China/painting_310_000028.jpg 116 118 | painting/tiger/painting_312_000129.jpg 117 119 | painting/toe/painting_314_000001.jpg 118 120 | painting/train/painting_322_000212.jpg 119 121 | painting/truck/painting_326_000082.jpg 120 122 | painting/umbrella/painting_329_000236.jpg 121 123 | painting/vase/painting_332_000224.jpg 122 124 | painting/watermelon/painting_335_000235.jpg 123 125 | painting/whale/painting_337_000324.jpg 124 126 | painting/zebra/painting_344_000155.jpg 125 127 | -------------------------------------------------------------------------------- /data/splits/office/dslr_labeled_5.txt: -------------------------------------------------------------------------------- 1 | dslr/images/back_pack/frame_0001.jpg 0 2 | dslr/images/back_pack/frame_0002.jpg 0 3 | dslr/images/back_pack/frame_0008.jpg 0 4 | dslr/images/back_pack/frame_0010.jpg 0 5 | dslr/images/back_pack/frame_0011.jpg 0 6 | dslr/images/bike/frame_0001.jpg 1 7 | dslr/images/bike/frame_0003.jpg 1 8 | dslr/images/bike/frame_0004.jpg 1 9 | dslr/images/bike/frame_0008.jpg 1 10 | dslr/images/bike/frame_0012.jpg 1 11 | dslr/images/bike_helmet/frame_0001.jpg 2 12 | dslr/images/bike_helmet/frame_0012.jpg 2 13 | dslr/images/bike_helmet/frame_0016.jpg 2 14 | dslr/images/bike_helmet/frame_0020.jpg 2 15 | dslr/images/bike_helmet/frame_0021.jpg 2 16 | dslr/images/bookcase/frame_0002.jpg 3 17 | dslr/images/bookcase/frame_0003.jpg 3 18 | dslr/images/bookcase/frame_0008.jpg 3 19 | dslr/images/bookcase/frame_0010.jpg 3 20 | dslr/images/bookcase/frame_0012.jpg 3 21 | dslr/images/bottle/frame_0001.jpg 4 22 | dslr/images/bottle/frame_0004.jpg 4 23 | dslr/images/bottle/frame_0008.jpg 4 24 | dslr/images/bottle/frame_0009.jpg 4 25 | dslr/images/bottle/frame_0014.jpg 4 26 | dslr/images/calculator/frame_0002.jpg 5 27 | dslr/images/calculator/frame_0004.jpg 5 28 | dslr/images/calculator/frame_0008.jpg 5 29 | dslr/images/calculator/frame_0009.jpg 5 30 | dslr/images/calculator/frame_0011.jpg 5 31 | dslr/images/desk_chair/frame_0001.jpg 6 32 | dslr/images/desk_chair/frame_0002.jpg 6 33 | dslr/images/desk_chair/frame_0009.jpg 6 34 | dslr/images/desk_chair/frame_0010.jpg 6 35 | dslr/images/desk_chair/frame_0011.jpg 6 36 | dslr/images/desk_lamp/frame_0002.jpg 7 37 | dslr/images/desk_lamp/frame_0005.jpg 7 38 | dslr/images/desk_lamp/frame_0009.jpg 7 39 | dslr/images/desk_lamp/frame_0011.jpg 7 40 | dslr/images/desk_lamp/frame_0014.jpg 7 41 | dslr/images/desktop_computer/frame_0004.jpg 8 42 | dslr/images/desktop_computer/frame_0005.jpg 8 43 | dslr/images/desktop_computer/frame_0006.jpg 8 44 | dslr/images/desktop_computer/frame_0008.jpg 8 45 | dslr/images/desktop_computer/frame_0014.jpg 8 46 | dslr/images/file_cabinet/frame_0004.jpg 9 47 | dslr/images/file_cabinet/frame_0008.jpg 9 48 | dslr/images/file_cabinet/frame_0009.jpg 9 49 | dslr/images/file_cabinet/frame_0011.jpg 9 50 | dslr/images/file_cabinet/frame_0015.jpg 9 51 | dslr/images/headphones/frame_0001.jpg 10 52 | dslr/images/headphones/frame_0002.jpg 10 53 | dslr/images/headphones/frame_0006.jpg 10 54 | dslr/images/headphones/frame_0009.jpg 10 55 | dslr/images/headphones/frame_0013.jpg 10 56 | dslr/images/keyboard/frame_0001.jpg 11 57 | dslr/images/keyboard/frame_0002.jpg 11 58 | dslr/images/keyboard/frame_0003.jpg 11 59 | dslr/images/keyboard/frame_0007.jpg 11 60 | dslr/images/keyboard/frame_0008.jpg 11 61 | dslr/images/laptop_computer/frame_0003.jpg 12 62 | dslr/images/laptop_computer/frame_0006.jpg 12 63 | dslr/images/laptop_computer/frame_0016.jpg 12 64 | dslr/images/laptop_computer/frame_0018.jpg 12 65 | dslr/images/laptop_computer/frame_0019.jpg 12 66 | dslr/images/letter_tray/frame_0001.jpg 13 67 | dslr/images/letter_tray/frame_0002.jpg 13 68 | dslr/images/letter_tray/frame_0003.jpg 13 69 | dslr/images/letter_tray/frame_0006.jpg 13 70 | dslr/images/letter_tray/frame_0007.jpg 13 71 | dslr/images/mobile_phone/frame_0005.jpg 14 72 | dslr/images/mobile_phone/frame_0010.jpg 14 73 | dslr/images/mobile_phone/frame_0017.jpg 14 74 | dslr/images/mobile_phone/frame_0022.jpg 14 75 | dslr/images/mobile_phone/frame_0031.jpg 14 76 | dslr/images/monitor/frame_0002.jpg 15 77 | dslr/images/monitor/frame_0009.jpg 15 78 | dslr/images/monitor/frame_0014.jpg 15 79 | dslr/images/monitor/frame_0015.jpg 15 80 | dslr/images/monitor/frame_0022.jpg 15 81 | dslr/images/mouse/frame_0001.jpg 16 82 | dslr/images/mouse/frame_0003.jpg 16 83 | dslr/images/mouse/frame_0005.jpg 16 84 | dslr/images/mouse/frame_0010.jpg 16 85 | dslr/images/mouse/frame_0011.jpg 16 86 | dslr/images/mug/frame_0001.jpg 17 87 | dslr/images/mug/frame_0003.jpg 17 88 | dslr/images/mug/frame_0004.jpg 17 89 | dslr/images/mug/frame_0006.jpg 17 90 | dslr/images/mug/frame_0007.jpg 17 91 | dslr/images/paper_notebook/frame_0004.jpg 18 92 | dslr/images/paper_notebook/frame_0005.jpg 18 93 | dslr/images/paper_notebook/frame_0006.jpg 18 94 | dslr/images/paper_notebook/frame_0008.jpg 18 95 | dslr/images/paper_notebook/frame_0010.jpg 18 96 | dslr/images/pen/frame_0001.jpg 19 97 | dslr/images/pen/frame_0005.jpg 19 98 | dslr/images/pen/frame_0007.jpg 19 99 | dslr/images/pen/frame_0008.jpg 19 100 | dslr/images/pen/frame_0010.jpg 19 101 | dslr/images/phone/frame_0003.jpg 20 102 | dslr/images/phone/frame_0005.jpg 20 103 | dslr/images/phone/frame_0008.jpg 20 104 | dslr/images/phone/frame_0009.jpg 20 105 | dslr/images/phone/frame_0012.jpg 20 106 | dslr/images/printer/frame_0002.jpg 21 107 | dslr/images/printer/frame_0003.jpg 21 108 | dslr/images/printer/frame_0005.jpg 21 109 | dslr/images/printer/frame_0007.jpg 21 110 | dslr/images/printer/frame_0013.jpg 21 111 | dslr/images/projector/frame_0004.jpg 22 112 | dslr/images/projector/frame_0013.jpg 22 113 | dslr/images/projector/frame_0014.jpg 22 114 | dslr/images/projector/frame_0016.jpg 22 115 | dslr/images/projector/frame_0017.jpg 22 116 | dslr/images/punchers/frame_0002.jpg 23 117 | dslr/images/punchers/frame_0007.jpg 23 118 | dslr/images/punchers/frame_0009.jpg 23 119 | dslr/images/punchers/frame_0012.jpg 23 120 | dslr/images/punchers/frame_0016.jpg 23 121 | dslr/images/ring_binder/frame_0003.jpg 24 122 | dslr/images/ring_binder/frame_0005.jpg 24 123 | dslr/images/ring_binder/frame_0006.jpg 24 124 | dslr/images/ring_binder/frame_0007.jpg 24 125 | dslr/images/ring_binder/frame_0010.jpg 24 126 | dslr/images/ruler/frame_0001.jpg 25 127 | dslr/images/ruler/frame_0002.jpg 25 128 | dslr/images/ruler/frame_0003.jpg 25 129 | dslr/images/ruler/frame_0004.jpg 25 130 | dslr/images/ruler/frame_0005.jpg 25 131 | dslr/images/scissors/frame_0001.jpg 26 132 | dslr/images/scissors/frame_0002.jpg 26 133 | dslr/images/scissors/frame_0007.jpg 26 134 | dslr/images/scissors/frame_0010.jpg 26 135 | dslr/images/scissors/frame_0013.jpg 26 136 | dslr/images/speaker/frame_0003.jpg 27 137 | dslr/images/speaker/frame_0008.jpg 27 138 | dslr/images/speaker/frame_0017.jpg 27 139 | dslr/images/speaker/frame_0023.jpg 27 140 | dslr/images/speaker/frame_0026.jpg 27 141 | dslr/images/stapler/frame_0003.jpg 28 142 | dslr/images/stapler/frame_0009.jpg 28 143 | dslr/images/stapler/frame_0010.jpg 28 144 | dslr/images/stapler/frame_0011.jpg 28 145 | dslr/images/stapler/frame_0015.jpg 28 146 | dslr/images/tape_dispenser/frame_0003.jpg 29 147 | dslr/images/tape_dispenser/frame_0004.jpg 29 148 | dslr/images/tape_dispenser/frame_0007.jpg 29 149 | dslr/images/tape_dispenser/frame_0013.jpg 29 150 | dslr/images/tape_dispenser/frame_0014.jpg 29 151 | dslr/images/trash_can/frame_0004.jpg 30 152 | dslr/images/trash_can/frame_0008.jpg 30 153 | dslr/images/trash_can/frame_0009.jpg 30 154 | dslr/images/trash_can/frame_0012.jpg 30 155 | dslr/images/trash_can/frame_0015.jpg 30 156 | -------------------------------------------------------------------------------- /data/splits/office/amazon_labeled_5.txt: -------------------------------------------------------------------------------- 1 | amazon/images/back_pack/frame_0001.jpg 0 2 | amazon/images/back_pack/frame_0012.jpg 0 3 | amazon/images/back_pack/frame_0015.jpg 0 4 | amazon/images/back_pack/frame_0057.jpg 0 5 | amazon/images/back_pack/frame_0075.jpg 0 6 | amazon/images/bike/frame_0005.jpg 1 7 | amazon/images/bike/frame_0011.jpg 1 8 | amazon/images/bike/frame_0013.jpg 1 9 | amazon/images/bike/frame_0031.jpg 1 10 | amazon/images/bike/frame_0046.jpg 1 11 | amazon/images/bike_helmet/frame_0003.jpg 2 12 | amazon/images/bike_helmet/frame_0004.jpg 2 13 | amazon/images/bike_helmet/frame_0045.jpg 2 14 | amazon/images/bike_helmet/frame_0060.jpg 2 15 | amazon/images/bike_helmet/frame_0062.jpg 2 16 | amazon/images/bookcase/frame_0002.jpg 3 17 | amazon/images/bookcase/frame_0012.jpg 3 18 | amazon/images/bookcase/frame_0015.jpg 3 19 | amazon/images/bookcase/frame_0020.jpg 3 20 | amazon/images/bookcase/frame_0024.jpg 3 21 | amazon/images/bottle/frame_0005.jpg 4 22 | amazon/images/bottle/frame_0016.jpg 4 23 | amazon/images/bottle/frame_0032.jpg 4 24 | amazon/images/bottle/frame_0033.jpg 4 25 | amazon/images/bottle/frame_0035.jpg 4 26 | amazon/images/calculator/frame_0009.jpg 5 27 | amazon/images/calculator/frame_0012.jpg 5 28 | amazon/images/calculator/frame_0060.jpg 5 29 | amazon/images/calculator/frame_0077.jpg 5 30 | amazon/images/calculator/frame_0087.jpg 5 31 | amazon/images/desk_chair/frame_0006.jpg 6 32 | amazon/images/desk_chair/frame_0035.jpg 6 33 | amazon/images/desk_chair/frame_0066.jpg 6 34 | amazon/images/desk_chair/frame_0072.jpg 6 35 | amazon/images/desk_chair/frame_0075.jpg 6 36 | amazon/images/desk_lamp/frame_0009.jpg 7 37 | amazon/images/desk_lamp/frame_0039.jpg 7 38 | amazon/images/desk_lamp/frame_0046.jpg 7 39 | amazon/images/desk_lamp/frame_0062.jpg 7 40 | amazon/images/desk_lamp/frame_0083.jpg 7 41 | amazon/images/desktop_computer/frame_0026.jpg 8 42 | amazon/images/desktop_computer/frame_0032.jpg 8 43 | amazon/images/desktop_computer/frame_0035.jpg 8 44 | amazon/images/desktop_computer/frame_0059.jpg 8 45 | amazon/images/desktop_computer/frame_0084.jpg 8 46 | amazon/images/file_cabinet/frame_0001.jpg 9 47 | amazon/images/file_cabinet/frame_0003.jpg 9 48 | amazon/images/file_cabinet/frame_0010.jpg 9 49 | amazon/images/file_cabinet/frame_0066.jpg 9 50 | amazon/images/file_cabinet/frame_0068.jpg 9 51 | amazon/images/headphones/frame_0019.jpg 10 52 | amazon/images/headphones/frame_0043.jpg 10 53 | amazon/images/headphones/frame_0061.jpg 10 54 | amazon/images/headphones/frame_0085.jpg 10 55 | amazon/images/headphones/frame_0091.jpg 10 56 | amazon/images/keyboard/frame_0007.jpg 11 57 | amazon/images/keyboard/frame_0010.jpg 11 58 | amazon/images/keyboard/frame_0022.jpg 11 59 | amazon/images/keyboard/frame_0049.jpg 11 60 | amazon/images/keyboard/frame_0076.jpg 11 61 | amazon/images/laptop_computer/frame_0010.jpg 12 62 | amazon/images/laptop_computer/frame_0021.jpg 12 63 | amazon/images/laptop_computer/frame_0028.jpg 12 64 | amazon/images/laptop_computer/frame_0064.jpg 12 65 | amazon/images/laptop_computer/frame_0072.jpg 12 66 | amazon/images/letter_tray/frame_0004.jpg 13 67 | amazon/images/letter_tray/frame_0015.jpg 13 68 | amazon/images/letter_tray/frame_0019.jpg 13 69 | amazon/images/letter_tray/frame_0045.jpg 13 70 | amazon/images/letter_tray/frame_0068.jpg 13 71 | amazon/images/mobile_phone/frame_0006.jpg 14 72 | amazon/images/mobile_phone/frame_0019.jpg 14 73 | amazon/images/mobile_phone/frame_0040.jpg 14 74 | amazon/images/mobile_phone/frame_0059.jpg 14 75 | amazon/images/mobile_phone/frame_0086.jpg 14 76 | amazon/images/monitor/frame_0006.jpg 15 77 | amazon/images/monitor/frame_0023.jpg 15 78 | amazon/images/monitor/frame_0036.jpg 15 79 | amazon/images/monitor/frame_0054.jpg 15 80 | amazon/images/monitor/frame_0085.jpg 15 81 | amazon/images/mouse/frame_0020.jpg 16 82 | amazon/images/mouse/frame_0035.jpg 16 83 | amazon/images/mouse/frame_0039.jpg 16 84 | amazon/images/mouse/frame_0060.jpg 16 85 | amazon/images/mouse/frame_0100.jpg 16 86 | amazon/images/mug/frame_0006.jpg 17 87 | amazon/images/mug/frame_0045.jpg 17 88 | amazon/images/mug/frame_0050.jpg 17 89 | amazon/images/mug/frame_0064.jpg 17 90 | amazon/images/mug/frame_0073.jpg 17 91 | amazon/images/paper_notebook/frame_0006.jpg 18 92 | amazon/images/paper_notebook/frame_0044.jpg 18 93 | amazon/images/paper_notebook/frame_0060.jpg 18 94 | amazon/images/paper_notebook/frame_0061.jpg 18 95 | amazon/images/paper_notebook/frame_0075.jpg 18 96 | amazon/images/pen/frame_0022.jpg 19 97 | amazon/images/pen/frame_0057.jpg 19 98 | amazon/images/pen/frame_0061.jpg 19 99 | amazon/images/pen/frame_0077.jpg 19 100 | amazon/images/pen/frame_0094.jpg 19 101 | amazon/images/phone/frame_0016.jpg 20 102 | amazon/images/phone/frame_0036.jpg 20 103 | amazon/images/phone/frame_0038.jpg 20 104 | amazon/images/phone/frame_0057.jpg 20 105 | amazon/images/phone/frame_0067.jpg 20 106 | amazon/images/printer/frame_0024.jpg 21 107 | amazon/images/printer/frame_0054.jpg 21 108 | amazon/images/printer/frame_0056.jpg 21 109 | amazon/images/printer/frame_0099.jpg 21 110 | amazon/images/printer/frame_0100.jpg 21 111 | amazon/images/projector/frame_0014.jpg 22 112 | amazon/images/projector/frame_0016.jpg 22 113 | amazon/images/projector/frame_0049.jpg 22 114 | amazon/images/projector/frame_0063.jpg 22 115 | amazon/images/projector/frame_0068.jpg 22 116 | amazon/images/punchers/frame_0025.jpg 23 117 | amazon/images/punchers/frame_0033.jpg 23 118 | amazon/images/punchers/frame_0045.jpg 23 119 | amazon/images/punchers/frame_0083.jpg 23 120 | amazon/images/punchers/frame_0085.jpg 23 121 | amazon/images/ring_binder/frame_0014.jpg 24 122 | amazon/images/ring_binder/frame_0021.jpg 24 123 | amazon/images/ring_binder/frame_0035.jpg 24 124 | amazon/images/ring_binder/frame_0075.jpg 24 125 | amazon/images/ring_binder/frame_0090.jpg 24 126 | amazon/images/ruler/frame_0010.jpg 25 127 | amazon/images/ruler/frame_0011.jpg 25 128 | amazon/images/ruler/frame_0020.jpg 25 129 | amazon/images/ruler/frame_0042.jpg 25 130 | amazon/images/ruler/frame_0058.jpg 25 131 | amazon/images/scissors/frame_0005.jpg 26 132 | amazon/images/scissors/frame_0007.jpg 26 133 | amazon/images/scissors/frame_0028.jpg 26 134 | amazon/images/scissors/frame_0037.jpg 26 135 | amazon/images/scissors/frame_0051.jpg 26 136 | amazon/images/speaker/frame_0012.jpg 27 137 | amazon/images/speaker/frame_0029.jpg 27 138 | amazon/images/speaker/frame_0041.jpg 27 139 | amazon/images/speaker/frame_0065.jpg 27 140 | amazon/images/speaker/frame_0090.jpg 27 141 | amazon/images/stapler/frame_0009.jpg 28 142 | amazon/images/stapler/frame_0033.jpg 28 143 | amazon/images/stapler/frame_0040.jpg 28 144 | amazon/images/stapler/frame_0059.jpg 28 145 | amazon/images/stapler/frame_0075.jpg 28 146 | amazon/images/tape_dispenser/frame_0010.jpg 29 147 | amazon/images/tape_dispenser/frame_0013.jpg 29 148 | amazon/images/tape_dispenser/frame_0026.jpg 29 149 | amazon/images/tape_dispenser/frame_0055.jpg 29 150 | amazon/images/tape_dispenser/frame_0089.jpg 29 151 | amazon/images/trash_can/frame_0025.jpg 30 152 | amazon/images/trash_can/frame_0031.jpg 30 153 | amazon/images/trash_can/frame_0047.jpg 30 154 | amazon/images/trash_can/frame_0051.jpg 30 155 | amazon/images/trash_can/frame_0059.jpg 30 156 | -------------------------------------------------------------------------------- /data/splits/office/webcam_labeled_5.txt: -------------------------------------------------------------------------------- 1 | webcam/images/back_pack/frame_0001.jpg 0 2 | webcam/images/back_pack/frame_0003.jpg 0 3 | webcam/images/back_pack/frame_0004.jpg 0 4 | webcam/images/back_pack/frame_0015.jpg 0 5 | webcam/images/back_pack/frame_0025.jpg 0 6 | webcam/images/bike/frame_0002.jpg 1 7 | webcam/images/bike/frame_0003.jpg 1 8 | webcam/images/bike/frame_0004.jpg 1 9 | webcam/images/bike/frame_0012.jpg 1 10 | webcam/images/bike/frame_0019.jpg 1 11 | webcam/images/bike_helmet/frame_0001.jpg 2 12 | webcam/images/bike_helmet/frame_0008.jpg 2 13 | webcam/images/bike_helmet/frame_0012.jpg 2 14 | webcam/images/bike_helmet/frame_0021.jpg 2 15 | webcam/images/bike_helmet/frame_0026.jpg 2 16 | webcam/images/bookcase/frame_0003.jpg 3 17 | webcam/images/bookcase/frame_0008.jpg 3 18 | webcam/images/bookcase/frame_0010.jpg 3 19 | webcam/images/bookcase/frame_0011.jpg 3 20 | webcam/images/bookcase/frame_0012.jpg 3 21 | webcam/images/bottle/frame_0001.jpg 4 22 | webcam/images/bottle/frame_0002.jpg 4 23 | webcam/images/bottle/frame_0003.jpg 4 24 | webcam/images/bottle/frame_0012.jpg 4 25 | webcam/images/bottle/frame_0016.jpg 4 26 | webcam/images/calculator/frame_0008.jpg 5 27 | webcam/images/calculator/frame_0016.jpg 5 28 | webcam/images/calculator/frame_0017.jpg 5 29 | webcam/images/calculator/frame_0029.jpg 5 30 | webcam/images/calculator/frame_0031.jpg 5 31 | webcam/images/desk_chair/frame_0005.jpg 6 32 | webcam/images/desk_chair/frame_0006.jpg 6 33 | webcam/images/desk_chair/frame_0030.jpg 6 34 | webcam/images/desk_chair/frame_0035.jpg 6 35 | webcam/images/desk_chair/frame_0039.jpg 6 36 | webcam/images/desk_lamp/frame_0002.jpg 7 37 | webcam/images/desk_lamp/frame_0009.jpg 7 38 | webcam/images/desk_lamp/frame_0014.jpg 7 39 | webcam/images/desk_lamp/frame_0016.jpg 7 40 | webcam/images/desk_lamp/frame_0017.jpg 7 41 | webcam/images/desktop_computer/frame_0003.jpg 8 42 | webcam/images/desktop_computer/frame_0009.jpg 8 43 | webcam/images/desktop_computer/frame_0010.jpg 8 44 | webcam/images/desktop_computer/frame_0012.jpg 8 45 | webcam/images/desktop_computer/frame_0016.jpg 8 46 | webcam/images/file_cabinet/frame_0001.jpg 9 47 | webcam/images/file_cabinet/frame_0007.jpg 9 48 | webcam/images/file_cabinet/frame_0008.jpg 9 49 | webcam/images/file_cabinet/frame_0009.jpg 9 50 | webcam/images/file_cabinet/frame_0015.jpg 9 51 | webcam/images/headphones/frame_0001.jpg 10 52 | webcam/images/headphones/frame_0003.jpg 10 53 | webcam/images/headphones/frame_0005.jpg 10 54 | webcam/images/headphones/frame_0011.jpg 10 55 | webcam/images/headphones/frame_0023.jpg 10 56 | webcam/images/keyboard/frame_0002.jpg 11 57 | webcam/images/keyboard/frame_0006.jpg 11 58 | webcam/images/keyboard/frame_0013.jpg 11 59 | webcam/images/keyboard/frame_0016.jpg 11 60 | webcam/images/keyboard/frame_0022.jpg 11 61 | webcam/images/laptop_computer/frame_0003.jpg 12 62 | webcam/images/laptop_computer/frame_0006.jpg 12 63 | webcam/images/laptop_computer/frame_0016.jpg 12 64 | webcam/images/laptop_computer/frame_0018.jpg 12 65 | webcam/images/laptop_computer/frame_0019.jpg 12 66 | webcam/images/letter_tray/frame_0001.jpg 13 67 | webcam/images/letter_tray/frame_0005.jpg 13 68 | webcam/images/letter_tray/frame_0007.jpg 13 69 | webcam/images/letter_tray/frame_0012.jpg 13 70 | webcam/images/letter_tray/frame_0013.jpg 13 71 | webcam/images/mobile_phone/frame_0004.jpg 14 72 | webcam/images/mobile_phone/frame_0005.jpg 14 73 | webcam/images/mobile_phone/frame_0010.jpg 14 74 | webcam/images/mobile_phone/frame_0017.jpg 14 75 | webcam/images/mobile_phone/frame_0022.jpg 14 76 | webcam/images/monitor/frame_0003.jpg 15 77 | webcam/images/monitor/frame_0018.jpg 15 78 | webcam/images/monitor/frame_0027.jpg 15 79 | webcam/images/monitor/frame_0030.jpg 15 80 | webcam/images/monitor/frame_0043.jpg 15 81 | webcam/images/mouse/frame_0002.jpg 16 82 | webcam/images/mouse/frame_0005.jpg 16 83 | webcam/images/mouse/frame_0006.jpg 16 84 | webcam/images/mouse/frame_0009.jpg 16 85 | webcam/images/mouse/frame_0026.jpg 16 86 | webcam/images/mug/frame_0005.jpg 17 87 | webcam/images/mug/frame_0010.jpg 17 88 | webcam/images/mug/frame_0015.jpg 17 89 | webcam/images/mug/frame_0025.jpg 17 90 | webcam/images/mug/frame_0027.jpg 17 91 | webcam/images/paper_notebook/frame_0002.jpg 18 92 | webcam/images/paper_notebook/frame_0012.jpg 18 93 | webcam/images/paper_notebook/frame_0013.jpg 18 94 | webcam/images/paper_notebook/frame_0019.jpg 18 95 | webcam/images/paper_notebook/frame_0025.jpg 18 96 | webcam/images/pen/frame_0003.jpg 19 97 | webcam/images/pen/frame_0022.jpg 19 98 | webcam/images/pen/frame_0030.jpg 19 99 | webcam/images/pen/frame_0031.jpg 19 100 | webcam/images/pen/frame_0032.jpg 19 101 | webcam/images/phone/frame_0003.jpg 20 102 | webcam/images/phone/frame_0010.jpg 20 103 | webcam/images/phone/frame_0014.jpg 20 104 | webcam/images/phone/frame_0015.jpg 20 105 | webcam/images/phone/frame_0016.jpg 20 106 | webcam/images/printer/frame_0009.jpg 21 107 | webcam/images/printer/frame_0010.jpg 21 108 | webcam/images/printer/frame_0015.jpg 21 109 | webcam/images/printer/frame_0017.jpg 21 110 | webcam/images/printer/frame_0020.jpg 21 111 | webcam/images/projector/frame_0004.jpg 22 112 | webcam/images/projector/frame_0006.jpg 22 113 | webcam/images/projector/frame_0014.jpg 22 114 | webcam/images/projector/frame_0017.jpg 22 115 | webcam/images/projector/frame_0025.jpg 22 116 | webcam/images/punchers/frame_0004.jpg 23 117 | webcam/images/punchers/frame_0013.jpg 23 118 | webcam/images/punchers/frame_0016.jpg 23 119 | webcam/images/punchers/frame_0022.jpg 23 120 | webcam/images/punchers/frame_0027.jpg 23 121 | webcam/images/ring_binder/frame_0007.jpg 24 122 | webcam/images/ring_binder/frame_0011.jpg 24 123 | webcam/images/ring_binder/frame_0013.jpg 24 124 | webcam/images/ring_binder/frame_0017.jpg 24 125 | webcam/images/ring_binder/frame_0023.jpg 24 126 | webcam/images/ruler/frame_0003.jpg 25 127 | webcam/images/ruler/frame_0005.jpg 25 128 | webcam/images/ruler/frame_0006.jpg 25 129 | webcam/images/ruler/frame_0007.jpg 25 130 | webcam/images/ruler/frame_0010.jpg 25 131 | webcam/images/scissors/frame_0003.jpg 26 132 | webcam/images/scissors/frame_0007.jpg 26 133 | webcam/images/scissors/frame_0013.jpg 26 134 | webcam/images/scissors/frame_0015.jpg 26 135 | webcam/images/scissors/frame_0024.jpg 26 136 | webcam/images/speaker/frame_0002.jpg 27 137 | webcam/images/speaker/frame_0008.jpg 27 138 | webcam/images/speaker/frame_0010.jpg 27 139 | webcam/images/speaker/frame_0026.jpg 27 140 | webcam/images/speaker/frame_0029.jpg 27 141 | webcam/images/stapler/frame_0003.jpg 28 142 | webcam/images/stapler/frame_0010.jpg 28 143 | webcam/images/stapler/frame_0011.jpg 28 144 | webcam/images/stapler/frame_0017.jpg 28 145 | webcam/images/stapler/frame_0023.jpg 28 146 | webcam/images/tape_dispenser/frame_0003.jpg 29 147 | webcam/images/tape_dispenser/frame_0009.jpg 29 148 | webcam/images/tape_dispenser/frame_0015.jpg 29 149 | webcam/images/tape_dispenser/frame_0019.jpg 29 150 | webcam/images/tape_dispenser/frame_0023.jpg 29 151 | webcam/images/trash_can/frame_0004.jpg 30 152 | webcam/images/trash_can/frame_0007.jpg 30 153 | webcam/images/trash_can/frame_0013.jpg 30 154 | webcam/images/trash_can/frame_0014.jpg 30 155 | webcam/images/trash_can/frame_0020.jpg 30 156 | -------------------------------------------------------------------------------- /pcs/utils/datautils.py: -------------------------------------------------------------------------------- 1 | import collections 2 | import os 3 | import random 4 | import shutil 5 | import socket 6 | 7 | import numpy as np 8 | import torch 9 | import torchvision 10 | from PIL import Image 11 | from scipy import stats 12 | from sklearn.model_selection import train_test_split 13 | from torch.utils.data import DataLoader 14 | from torchvision import transforms 15 | 16 | # image_list 17 | 18 | 19 | def create_image_label(image_list): 20 | image_index = [x.split(" ")[0] for x in open(image_list)] 21 | label_list = np.array([int(x.split(" ")[1].strip()) for x in open(image_list)]) 22 | return image_index, label_list 23 | 24 | 25 | def get_class_map(image_list): 26 | class_map = {} 27 | for x in open(image_list): 28 | key = int(x.split(" ")[1].strip()) 29 | if key not in class_map: 30 | class_map[key] = x.split(" ")[0].split("/")[-2] 31 | class_map = collections.OrderedDict(sorted(class_map.items())) 32 | return class_map 33 | 34 | 35 | def get_class_num(image_list): 36 | # return len(get_class_map(image_list)) 37 | return max(list(get_class_map(image_list).keys())) + 1 38 | 39 | 40 | def describe_image_list(image_list, save_graph=False, label_name=True, is_sort=False): 41 | _, label_list = create_image_label(image_list) 42 | label_cnt = np.bincount(label_list) 43 | print( 44 | f"""Image list \"{image_list}\": 45 | \tTotal instances: {len(label_list)} 46 | \tTotal class: {len(label_cnt)} 47 | \tmax # of class: {np.max(label_cnt)} 48 | \tmin # of class: {np.min(label_cnt)} 49 | \tmean # of class: {np.mean(label_cnt)} 50 | \tmedian # of class: {np.median(label_cnt)} 51 | \tvar: {np.var(label_cnt)}""" 52 | ) 53 | 54 | 55 | def get_fewshot_index(lbd_dataset, whl_dataset): 56 | lbd_imgs = lbd_dataset.imgs 57 | whl_imgs = whl_dataset.imgs 58 | fewshot_indices = [whl_imgs.index(path) for path in lbd_imgs] 59 | fewshot_labels = lbd_dataset.labels 60 | return fewshot_indices, fewshot_labels 61 | 62 | class Imagelists(torch.utils.data.Dataset): 63 | def __init__( 64 | self, 65 | image_list, 66 | root, 67 | transform=None, 68 | target_transform=None, 69 | keep_in_mem=False, 70 | ret_index=False, 71 | ): 72 | # print(image_list) 73 | imgs, labels = create_image_label(image_list) 74 | self.imgs = imgs 75 | self.labels = labels 76 | self.transform = transform 77 | self.target_transform = target_transform 78 | self.root = root 79 | self.ret_index = ret_index 80 | self.keep_in_mem = keep_in_mem 81 | self.loader = pil_loader 82 | 83 | # keep in mem 84 | if self.keep_in_mem: 85 | images = [] 86 | for index in range(len(self.imgs)): 87 | path = os.path.join(self.root, self.imgs[index]) 88 | img = self.loader(path) 89 | if self.transform is not None: 90 | img = self.transform(img) 91 | images.append(img) 92 | self.images = images 93 | 94 | def __getitem__(self, index): 95 | """ 96 | Args: 97 | index (int): Index 98 | Returns: 99 | tuple: (image, target) where target is 100 | class_index of the target class. 101 | """ 102 | if self.keep_in_mem: 103 | img = self.images[index] 104 | else: 105 | path = os.path.join(self.root, self.imgs[index]) 106 | img = self.loader(path) 107 | if self.transform is not None: 108 | img = self.transform(img) 109 | 110 | target = self.labels[index] 111 | if self.target_transform is not None: 112 | target = self.target_transform(target) 113 | 114 | if not self.ret_index: 115 | return img, target 116 | else: 117 | return index, img, target 118 | 119 | def __len__(self): 120 | return len(self.imgs) 121 | 122 | 123 | # preprocess 124 | 125 | means = {"imagenet": [0.485, 0.456, 0.406]} 126 | 127 | stds = {"imagenet": [0.229, 0.224, 0.225]} 128 | 129 | 130 | def get_augmentation(trans_type="aug_0", image_size=224, stat="imagenet"): 131 | stat = "imagenet" 132 | mean, std = means[stat], stds[stat] 133 | image_s = image_size + 32 134 | 135 | data_transforms = { 136 | "raw": transforms.Compose( 137 | [ 138 | transforms.Resize((image_s, image_s)), 139 | transforms.CenterCrop(image_size), 140 | transforms.ToTensor(), 141 | transforms.Normalize(mean=mean, std=std), 142 | ] 143 | ), 144 | "aug_0": transforms.Compose( 145 | [ 146 | transforms.Resize((image_s, image_s)), 147 | transforms.RandomHorizontalFlip(), 148 | transforms.RandomCrop(image_size), 149 | transforms.ToTensor(), 150 | transforms.Normalize(mean=mean, std=std), 151 | ] 152 | ), 153 | "aug_1": transforms.Compose( 154 | [ 155 | transforms.RandomResizedCrop(image_size, scale=(0.2, 1.0)), 156 | transforms.RandomGrayscale(p=0.2), 157 | transforms.ColorJitter(0.4, 0.4, 0.4, 0.4), 158 | transforms.RandomHorizontalFlip(), 159 | transforms.ToTensor(), 160 | transforms.Normalize(mean=mean, std=std), 161 | ] 162 | ), 163 | } 164 | 165 | return data_transforms[trans_type] 166 | 167 | 168 | # dataset 169 | 170 | datasets_path = { 171 | "office": "./data/office", 172 | "office_home": "./data/officehome", 173 | "visda17": "./data/visda17", 174 | "domainnet": "./data/domainnet", 175 | } 176 | 177 | 178 | def create_dataset( 179 | name, 180 | domain, 181 | txt="", 182 | suffix="", 183 | keep_in_mem=False, 184 | ret_index=False, 185 | image_transform=None, 186 | use_mean_std=False, 187 | image_size=224, 188 | ): 189 | if suffix != "": 190 | suffix = "_" + suffix 191 | if txt == "": 192 | txt = f"{domain}{suffix}" 193 | 194 | stat = f"{name}_{domain}" if use_mean_std else "imagenet" 195 | if image_transform is not None and isinstance(image_transform, str): 196 | transform = get_augmentation(image_transform, stat=stat, image_size=image_size) 197 | 198 | return Imagelists( 199 | f"data/splits/{name}/{txt}.txt", 200 | datasets_path[name], 201 | keep_in_mem=keep_in_mem, 202 | ret_index=ret_index, 203 | transform=transform, 204 | ) 205 | 206 | 207 | # dataloader 208 | 209 | 210 | def pil_loader(path): 211 | with open(path, "rb") as f: 212 | img = Image.open(f) 213 | return img.convert("RGB") 214 | 215 | 216 | def worker_init_seed(worker_id): 217 | np.random.seed(12 + worker_id) 218 | random.seed(12 + worker_id) 219 | 220 | 221 | def create_loader(dataset, batch_size=32, num_workers=4, is_train=True): 222 | return torch.utils.data.DataLoader( 223 | dataset, 224 | batch_size=min(batch_size, len(dataset)), 225 | num_workers=num_workers, 226 | shuffle=is_train, 227 | drop_last=is_train, 228 | pin_memory=True, 229 | worker_init_fn=worker_init_seed, 230 | ) 231 | -------------------------------------------------------------------------------- /data/splits/office/dslr_unlabeled_11.txt: -------------------------------------------------------------------------------- 1 | dslr/images/back_pack/frame_0003.jpg 0 2 | dslr/images/bike/frame_0004.jpg 1 3 | dslr/images/bike/frame_0005.jpg 1 4 | dslr/images/bike/frame_0006.jpg 1 5 | dslr/images/bike/frame_0007.jpg 1 6 | dslr/images/bike/frame_0008.jpg 1 7 | dslr/images/bike/frame_0009.jpg 1 8 | dslr/images/bike/frame_0010.jpg 1 9 | dslr/images/bike/frame_0011.jpg 1 10 | dslr/images/bike/frame_0013.jpg 1 11 | dslr/images/bike/frame_0019.jpg 1 12 | dslr/images/bike_helmet/frame_0002.jpg 2 13 | dslr/images/bike_helmet/frame_0004.jpg 2 14 | dslr/images/bike_helmet/frame_0005.jpg 2 15 | dslr/images/bike_helmet/frame_0006.jpg 2 16 | dslr/images/bike_helmet/frame_0007.jpg 2 17 | dslr/images/bike_helmet/frame_0011.jpg 2 18 | dslr/images/bike_helmet/frame_0012.jpg 2 19 | dslr/images/bike_helmet/frame_0013.jpg 2 20 | dslr/images/bike_helmet/frame_0014.jpg 2 21 | dslr/images/bike_helmet/frame_0019.jpg 2 22 | dslr/images/bike_helmet/frame_0021.jpg 2 23 | dslr/images/bike_helmet/frame_0022.jpg 2 24 | dslr/images/bike_helmet/frame_0024.jpg 2 25 | dslr/images/bookcase/frame_0007.jpg 3 26 | dslr/images/bottle/frame_0003.jpg 4 27 | dslr/images/bottle/frame_0004.jpg 4 28 | dslr/images/bottle/frame_0005.jpg 4 29 | dslr/images/bottle/frame_0007.jpg 4 30 | dslr/images/bottle/frame_0013.jpg 4 31 | dslr/images/calculator/frame_0006.jpg 5 32 | dslr/images/desk_chair/frame_0005.jpg 6 33 | dslr/images/desk_chair/frame_0007.jpg 6 34 | dslr/images/desk_lamp/frame_0006.jpg 7 35 | dslr/images/desk_lamp/frame_0008.jpg 7 36 | dslr/images/desk_lamp/frame_0009.jpg 7 37 | dslr/images/desktop_computer/frame_0002.jpg 8 38 | dslr/images/desktop_computer/frame_0003.jpg 8 39 | dslr/images/desktop_computer/frame_0014.jpg 8 40 | dslr/images/desktop_computer/frame_0015.jpg 8 41 | dslr/images/file_cabinet/frame_0006.jpg 9 42 | dslr/images/file_cabinet/frame_0007.jpg 9 43 | dslr/images/file_cabinet/frame_0010.jpg 9 44 | dslr/images/file_cabinet/frame_0014.jpg 9 45 | dslr/images/headphones/frame_0001.jpg 10 46 | dslr/images/headphones/frame_0005.jpg 10 47 | dslr/images/laptop_computer/frame_0001.jpg 12 48 | dslr/images/laptop_computer/frame_0004.jpg 12 49 | dslr/images/laptop_computer/frame_0006.jpg 12 50 | dslr/images/laptop_computer/frame_0009.jpg 12 51 | dslr/images/laptop_computer/frame_0012.jpg 12 52 | dslr/images/laptop_computer/frame_0014.jpg 12 53 | dslr/images/laptop_computer/frame_0015.jpg 12 54 | dslr/images/laptop_computer/frame_0016.jpg 12 55 | dslr/images/laptop_computer/frame_0018.jpg 12 56 | dslr/images/laptop_computer/frame_0020.jpg 12 57 | dslr/images/laptop_computer/frame_0021.jpg 12 58 | dslr/images/laptop_computer/frame_0023.jpg 12 59 | dslr/images/laptop_computer/frame_0024.jpg 12 60 | dslr/images/letter_tray/frame_0001.jpg 13 61 | dslr/images/letter_tray/frame_0008.jpg 13 62 | dslr/images/letter_tray/frame_0014.jpg 13 63 | dslr/images/letter_tray/frame_0015.jpg 13 64 | dslr/images/letter_tray/frame_0016.jpg 13 65 | dslr/images/mobile_phone/frame_0001.jpg 14 66 | dslr/images/mobile_phone/frame_0002.jpg 14 67 | dslr/images/mobile_phone/frame_0003.jpg 14 68 | dslr/images/mobile_phone/frame_0004.jpg 14 69 | dslr/images/mobile_phone/frame_0005.jpg 14 70 | dslr/images/mobile_phone/frame_0009.jpg 14 71 | dslr/images/mobile_phone/frame_0010.jpg 14 72 | dslr/images/mobile_phone/frame_0011.jpg 14 73 | dslr/images/mobile_phone/frame_0013.jpg 14 74 | dslr/images/mobile_phone/frame_0016.jpg 14 75 | dslr/images/mobile_phone/frame_0018.jpg 14 76 | dslr/images/mobile_phone/frame_0019.jpg 14 77 | dslr/images/mobile_phone/frame_0020.jpg 14 78 | dslr/images/mobile_phone/frame_0021.jpg 14 79 | dslr/images/mobile_phone/frame_0022.jpg 14 80 | dslr/images/mobile_phone/frame_0023.jpg 14 81 | dslr/images/mobile_phone/frame_0024.jpg 14 82 | dslr/images/mobile_phone/frame_0025.jpg 14 83 | dslr/images/mobile_phone/frame_0027.jpg 14 84 | dslr/images/mobile_phone/frame_0030.jpg 14 85 | dslr/images/monitor/frame_0001.jpg 15 86 | dslr/images/monitor/frame_0003.jpg 15 87 | dslr/images/monitor/frame_0004.jpg 15 88 | dslr/images/monitor/frame_0006.jpg 15 89 | dslr/images/monitor/frame_0011.jpg 15 90 | dslr/images/monitor/frame_0014.jpg 15 91 | dslr/images/monitor/frame_0017.jpg 15 92 | dslr/images/monitor/frame_0018.jpg 15 93 | dslr/images/monitor/frame_0020.jpg 15 94 | dslr/images/monitor/frame_0021.jpg 15 95 | dslr/images/monitor/frame_0022.jpg 15 96 | dslr/images/mouse/frame_0007.jpg 16 97 | dslr/images/phone/frame_0009.jpg 20 98 | dslr/images/phone/frame_0011.jpg 20 99 | dslr/images/printer/frame_0003.jpg 21 100 | dslr/images/printer/frame_0009.jpg 21 101 | dslr/images/printer/frame_0012.jpg 21 102 | dslr/images/printer/frame_0013.jpg 21 103 | dslr/images/projector/frame_0001.jpg 22 104 | dslr/images/projector/frame_0002.jpg 22 105 | dslr/images/projector/frame_0005.jpg 22 106 | dslr/images/projector/frame_0007.jpg 22 107 | dslr/images/projector/frame_0008.jpg 22 108 | dslr/images/projector/frame_0011.jpg 22 109 | dslr/images/projector/frame_0014.jpg 22 110 | dslr/images/projector/frame_0015.jpg 22 111 | dslr/images/projector/frame_0018.jpg 22 112 | dslr/images/projector/frame_0019.jpg 22 113 | dslr/images/projector/frame_0020.jpg 22 114 | dslr/images/projector/frame_0022.jpg 22 115 | dslr/images/punchers/frame_0003.jpg 23 116 | dslr/images/punchers/frame_0004.jpg 23 117 | dslr/images/punchers/frame_0005.jpg 23 118 | dslr/images/punchers/frame_0007.jpg 23 119 | dslr/images/punchers/frame_0009.jpg 23 120 | dslr/images/punchers/frame_0010.jpg 23 121 | dslr/images/punchers/frame_0014.jpg 23 122 | dslr/images/scissors/frame_0001.jpg 26 123 | dslr/images/scissors/frame_0003.jpg 26 124 | dslr/images/scissors/frame_0004.jpg 26 125 | dslr/images/scissors/frame_0006.jpg 26 126 | dslr/images/scissors/frame_0007.jpg 26 127 | dslr/images/scissors/frame_0014.jpg 26 128 | dslr/images/scissors/frame_0015.jpg 26 129 | dslr/images/speaker/frame_0003.jpg 27 130 | dslr/images/speaker/frame_0004.jpg 27 131 | dslr/images/speaker/frame_0006.jpg 27 132 | dslr/images/speaker/frame_0010.jpg 27 133 | dslr/images/speaker/frame_0014.jpg 27 134 | dslr/images/speaker/frame_0015.jpg 27 135 | dslr/images/speaker/frame_0016.jpg 27 136 | dslr/images/speaker/frame_0017.jpg 27 137 | dslr/images/speaker/frame_0018.jpg 27 138 | dslr/images/speaker/frame_0019.jpg 27 139 | dslr/images/speaker/frame_0021.jpg 27 140 | dslr/images/speaker/frame_0022.jpg 27 141 | dslr/images/speaker/frame_0024.jpg 27 142 | dslr/images/speaker/frame_0025.jpg 27 143 | dslr/images/speaker/frame_0026.jpg 27 144 | dslr/images/stapler/frame_0001.jpg 28 145 | dslr/images/stapler/frame_0002.jpg 28 146 | dslr/images/stapler/frame_0006.jpg 28 147 | dslr/images/stapler/frame_0007.jpg 28 148 | dslr/images/stapler/frame_0009.jpg 28 149 | dslr/images/stapler/frame_0011.jpg 28 150 | dslr/images/stapler/frame_0013.jpg 28 151 | dslr/images/stapler/frame_0015.jpg 28 152 | dslr/images/stapler/frame_0018.jpg 28 153 | dslr/images/stapler/frame_0019.jpg 28 154 | dslr/images/tape_dispenser/frame_0002.jpg 29 155 | dslr/images/tape_dispenser/frame_0004.jpg 29 156 | dslr/images/tape_dispenser/frame_0005.jpg 29 157 | dslr/images/tape_dispenser/frame_0007.jpg 29 158 | dslr/images/tape_dispenser/frame_0009.jpg 29 159 | dslr/images/tape_dispenser/frame_0010.jpg 29 160 | dslr/images/tape_dispenser/frame_0014.jpg 29 161 | dslr/images/tape_dispenser/frame_0016.jpg 29 162 | dslr/images/tape_dispenser/frame_0019.jpg 29 163 | dslr/images/tape_dispenser/frame_0020.jpg 29 164 | dslr/images/tape_dispenser/frame_0022.jpg 29 165 | dslr/images/trash_can/frame_0001.jpg 30 166 | dslr/images/trash_can/frame_0007.jpg 30 167 | dslr/images/trash_can/frame_0008.jpg 30 168 | dslr/images/trash_can/frame_0012.jpg 30 169 | -------------------------------------------------------------------------------- /pcs/utils/setup.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import logging 3 | import os 4 | import shutil 5 | import socket 6 | from logging import Formatter 7 | from logging.handlers import RotatingFileHandler 8 | from pprint import pprint 9 | from tempfile import mkstemp 10 | 11 | from dotmap import DotMap 12 | 13 | from .utils import load_json, makedirs, save_json 14 | 15 | 16 | def check_pretrain_dir(config_json): 17 | pre_checkpoint_dir = None 18 | if ( 19 | "pretrained_exp_dir" in config_json 20 | and 21 | config_json["pretrained_exp_dir"] is not None 22 | ): 23 | print("NOTE: found pretrained model...continue training") 24 | pre_checkpoint_dir = os.path.join( 25 | config_json["pretrained_exp_dir"], "checkpoints" 26 | ) 27 | return pre_checkpoint_dir 28 | 29 | 30 | def process_config_path(config_path, override_dotmap=None): 31 | config_json = load_json(config_path) 32 | return process_config(config_json, override_dotmap=override_dotmap) 33 | 34 | 35 | def process_config(config_json, override_dotmap=None): 36 | """ 37 | Processes config file: 38 | 1) Converts it to a DotMap 39 | 2) Creates experiments path and required subdirs 40 | 3) Set up logging 41 | """ 42 | config = DotMap(config_json) 43 | if override_dotmap is not None: 44 | config.update(override_dotmap) 45 | 46 | print("Configuration Loaded:") 47 | pprint(config) 48 | 49 | print() 50 | print(" *************************************** ") 51 | print(" Running experiment {}".format(config.exp_name)) 52 | print(" *************************************** ") 53 | print() 54 | 55 | # if config.pretrained_exp_dir is not None: 56 | # # don't make new dir more continuing training 57 | # exp_dir = config.pretrained_exp_dir 58 | # print("[INFO]: Continuing from previously finished training at %s." % exp_dir) 59 | # else: 60 | exp_base = config.exp_base 61 | 62 | if config.debug: 63 | exp_dir = os.path.join(exp_base, "experiments", config.exp_name, "debug") 64 | else: 65 | if config.pretrained_exp_dir is not None and isinstance( 66 | config.pretrained_exp_dir, str 67 | ): 68 | # don't make new dir more continuing training 69 | exp_dir = config.pretrained_exp_dir 70 | print("[INFO]: Backup previously trained model and config json") 71 | os.system("cp %s/config.json %s/prev_config.json" % (exp_dir, exp_dir)) 72 | os.system( 73 | "cp %s/checkpoints/checkpoint.pth.tar %s/checkpoints/prev_checkpoint.pth.tar" 74 | % (exp_dir, exp_dir) 75 | ) 76 | os.system( 77 | "cp %s/checkpoints/model_best.pth.tar %s/checkpoints/prev_model_best.pth.tar" 78 | % (exp_dir, exp_dir) 79 | ) 80 | elif config.continue_exp_dir is not None and isinstance( 81 | config.continue_exp_dir, str 82 | ): 83 | exp_dir = config.continue_exp_dir 84 | print("[INFO]: Backup previously trained model and config json") 85 | os.system("cp %s/config.json %s/prev_config.json" % (exp_dir, exp_dir)) 86 | os.system( 87 | "cp %s/checkpoints/checkpoint.pth.tar %s/checkpoints/prev_checkpoint.pth.tar" 88 | % (exp_dir, exp_dir) 89 | ) 90 | os.system( 91 | "cp %s/checkpoints/model_best.pth.tar %s/checkpoints/prev_model_best.pth.tar" 92 | % (exp_dir, exp_dir) 93 | ) 94 | else: 95 | if config.exp_id is None: 96 | config.exp_id = datetime.datetime.now().strftime("%Y-%m-%d") 97 | exp_dir = os.path.join( 98 | exp_base, "experiments", config.exp_name, config.exp_id 99 | ) 100 | if os.path.exists(exp_dir): 101 | config.exp_id += "-" + datetime.datetime.now().strftime("%y%m%d%H%M%S") 102 | exp_dir = os.path.join( 103 | exp_base, "experiments", config.exp_name, config.exp_id 104 | ) 105 | 106 | # create some important directories to be used for the experiment. 107 | config.summary_dir = os.path.join(exp_dir, "summaries/") 108 | config.checkpoint_dir = os.path.join(exp_dir, "checkpoints/") 109 | config.out_dir = os.path.join(exp_dir, "out/") 110 | config.log_dir = os.path.join(exp_dir, "logs/") 111 | 112 | makedirs( 113 | [config.summary_dir, config.checkpoint_dir, config.out_dir, config.log_dir] 114 | ) 115 | 116 | # save config to experiment dir 117 | config_out = os.path.join(exp_dir, "config.json") 118 | save_json(config.toDict(), config_out) 119 | 120 | # setup logging in the project 121 | setup_logging(config.log_dir) 122 | 123 | logging.getLogger().info("Experiment directory is located at %s" % exp_dir) 124 | 125 | logging.getLogger().info("Configurations and directories successfully set up.") 126 | return config 127 | 128 | 129 | def setup_logging(log_dir): 130 | log_file_format = ( 131 | "[%(levelname)s] %(asctime)s: %(message)s in %(pathname)s:%(lineno)d" 132 | ) 133 | log_console_format = "[%(levelname)s]: %(message)s" 134 | 135 | # Main logger 136 | main_logger = logging.getLogger() 137 | main_logger.setLevel(logging.INFO) 138 | 139 | console_handler = logging.StreamHandler() 140 | console_handler.setLevel(logging.INFO) 141 | console_handler.setFormatter(Formatter(log_console_format)) 142 | 143 | exp_file_handler = RotatingFileHandler( 144 | "{}exp_debug.log".format(log_dir), maxBytes=10 ** 6, backupCount=5 145 | ) 146 | exp_file_handler.setLevel(logging.DEBUG) 147 | exp_file_handler.setFormatter(Formatter(log_file_format)) 148 | 149 | exp_errors_file_handler = RotatingFileHandler( 150 | "{}exp_error.log".format(log_dir), maxBytes=10 ** 6, backupCount=5 151 | ) 152 | exp_errors_file_handler.setLevel(logging.WARNING) 153 | exp_errors_file_handler.setFormatter(Formatter(log_file_format)) 154 | 155 | main_logger.addHandler(console_handler) 156 | main_logger.addHandler(exp_file_handler) 157 | main_logger.addHandler(exp_errors_file_handler) 158 | 159 | 160 | def print_info(output=print): 161 | output(f"Start at time: {datetime.datetime.now().strftime('%Y.%m.%d-%H:%M:%S')}") 162 | output(f"Server: {socket.gethostname()}") 163 | 164 | 165 | def prepare_dirs(config): 166 | exp_dir = os.path.join( 167 | config.exp_base, "experiments", config.exp_name, config.exp_id 168 | ) 169 | summary_dir = os.path.join(exp_dir, "summaries/") 170 | checkpoint_dir = os.path.join(exp_dir, "checkpoints/") 171 | out_dir = os.path.join(exp_dir, "out/") 172 | log_dir = os.path.join(exp_dir, "logs/") 173 | config.log_file = os.path.join(log_dir, "output.log") 174 | if config.pretrained_exp_dir == None or config.copy_exp_dir is False: 175 | makedirs([summary_dir, checkpoint_dir, out_dir, log_dir]) 176 | print(f"Create {exp_dir}") 177 | else: 178 | shutil.copytree(config.pretrained_exp_dir, exp_dir) 179 | if os.path.exists(config.log_file): 180 | shutil.copy(config.log_file, os.path.join(log_dir, "output_prev.log")) 181 | print(f"Copy {config.pretrained_exp_dir} to {exp_dir}") 182 | config.pretrained_exp_dir = exp_dir 183 | 184 | 185 | def get_cmd( 186 | config, script_path="/rscratch/xyyue/anaconda3/envs/ssda2/bin/python ./run.py" 187 | ): 188 | config_out = mkstemp()[1] 189 | save_json(config.toDict(), config_out) 190 | return f"{script_path} --config {config_out}" 191 | -------------------------------------------------------------------------------- /pcs/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | import os 5 | 6 | from pcs.agents import * 7 | from pcs.utils import check_pretrain_dir, load_json, process_config, set_default 8 | 9 | 10 | def adjust_config(config): 11 | set_default(config, "validate_freq", value=1) 12 | set_default(config, "copy_checkpoint_freq", value=50) 13 | set_default(config, "debug", value=False) 14 | set_default(config, "cuda", value=True) 15 | set_default(config, "gpu_device", value=None) 16 | set_default(config, "pretrained_exp_dir", value=None) 17 | set_default(config, "agent", value="CDSAgent") 18 | 19 | # data_params 20 | set_default(config.data_params, "aug_src", callback="aug") 21 | set_default(config.data_params, "aug_tgt", callback="aug") 22 | set_default(config.data_params, "num_workers", value=4) 23 | set_default(config.data_params, "image_size", value=224) 24 | 25 | # model_params 26 | set_default(config.model_params, "load_weight_epoch", value=0) 27 | set_default(config.model_params, "load_memory_bank", value=True) 28 | 29 | # loss_params 30 | num_loss = len(config.loss_params.loss) 31 | set_default(config.loss_params, "weight", value=[1] * num_loss) 32 | set_default(config.loss_params, "start", value=[0] * num_loss) 33 | set_default(config.loss_params, "end", value=[1000] * num_loss) 34 | if not isinstance(config.loss_params.temp, list): 35 | config.loss_params.temp = [config.loss_params.temp] * num_loss 36 | assert len(config.loss_params.weight) == num_loss 37 | set_default(config.loss_params, "m", value=0.5) 38 | set_default(config.loss_params, "T", value=0.05) 39 | set_default(config.loss_params, "pseudo", value=True) 40 | 41 | # optim_params 42 | set_default(config.optim_params, "batch_size_src", callback="batch_size") 43 | set_default(config.optim_params, "batch_size_tgt", callback="batch_size") 44 | set_default(config.optim_params, "batch_size_lbd", callback="batch_size") 45 | set_default(config.optim_params, "momentum", value=0.9) 46 | set_default(config.optim_params, "nesterov", value=True) 47 | set_default(config.optim_params, "lr_decay_rate", value=0.1) 48 | set_default(config.optim_params, "cls_update", value=True) 49 | 50 | # clustering 51 | if config.loss_params.clus is not None: 52 | if config.loss_params.clus.type is None: 53 | config.loss_params.clus = None 54 | else: 55 | if not isinstance(config.loss_params.clus.type, list): 56 | config.loss_params.clus.type = [config.loss_params.clus.type] 57 | k = config.loss_params.clus.k 58 | n_k = config.loss_params.clus.n_k 59 | config.k_list = k * n_k 60 | config.loss_params.clus.n_kmeans = len(config.k_list) 61 | 62 | return config 63 | 64 | 65 | def init_parser(): 66 | parser = argparse.ArgumentParser() 67 | parser.add_argument( 68 | "--config", 69 | type=str, 70 | default="config/office.json", 71 | help="the path to the config", 72 | ) 73 | parser.add_argument("--exp_id", type=str, default=None) 74 | # Dataset 75 | parser.add_argument( 76 | "--dataset", 77 | type=str, 78 | default=None, 79 | choices=["office", "office_home", "visda17"], 80 | help="the name of dataset", 81 | ) 82 | parser.add_argument("--source", type=str, default=None, help="source domain") 83 | parser.add_argument("--target", type=str, default=None, help="target domain") 84 | parser.add_argument( 85 | "--num", type=str, default=None, help="number of labeled examples in the target" 86 | ) 87 | 88 | # Model 89 | parser.add_argument("--net", type=str, default=None, help="which network to use") 90 | parser.add_argument( 91 | "--method", 92 | type=str, 93 | default=None, 94 | choices=["S+T", "ENT", "MME"], 95 | help="MME is proposed method, ENT is entropy minimization, S+T is training only on labeled examples", 96 | ) 97 | 98 | # Optim 99 | parser.add_argument( 100 | "--steps", 101 | type=int, 102 | default=None, 103 | metavar="N", 104 | help="maximum number of iterations to train (default: 50000)", 105 | ) 106 | parser.add_argument( 107 | "--lr", 108 | type=float, 109 | default=None, 110 | metavar="LR", 111 | help="learning rate (default: 0.001)", 112 | ) 113 | parser.add_argument( 114 | "--multi", 115 | type=float, 116 | default=None, 117 | metavar="MLT", 118 | help="learning rate multiplication", 119 | ) 120 | parser.add_argument( 121 | "--early", 122 | action="store_false", 123 | default=True, 124 | help="early stopping on validation or not", 125 | ) 126 | parser.add_argument( 127 | "--patience", 128 | type=int, 129 | default=None, 130 | metavar="S", 131 | help="early stopping to wait for improvment " 132 | "before terminating. (default: 5 (5000 iterations))", 133 | ) 134 | # Hyper-parameter 135 | parser.add_argument( 136 | "--seed", type=int, default=None, metavar="S", help="random seed (default: 1)" 137 | ) 138 | parser.add_argument( 139 | "--T", type=float, default=None, metavar="T", help="temperature (default: 0.05)" 140 | ) 141 | parser.add_argument( 142 | "--lamda", type=float, default=None, metavar="LAM", help="value of lamda" 143 | ) 144 | # Save model 145 | parser.add_argument( 146 | "--log-interval", 147 | type=int, 148 | default=None, 149 | metavar="N", 150 | help="how many batches to wait before logging training status", 151 | ) 152 | parser.add_argument( 153 | "--save_interval", 154 | type=int, 155 | default=None, 156 | metavar="N", 157 | help="how many batches to wait before saving a model", 158 | ) 159 | parser.add_argument( 160 | "--save_check", action="store_true", default=None, help="save checkpoint or not" 161 | ) 162 | parser.add_argument( 163 | "--checkpath", type=str, default=None, help="dir to save checkpoint" 164 | ) 165 | 166 | # Others 167 | parser.add_argument("--loop", action="store_true") 168 | 169 | return parser 170 | 171 | 172 | def update_config(config, args): 173 | if args.dataset: 174 | config_json["data_params"]["name"] = args.dataset 175 | if args.source: 176 | config_json["data_params"]["source"] = args.source 177 | if args.target: 178 | config_json["data_params"]["target"] = args.target 179 | if args.num: 180 | config_json["data_params"]["fewshot"] = args.num 181 | if args.exp_id: 182 | config_json["exp_id"] = args.exp_id 183 | elif args.source: 184 | config_json["exp_id"] = f"{args.source}->{args.target}:{args.num}" 185 | if args.seed: 186 | config_json["seed"] = args.seed 187 | if args.lr: 188 | config_json["optim_params"]["learning_rate"] = args.lr 189 | 190 | 191 | if __name__ == "__main__": 192 | parser = init_parser() 193 | args = parser.parse_args() 194 | 195 | # load config 196 | config_json = load_json(args.config) 197 | update_config(config_json, args) 198 | 199 | # check pretrain directory 200 | pre_checkpoint_dir = check_pretrain_dir(config_json) 201 | 202 | # json to DotMap 203 | config = process_config(config_json) 204 | config = adjust_config(config) 205 | 206 | # create agent 207 | AgentClass = globals()[config.agent] 208 | agent = AgentClass(config) 209 | 210 | if pre_checkpoint_dir is not None: 211 | agent.load_checkpoint("model_best.pth.tar", pre_checkpoint_dir) 212 | try: 213 | agent.run() 214 | agent.finalise() 215 | except KeyboardInterrupt: 216 | pass 217 | -------------------------------------------------------------------------------- /data/splits/office_home/Real_labeled_p06.txt: -------------------------------------------------------------------------------- 1 | Real/Alarm_Clock/00001.jpg 0 2 | Real/Alarm_Clock/00012.jpg 0 3 | Real/Alarm_Clock/00015.jpg 0 4 | Real/Alarm_Clock/00057.jpg 0 5 | Real/Alarm_Clock/00075.jpg 0 6 | Real/Backpack/00005.jpg 1 7 | Real/Backpack/00012.jpg 1 8 | Real/Backpack/00013.jpg 1 9 | Real/Backpack/00086.jpg 1 10 | Real/Backpack/00089.jpg 1 11 | Real/Batteries/00011.jpg 2 12 | Real/Batteries/00013.jpg 2 13 | Real/Batteries/00031.jpg 2 14 | Real/Bed/00041.jpg 3 15 | Real/Bed/00054.jpg 3 16 | Real/Bed/00062.jpg 3 17 | Real/Bed/00080.jpg 3 18 | Real/Bed/00083.jpg 3 19 | Real/Bike/00003.jpg 4 20 | Real/Bike/00004.jpg 4 21 | Real/Bike/00045.jpg 4 22 | Real/Bike/00060.jpg 4 23 | Real/Bike/00079.jpg 4 24 | Real/Bike/00092.jpg 4 25 | Real/Bottle/00016.jpg 5 26 | Real/Bottle/00062.jpg 5 27 | Real/Bottle/00032.jpg 5 28 | Real/Bottle/00063.jpg 5 29 | Real/Bottle/00065.jpg 5 30 | Real/Bucket/00012.jpg 6 31 | Real/Bucket/00020.jpg 6 32 | Real/Bucket/00060.jpg 6 33 | Real/Bucket/00070.jpg 6 34 | Real/Bucket/00077.jpg 6 35 | Real/Calculator/00015.jpg 7 36 | Real/Calculator/00024.jpg 7 37 | Real/Calculator/00066.jpg 7 38 | Real/Calculator/00072.jpg 7 39 | Real/Calendar/00002.jpg 8 40 | Real/Calendar/00065.jpg 8 41 | Real/Calendar/00046.jpg 8 42 | Real/Calendar/00062.jpg 8 43 | Real/Candles/00009.jpg 9 44 | Real/Candles/00032.jpg 9 45 | Real/Candles/00063.jpg 9 46 | Real/Candles/00059.jpg 9 47 | Real/Candles/00068.jpg 9 48 | Real/Candles/00084.jpg 9 49 | Real/Chair/00001.jpg 10 50 | Real/Chair/00003.jpg 10 51 | Real/Chair/00010.jpg 10 52 | Real/Chair/00060.jpg 10 53 | Real/Chair/00084.jpg 10 54 | Real/Clipboards/00009.jpg 11 55 | Real/Clipboards/00024.jpg 11 56 | Real/Clipboards/00049.jpg 11 57 | Real/Clipboards/00061.jpg 11 58 | Real/Computer/00006.jpg 12 59 | Real/Computer/00035.jpg 12 60 | Real/Computer/00021.jpg 12 61 | Real/Computer/00064.jpg 12 62 | Real/Couch/00004.jpg 13 63 | Real/Couch/00010.jpg 13 64 | Real/Couch/00019.jpg 13 65 | Real/Couch/00003.jpg 13 66 | Real/Couch/00059.jpg 13 67 | Real/Curtains/00015.jpg 14 68 | Real/Curtains/00019.jpg 14 69 | Real/Curtains/00039.jpg 14 70 | Real/Curtains/00062.jpg 14 71 | Real/Desk_Lamp/00003.jpg 15 72 | Real/Desk_Lamp/00020.jpg 15 73 | Real/Desk_Lamp/00023.jpg 15 74 | Real/Desk_Lamp/00055.jpg 15 75 | Real/Drill/00016.jpg 16 76 | Real/Drill/00018.jpg 16 77 | Real/Drill/00027.jpg 16 78 | Real/Drill/00043.jpg 16 79 | Real/Eraser/00014.jpg 17 80 | Real/Eraser/00035.jpg 17 81 | Real/Eraser/00018.jpg 17 82 | Real/Eraser/00020.jpg 17 83 | Real/Exit_Sign/00006.jpg 18 84 | Real/Exit_Sign/00020.jpg 18 85 | Real/Exit_Sign/00059.jpg 18 86 | Real/Exit_Sign/00068.jpg 18 87 | Real/Exit_Sign/00073.jpg 18 88 | Real/Fan/00002.jpg 19 89 | Real/Fan/00043.jpg 19 90 | Real/Fan/00032.jpg 19 91 | Real/Fan/00049.jpg 19 92 | Real/File_Cabinet/00011.jpg 20 93 | Real/File_Cabinet/00033.jpg 20 94 | Real/File_Cabinet/00053.jpg 20 95 | Real/Flipflops/00019.jpg 21 96 | Real/Flipflops/00043.jpg 21 97 | Real/Flipflops/00057.jpg 21 98 | Real/Flipflops/00061.jpg 21 99 | Real/Flipflops/00077.jpg 21 100 | Real/Flowers/00036.jpg 22 101 | Real/Flowers/00049.jpg 22 102 | Real/Flowers/00061.jpg 22 103 | Real/Flowers/00067.jpg 22 104 | Real/Folder/00004.jpg 23 105 | Real/Folder/00021.jpg 23 106 | Real/Folder/00050.jpg 23 107 | Real/Fork/00010.jpg 24 108 | Real/Fork/00028.jpg 24 109 | Real/Glasses/00007.jpg 25 110 | Real/Glasses/00032.jpg 25 111 | Real/Glasses/00038.jpg 25 112 | Real/Glasses/00050.jpg 25 113 | Real/Hammer/00005.jpg 26 114 | Real/Hammer/00011.jpg 26 115 | Real/Hammer/00043.jpg 26 116 | Real/Helmet/00013.jpg 27 117 | Real/Helmet/00014.jpg 27 118 | Real/Helmet/00036.jpg 27 119 | Real/Helmet/00042.jpg 27 120 | Real/Kettle/00004.jpg 28 121 | Real/Kettle/00019.jpg 28 122 | Real/Kettle/00021.jpg 28 123 | Real/Kettle/00035.jpg 28 124 | Real/Keyboard/00010.jpg 29 125 | Real/Keyboard/00015.jpg 29 126 | Real/Keyboard/00045.jpg 29 127 | Real/Keyboard/00058.jpg 29 128 | Real/Knives/00019.jpg 30 129 | Real/Knives/00068.jpg 30 130 | Real/Knives/00028.jpg 30 131 | Real/Knives/00037.jpg 30 132 | Real/Knives/00051.jpg 30 133 | Real/Lamp_Shade/00012.jpg 31 134 | Real/Lamp_Shade/00029.jpg 31 135 | Real/Lamp_Shade/00040.jpg 31 136 | Real/Lamp_Shade/00059.jpg 31 137 | Real/Laptop/00009.jpg 32 138 | Real/Laptop/00010.jpg 32 139 | Real/Laptop/00006.jpg 32 140 | Real/Laptop/00054.jpg 32 141 | Real/Marker/00008.jpg 33 142 | Real/Marker/00023.jpg 33 143 | Real/Monitor/00006.jpg 34 144 | Real/Monitor/00023.jpg 34 145 | Real/Monitor/00051.jpg 34 146 | Real/Monitor/00055.jpg 34 147 | Real/Mop/00008.jpg 35 148 | Real/Mop/00030.jpg 35 149 | Real/Mop/00046.jpg 35 150 | Real/Mouse/00010.jpg 36 151 | Real/Mouse/00020.jpg 36 152 | Real/Mouse/00052.jpg 36 153 | Real/Mouse/00053.jpg 36 154 | Real/Mug/00014.jpg 37 155 | Real/Mug/00010.jpg 37 156 | Real/Mug/00055.jpg 37 157 | Real/Notebook/00023.jpg 38 158 | Real/Notebook/00027.jpg 38 159 | Real/Notebook/00006.jpg 38 160 | Real/Notebook/00060.jpg 38 161 | Real/Oven/00008.jpg 39 162 | Real/Oven/00014.jpg 39 163 | Real/Oven/00042.jpg 39 164 | Real/Oven/00050.jpg 39 165 | Real/Pan/00016.jpg 40 166 | Real/Pan/00030.jpg 40 167 | Real/Paper_Clip/00017.jpg 41 168 | Real/Paper_Clip/00018.jpg 41 169 | Real/Paper_Clip/00044.jpg 41 170 | Real/Paper_Clip/00060.jpg 41 171 | Real/Pen/00006.jpg 42 172 | Real/Pen/00009.jpg 42 173 | Real/Pen/00019.jpg 42 174 | Real/Pen/00061.jpg 42 175 | Real/Pencil/00001.jpg 43 176 | Real/Pencil/00011.jpg 43 177 | Real/Pencil/00031.jpg 43 178 | Real/Pencil/00051.jpg 43 179 | Real/Postit_Notes/00008.jpg 44 180 | Real/Postit_Notes/00012.jpg 44 181 | Real/Postit_Notes/00010.jpg 44 182 | Real/Postit_Notes/00041.jpg 44 183 | Real/Printer/00003.jpg 45 184 | Real/Printer/00047.jpg 45 185 | Real/Printer/00050.jpg 45 186 | Real/Push_Pin/00014.jpg 46 187 | Real/Push_Pin/00034.jpg 46 188 | Real/Push_Pin/00053.jpg 46 189 | Real/Radio/00036.jpg 47 190 | Real/Radio/00038.jpg 47 191 | Real/Radio/00045.jpg 47 192 | Real/Radio/00055.jpg 47 193 | Real/Refrigerator/00019.jpg 48 194 | Real/Refrigerator/00041.jpg 48 195 | Real/Refrigerator/00069.jpg 48 196 | Real/Refrigerator/00074.jpg 48 197 | Real/Ruler/00006.jpg 49 198 | Real/Ruler/00012.jpg 49 199 | Real/Scissors/00036.jpg 50 200 | Real/Scissors/00052.jpg 50 201 | Real/Scissors/00054.jpg 50 202 | Real/Scissors/00056.jpg 50 203 | Real/Scissors/00073.jpg 50 204 | Real/Screwdriver/00008.jpg 51 205 | Real/Screwdriver/00050.jpg 51 206 | Real/Screwdriver/00045.jpg 51 207 | Real/Shelf/00014.jpg 52 208 | Real/Shelf/00063.jpg 52 209 | Real/Shelf/00039.jpg 52 210 | Real/Shelf/00051.jpg 52 211 | Real/Sink/00013.jpg 53 212 | Real/Sink/00064.jpg 53 213 | Real/Sink/00045.jpg 53 214 | Real/Sink/00057.jpg 53 215 | Real/Sink/00063.jpg 53 216 | Real/Sneakers/00025.jpg 54 217 | Real/Sneakers/00045.jpg 54 218 | Real/Sneakers/00083.jpg 54 219 | Real/Sneakers/00040.jpg 54 220 | Real/Sneakers/00049.jpg 54 221 | Real/Soda/00020.jpg 55 222 | Real/Soda/00026.jpg 55 223 | Real/Soda/00007.jpg 55 224 | Real/Soda/00045.jpg 55 225 | Real/Speaker/00021.jpg 56 226 | Real/Speaker/00075.jpg 56 227 | Real/Speaker/00052.jpg 56 228 | Real/Speaker/00062.jpg 56 229 | Real/Speaker/00081.jpg 56 230 | Real/Spoon/00010.jpg 57 231 | Real/Spoon/00018.jpg 57 232 | Real/Spoon/00038.jpg 57 233 | Real/TV/00021.jpg 58 234 | Real/TV/00047.jpg 58 235 | Real/TV/00042.jpg 58 236 | Real/Table/00018.jpg 59 237 | Real/Table/00054.jpg 59 238 | Real/Table/00034.jpg 59 239 | Real/Table/00037.jpg 59 240 | Real/Telephone/00010.jpg 60 241 | Real/Telephone/00011.jpg 60 242 | Real/Telephone/00059.jpg 60 243 | Real/Telephone/00060.jpg 60 244 | Real/Telephone/00061.jpg 60 245 | Real/ToothBrush/00011.jpg 61 246 | Real/ToothBrush/00030.jpg 61 247 | Real/ToothBrush/00053.jpg 61 248 | Real/ToothBrush/00047.jpg 61 249 | Real/ToothBrush/00061.jpg 61 250 | Real/Toys/00007.jpg 62 251 | Real/Toys/00041.jpg 62 252 | Real/Toys/00043.jpg 62 253 | Real/Toys/00045.jpg 62 254 | Real/Trash_Can/00029.jpg 63 255 | Real/Trash_Can/00065.jpg 63 256 | Real/Trash_Can/00043.jpg 63 257 | Real/Trash_Can/00073.jpg 63 258 | Real/Trash_Can/00075.jpg 63 259 | Real/Webcam/00012.jpg 64 260 | Real/Webcam/00017.jpg 64 261 | Real/Webcam/00043.jpg 64 262 | -------------------------------------------------------------------------------- /pcs/agents/BaseAgent.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import logging 3 | import os 4 | 5 | import numpy as np 6 | import torch 7 | import torch.backends.cudnn as cudnn 8 | import torch.nn as nn 9 | from pcs.utils import print_info, torchutils 10 | from torch.utils.tensorboard import SummaryWriter 11 | 12 | 13 | class BaseAgent(object): 14 | """ 15 | General agent class 16 | 17 | Abstract Methods to be implemented: 18 | 19 | _load_datasets 20 | _create_model 21 | _create_optimizer 22 | train_one_epoch 23 | validate 24 | load_checkpoint 25 | save_checkpoint 26 | """ 27 | 28 | def __init__(self, config): 29 | self.config = config 30 | # set seed as early as possible 31 | torchutils.set_seed(self.config.seed) 32 | 33 | self.model = None 34 | self.optim = None 35 | self.logger = logging.getLogger("Agent") 36 | self.summary_writer = SummaryWriter(log_dir=self.config.summary_dir) 37 | 38 | self.current_epoch = 0 39 | self.current_iteration = 0 40 | self.current_val_iteration = 0 41 | self.val_acc = [] 42 | self.train_loss = [] 43 | self.lr_scheduler_list = [] 44 | 45 | print_info(self.logger.info) 46 | self.starttime = datetime.datetime.now() 47 | self._choose_device() 48 | 49 | # Load Dataset 50 | self._load_datasets() 51 | 52 | self._create_model() 53 | self._create_optimizer() 54 | 55 | # we need these to decide best loss 56 | self.current_loss = 0.0 57 | self.current_val_metric = 0.0 58 | self.best_val_metric = 0.0 59 | self.best_val_epoch = 0 60 | self.iter_with_no_improv = 0 61 | 62 | def get_attr(self, domain, name): 63 | return getattr(self, f"{name}_{domain}") 64 | 65 | def set_attr(self, domain, name, value): 66 | setattr(self, f"{name}_{domain}", value) 67 | return self.get_attr(domain, name) 68 | 69 | def _choose_device(self): 70 | # check if use gpu 71 | self.is_cuda = torch.cuda.is_available() 72 | if self.is_cuda and not self.config.cuda: 73 | self.logger.info( 74 | "WARNING: You have a CUDA device, so you should probably enable CUDA" 75 | ) 76 | self.cuda = self.is_cuda & self.config.cuda 77 | 78 | if self.cuda: 79 | self.device = torch.device("cuda") 80 | cudnn.benchmark = True 81 | 82 | if self.config.gpu_device is None: 83 | self.config.gpu_device = list(range(torch.cuda.device_count())) 84 | elif not isinstance(self.config.gpu_device, list): 85 | self.config.gpu_device = [self.config.gpu_device] 86 | self.gpu_devices = self.config.gpu_device 87 | 88 | # set device when only one gpu 89 | num_gpus = len(self.gpu_devices) 90 | self.multigpu = num_gpus > 1 and torch.cuda.device_count() > 1 91 | if not self.multigpu: 92 | torch.cuda.set_device(self.gpu_devices[0]) 93 | 94 | gpu_devices = ",".join([str(_gpu_id) for _gpu_id in self.gpu_devices]) 95 | self.logger.info(f"User specified {num_gpus} GPUs: {gpu_devices}") 96 | self.parallel_helper_idxs = torch.arange(len(self.gpu_devices)).to( 97 | self.device 98 | ) 99 | 100 | self.logger.info("Program will run on *****GPU-CUDA***** ") 101 | torchutils.print_cuda_statistics(output=self.logger.info, nvidia_smi=False) 102 | else: 103 | self.device = torch.device("cpu") 104 | self.logger.info("Program will run on *****CPU*****\n") 105 | 106 | def _load_datasets(self): 107 | raise NotImplementedError 108 | 109 | def _create_model(self): 110 | raise NotImplementedError 111 | 112 | def _create_optimizer(self): 113 | raise NotImplementedError 114 | 115 | def run(self): 116 | """ 117 | The main operator 118 | :return: 119 | """ 120 | try: 121 | self.train() 122 | self.cleanup() 123 | except KeyboardInterrupt as e: 124 | self.logger.info("Interrupt detected. Saving data...") 125 | self.backup() 126 | self.cleanup() 127 | raise e 128 | except Exception as e: 129 | self.logger.error(e, exc_info=True) 130 | 131 | def train(self): 132 | """ 133 | Main training loop 134 | :return: 135 | """ 136 | if self.config.validate_freq: 137 | self.validate() 138 | 139 | for epoch in range(self.current_epoch + 1, self.config.num_epochs + 1): 140 | # early stop 141 | patience = self.config.optim_params.patience 142 | if patience and self.iter_with_no_improv > patience: 143 | self.logger.info( 144 | f"accuracy not improved in {patience} epoches, stopped" 145 | ) 146 | break 147 | # train 148 | self.current_epoch = epoch 149 | self.train_one_epoch() 150 | # validate 151 | if self.config.validate_freq and epoch % self.config.validate_freq == 0: 152 | self.validate() 153 | # adjust 154 | for sch in self.lr_scheduler_list: 155 | sch.step() 156 | # save 157 | self.save_checkpoint() 158 | 159 | def train_one_epoch(self): 160 | """ 161 | One epoch of training 162 | :return: 163 | """ 164 | raise NotImplementedError 165 | 166 | def validate(self): 167 | """ 168 | One cycle of model validation 169 | :return: 170 | """ 171 | raise NotImplementedError 172 | 173 | def backup(self): 174 | """ 175 | Backs up the model upon interrupt 176 | """ 177 | self.summary_writer.close() 178 | self.save_checkpoint(filename="backup.pth.tar") 179 | 180 | def finalise(self): 181 | """ 182 | Do appropriate saving after model is :finished training 183 | """ 184 | self.backup() 185 | 186 | def cleanup(self): 187 | """ 188 | Undo any global changes that the Agent may have made 189 | """ 190 | if hasattr(self, "best_val_epoch"): 191 | self.logger.info( 192 | f"Best Val acc at {self.best_val_epoch}: {self.best_val_metric:.3}" 193 | ) 194 | endtime = datetime.datetime.now() 195 | exe_time = endtime - self.starttime 196 | self.logger.info( 197 | f"End at time: {endtime.strftime('%Y.%m.%d-%H:%M:%S')}, total time: {exe_time.seconds}s" 198 | ) 199 | 200 | def copy_checkpoint(self, filename="checkpoint.pth.tar"): 201 | if ( 202 | self.config.copy_checkpoint_freq 203 | and self.current_epoch % self.config.copy_checkpoint_freq == 0 204 | ): 205 | self.logger.info(f"Backup checkpoint_epoch_{self.current_epoch}.pth.tar") 206 | torchutils.copy_checkpoint( 207 | filename=filename, 208 | folder=self.config.checkpoint_dir, 209 | copyname=f"checkpoint_epoch_{self.current_epoch}.pth.tar", 210 | ) 211 | 212 | def load_checkpoint(self, filename): 213 | """ 214 | Latest checkpoint loader 215 | :param file_name: name of the checkpoint file 216 | :return: 217 | """ 218 | raise NotImplementedError 219 | 220 | def save_checkpoint(self, filename="checkpoint.pth.tar"): 221 | """ 222 | Checkpoint saver 223 | :param file_name: name of the checkpoint file 224 | :param is_best: boolean flag to indicate whether current checkpoint's metric is the best so far 225 | :return: 226 | """ 227 | raise NotImplementedError 228 | -------------------------------------------------------------------------------- /data/splits/office_home/Clipart_labeled_p06.txt: -------------------------------------------------------------------------------- 1 | Clipart/Alarm_Clock/00001.jpg 0 2 | Clipart/Alarm_Clock/00008.jpg 0 3 | Clipart/Alarm_Clock/00010.jpg 0 4 | Clipart/Alarm_Clock/00050.jpg 0 5 | Clipart/Backpack/00003.jpg 1 6 | Clipart/Backpack/00006.jpg 1 7 | Clipart/Backpack/00019.jpg 1 8 | Clipart/Backpack/00034.jpg 1 9 | Clipart/Batteries/00019.jpg 2 10 | Clipart/Batteries/00036.jpg 2 11 | Clipart/Batteries/00031.jpg 2 12 | Clipart/Batteries/00046.jpg 2 13 | Clipart/Bed/00025.jpg 3 14 | Clipart/Bed/00065.jpg 3 15 | Clipart/Bed/00088.jpg 3 16 | Clipart/Bed/00062.jpg 3 17 | Clipart/Bed/00080.jpg 3 18 | Clipart/Bed/00083.jpg 3 19 | Clipart/Bike/00005.jpg 4 20 | Clipart/Bike/00013.jpg 4 21 | Clipart/Bike/00046.jpg 4 22 | Clipart/Bike/00060.jpg 4 23 | Clipart/Bike/00079.jpg 4 24 | Clipart/Bike/00092.jpg 4 25 | Clipart/Bottle/00002.jpg 5 26 | Clipart/Bottle/00016.jpg 5 27 | Clipart/Bottle/00080.jpg 5 28 | Clipart/Bottle/00032.jpg 5 29 | Clipart/Bottle/00063.jpg 5 30 | Clipart/Bottle/00065.jpg 5 31 | Clipart/Bucket/00007.jpg 6 32 | Clipart/Bucket/00046.jpg 6 33 | Clipart/Bucket/00060.jpg 6 34 | Clipart/Bucket/00070.jpg 6 35 | Clipart/Calculator/00003.jpg 7 36 | Clipart/Calculator/00018.jpg 7 37 | Clipart/Calculator/00040.jpg 7 38 | Clipart/Calculator/00042.jpg 7 39 | Clipart/Calendar/00009.jpg 8 40 | Clipart/Calendar/00039.jpg 8 41 | Clipart/Calendar/00046.jpg 8 42 | Clipart/Calendar/00059.jpg 8 43 | Clipart/Calendar/00023.jpg 8 44 | Clipart/Candles/00015.jpg 9 45 | Clipart/Candles/00056.jpg 9 46 | Clipart/Candles/00067.jpg 9 47 | Clipart/Candles/00059.jpg 9 48 | Clipart/Candles/00068.jpg 9 49 | Clipart/Candles/00084.jpg 9 50 | Clipart/Chair/00002.jpg 10 51 | Clipart/Chair/00017.jpg 10 52 | Clipart/Chair/00057.jpg 10 53 | Clipart/Chair/00043.jpg 10 54 | Clipart/Chair/00066.jpg 10 55 | Clipart/Chair/00086.jpg 10 56 | Clipart/Clipboards/00010.jpg 11 57 | Clipart/Clipboards/00032.jpg 11 58 | Clipart/Clipboards/00033.jpg 11 59 | Clipart/Computer/00007.jpg 12 60 | Clipart/Computer/00010.jpg 12 61 | Clipart/Computer/00013.jpg 12 62 | Clipart/Computer/00018.jpg 12 63 | Clipart/Computer/00049.jpg 12 64 | Clipart/Computer/00076.jpg 12 65 | Clipart/Couch/00004.jpg 13 66 | Clipart/Couch/00010.jpg 13 67 | Clipart/Couch/00009.jpg 13 68 | Clipart/Couch/00060.jpg 13 69 | Clipart/Curtains/00008.jpg 14 70 | Clipart/Curtains/00010.jpg 14 71 | Clipart/Curtains/00025.jpg 14 72 | Clipart/Curtains/00039.jpg 14 73 | Clipart/Desk_Lamp/00003.jpg 15 74 | Clipart/Desk_Lamp/00021.jpg 15 75 | Clipart/Desk_Lamp/00030.jpg 15 76 | Clipart/Drill/00003.jpg 16 77 | Clipart/Drill/00027.jpg 16 78 | Clipart/Drill/00043.jpg 16 79 | Clipart/Eraser/00020.jpg 17 80 | Clipart/Eraser/00012.jpg 17 81 | Clipart/Exit_Sign/00010.jpg 18 82 | Clipart/Exit_Sign/00026.jpg 18 83 | Clipart/Fan/00005.jpg 19 84 | Clipart/Fan/00047.jpg 19 85 | Clipart/Fan/00050.jpg 19 86 | Clipart/File_Cabinet/00026.jpg 20 87 | Clipart/File_Cabinet/00030.jpg 20 88 | Clipart/Flipflops/00025.jpg 21 89 | Clipart/Flipflops/00030.jpg 21 90 | Clipart/Flowers/00032.jpg 22 91 | Clipart/Flowers/00035.jpg 22 92 | Clipart/Flowers/00045.jpg 22 93 | Clipart/Flowers/00064.jpg 22 94 | Clipart/Flowers/00075.jpg 22 95 | Clipart/Folder/00006.jpg 23 96 | Clipart/Folder/00018.jpg 23 97 | Clipart/Folder/00040.jpg 23 98 | Clipart/Folder/00062.jpg 23 99 | Clipart/Folder/00077.jpg 23 100 | Clipart/Folder/00094.jpg 23 101 | Clipart/Fork/00029.jpg 24 102 | Clipart/Fork/00034.jpg 24 103 | Clipart/Fork/00047.jpg 24 104 | Clipart/Fork/00053.jpg 24 105 | Clipart/Glasses/00008.jpg 25 106 | Clipart/Glasses/00010.jpg 25 107 | Clipart/Glasses/00035.jpg 25 108 | Clipart/Hammer/00001.jpg 26 109 | Clipart/Hammer/00010.jpg 26 110 | Clipart/Hammer/00066.jpg 26 111 | Clipart/Hammer/00056.jpg 26 112 | Clipart/Hammer/00068.jpg 26 113 | Clipart/Hammer/00099.jpg 26 114 | Clipart/Helmet/00014.jpg 27 115 | Clipart/Helmet/00047.jpg 27 116 | Clipart/Helmet/00049.jpg 27 117 | Clipart/Helmet/00063.jpg 27 118 | Clipart/Kettle/00004.jpg 28 119 | Clipart/Kettle/00019.jpg 28 120 | Clipart/Keyboard/00022.jpg 29 121 | Clipart/Keyboard/00053.jpg 29 122 | Clipart/Keyboard/00021.jpg 29 123 | Clipart/Keyboard/00035.jpg 29 124 | Clipart/Keyboard/00075.jpg 29 125 | Clipart/Knives/00004.jpg 30 126 | Clipart/Knives/00024.jpg 30 127 | Clipart/Knives/00051.jpg 30 128 | Clipart/Lamp_Shade/00005.jpg 31 129 | Clipart/Lamp_Shade/00030.jpg 31 130 | Clipart/Laptop/00010.jpg 32 131 | Clipart/Laptop/00021.jpg 32 132 | Clipart/Laptop/00011.jpg 32 133 | Clipart/Laptop/00028.jpg 32 134 | Clipart/Laptop/00037.jpg 32 135 | Clipart/Laptop/00051.jpg 32 136 | Clipart/Marker/00016.jpg 33 137 | Clipart/Marker/00044.jpg 33 138 | Clipart/Marker/00041.jpg 33 139 | Clipart/Marker/00065.jpg 33 140 | Clipart/Monitor/00004.jpg 34 141 | Clipart/Monitor/00048.jpg 34 142 | Clipart/Monitor/00098.jpg 34 143 | Clipart/Monitor/00040.jpg 34 144 | Clipart/Monitor/00059.jpg 34 145 | Clipart/Monitor/00075.jpg 34 146 | Clipart/Mop/00013.jpg 35 147 | Clipart/Mop/00022.jpg 35 148 | Clipart/Mouse/00015.jpg 36 149 | Clipart/Mouse/00066.jpg 36 150 | Clipart/Mouse/00051.jpg 36 151 | Clipart/Mouse/00059.jpg 36 152 | Clipart/Mouse/00065.jpg 36 153 | Clipart/Mug/00027.jpg 37 154 | Clipart/Mug/00031.jpg 37 155 | Clipart/Mug/00047.jpg 37 156 | Clipart/Mug/00046.jpg 37 157 | Clipart/Mug/00059.jpg 37 158 | Clipart/Mug/00086.jpg 37 159 | Clipart/Notebook/00006.jpg 38 160 | Clipart/Notebook/00053.jpg 38 161 | Clipart/Notebook/00027.jpg 38 162 | Clipart/Notebook/00039.jpg 38 163 | Clipart/Notebook/00075.jpg 38 164 | Clipart/Oven/00024.jpg 39 165 | Clipart/Oven/00035.jpg 39 166 | Clipart/Pan/00006.jpg 40 167 | Clipart/Pan/00043.jpg 40 168 | Clipart/Pan/00050.jpg 40 169 | Clipart/Paper_Clip/00031.jpg 41 170 | Clipart/Paper_Clip/00036.jpg 41 171 | Clipart/Pen/00020.jpg 42 172 | Clipart/Pen/00035.jpg 42 173 | Clipart/Pen/00039.jpg 42 174 | Clipart/Pen/00022.jpg 42 175 | Clipart/Pen/00043.jpg 42 176 | Clipart/Pen/00080.jpg 42 177 | Clipart/Pencil/00006.jpg 43 178 | Clipart/Pencil/00020.jpg 43 179 | Clipart/Pencil/00060.jpg 43 180 | Clipart/Pencil/00042.jpg 43 181 | Clipart/Pencil/00070.jpg 43 182 | Clipart/Pencil/00092.jpg 43 183 | Clipart/Postit_Notes/00010.jpg 44 184 | Clipart/Postit_Notes/00004.jpg 44 185 | Clipart/Printer/00026.jpg 45 186 | Clipart/Printer/00050.jpg 45 187 | Clipart/Printer/00073.jpg 45 188 | Clipart/Printer/00028.jpg 45 189 | Clipart/Printer/00082.jpg 45 190 | Clipart/Push_Pin/00034.jpg 46 191 | Clipart/Push_Pin/00028.jpg 46 192 | Clipart/Radio/00004.jpg 47 193 | Clipart/Radio/00021.jpg 47 194 | Clipart/Radio/00044.jpg 47 195 | Clipart/Refrigerator/00014.jpg 48 196 | Clipart/Refrigerator/00025.jpg 48 197 | Clipart/Ruler/00012.jpg 49 198 | Clipart/Ruler/00048.jpg 49 199 | Clipart/Ruler/00041.jpg 49 200 | Clipart/Ruler/00055.jpg 49 201 | Clipart/Scissors/00022.jpg 50 202 | Clipart/Scissors/00062.jpg 50 203 | Clipart/Scissors/00081.jpg 50 204 | Clipart/Scissors/00053.jpg 50 205 | Clipart/Scissors/00069.jpg 50 206 | Clipart/Scissors/00098.jpg 50 207 | Clipart/Screwdriver/00023.jpg 51 208 | Clipart/Screwdriver/00012.jpg 51 209 | Clipart/Screwdriver/00068.jpg 51 210 | Clipart/Screwdriver/00073.jpg 51 211 | Clipart/Shelf/00008.jpg 52 212 | Clipart/Shelf/00018.jpg 52 213 | Clipart/Shelf/00025.jpg 52 214 | Clipart/Sink/00014.jpg 53 215 | Clipart/Sink/00020.jpg 53 216 | Clipart/Sink/00038.jpg 53 217 | Clipart/Sneakers/00016.jpg 54 218 | Clipart/Sneakers/00023.jpg 54 219 | Clipart/Sneakers/00026.jpg 54 220 | Clipart/Soda/00008.jpg 55 221 | Clipart/Soda/00016.jpg 55 222 | Clipart/Soda/00054.jpg 55 223 | Clipart/Soda/00057.jpg 55 224 | Clipart/Speaker/00024.jpg 56 225 | Clipart/Speaker/00047.jpg 56 226 | Clipart/Speaker/00086.jpg 56 227 | Clipart/Speaker/00049.jpg 56 228 | Clipart/Speaker/00063.jpg 56 229 | Clipart/Spoon/00001.jpg 57 230 | Clipart/Spoon/00023.jpg 57 231 | Clipart/Spoon/00026.jpg 57 232 | Clipart/Spoon/00031.jpg 57 233 | Clipart/TV/00010.jpg 58 234 | Clipart/TV/00053.jpg 58 235 | Clipart/TV/00055.jpg 58 236 | Clipart/TV/00062.jpg 58 237 | Clipart/TV/00081.jpg 58 238 | Clipart/TV/00088.jpg 58 239 | Clipart/Table/00033.jpg 59 240 | Clipart/Table/00060.jpg 59 241 | Clipart/Table/00048.jpg 59 242 | Clipart/Table/00062.jpg 59 243 | Clipart/Table/00076.jpg 59 244 | Clipart/Telephone/00022.jpg 60 245 | Clipart/Telephone/00049.jpg 60 246 | Clipart/Telephone/00098.jpg 60 247 | Clipart/Telephone/00067.jpg 60 248 | Clipart/Telephone/00077.jpg 60 249 | Clipart/ToothBrush/00033.jpg 61 250 | Clipart/ToothBrush/00037.jpg 61 251 | Clipart/Toys/00021.jpg 62 252 | Clipart/Toys/00073.jpg 62 253 | Clipart/Toys/00087.jpg 62 254 | Clipart/Toys/00085.jpg 62 255 | Clipart/Toys/00086.jpg 62 256 | Clipart/Toys/00093.jpg 62 257 | Clipart/Trash_Can/00006.jpg 63 258 | Clipart/Trash_Can/00018.jpg 63 259 | Clipart/Trash_Can/00052.jpg 63 260 | Clipart/Webcam/00014.jpg 64 261 | Clipart/Webcam/00039.jpg 64 262 | Clipart/Webcam/00034.jpg 64 263 | -------------------------------------------------------------------------------- /data/splits/office_home/Product_labeled_p06.txt: -------------------------------------------------------------------------------- 1 | Product/Alarm_Clock/00001.jpg 0 2 | Product/Alarm_Clock/00012.jpg 0 3 | Product/Alarm_Clock/00015.jpg 0 4 | Product/Alarm_Clock/00057.jpg 0 5 | Product/Alarm_Clock/00075.jpg 0 6 | Product/Backpack/00001.jpg 1 7 | Product/Backpack/00012.jpg 1 8 | Product/Backpack/00013.jpg 1 9 | Product/Backpack/00086.jpg 1 10 | Product/Backpack/00089.jpg 1 11 | Product/Backpack/00099.jpg 1 12 | Product/Batteries/00003.jpg 2 13 | Product/Batteries/00043.jpg 2 14 | Product/Batteries/00023.jpg 2 15 | Product/Batteries/00051.jpg 2 16 | Product/Bed/00005.jpg 3 17 | Product/Bed/00033.jpg 3 18 | Product/Bed/00040.jpg 3 19 | Product/Bed/00042.jpg 3 20 | Product/Bike/00016.jpg 4 21 | Product/Bike/00023.jpg 4 22 | Product/Bike/00031.jpg 4 23 | Product/Bike/00040.jpg 4 24 | Product/Bottle/00010.jpg 5 25 | Product/Bottle/00036.jpg 5 26 | Product/Bottle/00012.jpg 5 27 | Product/Bottle/00046.jpg 5 28 | Product/Bucket/00002.jpg 6 29 | Product/Bucket/00023.jpg 6 30 | Product/Bucket/00032.jpg 6 31 | Product/Bucket/00033.jpg 6 32 | Product/Calculator/00062.jpg 7 33 | Product/Calculator/00080.jpg 7 34 | Product/Calculator/00060.jpg 7 35 | Product/Calculator/00070.jpg 7 36 | Product/Calculator/00077.jpg 7 37 | Product/Calendar/00060.jpg 8 38 | Product/Calendar/00079.jpg 8 39 | Product/Calendar/00066.jpg 8 40 | Product/Calendar/00072.jpg 8 41 | Product/Calendar/00075.jpg 8 42 | Product/Candles/00006.jpg 9 43 | Product/Candles/00010.jpg 9 44 | Product/Candles/00031.jpg 9 45 | Product/Candles/00042.jpg 9 46 | Product/Chair/00024.jpg 10 47 | Product/Chair/00053.jpg 10 48 | Product/Chair/00092.jpg 10 49 | Product/Chair/00046.jpg 10 50 | Product/Chair/00059.jpg 10 51 | Product/Chair/00084.jpg 10 52 | Product/Clipboards/00019.jpg 11 53 | Product/Clipboards/00065.jpg 11 54 | Product/Clipboards/00010.jpg 11 55 | Product/Clipboards/00043.jpg 11 56 | Product/Computer/00009.jpg 12 57 | Product/Computer/00032.jpg 12 58 | Product/Computer/00063.jpg 12 59 | Product/Computer/00061.jpg 12 60 | Product/Computer/00085.jpg 12 61 | Product/Couch/00060.jpg 13 62 | Product/Couch/00070.jpg 13 63 | Product/Couch/00086.jpg 13 64 | Product/Couch/00064.jpg 13 65 | Product/Couch/00076.jpg 13 66 | Product/Curtains/00009.jpg 14 67 | Product/Curtains/00012.jpg 14 68 | Product/Curtains/00028.jpg 14 69 | Product/Curtains/00072.jpg 14 70 | Product/Desk_Lamp/00066.jpg 15 71 | Product/Desk_Lamp/00075.jpg 15 72 | Product/Desk_Lamp/00019.jpg 15 73 | Product/Desk_Lamp/00045.jpg 15 74 | Product/Desk_Lamp/00068.jpg 15 75 | Product/Drill/00006.jpg 16 76 | Product/Drill/00035.jpg 16 77 | Product/Drill/00054.jpg 16 78 | Product/Drill/00059.jpg 16 79 | Product/Eraser/00008.jpg 17 80 | Product/Eraser/00033.jpg 17 81 | Product/Eraser/00018.jpg 17 82 | Product/Exit_Sign/00039.jpg 18 83 | Product/Exit_Sign/00062.jpg 18 84 | Product/Exit_Sign/00039.jpg 18 85 | Product/Exit_Sign/00060.jpg 18 86 | Product/Fan/00023.jpg 19 87 | Product/Fan/00055.jpg 19 88 | Product/Fan/00037.jpg 19 89 | Product/Fan/00049.jpg 19 90 | Product/File_Cabinet/00032.jpg 20 91 | Product/File_Cabinet/00035.jpg 20 92 | Product/File_Cabinet/00060.jpg 20 93 | Product/File_Cabinet/00064.jpg 20 94 | Product/Flipflops/00034.jpg 21 95 | Product/Flipflops/00087.jpg 21 96 | Product/Flipflops/00057.jpg 21 97 | Product/Flipflops/00061.jpg 21 98 | Product/Flipflops/00077.jpg 21 99 | Product/Flipflops/00094.jpg 21 100 | Product/Flowers/00003.jpg 22 101 | Product/Flowers/00068.jpg 22 102 | Product/Flowers/00086.jpg 22 103 | Product/Flowers/00057.jpg 22 104 | Product/Flowers/00067.jpg 22 105 | Product/Folder/00001.jpg 23 106 | Product/Folder/00010.jpg 23 107 | Product/Folder/00066.jpg 23 108 | Product/Folder/00056.jpg 23 109 | Product/Folder/00068.jpg 23 110 | Product/Fork/00010.jpg 24 111 | Product/Fork/00022.jpg 24 112 | Product/Glasses/00023.jpg 25 113 | Product/Glasses/00055.jpg 25 114 | Product/Glasses/00045.jpg 25 115 | Product/Glasses/00049.jpg 25 116 | Product/Hammer/00004.jpg 26 117 | Product/Hammer/00011.jpg 26 118 | Product/Hammer/00052.jpg 26 119 | Product/Helmet/00012.jpg 27 120 | Product/Helmet/00051.jpg 27 121 | Product/Helmet/00064.jpg 27 122 | Product/Helmet/00042.jpg 27 123 | Product/Helmet/00075.jpg 27 124 | Product/Kettle/00010.jpg 28 125 | Product/Kettle/00021.jpg 28 126 | Product/Kettle/00051.jpg 28 127 | Product/Kettle/00058.jpg 28 128 | Product/Keyboard/00019.jpg 29 129 | Product/Keyboard/00028.jpg 29 130 | Product/Keyboard/00072.jpg 29 131 | Product/Keyboard/00029.jpg 29 132 | Product/Keyboard/00037.jpg 29 133 | Product/Knives/00002.jpg 30 134 | Product/Knives/00023.jpg 30 135 | Product/Lamp_Shade/00008.jpg 31 136 | Product/Lamp_Shade/00050.jpg 31 137 | Product/Lamp_Shade/00030.jpg 31 138 | Product/Laptop/00019.jpg 32 139 | Product/Laptop/00068.jpg 32 140 | Product/Laptop/00086.jpg 32 141 | Product/Laptop/00055.jpg 32 142 | Product/Laptop/00075.jpg 32 143 | Product/Marker/00020.jpg 33 144 | Product/Marker/00030.jpg 33 145 | Product/Marker/00026.jpg 33 146 | Product/Monitor/00006.jpg 34 147 | Product/Monitor/00036.jpg 34 148 | Product/Monitor/00054.jpg 34 149 | Product/Monitor/00059.jpg 34 150 | Product/Monitor/00065.jpg 34 151 | Product/Monitor/00091.jpg 34 152 | Product/Mop/00006.jpg 35 153 | Product/Mop/00023.jpg 35 154 | Product/Mop/00054.jpg 35 155 | Product/Mop/00066.jpg 35 156 | Product/Mouse/00020.jpg 36 157 | Product/Mouse/00039.jpg 36 158 | Product/Mouse/00090.jpg 36 159 | Product/Mouse/00046.jpg 36 160 | Product/Mouse/00064.jpg 36 161 | Product/Mouse/00069.jpg 36 162 | Product/Mug/00010.jpg 37 163 | Product/Mug/00036.jpg 37 164 | Product/Notebook/00006.jpg 38 165 | Product/Notebook/00060.jpg 38 166 | Product/Notebook/00073.jpg 38 167 | Product/Notebook/00022.jpg 38 168 | Product/Notebook/00043.jpg 38 169 | Product/Notebook/00080.jpg 38 170 | Product/Oven/00045.jpg 39 171 | Product/Oven/00050.jpg 39 172 | Product/Oven/00022.jpg 39 173 | Product/Oven/00042.jpg 39 174 | Product/Pan/00044.jpg 40 175 | Product/Pan/00064.jpg 40 176 | Product/Pan/00012.jpg 40 177 | Product/Pan/00019.jpg 40 178 | Product/Paper_Clip/00038.jpg 41 179 | Product/Paper_Clip/00014.jpg 41 180 | Product/Paper_Clip/00028.jpg 41 181 | Product/Pen/00030.jpg 42 182 | Product/Pen/00053.jpg 42 183 | Product/Pen/00026.jpg 42 184 | Product/Pen/00048.jpg 42 185 | Product/Pencil/00031.jpg 43 186 | Product/Pencil/00025.jpg 43 187 | Product/Postit_Notes/00003.jpg 44 188 | Product/Postit_Notes/00035.jpg 44 189 | Product/Printer/00022.jpg 45 190 | Product/Printer/00061.jpg 45 191 | Product/Printer/00077.jpg 45 192 | Product/Printer/00069.jpg 45 193 | Product/Printer/00074.jpg 45 194 | Product/Printer/00088.jpg 45 195 | Product/Push_Pin/00029.jpg 46 196 | Product/Push_Pin/00017.jpg 46 197 | Product/Push_Pin/00018.jpg 46 198 | Product/Radio/00022.jpg 47 199 | Product/Radio/00027.jpg 47 200 | Product/Radio/00037.jpg 47 201 | Product/Refrigerator/00010.jpg 48 202 | Product/Refrigerator/00053.jpg 48 203 | Product/Refrigerator/00034.jpg 48 204 | Product/Refrigerator/00045.jpg 48 205 | Product/Ruler/00018.jpg 49 206 | Product/Ruler/00019.jpg 49 207 | Product/Ruler/00025.jpg 49 208 | Product/Scissors/00016.jpg 50 209 | Product/Scissors/00024.jpg 50 210 | Product/Scissors/00054.jpg 50 211 | Product/Scissors/00051.jpg 50 212 | Product/Scissors/00076.jpg 50 213 | Product/Scissors/00092.jpg 50 214 | Product/Screwdriver/00015.jpg 51 215 | Product/Screwdriver/00028.jpg 51 216 | Product/Shelf/00012.jpg 52 217 | Product/Shelf/00025.jpg 52 218 | Product/Shelf/00032.jpg 52 219 | Product/Sink/00001.jpg 53 220 | Product/Sink/00005.jpg 53 221 | Product/Sink/00025.jpg 53 222 | Product/Sneakers/00014.jpg 54 223 | Product/Sneakers/00049.jpg 54 224 | Product/Sneakers/00063.jpg 54 225 | Product/Sneakers/00055.jpg 54 226 | Product/Sneakers/00062.jpg 54 227 | Product/Sneakers/00088.jpg 54 228 | Product/Soda/00043.jpg 55 229 | Product/Soda/00031.jpg 55 230 | Product/Soda/00041.jpg 55 231 | Product/Speaker/00025.jpg 56 232 | Product/Speaker/00033.jpg 56 233 | Product/Speaker/00083.jpg 56 234 | Product/Speaker/00076.jpg 56 235 | Product/Speaker/00077.jpg 56 236 | Product/Speaker/00084.jpg 56 237 | Product/Spoon/00023.jpg 57 238 | Product/Spoon/00014.jpg 57 239 | Product/Spoon/00023.jpg 57 240 | Product/TV/00014.jpg 58 241 | Product/TV/00021.jpg 58 242 | Product/TV/00061.jpg 58 243 | Product/TV/00067.jpg 58 244 | Product/TV/00073.jpg 58 245 | Product/Table/00005.jpg 59 246 | Product/Table/00040.jpg 59 247 | Product/Table/00051.jpg 59 248 | Product/Table/00052.jpg 59 249 | Product/Telephone/00010.jpg 60 250 | Product/Telephone/00018.jpg 60 251 | Product/Telephone/00052.jpg 60 252 | Product/ToothBrush/00010.jpg 61 253 | Product/ToothBrush/00024.jpg 61 254 | Product/ToothBrush/00031.jpg 61 255 | Product/Toys/00005.jpg 62 256 | Product/Toys/00009.jpg 62 257 | Product/Toys/00038.jpg 62 258 | Product/Trash_Can/00010.jpg 63 259 | Product/Trash_Can/00011.jpg 63 260 | Product/Trash_Can/00093.jpg 63 261 | Product/Trash_Can/00045.jpg 63 262 | Product/Trash_Can/00075.jpg 63 263 | Product/Trash_Can/00088.jpg 63 264 | Product/Webcam/00033.jpg 64 265 | Product/Webcam/00061.jpg 64 266 | Product/Webcam/00084.jpg 64 267 | -------------------------------------------------------------------------------- /data/splits/office/dslr_labeled_7.txt: -------------------------------------------------------------------------------- 1 | dslr/images/back_pack/frame_0001.jpg 0 2 | dslr/images/back_pack/frame_0002.jpg 0 3 | dslr/images/back_pack/frame_0006.jpg 0 4 | dslr/images/back_pack/frame_0007.jpg 0 5 | dslr/images/back_pack/frame_0008.jpg 0 6 | dslr/images/back_pack/frame_0010.jpg 0 7 | dslr/images/back_pack/frame_0011.jpg 0 8 | dslr/images/bike/frame_0001.jpg 1 9 | dslr/images/bike/frame_0003.jpg 1 10 | dslr/images/bike/frame_0004.jpg 1 11 | dslr/images/bike/frame_0008.jpg 1 12 | dslr/images/bike/frame_0012.jpg 1 13 | dslr/images/bike/frame_0013.jpg 1 14 | dslr/images/bike/frame_0017.jpg 1 15 | dslr/images/bike_helmet/frame_0001.jpg 2 16 | dslr/images/bike_helmet/frame_0005.jpg 2 17 | dslr/images/bike_helmet/frame_0012.jpg 2 18 | dslr/images/bike_helmet/frame_0015.jpg 2 19 | dslr/images/bike_helmet/frame_0016.jpg 2 20 | dslr/images/bike_helmet/frame_0020.jpg 2 21 | dslr/images/bike_helmet/frame_0021.jpg 2 22 | dslr/images/bookcase/frame_0001.jpg 3 23 | dslr/images/bookcase/frame_0002.jpg 3 24 | dslr/images/bookcase/frame_0003.jpg 3 25 | dslr/images/bookcase/frame_0008.jpg 3 26 | dslr/images/bookcase/frame_0009.jpg 3 27 | dslr/images/bookcase/frame_0010.jpg 3 28 | dslr/images/bookcase/frame_0012.jpg 3 29 | dslr/images/bottle/frame_0002.jpg 4 30 | dslr/images/bottle/frame_0009.jpg 4 31 | dslr/images/bottle/frame_0010.jpg 4 32 | dslr/images/bottle/frame_0011.jpg 4 33 | dslr/images/bottle/frame_0014.jpg 4 34 | dslr/images/bottle/frame_0015.jpg 4 35 | dslr/images/bottle/frame_0016.jpg 4 36 | dslr/images/calculator/frame_0001.jpg 5 37 | dslr/images/calculator/frame_0002.jpg 5 38 | dslr/images/calculator/frame_0003.jpg 5 39 | dslr/images/calculator/frame_0004.jpg 5 40 | dslr/images/calculator/frame_0005.jpg 5 41 | dslr/images/calculator/frame_0009.jpg 5 42 | dslr/images/calculator/frame_0011.jpg 5 43 | dslr/images/desk_chair/frame_0001.jpg 6 44 | dslr/images/desk_chair/frame_0004.jpg 6 45 | dslr/images/desk_chair/frame_0005.jpg 6 46 | dslr/images/desk_chair/frame_0008.jpg 6 47 | dslr/images/desk_chair/frame_0011.jpg 6 48 | dslr/images/desk_chair/frame_0012.jpg 6 49 | dslr/images/desk_chair/frame_0013.jpg 6 50 | dslr/images/desk_lamp/frame_0001.jpg 7 51 | dslr/images/desk_lamp/frame_0002.jpg 7 52 | dslr/images/desk_lamp/frame_0003.jpg 7 53 | dslr/images/desk_lamp/frame_0006.jpg 7 54 | dslr/images/desk_lamp/frame_0007.jpg 7 55 | dslr/images/desk_lamp/frame_0008.jpg 7 56 | dslr/images/desk_lamp/frame_0011.jpg 7 57 | dslr/images/desktop_computer/frame_0001.jpg 8 58 | dslr/images/desktop_computer/frame_0002.jpg 8 59 | dslr/images/desktop_computer/frame_0003.jpg 8 60 | dslr/images/desktop_computer/frame_0008.jpg 8 61 | dslr/images/desktop_computer/frame_0009.jpg 8 62 | dslr/images/desktop_computer/frame_0010.jpg 8 63 | dslr/images/desktop_computer/frame_0014.jpg 8 64 | dslr/images/file_cabinet/frame_0001.jpg 9 65 | dslr/images/file_cabinet/frame_0002.jpg 9 66 | dslr/images/file_cabinet/frame_0003.jpg 9 67 | dslr/images/file_cabinet/frame_0004.jpg 9 68 | dslr/images/file_cabinet/frame_0006.jpg 9 69 | dslr/images/file_cabinet/frame_0009.jpg 9 70 | dslr/images/file_cabinet/frame_0014.jpg 9 71 | dslr/images/headphones/frame_0001.jpg 10 72 | dslr/images/headphones/frame_0005.jpg 10 73 | dslr/images/headphones/frame_0006.jpg 10 74 | dslr/images/headphones/frame_0007.jpg 10 75 | dslr/images/headphones/frame_0008.jpg 10 76 | dslr/images/headphones/frame_0011.jpg 10 77 | dslr/images/headphones/frame_0012.jpg 10 78 | dslr/images/keyboard/frame_0001.jpg 11 79 | dslr/images/keyboard/frame_0002.jpg 11 80 | dslr/images/keyboard/frame_0003.jpg 11 81 | dslr/images/keyboard/frame_0004.jpg 11 82 | dslr/images/keyboard/frame_0005.jpg 11 83 | dslr/images/keyboard/frame_0007.jpg 11 84 | dslr/images/keyboard/frame_0009.jpg 11 85 | dslr/images/laptop_computer/frame_0002.jpg 12 86 | dslr/images/laptop_computer/frame_0011.jpg 12 87 | dslr/images/laptop_computer/frame_0012.jpg 12 88 | dslr/images/laptop_computer/frame_0013.jpg 12 89 | dslr/images/laptop_computer/frame_0015.jpg 12 90 | dslr/images/laptop_computer/frame_0016.jpg 12 91 | dslr/images/laptop_computer/frame_0019.jpg 12 92 | dslr/images/letter_tray/frame_0001.jpg 13 93 | dslr/images/letter_tray/frame_0003.jpg 13 94 | dslr/images/letter_tray/frame_0008.jpg 13 95 | dslr/images/letter_tray/frame_0010.jpg 13 96 | dslr/images/letter_tray/frame_0013.jpg 13 97 | dslr/images/letter_tray/frame_0014.jpg 13 98 | dslr/images/letter_tray/frame_0016.jpg 13 99 | dslr/images/mobile_phone/frame_0009.jpg 14 100 | dslr/images/mobile_phone/frame_0010.jpg 14 101 | dslr/images/mobile_phone/frame_0015.jpg 14 102 | dslr/images/mobile_phone/frame_0017.jpg 14 103 | dslr/images/mobile_phone/frame_0024.jpg 14 104 | dslr/images/mobile_phone/frame_0025.jpg 14 105 | dslr/images/mobile_phone/frame_0027.jpg 14 106 | dslr/images/monitor/frame_0004.jpg 15 107 | dslr/images/monitor/frame_0006.jpg 15 108 | dslr/images/monitor/frame_0014.jpg 15 109 | dslr/images/monitor/frame_0017.jpg 15 110 | dslr/images/monitor/frame_0018.jpg 15 111 | dslr/images/monitor/frame_0020.jpg 15 112 | dslr/images/monitor/frame_0022.jpg 15 113 | dslr/images/mouse/frame_0001.jpg 16 114 | dslr/images/mouse/frame_0004.jpg 16 115 | dslr/images/mouse/frame_0005.jpg 16 116 | dslr/images/mouse/frame_0006.jpg 16 117 | dslr/images/mouse/frame_0007.jpg 16 118 | dslr/images/mouse/frame_0008.jpg 16 119 | dslr/images/mouse/frame_0012.jpg 16 120 | dslr/images/mug/frame_0001.jpg 17 121 | dslr/images/mug/frame_0002.jpg 17 122 | dslr/images/mug/frame_0003.jpg 17 123 | dslr/images/mug/frame_0005.jpg 17 124 | dslr/images/mug/frame_0006.jpg 17 125 | dslr/images/mug/frame_0007.jpg 17 126 | dslr/images/mug/frame_0008.jpg 17 127 | dslr/images/paper_notebook/frame_0001.jpg 18 128 | dslr/images/paper_notebook/frame_0002.jpg 18 129 | dslr/images/paper_notebook/frame_0003.jpg 18 130 | dslr/images/paper_notebook/frame_0004.jpg 18 131 | dslr/images/paper_notebook/frame_0007.jpg 18 132 | dslr/images/paper_notebook/frame_0009.jpg 18 133 | dslr/images/paper_notebook/frame_0010.jpg 18 134 | dslr/images/pen/frame_0001.jpg 19 135 | dslr/images/pen/frame_0002.jpg 19 136 | dslr/images/pen/frame_0003.jpg 19 137 | dslr/images/pen/frame_0004.jpg 19 138 | dslr/images/pen/frame_0006.jpg 19 139 | dslr/images/pen/frame_0007.jpg 19 140 | dslr/images/pen/frame_0009.jpg 19 141 | dslr/images/phone/frame_0002.jpg 20 142 | dslr/images/phone/frame_0004.jpg 20 143 | dslr/images/phone/frame_0007.jpg 20 144 | dslr/images/phone/frame_0009.jpg 20 145 | dslr/images/phone/frame_0011.jpg 20 146 | dslr/images/phone/frame_0012.jpg 20 147 | dslr/images/phone/frame_0013.jpg 20 148 | dslr/images/printer/frame_0004.jpg 21 149 | dslr/images/printer/frame_0006.jpg 21 150 | dslr/images/printer/frame_0008.jpg 21 151 | dslr/images/printer/frame_0009.jpg 21 152 | dslr/images/printer/frame_0012.jpg 21 153 | dslr/images/printer/frame_0013.jpg 21 154 | dslr/images/printer/frame_0015.jpg 21 155 | dslr/images/projector/frame_0002.jpg 22 156 | dslr/images/projector/frame_0006.jpg 22 157 | dslr/images/projector/frame_0007.jpg 22 158 | dslr/images/projector/frame_0010.jpg 22 159 | dslr/images/projector/frame_0014.jpg 22 160 | dslr/images/projector/frame_0019.jpg 22 161 | dslr/images/projector/frame_0023.jpg 22 162 | dslr/images/punchers/frame_0005.jpg 23 163 | dslr/images/punchers/frame_0008.jpg 23 164 | dslr/images/punchers/frame_0009.jpg 23 165 | dslr/images/punchers/frame_0012.jpg 23 166 | dslr/images/punchers/frame_0013.jpg 23 167 | dslr/images/punchers/frame_0015.jpg 23 168 | dslr/images/punchers/frame_0016.jpg 23 169 | dslr/images/ring_binder/frame_0001.jpg 24 170 | dslr/images/ring_binder/frame_0002.jpg 24 171 | dslr/images/ring_binder/frame_0003.jpg 24 172 | dslr/images/ring_binder/frame_0005.jpg 24 173 | dslr/images/ring_binder/frame_0006.jpg 24 174 | dslr/images/ring_binder/frame_0009.jpg 24 175 | dslr/images/ring_binder/frame_0010.jpg 24 176 | dslr/images/ruler/frame_0001.jpg 25 177 | dslr/images/ruler/frame_0002.jpg 25 178 | dslr/images/ruler/frame_0003.jpg 25 179 | dslr/images/ruler/frame_0004.jpg 25 180 | dslr/images/ruler/frame_0005.jpg 25 181 | dslr/images/ruler/frame_0006.jpg 25 182 | dslr/images/ruler/frame_0007.jpg 25 183 | dslr/images/scissors/frame_0001.jpg 26 184 | dslr/images/scissors/frame_0003.jpg 26 185 | dslr/images/scissors/frame_0005.jpg 26 186 | dslr/images/scissors/frame_0007.jpg 26 187 | dslr/images/scissors/frame_0012.jpg 26 188 | dslr/images/scissors/frame_0014.jpg 26 189 | dslr/images/scissors/frame_0016.jpg 26 190 | dslr/images/speaker/frame_0007.jpg 27 191 | dslr/images/speaker/frame_0009.jpg 27 192 | dslr/images/speaker/frame_0010.jpg 27 193 | dslr/images/speaker/frame_0011.jpg 27 194 | dslr/images/speaker/frame_0013.jpg 27 195 | dslr/images/speaker/frame_0018.jpg 27 196 | dslr/images/speaker/frame_0022.jpg 27 197 | dslr/images/stapler/frame_0003.jpg 28 198 | dslr/images/stapler/frame_0005.jpg 28 199 | dslr/images/stapler/frame_0009.jpg 28 200 | dslr/images/stapler/frame_0011.jpg 28 201 | dslr/images/stapler/frame_0014.jpg 28 202 | dslr/images/stapler/frame_0018.jpg 28 203 | dslr/images/stapler/frame_0019.jpg 28 204 | dslr/images/tape_dispenser/frame_0004.jpg 29 205 | dslr/images/tape_dispenser/frame_0009.jpg 29 206 | dslr/images/tape_dispenser/frame_0013.jpg 29 207 | dslr/images/tape_dispenser/frame_0014.jpg 29 208 | dslr/images/tape_dispenser/frame_0017.jpg 29 209 | dslr/images/tape_dispenser/frame_0019.jpg 29 210 | dslr/images/tape_dispenser/frame_0021.jpg 29 211 | dslr/images/trash_can/frame_0001.jpg 30 212 | dslr/images/trash_can/frame_0004.jpg 30 213 | dslr/images/trash_can/frame_0005.jpg 30 214 | dslr/images/trash_can/frame_0007.jpg 30 215 | dslr/images/trash_can/frame_0010.jpg 30 216 | dslr/images/trash_can/frame_0012.jpg 30 217 | dslr/images/trash_can/frame_0015.jpg 30 218 | -------------------------------------------------------------------------------- /pcs/utils/torchutils.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import os 3 | import random 4 | import shutil 5 | import sys 6 | from subprocess import call 7 | 8 | import numpy as np 9 | import torch 10 | import torch.nn as nn 11 | import torch.nn.functional as F 12 | import torchvision 13 | from torch.autograd import Function 14 | 15 | # Setup 16 | 17 | 18 | def set_seed(seed=1234, determine=True): 19 | os.environ["PYTHONHASHSEED"] = str(seed) 20 | random.seed(seed) 21 | np.random.seed(seed) 22 | torch.manual_seed(seed) 23 | torch.cuda.manual_seed(seed) 24 | torch.cuda.manual_seed_all(seed) 25 | 26 | if determine: 27 | torch.backends.cudnn.deterministic = True 28 | torch.backends.cudnn.benchmark = False 29 | 30 | 31 | # Tensor 32 | 33 | 34 | def expand_1d(t, num_reps): 35 | return t.unsqueeze(1).expand(-1, num_reps) 36 | 37 | 38 | def isin(ar1, ar2): 39 | # for every element of ar2, is ar2 in ar1 40 | # return shape same to ar1 41 | return (ar1[..., None] == ar2).any(-1) 42 | 43 | 44 | def dot(x, y): 45 | return torch.sum(x * y, dim=-1) 46 | 47 | 48 | def contrastive_sim(instances, proto=None, tao=0.05): 49 | # prob_matrix [bs, dim] 50 | # proto_dim [nums, dim] 51 | if proto is None: 52 | proto = instances 53 | ins_ext = instances.unsqueeze(1).repeat(1, proto.size(0), 1) 54 | sim_matrix = torch.exp(dot(ins_ext, proto) / tao) 55 | return sim_matrix 56 | 57 | 58 | def contrastive_sim_z(instances, proto=None, tao=0.05): 59 | sim_matrix = contrastive_sim(instances, proto, tao) 60 | return torch.sum(sim_matrix, dim=-1) 61 | 62 | 63 | def contrastive_prob(instances, proto=None, tao=0.05): 64 | sim_matrix = contrastive_sim(instances, proto, tao) 65 | return sim_matrix / torch.sum(sim_matrix, dim=-1).unsqueeze(-1) 66 | 67 | 68 | def pairwise_distance_2(input_1, input_2): 69 | assert input_1.size(1) == input_2.size(1) 70 | dis_vec = input_1.unsqueeze(1) - input_2 71 | dis = torch.norm(dis_vec, dim=2) 72 | return dis 73 | 74 | 75 | # nn 76 | 77 | 78 | def weights_init(model): 79 | for layer in model.modules(): 80 | if isinstance(layer, torch.nn.Conv2d): 81 | torch.nn.init.kaiming_normal_( 82 | layer.weight, mode="fan_out", nonlinearity="relu" 83 | ) 84 | if layer.bias is not None: 85 | torch.nn.init.constant_(layer.bias, val=0.0) 86 | elif isinstance(layer, torch.nn.BatchNorm2d): 87 | torch.nn.init.constant_(layer.weight, val=1.0) 88 | torch.nn.init.constant_(layer.bias, val=0.0) 89 | elif isinstance(layer, torch.nn.Linear): 90 | torch.nn.init.xavier_normal_(layer.weight) 91 | if layer.bias is not None: 92 | torch.nn.init.constant_(layer.bias, val=0.0) 93 | 94 | 95 | def split_params_by_name(model, name): 96 | if not isinstance(name, list): 97 | name = [name] 98 | with_name = [] 99 | without_name = [] 100 | for key, param in model.named_parameters(): 101 | if not param.requires_grad: 102 | continue 103 | 104 | in_key = False 105 | for n in name: 106 | in_key = in_key | (n in key) 107 | 108 | if in_key: 109 | with_name.append(param) 110 | else: 111 | without_name.append(param) 112 | return with_name, without_name 113 | 114 | 115 | class GradReverse(Function): 116 | @staticmethod 117 | def forward(ctx, x, lambd=1.0): 118 | ctx.lambd = lambd 119 | return x.view_as(x) 120 | 121 | @staticmethod 122 | def backward(ctx, grad_output): 123 | return grad_output * -ctx.lambd, None 124 | 125 | 126 | def grad_reverse(x, lambd=1.0): 127 | return GradReverse.apply(x, lambd) 128 | 129 | 130 | # nn.functional 131 | 132 | 133 | def entropy(x, eps=1e-5): 134 | p = F.softmax(x, dim=-1) 135 | entropy = -torch.mean(torch.sum(p * torch.log(p + eps), 1)) 136 | return entropy 137 | 138 | 139 | def pseudo_mask(x, thres=0.95): 140 | prob = F.softmax(x, dim=1) 141 | max_prob, pred = prob.max(dim=1) 142 | mask = max_prob > thres 143 | return mask 144 | 145 | 146 | def pseudo_label_loss(x, thres=0.95, aux=True, y=None, mask=None, num_class=10): 147 | if mask is None: 148 | mask = [True] * len(x) 149 | mask = torch.tensor(mask) 150 | # update mask 151 | prob = F.softmax(x, dim=1) 152 | max_prob, pred = prob.max(dim=1) 153 | mask[max_prob < thres] = False 154 | num_thres = mask.sum().item() 155 | 156 | # calculate loss 157 | out_thres, pred_thres = x[mask], pred[mask] 158 | if num_thres == 0: 159 | loss = torch.tensor(0) 160 | else: 161 | loss = F.cross_entropy(out_thres, pred_thres) 162 | 163 | if aux: 164 | num_select_per_class = [0] * num_class 165 | num_correct_per_class = [0] * num_class 166 | for i in range(num_class): 167 | num_select_per_class[i] += (pred_thres == i).sum().item() 168 | if y is not None: 169 | num_correct_per_class[i] += ( 170 | ((pred_thres == i) & (pred_thres.eq(y[mask]))).sum().item() 171 | ) 172 | 173 | if y is not None: 174 | num_correct = pred_thres.eq(y[mask]).sum().item() 175 | else: 176 | num_correct = -1 177 | 178 | ret_aux = { 179 | "num_select": num_thres, 180 | "num_correct": num_correct, 181 | "num_select_per_class": num_select_per_class, 182 | "num_correct_per_class": num_correct_per_class, 183 | "mask": mask, 184 | } 185 | return loss, ret_aux 186 | else: 187 | return loss 188 | 189 | 190 | # optim 191 | 192 | 193 | def lr_scheduler_invLR(optimizer, gamma=0.0001, power=0.75): 194 | def lmbda(iter): 195 | return (1 + gamma * iter) ** (-power) 196 | 197 | return torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lmbda) 198 | 199 | 200 | def get_lr(optimizer, g_id=0): 201 | return optimizer.param_groups[g_id]["lr"] 202 | 203 | 204 | # utils 205 | 206 | 207 | def copy_checkpoint( 208 | folder="./", filename="checkpoint.pth.tar", copyname="copy.pth.tar" 209 | ): 210 | shutil.copyfile(os.path.join(folder, filename), os.path.join(folder, copyname)) 211 | 212 | 213 | def save_checkpoint(state, is_best=False, folder="./", filename="checkpoint.pth.tar"): 214 | if not os.path.isdir(folder): 215 | os.mkdir(folder) 216 | torch.save(state, os.path.join(folder, filename)) 217 | if is_best: 218 | copy_checkpoint(folder, filename, "model_best.pth.tar") 219 | 220 | 221 | def load_state_dict(model, model_dict): 222 | model_dict = model.state_dict() 223 | updated_dict = {k: v for k, v in model_dict.items() if k in model_dict.keys()} 224 | model_dict.update(updated_dict) 225 | model.load_state_dict(model_dict) 226 | return len(updated_dict.keys()) 227 | 228 | 229 | def print_cuda_statistics(nvidia_smi=True, output=print): 230 | output(f"Python VERSION: {sys.version}") 231 | output(f"pytorch VERSION: {torch.__version__}") 232 | output(f"CUDA VERSION: {torch.version.cuda}") 233 | output(f"CUDNN VERSION: {torch.backends.cudnn.version()}") 234 | output(f"Device NAME: {torch.cuda.get_device_name(0)}") 235 | output(f"Number CUDA Devices: {torch.cuda.device_count()}") 236 | output(f"Available devices: {torch.cuda.device_count()}") 237 | output(f"current CUDA Device: {torch.cuda.current_device()}") 238 | 239 | if nvidia_smi: 240 | print("nvidia-smi:") 241 | call( 242 | [ 243 | "nvidia-smi", 244 | "--format=csv", 245 | "--query-gpu=index,name,driver_version,memory.total,memory.used,memory.free", 246 | ] 247 | ) 248 | 249 | 250 | def log_tensor(t, name="", print_tensor=False): 251 | print( 252 | f"Tensor {name}:\n\ttype: {t.type()}\n\tsize {t.shape}\n\tdim: {t.dim()}\n\tdevice: {t.device}\n\tnelement: {t.nelement()}\n\telem_size: {t.element_size()}\n\tsize in mem: {t.nelement() * t.element_size()} Bytes\n\tgrad_fn: {t.grad_fn}\n\tgrad: {t.grad}" 253 | ) 254 | if print_tensor: 255 | print(t) 256 | 257 | 258 | def model_params_num(model): 259 | return sum(torch.numel(parameter) for parameter in model.parameters()) 260 | 261 | 262 | def one_hot(label): 263 | N = label.size(0) 264 | num_classes = label.unique().size(0) 265 | one_hot = torch.zeros(N, num_classes).long() 266 | one_hot.scatter_( 267 | dim=1, 268 | index=torch.unsqueeze(label, dim=1), 269 | src=torch.ones(N, num_classes).long(), 270 | ) 271 | 272 | 273 | def top_k_for_each_class(pred, prob, num_class): 274 | ind = torch.arange(len(pred)).long() 275 | pred_ret = torch.zeros_like(pred).long().cuda() - 1 276 | for i in range(num_class): 277 | class_mask = pred == i 278 | num_c = class_mask.sum() 279 | num_c = class_mask.sum() 280 | if num_c == 0: 281 | continue 282 | prob_class = prob[class_mask] 283 | ind_class = ind[class_mask] 284 | prob_topk, ind_topk = prob_class.topk(min(5, num_c)) 285 | ind_topk = ind_class[ind_topk] 286 | pred_ret[ind_topk] = i 287 | return pred_ret 288 | 289 | 290 | # MIM 291 | 292 | 293 | class MomentumSoftmax: 294 | def __init__(self, num_class, m=1): 295 | self.softmax_vector = torch.zeros(num_class).detach() + 1.0 / num_class 296 | self.m = m 297 | self.num = m 298 | 299 | def update(self, mean_softmax, num=1): 300 | self.softmax_vector = ( 301 | (self.softmax_vector * self.num) + mean_softmax * num 302 | ) / (self.num + num) 303 | self.num += num 304 | 305 | def reset(self): 306 | # print(self.softmax_vector) 307 | self.num = self.m 308 | -------------------------------------------------------------------------------- /data/splits/office/dslr_unlabeled_9.txt: -------------------------------------------------------------------------------- 1 | dslr/images/back_pack/frame_0003.jpg 0 2 | dslr/images/back_pack/frame_0004.jpg 0 3 | dslr/images/back_pack/frame_0009.jpg 0 4 | dslr/images/bike/frame_0002.jpg 1 5 | dslr/images/bike/frame_0003.jpg 1 6 | dslr/images/bike/frame_0004.jpg 1 7 | dslr/images/bike/frame_0005.jpg 1 8 | dslr/images/bike/frame_0006.jpg 1 9 | dslr/images/bike/frame_0007.jpg 1 10 | dslr/images/bike/frame_0009.jpg 1 11 | dslr/images/bike/frame_0013.jpg 1 12 | dslr/images/bike/frame_0014.jpg 1 13 | dslr/images/bike/frame_0015.jpg 1 14 | dslr/images/bike/frame_0016.jpg 1 15 | dslr/images/bike/frame_0017.jpg 1 16 | dslr/images/bike_helmet/frame_0002.jpg 2 17 | dslr/images/bike_helmet/frame_0007.jpg 2 18 | dslr/images/bike_helmet/frame_0008.jpg 2 19 | dslr/images/bike_helmet/frame_0009.jpg 2 20 | dslr/images/bike_helmet/frame_0010.jpg 2 21 | dslr/images/bike_helmet/frame_0011.jpg 2 22 | dslr/images/bike_helmet/frame_0012.jpg 2 23 | dslr/images/bike_helmet/frame_0013.jpg 2 24 | dslr/images/bike_helmet/frame_0014.jpg 2 25 | dslr/images/bike_helmet/frame_0018.jpg 2 26 | dslr/images/bike_helmet/frame_0019.jpg 2 27 | dslr/images/bike_helmet/frame_0021.jpg 2 28 | dslr/images/bike_helmet/frame_0022.jpg 2 29 | dslr/images/bike_helmet/frame_0023.jpg 2 30 | dslr/images/bike_helmet/frame_0024.jpg 2 31 | dslr/images/bookcase/frame_0003.jpg 3 32 | dslr/images/bookcase/frame_0010.jpg 3 33 | dslr/images/bookcase/frame_0012.jpg 3 34 | dslr/images/bottle/frame_0001.jpg 4 35 | dslr/images/bottle/frame_0003.jpg 4 36 | dslr/images/bottle/frame_0004.jpg 4 37 | dslr/images/bottle/frame_0007.jpg 4 38 | dslr/images/bottle/frame_0010.jpg 4 39 | dslr/images/bottle/frame_0013.jpg 4 40 | dslr/images/bottle/frame_0015.jpg 4 41 | dslr/images/calculator/frame_0002.jpg 5 42 | dslr/images/calculator/frame_0007.jpg 5 43 | dslr/images/calculator/frame_0010.jpg 5 44 | dslr/images/desk_chair/frame_0002.jpg 6 45 | dslr/images/desk_chair/frame_0006.jpg 6 46 | dslr/images/desk_chair/frame_0009.jpg 6 47 | dslr/images/desk_chair/frame_0010.jpg 6 48 | dslr/images/desk_lamp/frame_0005.jpg 7 49 | dslr/images/desk_lamp/frame_0008.jpg 7 50 | dslr/images/desk_lamp/frame_0010.jpg 7 51 | dslr/images/desk_lamp/frame_0011.jpg 7 52 | dslr/images/desk_lamp/frame_0013.jpg 7 53 | dslr/images/desktop_computer/frame_0002.jpg 8 54 | dslr/images/desktop_computer/frame_0004.jpg 8 55 | dslr/images/desktop_computer/frame_0010.jpg 8 56 | dslr/images/desktop_computer/frame_0013.jpg 8 57 | dslr/images/desktop_computer/frame_0014.jpg 8 58 | dslr/images/desktop_computer/frame_0015.jpg 8 59 | dslr/images/file_cabinet/frame_0002.jpg 9 60 | dslr/images/file_cabinet/frame_0004.jpg 9 61 | dslr/images/file_cabinet/frame_0006.jpg 9 62 | dslr/images/file_cabinet/frame_0007.jpg 9 63 | dslr/images/file_cabinet/frame_0009.jpg 9 64 | dslr/images/file_cabinet/frame_0010.jpg 9 65 | dslr/images/headphones/frame_0002.jpg 10 66 | dslr/images/headphones/frame_0003.jpg 10 67 | dslr/images/headphones/frame_0005.jpg 10 68 | dslr/images/headphones/frame_0009.jpg 10 69 | dslr/images/keyboard/frame_0007.jpg 11 70 | dslr/images/laptop_computer/frame_0001.jpg 12 71 | dslr/images/laptop_computer/frame_0002.jpg 12 72 | dslr/images/laptop_computer/frame_0003.jpg 12 73 | dslr/images/laptop_computer/frame_0005.jpg 12 74 | dslr/images/laptop_computer/frame_0007.jpg 12 75 | dslr/images/laptop_computer/frame_0008.jpg 12 76 | dslr/images/laptop_computer/frame_0010.jpg 12 77 | dslr/images/laptop_computer/frame_0011.jpg 12 78 | dslr/images/laptop_computer/frame_0012.jpg 12 79 | dslr/images/laptop_computer/frame_0015.jpg 12 80 | dslr/images/laptop_computer/frame_0018.jpg 12 81 | dslr/images/laptop_computer/frame_0019.jpg 12 82 | dslr/images/laptop_computer/frame_0020.jpg 12 83 | dslr/images/laptop_computer/frame_0022.jpg 12 84 | dslr/images/laptop_computer/frame_0024.jpg 12 85 | dslr/images/letter_tray/frame_0001.jpg 13 86 | dslr/images/letter_tray/frame_0004.jpg 13 87 | dslr/images/letter_tray/frame_0008.jpg 13 88 | dslr/images/letter_tray/frame_0009.jpg 13 89 | dslr/images/letter_tray/frame_0014.jpg 13 90 | dslr/images/letter_tray/frame_0015.jpg 13 91 | dslr/images/letter_tray/frame_0016.jpg 13 92 | dslr/images/mobile_phone/frame_0001.jpg 14 93 | dslr/images/mobile_phone/frame_0002.jpg 14 94 | dslr/images/mobile_phone/frame_0004.jpg 14 95 | dslr/images/mobile_phone/frame_0005.jpg 14 96 | dslr/images/mobile_phone/frame_0006.jpg 14 97 | dslr/images/mobile_phone/frame_0007.jpg 14 98 | dslr/images/mobile_phone/frame_0008.jpg 14 99 | dslr/images/mobile_phone/frame_0009.jpg 14 100 | dslr/images/mobile_phone/frame_0010.jpg 14 101 | dslr/images/mobile_phone/frame_0012.jpg 14 102 | dslr/images/mobile_phone/frame_0013.jpg 14 103 | dslr/images/mobile_phone/frame_0014.jpg 14 104 | dslr/images/mobile_phone/frame_0016.jpg 14 105 | dslr/images/mobile_phone/frame_0017.jpg 14 106 | dslr/images/mobile_phone/frame_0018.jpg 14 107 | dslr/images/mobile_phone/frame_0019.jpg 14 108 | dslr/images/mobile_phone/frame_0020.jpg 14 109 | dslr/images/mobile_phone/frame_0021.jpg 14 110 | dslr/images/mobile_phone/frame_0022.jpg 14 111 | dslr/images/mobile_phone/frame_0023.jpg 14 112 | dslr/images/mobile_phone/frame_0025.jpg 14 113 | dslr/images/mobile_phone/frame_0031.jpg 14 114 | dslr/images/monitor/frame_0001.jpg 15 115 | dslr/images/monitor/frame_0004.jpg 15 116 | dslr/images/monitor/frame_0005.jpg 15 117 | dslr/images/monitor/frame_0006.jpg 15 118 | dslr/images/monitor/frame_0011.jpg 15 119 | dslr/images/monitor/frame_0012.jpg 15 120 | dslr/images/monitor/frame_0015.jpg 15 121 | dslr/images/monitor/frame_0016.jpg 15 122 | dslr/images/monitor/frame_0017.jpg 15 123 | dslr/images/monitor/frame_0018.jpg 15 124 | dslr/images/monitor/frame_0020.jpg 15 125 | dslr/images/monitor/frame_0021.jpg 15 126 | dslr/images/monitor/frame_0022.jpg 15 127 | dslr/images/mouse/frame_0007.jpg 16 128 | dslr/images/mouse/frame_0009.jpg 16 129 | dslr/images/mouse/frame_0011.jpg 16 130 | dslr/images/paper_notebook/frame_0010.jpg 18 131 | dslr/images/pen/frame_0002.jpg 19 132 | dslr/images/phone/frame_0004.jpg 20 133 | dslr/images/phone/frame_0005.jpg 20 134 | dslr/images/phone/frame_0007.jpg 20 135 | dslr/images/phone/frame_0013.jpg 20 136 | dslr/images/printer/frame_0005.jpg 21 137 | dslr/images/printer/frame_0006.jpg 21 138 | dslr/images/printer/frame_0007.jpg 21 139 | dslr/images/printer/frame_0008.jpg 21 140 | dslr/images/printer/frame_0009.jpg 21 141 | dslr/images/printer/frame_0010.jpg 21 142 | dslr/images/projector/frame_0001.jpg 22 143 | dslr/images/projector/frame_0002.jpg 22 144 | dslr/images/projector/frame_0003.jpg 22 145 | dslr/images/projector/frame_0004.jpg 22 146 | dslr/images/projector/frame_0005.jpg 22 147 | dslr/images/projector/frame_0008.jpg 22 148 | dslr/images/projector/frame_0012.jpg 22 149 | dslr/images/projector/frame_0015.jpg 22 150 | dslr/images/projector/frame_0016.jpg 22 151 | dslr/images/projector/frame_0017.jpg 22 152 | dslr/images/projector/frame_0018.jpg 22 153 | dslr/images/projector/frame_0019.jpg 22 154 | dslr/images/projector/frame_0020.jpg 22 155 | dslr/images/projector/frame_0021.jpg 22 156 | dslr/images/punchers/frame_0001.jpg 23 157 | dslr/images/punchers/frame_0002.jpg 23 158 | dslr/images/punchers/frame_0004.jpg 23 159 | dslr/images/punchers/frame_0006.jpg 23 160 | dslr/images/punchers/frame_0008.jpg 23 161 | dslr/images/punchers/frame_0011.jpg 23 162 | dslr/images/punchers/frame_0012.jpg 23 163 | dslr/images/punchers/frame_0013.jpg 23 164 | dslr/images/punchers/frame_0017.jpg 23 165 | dslr/images/ring_binder/frame_0006.jpg 24 166 | dslr/images/scissors/frame_0002.jpg 26 167 | dslr/images/scissors/frame_0004.jpg 26 168 | dslr/images/scissors/frame_0006.jpg 26 169 | dslr/images/scissors/frame_0009.jpg 26 170 | dslr/images/scissors/frame_0010.jpg 26 171 | dslr/images/scissors/frame_0012.jpg 26 172 | dslr/images/scissors/frame_0013.jpg 26 173 | dslr/images/scissors/frame_0014.jpg 26 174 | dslr/images/scissors/frame_0018.jpg 26 175 | dslr/images/speaker/frame_0001.jpg 27 176 | dslr/images/speaker/frame_0002.jpg 27 177 | dslr/images/speaker/frame_0003.jpg 27 178 | dslr/images/speaker/frame_0004.jpg 27 179 | dslr/images/speaker/frame_0005.jpg 27 180 | dslr/images/speaker/frame_0008.jpg 27 181 | dslr/images/speaker/frame_0009.jpg 27 182 | dslr/images/speaker/frame_0011.jpg 27 183 | dslr/images/speaker/frame_0014.jpg 27 184 | dslr/images/speaker/frame_0015.jpg 27 185 | dslr/images/speaker/frame_0017.jpg 27 186 | dslr/images/speaker/frame_0018.jpg 27 187 | dslr/images/speaker/frame_0022.jpg 27 188 | dslr/images/speaker/frame_0023.jpg 27 189 | dslr/images/speaker/frame_0024.jpg 27 190 | dslr/images/speaker/frame_0025.jpg 27 191 | dslr/images/speaker/frame_0026.jpg 27 192 | dslr/images/stapler/frame_0002.jpg 28 193 | dslr/images/stapler/frame_0003.jpg 28 194 | dslr/images/stapler/frame_0004.jpg 28 195 | dslr/images/stapler/frame_0005.jpg 28 196 | dslr/images/stapler/frame_0007.jpg 28 197 | dslr/images/stapler/frame_0008.jpg 28 198 | dslr/images/stapler/frame_0009.jpg 28 199 | dslr/images/stapler/frame_0010.jpg 28 200 | dslr/images/stapler/frame_0011.jpg 28 201 | dslr/images/stapler/frame_0014.jpg 28 202 | dslr/images/stapler/frame_0020.jpg 28 203 | dslr/images/stapler/frame_0021.jpg 28 204 | dslr/images/tape_dispenser/frame_0002.jpg 29 205 | dslr/images/tape_dispenser/frame_0006.jpg 29 206 | dslr/images/tape_dispenser/frame_0007.jpg 29 207 | dslr/images/tape_dispenser/frame_0008.jpg 29 208 | dslr/images/tape_dispenser/frame_0009.jpg 29 209 | dslr/images/tape_dispenser/frame_0011.jpg 29 210 | dslr/images/tape_dispenser/frame_0013.jpg 29 211 | dslr/images/tape_dispenser/frame_0014.jpg 29 212 | dslr/images/tape_dispenser/frame_0017.jpg 29 213 | dslr/images/tape_dispenser/frame_0018.jpg 29 214 | dslr/images/tape_dispenser/frame_0019.jpg 29 215 | dslr/images/tape_dispenser/frame_0020.jpg 29 216 | dslr/images/tape_dispenser/frame_0021.jpg 29 217 | dslr/images/trash_can/frame_0001.jpg 30 218 | dslr/images/trash_can/frame_0002.jpg 30 219 | dslr/images/trash_can/frame_0003.jpg 30 220 | dslr/images/trash_can/frame_0004.jpg 30 221 | dslr/images/trash_can/frame_0007.jpg 30 222 | dslr/images/trash_can/frame_0009.jpg 30 223 | -------------------------------------------------------------------------------- /data/splits/office/amazon_labeled_7.txt: -------------------------------------------------------------------------------- 1 | amazon/images/back_pack/frame_0001.jpg 0 2 | amazon/images/back_pack/frame_0005.jpg 0 3 | amazon/images/back_pack/frame_0012.jpg 0 4 | amazon/images/back_pack/frame_0015.jpg 0 5 | amazon/images/back_pack/frame_0057.jpg 0 6 | amazon/images/back_pack/frame_0075.jpg 0 7 | amazon/images/back_pack/frame_0086.jpg 0 8 | amazon/images/bike/frame_0003.jpg 1 9 | amazon/images/bike/frame_0004.jpg 1 10 | amazon/images/bike/frame_0011.jpg 1 11 | amazon/images/bike/frame_0013.jpg 1 12 | amazon/images/bike/frame_0031.jpg 1 13 | amazon/images/bike/frame_0046.jpg 1 14 | amazon/images/bike/frame_0078.jpg 1 15 | amazon/images/bike_helmet/frame_0012.jpg 2 16 | amazon/images/bike_helmet/frame_0015.jpg 2 17 | amazon/images/bike_helmet/frame_0020.jpg 2 18 | amazon/images/bike_helmet/frame_0024.jpg 2 19 | amazon/images/bike_helmet/frame_0045.jpg 2 20 | amazon/images/bike_helmet/frame_0060.jpg 2 21 | amazon/images/bike_helmet/frame_0062.jpg 2 22 | amazon/images/bookcase/frame_0002.jpg 3 23 | amazon/images/bookcase/frame_0009.jpg 3 24 | amazon/images/bookcase/frame_0032.jpg 3 25 | amazon/images/bookcase/frame_0060.jpg 3 26 | amazon/images/bookcase/frame_0063.jpg 3 27 | amazon/images/bookcase/frame_0065.jpg 3 28 | amazon/images/bookcase/frame_0070.jpg 3 29 | amazon/images/bottle/frame_0003.jpg 4 30 | amazon/images/bottle/frame_0005.jpg 4 31 | amazon/images/bottle/frame_0006.jpg 4 32 | amazon/images/bottle/frame_0018.jpg 4 33 | amazon/images/bottle/frame_0027.jpg 4 34 | amazon/images/bottle/frame_0032.jpg 4 35 | amazon/images/bottle/frame_0033.jpg 4 36 | amazon/images/calculator/frame_0009.jpg 5 37 | amazon/images/calculator/frame_0032.jpg 5 38 | amazon/images/calculator/frame_0035.jpg 5 39 | amazon/images/calculator/frame_0039.jpg 5 40 | amazon/images/calculator/frame_0046.jpg 5 41 | amazon/images/calculator/frame_0062.jpg 5 42 | amazon/images/calculator/frame_0083.jpg 5 43 | amazon/images/desk_chair/frame_0003.jpg 6 44 | amazon/images/desk_chair/frame_0026.jpg 6 45 | amazon/images/desk_chair/frame_0059.jpg 6 46 | amazon/images/desk_chair/frame_0066.jpg 6 47 | amazon/images/desk_chair/frame_0068.jpg 6 48 | amazon/images/desk_chair/frame_0084.jpg 6 49 | amazon/images/desk_chair/frame_0086.jpg 6 50 | amazon/images/desk_lamp/frame_0001.jpg 7 51 | amazon/images/desk_lamp/frame_0010.jpg 7 52 | amazon/images/desk_lamp/frame_0019.jpg 7 53 | amazon/images/desk_lamp/frame_0043.jpg 7 54 | amazon/images/desk_lamp/frame_0061.jpg 7 55 | amazon/images/desk_lamp/frame_0085.jpg 7 56 | amazon/images/desk_lamp/frame_0091.jpg 7 57 | amazon/images/desktop_computer/frame_0007.jpg 8 58 | amazon/images/desktop_computer/frame_0010.jpg 8 59 | amazon/images/desktop_computer/frame_0021.jpg 8 60 | amazon/images/desktop_computer/frame_0022.jpg 8 61 | amazon/images/desktop_computer/frame_0049.jpg 8 62 | amazon/images/desktop_computer/frame_0064.jpg 8 63 | amazon/images/desktop_computer/frame_0076.jpg 8 64 | amazon/images/file_cabinet/frame_0004.jpg 9 65 | amazon/images/file_cabinet/frame_0010.jpg 9 66 | amazon/images/file_cabinet/frame_0015.jpg 9 67 | amazon/images/file_cabinet/frame_0019.jpg 9 68 | amazon/images/file_cabinet/frame_0028.jpg 9 69 | amazon/images/file_cabinet/frame_0045.jpg 9 70 | amazon/images/file_cabinet/frame_0072.jpg 9 71 | amazon/images/headphones/frame_0006.jpg 10 72 | amazon/images/headphones/frame_0019.jpg 10 73 | amazon/images/headphones/frame_0040.jpg 10 74 | amazon/images/headphones/frame_0054.jpg 10 75 | amazon/images/headphones/frame_0059.jpg 10 76 | amazon/images/headphones/frame_0068.jpg 10 77 | amazon/images/headphones/frame_0086.jpg 10 78 | amazon/images/keyboard/frame_0006.jpg 11 79 | amazon/images/keyboard/frame_0020.jpg 11 80 | amazon/images/keyboard/frame_0023.jpg 11 81 | amazon/images/keyboard/frame_0035.jpg 11 82 | amazon/images/keyboard/frame_0036.jpg 11 83 | amazon/images/keyboard/frame_0039.jpg 11 84 | amazon/images/keyboard/frame_0085.jpg 11 85 | amazon/images/laptop_computer/frame_0006.jpg 12 86 | amazon/images/laptop_computer/frame_0020.jpg 12 87 | amazon/images/laptop_computer/frame_0050.jpg 12 88 | amazon/images/laptop_computer/frame_0060.jpg 12 89 | amazon/images/laptop_computer/frame_0073.jpg 12 90 | amazon/images/laptop_computer/frame_0098.jpg 12 91 | amazon/images/laptop_computer/frame_0100.jpg 12 92 | amazon/images/letter_tray/frame_0006.jpg 13 93 | amazon/images/letter_tray/frame_0044.jpg 13 94 | amazon/images/letter_tray/frame_0045.jpg 13 95 | amazon/images/letter_tray/frame_0060.jpg 13 96 | amazon/images/letter_tray/frame_0061.jpg 13 97 | amazon/images/letter_tray/frame_0064.jpg 13 98 | amazon/images/letter_tray/frame_0075.jpg 13 99 | amazon/images/mobile_phone/frame_0022.jpg 14 100 | amazon/images/mobile_phone/frame_0057.jpg 14 101 | amazon/images/mobile_phone/frame_0061.jpg 14 102 | amazon/images/mobile_phone/frame_0067.jpg 14 103 | amazon/images/mobile_phone/frame_0077.jpg 14 104 | amazon/images/mobile_phone/frame_0094.jpg 14 105 | amazon/images/mobile_phone/frame_0100.jpg 14 106 | amazon/images/monitor/frame_0016.jpg 15 107 | amazon/images/monitor/frame_0024.jpg 15 108 | amazon/images/monitor/frame_0036.jpg 15 109 | amazon/images/monitor/frame_0038.jpg 15 110 | amazon/images/monitor/frame_0054.jpg 15 111 | amazon/images/monitor/frame_0056.jpg 15 112 | amazon/images/monitor/frame_0057.jpg 15 113 | amazon/images/mouse/frame_0014.jpg 16 114 | amazon/images/mouse/frame_0016.jpg 16 115 | amazon/images/mouse/frame_0049.jpg 16 116 | amazon/images/mouse/frame_0063.jpg 16 117 | amazon/images/mouse/frame_0068.jpg 16 118 | amazon/images/mouse/frame_0085.jpg 16 119 | amazon/images/mouse/frame_0099.jpg 16 120 | amazon/images/mug/frame_0014.jpg 17 121 | amazon/images/mug/frame_0021.jpg 17 122 | amazon/images/mug/frame_0025.jpg 17 123 | amazon/images/mug/frame_0033.jpg 17 124 | amazon/images/mug/frame_0045.jpg 17 125 | amazon/images/mug/frame_0083.jpg 17 126 | amazon/images/mug/frame_0090.jpg 17 127 | amazon/images/paper_notebook/frame_0010.jpg 18 128 | amazon/images/paper_notebook/frame_0020.jpg 18 129 | amazon/images/paper_notebook/frame_0035.jpg 18 130 | amazon/images/paper_notebook/frame_0042.jpg 18 131 | amazon/images/paper_notebook/frame_0058.jpg 18 132 | amazon/images/paper_notebook/frame_0075.jpg 18 133 | amazon/images/paper_notebook/frame_0093.jpg 18 134 | amazon/images/pen/frame_0005.jpg 19 135 | amazon/images/pen/frame_0007.jpg 19 136 | amazon/images/pen/frame_0011.jpg 19 137 | amazon/images/pen/frame_0028.jpg 19 138 | amazon/images/pen/frame_0029.jpg 19 139 | amazon/images/pen/frame_0037.jpg 19 140 | amazon/images/pen/frame_0051.jpg 19 141 | amazon/images/phone/frame_0009.jpg 20 142 | amazon/images/phone/frame_0012.jpg 20 143 | amazon/images/phone/frame_0040.jpg 20 144 | amazon/images/phone/frame_0041.jpg 20 145 | amazon/images/phone/frame_0059.jpg 20 146 | amazon/images/phone/frame_0065.jpg 20 147 | amazon/images/phone/frame_0090.jpg 20 148 | amazon/images/printer/frame_0010.jpg 21 149 | amazon/images/printer/frame_0013.jpg 21 150 | amazon/images/printer/frame_0026.jpg 21 151 | amazon/images/printer/frame_0033.jpg 21 152 | amazon/images/printer/frame_0055.jpg 21 153 | amazon/images/printer/frame_0075.jpg 21 154 | amazon/images/printer/frame_0089.jpg 21 155 | amazon/images/projector/frame_0025.jpg 22 156 | amazon/images/projector/frame_0031.jpg 22 157 | amazon/images/projector/frame_0047.jpg 22 158 | amazon/images/projector/frame_0051.jpg 22 159 | amazon/images/projector/frame_0059.jpg 22 160 | amazon/images/projector/frame_0065.jpg 22 161 | amazon/images/projector/frame_0091.jpg 22 162 | amazon/images/punchers/frame_0023.jpg 23 163 | amazon/images/punchers/frame_0027.jpg 23 164 | amazon/images/punchers/frame_0039.jpg 23 165 | amazon/images/punchers/frame_0054.jpg 23 166 | amazon/images/punchers/frame_0066.jpg 23 167 | amazon/images/punchers/frame_0075.jpg 23 168 | amazon/images/punchers/frame_0090.jpg 23 169 | amazon/images/ring_binder/frame_0008.jpg 24 170 | amazon/images/ring_binder/frame_0020.jpg 24 171 | amazon/images/ring_binder/frame_0046.jpg 24 172 | amazon/images/ring_binder/frame_0061.jpg 24 173 | amazon/images/ring_binder/frame_0064.jpg 24 174 | amazon/images/ring_binder/frame_0069.jpg 24 175 | amazon/images/ring_binder/frame_0071.jpg 24 176 | amazon/images/ruler/frame_0007.jpg 25 177 | amazon/images/ruler/frame_0009.jpg 25 178 | amazon/images/ruler/frame_0017.jpg 25 179 | amazon/images/ruler/frame_0018.jpg 25 180 | amazon/images/ruler/frame_0019.jpg 25 181 | amazon/images/ruler/frame_0022.jpg 25 182 | amazon/images/ruler/frame_0043.jpg 25 183 | amazon/images/scissors/frame_0001.jpg 26 184 | amazon/images/scissors/frame_0008.jpg 26 185 | amazon/images/scissors/frame_0022.jpg 26 186 | amazon/images/scissors/frame_0042.jpg 26 187 | amazon/images/scissors/frame_0086.jpg 26 188 | amazon/images/scissors/frame_0087.jpg 26 189 | amazon/images/scissors/frame_0092.jpg 26 190 | amazon/images/speaker/frame_0006.jpg 27 191 | amazon/images/speaker/frame_0012.jpg 27 192 | amazon/images/speaker/frame_0019.jpg 27 193 | amazon/images/speaker/frame_0028.jpg 27 194 | amazon/images/speaker/frame_0056.jpg 27 195 | amazon/images/speaker/frame_0082.jpg 27 196 | amazon/images/speaker/frame_0098.jpg 27 197 | amazon/images/stapler/frame_0027.jpg 28 198 | amazon/images/stapler/frame_0036.jpg 28 199 | amazon/images/stapler/frame_0042.jpg 28 200 | amazon/images/stapler/frame_0049.jpg 28 201 | amazon/images/stapler/frame_0051.jpg 28 202 | amazon/images/stapler/frame_0087.jpg 28 203 | amazon/images/stapler/frame_0095.jpg 28 204 | amazon/images/tape_dispenser/frame_0039.jpg 29 205 | amazon/images/tape_dispenser/frame_0041.jpg 29 206 | amazon/images/tape_dispenser/frame_0055.jpg 29 207 | amazon/images/tape_dispenser/frame_0069.jpg 29 208 | amazon/images/tape_dispenser/frame_0074.jpg 29 209 | amazon/images/tape_dispenser/frame_0081.jpg 29 210 | amazon/images/tape_dispenser/frame_0088.jpg 29 211 | amazon/images/trash_can/frame_0006.jpg 30 212 | amazon/images/trash_can/frame_0017.jpg 30 213 | amazon/images/trash_can/frame_0018.jpg 30 214 | amazon/images/trash_can/frame_0020.jpg 30 215 | amazon/images/trash_can/frame_0035.jpg 30 216 | amazon/images/trash_can/frame_0049.jpg 30 217 | amazon/images/trash_can/frame_0054.jpg 30 218 | --------------------------------------------------------------------------------