├── README.md ├── data ├── office-home-pda │ ├── Art.txt │ ├── Art_shared.txt │ ├── Clipart.txt │ ├── Clipart_shared.txt │ ├── Product.txt │ ├── Product_shared.txt │ ├── Real_World.txt │ └── Real_World_shared.txt ├── office-home │ ├── Art.txt │ ├── Clipart.txt │ ├── Product.txt │ └── Real_World.txt ├── office │ ├── amazon_list.txt │ ├── dslr_list.txt │ └── webcam_list.txt └── visda-2017 │ ├── train_list.txt │ └── validation_list.txt └── pytorch ├── __init__.py ├── alexnet.py ├── data_list.py ├── loss.py ├── lr_schedule.py ├── network.py ├── pre_process.py ├── pre_process_visda.py ├── train_image_office.py ├── train_image_visda.py └── utils.py /README.md: -------------------------------------------------------------------------------- 1 | # MCC 2 | Code Release for "Minimum Class Confusion for Versatile Domain Adaptation"(ECCV2020) 3 | ## Dataset 4 | ### Office-31 5 | Office-31 dataset can be found [here](https://people.eecs.berkeley.edu/~jhoffman/domainadapt/). 6 | 7 | ### Office-Home 8 | Office-Home dataset can be found [here](http://hemanthdv.org/OfficeHome-Dataset/). 9 | 10 | ### VisDA-2017 11 | VisDA 2017 dataset can be found [here](https://github.com/VisionLearningGroup/taskcv-2017-public) in the classification track. 12 | 13 | ## Training 14 | ### Unsupervised DA 15 | ``` 16 | cd pytorch 17 | python train_image_office.py --gpu_id 0 --net ResNet50 --dset office --s_dset_path ../data/office/amazon_list.txt --t_dset_path ../data/office/webcam_list.txt --output_dir mcc-uda-office 18 | python train_image_visda.py --gpu_id 4 --net ResNet101 --dset visda --s_dset_path ../data/visda-2017/train_list.txt --t_dset_path ../data/visda-2017/validation_list.txt --output_dir mcc-uda-visda 19 | ``` 20 | ## Contact 21 | If you have any problem about our code, feel free to contact jiny18@mails.tsinghua.edu.cn 22 | or describe your problem in Issues. -------------------------------------------------------------------------------- /data/office-home-pda/Art_shared.txt: -------------------------------------------------------------------------------- 1 | /data/office-home/images/Art/Drill/00014.jpg 16 2 | /data/office-home/images/Art/Drill/00005.jpg 16 3 | /data/office-home/images/Art/Drill/00012.jpg 16 4 | /data/office-home/images/Art/Drill/00004.jpg 16 5 | /data/office-home/images/Art/Drill/00009.jpg 16 6 | /data/office-home/images/Art/Drill/00010.jpg 16 7 | /data/office-home/images/Art/Drill/00001.jpg 16 8 | /data/office-home/images/Art/Drill/00002.jpg 16 9 | /data/office-home/images/Art/Drill/00003.jpg 16 10 | /data/office-home/images/Art/Drill/00015.jpg 16 11 | /data/office-home/images/Art/Drill/00011.jpg 16 12 | /data/office-home/images/Art/Drill/00013.jpg 16 13 | /data/office-home/images/Art/Drill/00008.jpg 16 14 | /data/office-home/images/Art/Drill/00006.jpg 16 15 | /data/office-home/images/Art/Drill/00007.jpg 16 16 | /data/office-home/images/Art/Exit_Sign/00014.jpg 18 17 | /data/office-home/images/Art/Exit_Sign/00005.jpg 18 18 | /data/office-home/images/Art/Exit_Sign/00012.jpg 18 19 | /data/office-home/images/Art/Exit_Sign/00004.jpg 18 20 | /data/office-home/images/Art/Exit_Sign/00016.jpg 18 21 | /data/office-home/images/Art/Exit_Sign/00020.jpg 18 22 | /data/office-home/images/Art/Exit_Sign/00009.jpg 18 23 | /data/office-home/images/Art/Exit_Sign/00010.jpg 18 24 | /data/office-home/images/Art/Exit_Sign/00021.jpg 18 25 | /data/office-home/images/Art/Exit_Sign/00001.jpg 18 26 | /data/office-home/images/Art/Exit_Sign/00002.jpg 18 27 | /data/office-home/images/Art/Exit_Sign/00018.jpg 18 28 | /data/office-home/images/Art/Exit_Sign/00019.jpg 18 29 | /data/office-home/images/Art/Exit_Sign/00003.jpg 18 30 | /data/office-home/images/Art/Exit_Sign/00017.jpg 18 31 | /data/office-home/images/Art/Exit_Sign/00015.jpg 18 32 | /data/office-home/images/Art/Exit_Sign/00011.jpg 18 33 | /data/office-home/images/Art/Exit_Sign/00013.jpg 18 34 | /data/office-home/images/Art/Exit_Sign/00008.jpg 18 35 | /data/office-home/images/Art/Exit_Sign/00006.jpg 18 36 | /data/office-home/images/Art/Exit_Sign/00007.jpg 18 37 | /data/office-home/images/Art/Bottle/00014.jpg 5 38 | /data/office-home/images/Art/Bottle/00027.jpg 5 39 | /data/office-home/images/Art/Bottle/00036.jpg 5 40 | /data/office-home/images/Art/Bottle/00047.jpg 5 41 | /data/office-home/images/Art/Bottle/00033.jpg 5 42 | /data/office-home/images/Art/Bottle/00005.jpg 5 43 | /data/office-home/images/Art/Bottle/00026.jpg 5 44 | /data/office-home/images/Art/Bottle/00076.jpg 5 45 | /data/office-home/images/Art/Bottle/00097.jpg 5 46 | /data/office-home/images/Art/Bottle/00064.jpg 5 47 | /data/office-home/images/Art/Bottle/00093.jpg 5 48 | /data/office-home/images/Art/Bottle/00086.jpg 5 49 | /data/office-home/images/Art/Bottle/00096.jpg 5 50 | /data/office-home/images/Art/Bottle/00071.jpg 5 51 | /data/office-home/images/Art/Bottle/00012.jpg 5 52 | /data/office-home/images/Art/Bottle/00070.jpg 5 53 | /data/office-home/images/Art/Bottle/00004.jpg 5 54 | /data/office-home/images/Art/Bottle/00044.jpg 5 55 | /data/office-home/images/Art/Bottle/00098.jpg 5 56 | /data/office-home/images/Art/Bottle/00016.jpg 5 57 | /data/office-home/images/Art/Bottle/00041.jpg 5 58 | /data/office-home/images/Art/Bottle/00020.jpg 5 59 | /data/office-home/images/Art/Bottle/00052.jpg 5 60 | /data/office-home/images/Art/Bottle/00084.jpg 5 61 | /data/office-home/images/Art/Bottle/00081.jpg 5 62 | /data/office-home/images/Art/Bottle/00049.jpg 5 63 | /data/office-home/images/Art/Bottle/00089.jpg 5 64 | /data/office-home/images/Art/Bottle/00022.jpg 5 65 | /data/office-home/images/Art/Bottle/00025.jpg 5 66 | /data/office-home/images/Art/Bottle/00046.jpg 5 67 | /data/office-home/images/Art/Bottle/00060.jpg 5 68 | /data/office-home/images/Art/Bottle/00074.jpg 5 69 | /data/office-home/images/Art/Bottle/00051.jpg 5 70 | /data/office-home/images/Art/Bottle/00075.jpg 5 71 | /data/office-home/images/Art/Bottle/00009.jpg 5 72 | /data/office-home/images/Art/Bottle/00023.jpg 5 73 | /data/office-home/images/Art/Bottle/00079.jpg 5 74 | /data/office-home/images/Art/Bottle/00078.jpg 5 75 | /data/office-home/images/Art/Bottle/00068.jpg 5 76 | /data/office-home/images/Art/Bottle/00029.jpg 5 77 | /data/office-home/images/Art/Bottle/00080.jpg 5 78 | /data/office-home/images/Art/Bottle/00043.jpg 5 79 | /data/office-home/images/Art/Bottle/00057.jpg 5 80 | /data/office-home/images/Art/Bottle/00066.jpg 5 81 | /data/office-home/images/Art/Bottle/00077.jpg 5 82 | /data/office-home/images/Art/Bottle/00048.jpg 5 83 | /data/office-home/images/Art/Bottle/00058.jpg 5 84 | /data/office-home/images/Art/Bottle/00059.jpg 5 85 | /data/office-home/images/Art/Bottle/00010.jpg 5 86 | /data/office-home/images/Art/Bottle/00082.jpg 5 87 | /data/office-home/images/Art/Bottle/00083.jpg 5 88 | /data/office-home/images/Art/Bottle/00073.jpg 5 89 | /data/office-home/images/Art/Bottle/00021.jpg 5 90 | /data/office-home/images/Art/Bottle/00094.jpg 5 91 | /data/office-home/images/Art/Bottle/00001.jpg 5 92 | /data/office-home/images/Art/Bottle/00067.jpg 5 93 | /data/office-home/images/Art/Bottle/00002.jpg 5 94 | /data/office-home/images/Art/Bottle/00065.jpg 5 95 | /data/office-home/images/Art/Bottle/00056.jpg 5 96 | /data/office-home/images/Art/Bottle/00063.jpg 5 97 | /data/office-home/images/Art/Bottle/00018.jpg 5 98 | /data/office-home/images/Art/Bottle/00095.jpg 5 99 | /data/office-home/images/Art/Bottle/00039.jpg 5 100 | /data/office-home/images/Art/Bottle/00019.jpg 5 101 | /data/office-home/images/Art/Bottle/00028.jpg 5 102 | /data/office-home/images/Art/Bottle/00053.jpg 5 103 | /data/office-home/images/Art/Bottle/00062.jpg 5 104 | /data/office-home/images/Art/Bottle/00091.jpg 5 105 | /data/office-home/images/Art/Bottle/00032.jpg 5 106 | /data/office-home/images/Art/Bottle/00040.jpg 5 107 | /data/office-home/images/Art/Bottle/00003.jpg 5 108 | /data/office-home/images/Art/Bottle/00038.jpg 5 109 | /data/office-home/images/Art/Bottle/00035.jpg 5 110 | /data/office-home/images/Art/Bottle/00087.jpg 5 111 | /data/office-home/images/Art/Bottle/00072.jpg 5 112 | /data/office-home/images/Art/Bottle/00090.jpg 5 113 | /data/office-home/images/Art/Bottle/00017.jpg 5 114 | /data/office-home/images/Art/Bottle/00037.jpg 5 115 | /data/office-home/images/Art/Bottle/00045.jpg 5 116 | /data/office-home/images/Art/Bottle/00015.jpg 5 117 | /data/office-home/images/Art/Bottle/00011.jpg 5 118 | /data/office-home/images/Art/Bottle/00061.jpg 5 119 | /data/office-home/images/Art/Bottle/00088.jpg 5 120 | /data/office-home/images/Art/Bottle/00013.jpg 5 121 | /data/office-home/images/Art/Bottle/00092.jpg 5 122 | /data/office-home/images/Art/Bottle/00055.jpg 5 123 | /data/office-home/images/Art/Bottle/00085.jpg 5 124 | /data/office-home/images/Art/Bottle/00008.jpg 5 125 | /data/office-home/images/Art/Bottle/00030.jpg 5 126 | /data/office-home/images/Art/Bottle/00006.jpg 5 127 | /data/office-home/images/Art/Bottle/00007.jpg 5 128 | /data/office-home/images/Art/Bottle/00024.jpg 5 129 | /data/office-home/images/Art/Bottle/00050.jpg 5 130 | /data/office-home/images/Art/Bottle/00034.jpg 5 131 | /data/office-home/images/Art/Bottle/00099.jpg 5 132 | /data/office-home/images/Art/Bottle/00054.jpg 5 133 | /data/office-home/images/Art/Bottle/00069.jpg 5 134 | /data/office-home/images/Art/Bottle/00031.jpg 5 135 | /data/office-home/images/Art/Bottle/00042.jpg 5 136 | /data/office-home/images/Art/Computer/00014.jpg 12 137 | /data/office-home/images/Art/Computer/00027.jpg 12 138 | /data/office-home/images/Art/Computer/00036.jpg 12 139 | /data/office-home/images/Art/Computer/00033.jpg 12 140 | /data/office-home/images/Art/Computer/00005.jpg 12 141 | /data/office-home/images/Art/Computer/00026.jpg 12 142 | /data/office-home/images/Art/Computer/00012.jpg 12 143 | /data/office-home/images/Art/Computer/00004.jpg 12 144 | /data/office-home/images/Art/Computer/00044.jpg 12 145 | /data/office-home/images/Art/Computer/00016.jpg 12 146 | /data/office-home/images/Art/Computer/00041.jpg 12 147 | /data/office-home/images/Art/Computer/00020.jpg 12 148 | /data/office-home/images/Art/Computer/00022.jpg 12 149 | /data/office-home/images/Art/Computer/00025.jpg 12 150 | /data/office-home/images/Art/Computer/00009.jpg 12 151 | /data/office-home/images/Art/Computer/00023.jpg 12 152 | /data/office-home/images/Art/Computer/00029.jpg 12 153 | /data/office-home/images/Art/Computer/00043.jpg 12 154 | /data/office-home/images/Art/Computer/00010.jpg 12 155 | /data/office-home/images/Art/Computer/00021.jpg 12 156 | /data/office-home/images/Art/Computer/00001.jpg 12 157 | /data/office-home/images/Art/Computer/00002.jpg 12 158 | /data/office-home/images/Art/Computer/00018.jpg 12 159 | /data/office-home/images/Art/Computer/00039.jpg 12 160 | /data/office-home/images/Art/Computer/00019.jpg 12 161 | /data/office-home/images/Art/Computer/00028.jpg 12 162 | /data/office-home/images/Art/Computer/00032.jpg 12 163 | /data/office-home/images/Art/Computer/00040.jpg 12 164 | /data/office-home/images/Art/Computer/00003.jpg 12 165 | /data/office-home/images/Art/Computer/00038.jpg 12 166 | /data/office-home/images/Art/Computer/00035.jpg 12 167 | /data/office-home/images/Art/Computer/00017.jpg 12 168 | /data/office-home/images/Art/Computer/00037.jpg 12 169 | /data/office-home/images/Art/Computer/00015.jpg 12 170 | /data/office-home/images/Art/Computer/00011.jpg 12 171 | /data/office-home/images/Art/Computer/00013.jpg 12 172 | /data/office-home/images/Art/Computer/00008.jpg 12 173 | /data/office-home/images/Art/Computer/00030.jpg 12 174 | /data/office-home/images/Art/Computer/00006.jpg 12 175 | /data/office-home/images/Art/Computer/00007.jpg 12 176 | /data/office-home/images/Art/Computer/00024.jpg 12 177 | /data/office-home/images/Art/Computer/00034.jpg 12 178 | /data/office-home/images/Art/Computer/00031.jpg 12 179 | /data/office-home/images/Art/Computer/00042.jpg 12 180 | /data/office-home/images/Art/File_Cabinet/00014.jpg 20 181 | /data/office-home/images/Art/File_Cabinet/00005.jpg 20 182 | /data/office-home/images/Art/File_Cabinet/00012.jpg 20 183 | /data/office-home/images/Art/File_Cabinet/00004.jpg 20 184 | /data/office-home/images/Art/File_Cabinet/00016.jpg 20 185 | /data/office-home/images/Art/File_Cabinet/00020.jpg 20 186 | /data/office-home/images/Art/File_Cabinet/00022.jpg 20 187 | /data/office-home/images/Art/File_Cabinet/00009.jpg 20 188 | /data/office-home/images/Art/File_Cabinet/00010.jpg 20 189 | /data/office-home/images/Art/File_Cabinet/00021.jpg 20 190 | /data/office-home/images/Art/File_Cabinet/00001.jpg 20 191 | /data/office-home/images/Art/File_Cabinet/00002.jpg 20 192 | /data/office-home/images/Art/File_Cabinet/00018.jpg 20 193 | /data/office-home/images/Art/File_Cabinet/00019.jpg 20 194 | /data/office-home/images/Art/File_Cabinet/00003.jpg 20 195 | /data/office-home/images/Art/File_Cabinet/00017.jpg 20 196 | /data/office-home/images/Art/File_Cabinet/00015.jpg 20 197 | /data/office-home/images/Art/File_Cabinet/00011.jpg 20 198 | /data/office-home/images/Art/File_Cabinet/00013.jpg 20 199 | /data/office-home/images/Art/File_Cabinet/00008.jpg 20 200 | /data/office-home/images/Art/File_Cabinet/00006.jpg 20 201 | /data/office-home/images/Art/File_Cabinet/00007.jpg 20 202 | /data/office-home/images/Art/Folder/00014.jpg 23 203 | /data/office-home/images/Art/Folder/00005.jpg 23 204 | /data/office-home/images/Art/Folder/00012.jpg 23 205 | /data/office-home/images/Art/Folder/00004.jpg 23 206 | /data/office-home/images/Art/Folder/00016.jpg 23 207 | /data/office-home/images/Art/Folder/00020.jpg 23 208 | /data/office-home/images/Art/Folder/00009.jpg 23 209 | /data/office-home/images/Art/Folder/00010.jpg 23 210 | /data/office-home/images/Art/Folder/00001.jpg 23 211 | /data/office-home/images/Art/Folder/00002.jpg 23 212 | /data/office-home/images/Art/Folder/00018.jpg 23 213 | /data/office-home/images/Art/Folder/00019.jpg 23 214 | /data/office-home/images/Art/Folder/00003.jpg 23 215 | /data/office-home/images/Art/Folder/00017.jpg 23 216 | /data/office-home/images/Art/Folder/00015.jpg 23 217 | /data/office-home/images/Art/Folder/00011.jpg 23 218 | /data/office-home/images/Art/Folder/00013.jpg 23 219 | /data/office-home/images/Art/Folder/00008.jpg 23 220 | /data/office-home/images/Art/Folder/00006.jpg 23 221 | /data/office-home/images/Art/Folder/00007.jpg 23 222 | /data/office-home/images/Art/Flipflops/00014.jpg 21 223 | /data/office-home/images/Art/Flipflops/00027.jpg 21 224 | /data/office-home/images/Art/Flipflops/00036.jpg 21 225 | /data/office-home/images/Art/Flipflops/00033.jpg 21 226 | /data/office-home/images/Art/Flipflops/00005.jpg 21 227 | /data/office-home/images/Art/Flipflops/00026.jpg 21 228 | /data/office-home/images/Art/Flipflops/00012.jpg 21 229 | /data/office-home/images/Art/Flipflops/00004.jpg 21 230 | /data/office-home/images/Art/Flipflops/00044.jpg 21 231 | /data/office-home/images/Art/Flipflops/00016.jpg 21 232 | /data/office-home/images/Art/Flipflops/00041.jpg 21 233 | /data/office-home/images/Art/Flipflops/00020.jpg 21 234 | /data/office-home/images/Art/Flipflops/00022.jpg 21 235 | /data/office-home/images/Art/Flipflops/00025.jpg 21 236 | /data/office-home/images/Art/Flipflops/00046.jpg 21 237 | /data/office-home/images/Art/Flipflops/00009.jpg 21 238 | /data/office-home/images/Art/Flipflops/00023.jpg 21 239 | /data/office-home/images/Art/Flipflops/00029.jpg 21 240 | /data/office-home/images/Art/Flipflops/00043.jpg 21 241 | /data/office-home/images/Art/Flipflops/00010.jpg 21 242 | /data/office-home/images/Art/Flipflops/00021.jpg 21 243 | /data/office-home/images/Art/Flipflops/00001.jpg 21 244 | /data/office-home/images/Art/Flipflops/00002.jpg 21 245 | /data/office-home/images/Art/Flipflops/00018.jpg 21 246 | /data/office-home/images/Art/Flipflops/00039.jpg 21 247 | /data/office-home/images/Art/Flipflops/00019.jpg 21 248 | /data/office-home/images/Art/Flipflops/00028.jpg 21 249 | /data/office-home/images/Art/Flipflops/00032.jpg 21 250 | /data/office-home/images/Art/Flipflops/00040.jpg 21 251 | /data/office-home/images/Art/Flipflops/00003.jpg 21 252 | /data/office-home/images/Art/Flipflops/00038.jpg 21 253 | /data/office-home/images/Art/Flipflops/00035.jpg 21 254 | /data/office-home/images/Art/Flipflops/00017.jpg 21 255 | /data/office-home/images/Art/Flipflops/00037.jpg 21 256 | /data/office-home/images/Art/Flipflops/00045.jpg 21 257 | /data/office-home/images/Art/Flipflops/00015.jpg 21 258 | /data/office-home/images/Art/Flipflops/00011.jpg 21 259 | /data/office-home/images/Art/Flipflops/00013.jpg 21 260 | /data/office-home/images/Art/Flipflops/00008.jpg 21 261 | /data/office-home/images/Art/Flipflops/00030.jpg 21 262 | /data/office-home/images/Art/Flipflops/00006.jpg 21 263 | /data/office-home/images/Art/Flipflops/00007.jpg 21 264 | /data/office-home/images/Art/Flipflops/00024.jpg 21 265 | /data/office-home/images/Art/Flipflops/00034.jpg 21 266 | /data/office-home/images/Art/Flipflops/00031.jpg 21 267 | /data/office-home/images/Art/Flipflops/00042.jpg 21 268 | /data/office-home/images/Art/Bed/00014.jpg 3 269 | /data/office-home/images/Art/Bed/00027.jpg 3 270 | /data/office-home/images/Art/Bed/00036.jpg 3 271 | /data/office-home/images/Art/Bed/00033.jpg 3 272 | /data/office-home/images/Art/Bed/00005.jpg 3 273 | /data/office-home/images/Art/Bed/00026.jpg 3 274 | /data/office-home/images/Art/Bed/00012.jpg 3 275 | /data/office-home/images/Art/Bed/00004.jpg 3 276 | /data/office-home/images/Art/Bed/00016.jpg 3 277 | /data/office-home/images/Art/Bed/00020.jpg 3 278 | /data/office-home/images/Art/Bed/00022.jpg 3 279 | /data/office-home/images/Art/Bed/00025.jpg 3 280 | /data/office-home/images/Art/Bed/00009.jpg 3 281 | /data/office-home/images/Art/Bed/00023.jpg 3 282 | /data/office-home/images/Art/Bed/00029.jpg 3 283 | /data/office-home/images/Art/Bed/00010.jpg 3 284 | /data/office-home/images/Art/Bed/00021.jpg 3 285 | /data/office-home/images/Art/Bed/00001.jpg 3 286 | /data/office-home/images/Art/Bed/00002.jpg 3 287 | /data/office-home/images/Art/Bed/00018.jpg 3 288 | /data/office-home/images/Art/Bed/00039.jpg 3 289 | /data/office-home/images/Art/Bed/00019.jpg 3 290 | /data/office-home/images/Art/Bed/00028.jpg 3 291 | /data/office-home/images/Art/Bed/00032.jpg 3 292 | /data/office-home/images/Art/Bed/00040.jpg 3 293 | /data/office-home/images/Art/Bed/00003.jpg 3 294 | /data/office-home/images/Art/Bed/00038.jpg 3 295 | /data/office-home/images/Art/Bed/00035.jpg 3 296 | /data/office-home/images/Art/Bed/00017.jpg 3 297 | /data/office-home/images/Art/Bed/00037.jpg 3 298 | /data/office-home/images/Art/Bed/00015.jpg 3 299 | /data/office-home/images/Art/Bed/00011.jpg 3 300 | /data/office-home/images/Art/Bed/00013.jpg 3 301 | /data/office-home/images/Art/Bed/00008.jpg 3 302 | /data/office-home/images/Art/Bed/00030.jpg 3 303 | /data/office-home/images/Art/Bed/00006.jpg 3 304 | /data/office-home/images/Art/Bed/00007.jpg 3 305 | /data/office-home/images/Art/Bed/00024.jpg 3 306 | /data/office-home/images/Art/Bed/00034.jpg 3 307 | /data/office-home/images/Art/Bed/00031.jpg 3 308 | /data/office-home/images/Art/Couch/00014.jpg 13 309 | /data/office-home/images/Art/Couch/00027.jpg 13 310 | /data/office-home/images/Art/Couch/00036.jpg 13 311 | /data/office-home/images/Art/Couch/00033.jpg 13 312 | /data/office-home/images/Art/Couch/00005.jpg 13 313 | /data/office-home/images/Art/Couch/00026.jpg 13 314 | /data/office-home/images/Art/Couch/00012.jpg 13 315 | /data/office-home/images/Art/Couch/00004.jpg 13 316 | /data/office-home/images/Art/Couch/00016.jpg 13 317 | /data/office-home/images/Art/Couch/00020.jpg 13 318 | /data/office-home/images/Art/Couch/00022.jpg 13 319 | /data/office-home/images/Art/Couch/00025.jpg 13 320 | /data/office-home/images/Art/Couch/00009.jpg 13 321 | /data/office-home/images/Art/Couch/00023.jpg 13 322 | /data/office-home/images/Art/Couch/00029.jpg 13 323 | /data/office-home/images/Art/Couch/00010.jpg 13 324 | /data/office-home/images/Art/Couch/00021.jpg 13 325 | /data/office-home/images/Art/Couch/00001.jpg 13 326 | /data/office-home/images/Art/Couch/00002.jpg 13 327 | /data/office-home/images/Art/Couch/00018.jpg 13 328 | /data/office-home/images/Art/Couch/00039.jpg 13 329 | /data/office-home/images/Art/Couch/00019.jpg 13 330 | /data/office-home/images/Art/Couch/00028.jpg 13 331 | /data/office-home/images/Art/Couch/00032.jpg 13 332 | /data/office-home/images/Art/Couch/00040.jpg 13 333 | /data/office-home/images/Art/Couch/00003.jpg 13 334 | /data/office-home/images/Art/Couch/00038.jpg 13 335 | /data/office-home/images/Art/Couch/00035.jpg 13 336 | /data/office-home/images/Art/Couch/00017.jpg 13 337 | /data/office-home/images/Art/Couch/00037.jpg 13 338 | /data/office-home/images/Art/Couch/00015.jpg 13 339 | /data/office-home/images/Art/Couch/00011.jpg 13 340 | /data/office-home/images/Art/Couch/00013.jpg 13 341 | /data/office-home/images/Art/Couch/00008.jpg 13 342 | /data/office-home/images/Art/Couch/00030.jpg 13 343 | /data/office-home/images/Art/Couch/00006.jpg 13 344 | /data/office-home/images/Art/Couch/00007.jpg 13 345 | /data/office-home/images/Art/Couch/00024.jpg 13 346 | /data/office-home/images/Art/Couch/00034.jpg 13 347 | /data/office-home/images/Art/Couch/00031.jpg 13 348 | /data/office-home/images/Art/Bike/00014.jpg 4 349 | /data/office-home/images/Art/Bike/00027.jpg 4 350 | /data/office-home/images/Art/Bike/00036.jpg 4 351 | /data/office-home/images/Art/Bike/00047.jpg 4 352 | /data/office-home/images/Art/Bike/00033.jpg 4 353 | /data/office-home/images/Art/Bike/00005.jpg 4 354 | /data/office-home/images/Art/Bike/00026.jpg 4 355 | /data/office-home/images/Art/Bike/00064.jpg 4 356 | /data/office-home/images/Art/Bike/00071.jpg 4 357 | /data/office-home/images/Art/Bike/00012.jpg 4 358 | /data/office-home/images/Art/Bike/00070.jpg 4 359 | /data/office-home/images/Art/Bike/00004.jpg 4 360 | /data/office-home/images/Art/Bike/00044.jpg 4 361 | /data/office-home/images/Art/Bike/00016.jpg 4 362 | /data/office-home/images/Art/Bike/00041.jpg 4 363 | /data/office-home/images/Art/Bike/00020.jpg 4 364 | /data/office-home/images/Art/Bike/00052.jpg 4 365 | /data/office-home/images/Art/Bike/00049.jpg 4 366 | /data/office-home/images/Art/Bike/00022.jpg 4 367 | /data/office-home/images/Art/Bike/00025.jpg 4 368 | /data/office-home/images/Art/Bike/00046.jpg 4 369 | /data/office-home/images/Art/Bike/00060.jpg 4 370 | /data/office-home/images/Art/Bike/00074.jpg 4 371 | /data/office-home/images/Art/Bike/00051.jpg 4 372 | /data/office-home/images/Art/Bike/00075.jpg 4 373 | /data/office-home/images/Art/Bike/00009.jpg 4 374 | /data/office-home/images/Art/Bike/00023.jpg 4 375 | /data/office-home/images/Art/Bike/00068.jpg 4 376 | /data/office-home/images/Art/Bike/00029.jpg 4 377 | /data/office-home/images/Art/Bike/00043.jpg 4 378 | /data/office-home/images/Art/Bike/00057.jpg 4 379 | /data/office-home/images/Art/Bike/00066.jpg 4 380 | /data/office-home/images/Art/Bike/00048.jpg 4 381 | /data/office-home/images/Art/Bike/00058.jpg 4 382 | /data/office-home/images/Art/Bike/00059.jpg 4 383 | /data/office-home/images/Art/Bike/00010.jpg 4 384 | /data/office-home/images/Art/Bike/00073.jpg 4 385 | /data/office-home/images/Art/Bike/00021.jpg 4 386 | /data/office-home/images/Art/Bike/00001.jpg 4 387 | /data/office-home/images/Art/Bike/00067.jpg 4 388 | /data/office-home/images/Art/Bike/00002.jpg 4 389 | /data/office-home/images/Art/Bike/00065.jpg 4 390 | /data/office-home/images/Art/Bike/00056.jpg 4 391 | /data/office-home/images/Art/Bike/00063.jpg 4 392 | /data/office-home/images/Art/Bike/00018.jpg 4 393 | /data/office-home/images/Art/Bike/00039.jpg 4 394 | /data/office-home/images/Art/Bike/00019.jpg 4 395 | /data/office-home/images/Art/Bike/00028.jpg 4 396 | /data/office-home/images/Art/Bike/00053.jpg 4 397 | /data/office-home/images/Art/Bike/00062.jpg 4 398 | /data/office-home/images/Art/Bike/00032.jpg 4 399 | /data/office-home/images/Art/Bike/00040.jpg 4 400 | /data/office-home/images/Art/Bike/00003.jpg 4 401 | /data/office-home/images/Art/Bike/00038.jpg 4 402 | /data/office-home/images/Art/Bike/00035.jpg 4 403 | /data/office-home/images/Art/Bike/00072.jpg 4 404 | /data/office-home/images/Art/Bike/00017.jpg 4 405 | /data/office-home/images/Art/Bike/00037.jpg 4 406 | /data/office-home/images/Art/Bike/00045.jpg 4 407 | /data/office-home/images/Art/Bike/00015.jpg 4 408 | /data/office-home/images/Art/Bike/00011.jpg 4 409 | /data/office-home/images/Art/Bike/00061.jpg 4 410 | /data/office-home/images/Art/Bike/00013.jpg 4 411 | /data/office-home/images/Art/Bike/00055.jpg 4 412 | /data/office-home/images/Art/Bike/00008.jpg 4 413 | /data/office-home/images/Art/Bike/00030.jpg 4 414 | /data/office-home/images/Art/Bike/00006.jpg 4 415 | /data/office-home/images/Art/Bike/00007.jpg 4 416 | /data/office-home/images/Art/Bike/00024.jpg 4 417 | /data/office-home/images/Art/Bike/00050.jpg 4 418 | /data/office-home/images/Art/Bike/00034.jpg 4 419 | /data/office-home/images/Art/Bike/00054.jpg 4 420 | /data/office-home/images/Art/Bike/00069.jpg 4 421 | /data/office-home/images/Art/Bike/00031.jpg 4 422 | /data/office-home/images/Art/Bike/00042.jpg 4 423 | /data/office-home/images/Art/Desk_Lamp/00014.jpg 15 424 | /data/office-home/images/Art/Desk_Lamp/00005.jpg 15 425 | /data/office-home/images/Art/Desk_Lamp/00012.jpg 15 426 | /data/office-home/images/Art/Desk_Lamp/00004.jpg 15 427 | /data/office-home/images/Art/Desk_Lamp/00016.jpg 15 428 | /data/office-home/images/Art/Desk_Lamp/00020.jpg 15 429 | /data/office-home/images/Art/Desk_Lamp/00022.jpg 15 430 | /data/office-home/images/Art/Desk_Lamp/00009.jpg 15 431 | /data/office-home/images/Art/Desk_Lamp/00023.jpg 15 432 | /data/office-home/images/Art/Desk_Lamp/00010.jpg 15 433 | /data/office-home/images/Art/Desk_Lamp/00021.jpg 15 434 | /data/office-home/images/Art/Desk_Lamp/00001.jpg 15 435 | /data/office-home/images/Art/Desk_Lamp/00002.jpg 15 436 | /data/office-home/images/Art/Desk_Lamp/00018.jpg 15 437 | /data/office-home/images/Art/Desk_Lamp/00019.jpg 15 438 | /data/office-home/images/Art/Desk_Lamp/00003.jpg 15 439 | /data/office-home/images/Art/Desk_Lamp/00017.jpg 15 440 | /data/office-home/images/Art/Desk_Lamp/00015.jpg 15 441 | /data/office-home/images/Art/Desk_Lamp/00011.jpg 15 442 | /data/office-home/images/Art/Desk_Lamp/00013.jpg 15 443 | /data/office-home/images/Art/Desk_Lamp/00008.jpg 15 444 | /data/office-home/images/Art/Desk_Lamp/00006.jpg 15 445 | /data/office-home/images/Art/Desk_Lamp/00007.jpg 15 446 | /data/office-home/images/Art/Backpack/00014.jpg 1 447 | /data/office-home/images/Art/Backpack/00027.jpg 1 448 | /data/office-home/images/Art/Backpack/00036.jpg 1 449 | /data/office-home/images/Art/Backpack/00033.jpg 1 450 | /data/office-home/images/Art/Backpack/00005.jpg 1 451 | /data/office-home/images/Art/Backpack/00026.jpg 1 452 | /data/office-home/images/Art/Backpack/00012.jpg 1 453 | /data/office-home/images/Art/Backpack/00004.jpg 1 454 | /data/office-home/images/Art/Backpack/00016.jpg 1 455 | /data/office-home/images/Art/Backpack/00041.jpg 1 456 | /data/office-home/images/Art/Backpack/00020.jpg 1 457 | /data/office-home/images/Art/Backpack/00022.jpg 1 458 | /data/office-home/images/Art/Backpack/00025.jpg 1 459 | /data/office-home/images/Art/Backpack/00009.jpg 1 460 | /data/office-home/images/Art/Backpack/00023.jpg 1 461 | /data/office-home/images/Art/Backpack/00029.jpg 1 462 | /data/office-home/images/Art/Backpack/00010.jpg 1 463 | /data/office-home/images/Art/Backpack/00021.jpg 1 464 | /data/office-home/images/Art/Backpack/00001.jpg 1 465 | /data/office-home/images/Art/Backpack/00002.jpg 1 466 | /data/office-home/images/Art/Backpack/00018.jpg 1 467 | /data/office-home/images/Art/Backpack/00039.jpg 1 468 | /data/office-home/images/Art/Backpack/00019.jpg 1 469 | /data/office-home/images/Art/Backpack/00028.jpg 1 470 | /data/office-home/images/Art/Backpack/00032.jpg 1 471 | /data/office-home/images/Art/Backpack/00040.jpg 1 472 | /data/office-home/images/Art/Backpack/00003.jpg 1 473 | /data/office-home/images/Art/Backpack/00038.jpg 1 474 | /data/office-home/images/Art/Backpack/00035.jpg 1 475 | /data/office-home/images/Art/Backpack/00017.jpg 1 476 | /data/office-home/images/Art/Backpack/00037.jpg 1 477 | /data/office-home/images/Art/Backpack/00015.jpg 1 478 | /data/office-home/images/Art/Backpack/00011.jpg 1 479 | /data/office-home/images/Art/Backpack/00013.jpg 1 480 | /data/office-home/images/Art/Backpack/00008.jpg 1 481 | /data/office-home/images/Art/Backpack/00030.jpg 1 482 | /data/office-home/images/Art/Backpack/00006.jpg 1 483 | /data/office-home/images/Art/Backpack/00007.jpg 1 484 | /data/office-home/images/Art/Backpack/00024.jpg 1 485 | /data/office-home/images/Art/Backpack/00034.jpg 1 486 | /data/office-home/images/Art/Backpack/00031.jpg 1 487 | /data/office-home/images/Art/Alarm_Clock/00014.jpg 0 488 | /data/office-home/images/Art/Alarm_Clock/00027.jpg 0 489 | /data/office-home/images/Art/Alarm_Clock/00036.jpg 0 490 | /data/office-home/images/Art/Alarm_Clock/00047.jpg 0 491 | /data/office-home/images/Art/Alarm_Clock/00033.jpg 0 492 | /data/office-home/images/Art/Alarm_Clock/00005.jpg 0 493 | /data/office-home/images/Art/Alarm_Clock/00026.jpg 0 494 | /data/office-home/images/Art/Alarm_Clock/00064.jpg 0 495 | /data/office-home/images/Art/Alarm_Clock/00071.jpg 0 496 | /data/office-home/images/Art/Alarm_Clock/00012.jpg 0 497 | /data/office-home/images/Art/Alarm_Clock/00070.jpg 0 498 | /data/office-home/images/Art/Alarm_Clock/00004.jpg 0 499 | /data/office-home/images/Art/Alarm_Clock/00044.jpg 0 500 | /data/office-home/images/Art/Alarm_Clock/00016.jpg 0 501 | /data/office-home/images/Art/Alarm_Clock/00041.jpg 0 502 | /data/office-home/images/Art/Alarm_Clock/00020.jpg 0 503 | /data/office-home/images/Art/Alarm_Clock/00052.jpg 0 504 | /data/office-home/images/Art/Alarm_Clock/00049.jpg 0 505 | /data/office-home/images/Art/Alarm_Clock/00022.jpg 0 506 | /data/office-home/images/Art/Alarm_Clock/00025.jpg 0 507 | /data/office-home/images/Art/Alarm_Clock/00046.jpg 0 508 | /data/office-home/images/Art/Alarm_Clock/00060.jpg 0 509 | /data/office-home/images/Art/Alarm_Clock/00074.jpg 0 510 | /data/office-home/images/Art/Alarm_Clock/00051.jpg 0 511 | /data/office-home/images/Art/Alarm_Clock/00009.jpg 0 512 | /data/office-home/images/Art/Alarm_Clock/00023.jpg 0 513 | /data/office-home/images/Art/Alarm_Clock/00068.jpg 0 514 | /data/office-home/images/Art/Alarm_Clock/00029.jpg 0 515 | /data/office-home/images/Art/Alarm_Clock/00043.jpg 0 516 | /data/office-home/images/Art/Alarm_Clock/00057.jpg 0 517 | /data/office-home/images/Art/Alarm_Clock/00066.jpg 0 518 | /data/office-home/images/Art/Alarm_Clock/00048.jpg 0 519 | /data/office-home/images/Art/Alarm_Clock/00058.jpg 0 520 | /data/office-home/images/Art/Alarm_Clock/00059.jpg 0 521 | /data/office-home/images/Art/Alarm_Clock/00010.jpg 0 522 | /data/office-home/images/Art/Alarm_Clock/00073.jpg 0 523 | /data/office-home/images/Art/Alarm_Clock/00021.jpg 0 524 | /data/office-home/images/Art/Alarm_Clock/00001.jpg 0 525 | /data/office-home/images/Art/Alarm_Clock/00067.jpg 0 526 | /data/office-home/images/Art/Alarm_Clock/00002.jpg 0 527 | /data/office-home/images/Art/Alarm_Clock/00065.jpg 0 528 | /data/office-home/images/Art/Alarm_Clock/00056.jpg 0 529 | /data/office-home/images/Art/Alarm_Clock/00063.jpg 0 530 | /data/office-home/images/Art/Alarm_Clock/00018.jpg 0 531 | /data/office-home/images/Art/Alarm_Clock/00039.jpg 0 532 | /data/office-home/images/Art/Alarm_Clock/00019.jpg 0 533 | /data/office-home/images/Art/Alarm_Clock/00028.jpg 0 534 | /data/office-home/images/Art/Alarm_Clock/00053.jpg 0 535 | /data/office-home/images/Art/Alarm_Clock/00062.jpg 0 536 | /data/office-home/images/Art/Alarm_Clock/00032.jpg 0 537 | /data/office-home/images/Art/Alarm_Clock/00040.jpg 0 538 | /data/office-home/images/Art/Alarm_Clock/00003.jpg 0 539 | /data/office-home/images/Art/Alarm_Clock/00038.jpg 0 540 | /data/office-home/images/Art/Alarm_Clock/00035.jpg 0 541 | /data/office-home/images/Art/Alarm_Clock/00072.jpg 0 542 | /data/office-home/images/Art/Alarm_Clock/00017.jpg 0 543 | /data/office-home/images/Art/Alarm_Clock/00037.jpg 0 544 | /data/office-home/images/Art/Alarm_Clock/00045.jpg 0 545 | /data/office-home/images/Art/Alarm_Clock/00015.jpg 0 546 | /data/office-home/images/Art/Alarm_Clock/00011.jpg 0 547 | /data/office-home/images/Art/Alarm_Clock/00061.jpg 0 548 | /data/office-home/images/Art/Alarm_Clock/00013.jpg 0 549 | /data/office-home/images/Art/Alarm_Clock/00055.jpg 0 550 | /data/office-home/images/Art/Alarm_Clock/00008.jpg 0 551 | /data/office-home/images/Art/Alarm_Clock/00030.jpg 0 552 | /data/office-home/images/Art/Alarm_Clock/00006.jpg 0 553 | /data/office-home/images/Art/Alarm_Clock/00007.jpg 0 554 | /data/office-home/images/Art/Alarm_Clock/00024.jpg 0 555 | /data/office-home/images/Art/Alarm_Clock/00050.jpg 0 556 | /data/office-home/images/Art/Alarm_Clock/00034.jpg 0 557 | /data/office-home/images/Art/Alarm_Clock/00054.jpg 0 558 | /data/office-home/images/Art/Alarm_Clock/00069.jpg 0 559 | /data/office-home/images/Art/Alarm_Clock/00031.jpg 0 560 | /data/office-home/images/Art/Alarm_Clock/00042.jpg 0 561 | /data/office-home/images/Art/Batteries/00014.jpg 2 562 | /data/office-home/images/Art/Batteries/00027.jpg 2 563 | /data/office-home/images/Art/Batteries/00005.jpg 2 564 | /data/office-home/images/Art/Batteries/00026.jpg 2 565 | /data/office-home/images/Art/Batteries/00012.jpg 2 566 | /data/office-home/images/Art/Batteries/00004.jpg 2 567 | /data/office-home/images/Art/Batteries/00016.jpg 2 568 | /data/office-home/images/Art/Batteries/00020.jpg 2 569 | /data/office-home/images/Art/Batteries/00022.jpg 2 570 | /data/office-home/images/Art/Batteries/00025.jpg 2 571 | /data/office-home/images/Art/Batteries/00009.jpg 2 572 | /data/office-home/images/Art/Batteries/00023.jpg 2 573 | /data/office-home/images/Art/Batteries/00010.jpg 2 574 | /data/office-home/images/Art/Batteries/00021.jpg 2 575 | /data/office-home/images/Art/Batteries/00001.jpg 2 576 | /data/office-home/images/Art/Batteries/00002.jpg 2 577 | /data/office-home/images/Art/Batteries/00018.jpg 2 578 | /data/office-home/images/Art/Batteries/00019.jpg 2 579 | /data/office-home/images/Art/Batteries/00003.jpg 2 580 | /data/office-home/images/Art/Batteries/00017.jpg 2 581 | /data/office-home/images/Art/Batteries/00015.jpg 2 582 | /data/office-home/images/Art/Batteries/00011.jpg 2 583 | /data/office-home/images/Art/Batteries/00013.jpg 2 584 | /data/office-home/images/Art/Batteries/00008.jpg 2 585 | /data/office-home/images/Art/Batteries/00006.jpg 2 586 | /data/office-home/images/Art/Batteries/00007.jpg 2 587 | /data/office-home/images/Art/Batteries/00024.jpg 2 588 | /data/office-home/images/Art/Fan/00014.jpg 19 589 | /data/office-home/images/Art/Fan/00027.jpg 19 590 | /data/office-home/images/Art/Fan/00036.jpg 19 591 | /data/office-home/images/Art/Fan/00033.jpg 19 592 | /data/office-home/images/Art/Fan/00005.jpg 19 593 | /data/office-home/images/Art/Fan/00026.jpg 19 594 | /data/office-home/images/Art/Fan/00012.jpg 19 595 | /data/office-home/images/Art/Fan/00004.jpg 19 596 | /data/office-home/images/Art/Fan/00044.jpg 19 597 | /data/office-home/images/Art/Fan/00016.jpg 19 598 | /data/office-home/images/Art/Fan/00041.jpg 19 599 | /data/office-home/images/Art/Fan/00020.jpg 19 600 | /data/office-home/images/Art/Fan/00022.jpg 19 601 | /data/office-home/images/Art/Fan/00025.jpg 19 602 | /data/office-home/images/Art/Fan/00009.jpg 19 603 | /data/office-home/images/Art/Fan/00023.jpg 19 604 | /data/office-home/images/Art/Fan/00029.jpg 19 605 | /data/office-home/images/Art/Fan/00043.jpg 19 606 | /data/office-home/images/Art/Fan/00010.jpg 19 607 | /data/office-home/images/Art/Fan/00021.jpg 19 608 | /data/office-home/images/Art/Fan/00001.jpg 19 609 | /data/office-home/images/Art/Fan/00002.jpg 19 610 | /data/office-home/images/Art/Fan/00018.jpg 19 611 | /data/office-home/images/Art/Fan/00039.jpg 19 612 | /data/office-home/images/Art/Fan/00019.jpg 19 613 | /data/office-home/images/Art/Fan/00028.jpg 19 614 | /data/office-home/images/Art/Fan/00032.jpg 19 615 | /data/office-home/images/Art/Fan/00040.jpg 19 616 | /data/office-home/images/Art/Fan/00003.jpg 19 617 | /data/office-home/images/Art/Fan/00038.jpg 19 618 | /data/office-home/images/Art/Fan/00035.jpg 19 619 | /data/office-home/images/Art/Fan/00017.jpg 19 620 | /data/office-home/images/Art/Fan/00037.jpg 19 621 | /data/office-home/images/Art/Fan/00045.jpg 19 622 | /data/office-home/images/Art/Fan/00015.jpg 19 623 | /data/office-home/images/Art/Fan/00011.jpg 19 624 | /data/office-home/images/Art/Fan/00013.jpg 19 625 | /data/office-home/images/Art/Fan/00008.jpg 19 626 | /data/office-home/images/Art/Fan/00030.jpg 19 627 | /data/office-home/images/Art/Fan/00006.jpg 19 628 | /data/office-home/images/Art/Fan/00007.jpg 19 629 | /data/office-home/images/Art/Fan/00024.jpg 19 630 | /data/office-home/images/Art/Fan/00034.jpg 19 631 | /data/office-home/images/Art/Fan/00031.jpg 19 632 | /data/office-home/images/Art/Fan/00042.jpg 19 633 | /data/office-home/images/Art/Eraser/00014.jpg 17 634 | /data/office-home/images/Art/Eraser/00005.jpg 17 635 | /data/office-home/images/Art/Eraser/00012.jpg 17 636 | /data/office-home/images/Art/Eraser/00004.jpg 17 637 | /data/office-home/images/Art/Eraser/00016.jpg 17 638 | /data/office-home/images/Art/Eraser/00009.jpg 17 639 | /data/office-home/images/Art/Eraser/00010.jpg 17 640 | /data/office-home/images/Art/Eraser/00001.jpg 17 641 | /data/office-home/images/Art/Eraser/00002.jpg 17 642 | /data/office-home/images/Art/Eraser/00018.jpg 17 643 | /data/office-home/images/Art/Eraser/00003.jpg 17 644 | /data/office-home/images/Art/Eraser/00017.jpg 17 645 | /data/office-home/images/Art/Eraser/00015.jpg 17 646 | /data/office-home/images/Art/Eraser/00011.jpg 17 647 | /data/office-home/images/Art/Eraser/00013.jpg 17 648 | /data/office-home/images/Art/Eraser/00008.jpg 17 649 | /data/office-home/images/Art/Eraser/00006.jpg 17 650 | /data/office-home/images/Art/Eraser/00007.jpg 17 651 | /data/office-home/images/Art/Bucket/00014.jpg 6 652 | /data/office-home/images/Art/Bucket/00027.jpg 6 653 | /data/office-home/images/Art/Bucket/00036.jpg 6 654 | /data/office-home/images/Art/Bucket/00033.jpg 6 655 | /data/office-home/images/Art/Bucket/00005.jpg 6 656 | /data/office-home/images/Art/Bucket/00026.jpg 6 657 | /data/office-home/images/Art/Bucket/00012.jpg 6 658 | /data/office-home/images/Art/Bucket/00004.jpg 6 659 | /data/office-home/images/Art/Bucket/00016.jpg 6 660 | /data/office-home/images/Art/Bucket/00020.jpg 6 661 | /data/office-home/images/Art/Bucket/00022.jpg 6 662 | /data/office-home/images/Art/Bucket/00025.jpg 6 663 | /data/office-home/images/Art/Bucket/00009.jpg 6 664 | /data/office-home/images/Art/Bucket/00023.jpg 6 665 | /data/office-home/images/Art/Bucket/00029.jpg 6 666 | /data/office-home/images/Art/Bucket/00010.jpg 6 667 | /data/office-home/images/Art/Bucket/00021.jpg 6 668 | /data/office-home/images/Art/Bucket/00001.jpg 6 669 | /data/office-home/images/Art/Bucket/00002.jpg 6 670 | /data/office-home/images/Art/Bucket/00018.jpg 6 671 | /data/office-home/images/Art/Bucket/00039.jpg 6 672 | /data/office-home/images/Art/Bucket/00019.jpg 6 673 | /data/office-home/images/Art/Bucket/00028.jpg 6 674 | /data/office-home/images/Art/Bucket/00032.jpg 6 675 | /data/office-home/images/Art/Bucket/00040.jpg 6 676 | /data/office-home/images/Art/Bucket/00003.jpg 6 677 | /data/office-home/images/Art/Bucket/00038.jpg 6 678 | /data/office-home/images/Art/Bucket/00035.jpg 6 679 | /data/office-home/images/Art/Bucket/00017.jpg 6 680 | /data/office-home/images/Art/Bucket/00037.jpg 6 681 | /data/office-home/images/Art/Bucket/00015.jpg 6 682 | /data/office-home/images/Art/Bucket/00011.jpg 6 683 | /data/office-home/images/Art/Bucket/00013.jpg 6 684 | /data/office-home/images/Art/Bucket/00008.jpg 6 685 | /data/office-home/images/Art/Bucket/00030.jpg 6 686 | /data/office-home/images/Art/Bucket/00006.jpg 6 687 | /data/office-home/images/Art/Bucket/00007.jpg 6 688 | /data/office-home/images/Art/Bucket/00024.jpg 6 689 | /data/office-home/images/Art/Bucket/00034.jpg 6 690 | /data/office-home/images/Art/Bucket/00031.jpg 6 691 | /data/office-home/images/Art/Chair/00014.jpg 10 692 | /data/office-home/images/Art/Chair/00027.jpg 10 693 | /data/office-home/images/Art/Chair/00036.jpg 10 694 | /data/office-home/images/Art/Chair/00047.jpg 10 695 | /data/office-home/images/Art/Chair/00033.jpg 10 696 | /data/office-home/images/Art/Chair/00005.jpg 10 697 | /data/office-home/images/Art/Chair/00026.jpg 10 698 | /data/office-home/images/Art/Chair/00064.jpg 10 699 | /data/office-home/images/Art/Chair/00012.jpg 10 700 | /data/office-home/images/Art/Chair/00004.jpg 10 701 | /data/office-home/images/Art/Chair/00044.jpg 10 702 | /data/office-home/images/Art/Chair/00016.jpg 10 703 | /data/office-home/images/Art/Chair/00041.jpg 10 704 | /data/office-home/images/Art/Chair/00020.jpg 10 705 | /data/office-home/images/Art/Chair/00052.jpg 10 706 | /data/office-home/images/Art/Chair/00049.jpg 10 707 | /data/office-home/images/Art/Chair/00022.jpg 10 708 | /data/office-home/images/Art/Chair/00025.jpg 10 709 | /data/office-home/images/Art/Chair/00046.jpg 10 710 | /data/office-home/images/Art/Chair/00060.jpg 10 711 | /data/office-home/images/Art/Chair/00051.jpg 10 712 | /data/office-home/images/Art/Chair/00009.jpg 10 713 | /data/office-home/images/Art/Chair/00023.jpg 10 714 | /data/office-home/images/Art/Chair/00068.jpg 10 715 | /data/office-home/images/Art/Chair/00029.jpg 10 716 | /data/office-home/images/Art/Chair/00043.jpg 10 717 | /data/office-home/images/Art/Chair/00057.jpg 10 718 | /data/office-home/images/Art/Chair/00066.jpg 10 719 | /data/office-home/images/Art/Chair/00048.jpg 10 720 | /data/office-home/images/Art/Chair/00058.jpg 10 721 | /data/office-home/images/Art/Chair/00059.jpg 10 722 | /data/office-home/images/Art/Chair/00010.jpg 10 723 | /data/office-home/images/Art/Chair/00021.jpg 10 724 | /data/office-home/images/Art/Chair/00001.jpg 10 725 | /data/office-home/images/Art/Chair/00067.jpg 10 726 | /data/office-home/images/Art/Chair/00002.jpg 10 727 | /data/office-home/images/Art/Chair/00065.jpg 10 728 | /data/office-home/images/Art/Chair/00056.jpg 10 729 | /data/office-home/images/Art/Chair/00063.jpg 10 730 | /data/office-home/images/Art/Chair/00018.jpg 10 731 | /data/office-home/images/Art/Chair/00039.jpg 10 732 | /data/office-home/images/Art/Chair/00019.jpg 10 733 | /data/office-home/images/Art/Chair/00028.jpg 10 734 | /data/office-home/images/Art/Chair/00053.jpg 10 735 | /data/office-home/images/Art/Chair/00062.jpg 10 736 | /data/office-home/images/Art/Chair/00032.jpg 10 737 | /data/office-home/images/Art/Chair/00040.jpg 10 738 | /data/office-home/images/Art/Chair/00003.jpg 10 739 | /data/office-home/images/Art/Chair/00038.jpg 10 740 | /data/office-home/images/Art/Chair/00035.jpg 10 741 | /data/office-home/images/Art/Chair/00017.jpg 10 742 | /data/office-home/images/Art/Chair/00037.jpg 10 743 | /data/office-home/images/Art/Chair/00045.jpg 10 744 | /data/office-home/images/Art/Chair/00015.jpg 10 745 | /data/office-home/images/Art/Chair/00011.jpg 10 746 | /data/office-home/images/Art/Chair/00061.jpg 10 747 | /data/office-home/images/Art/Chair/00013.jpg 10 748 | /data/office-home/images/Art/Chair/00055.jpg 10 749 | /data/office-home/images/Art/Chair/00008.jpg 10 750 | /data/office-home/images/Art/Chair/00030.jpg 10 751 | /data/office-home/images/Art/Chair/00006.jpg 10 752 | /data/office-home/images/Art/Chair/00007.jpg 10 753 | /data/office-home/images/Art/Chair/00024.jpg 10 754 | /data/office-home/images/Art/Chair/00050.jpg 10 755 | /data/office-home/images/Art/Chair/00034.jpg 10 756 | /data/office-home/images/Art/Chair/00054.jpg 10 757 | /data/office-home/images/Art/Chair/00069.jpg 10 758 | /data/office-home/images/Art/Chair/00031.jpg 10 759 | /data/office-home/images/Art/Chair/00042.jpg 10 760 | /data/office-home/images/Art/Calendar/00014.jpg 8 761 | /data/office-home/images/Art/Calendar/00005.jpg 8 762 | /data/office-home/images/Art/Calendar/00012.jpg 8 763 | /data/office-home/images/Art/Calendar/00004.jpg 8 764 | /data/office-home/images/Art/Calendar/00016.jpg 8 765 | /data/office-home/images/Art/Calendar/00020.jpg 8 766 | /data/office-home/images/Art/Calendar/00009.jpg 8 767 | /data/office-home/images/Art/Calendar/00010.jpg 8 768 | /data/office-home/images/Art/Calendar/00001.jpg 8 769 | /data/office-home/images/Art/Calendar/00002.jpg 8 770 | /data/office-home/images/Art/Calendar/00018.jpg 8 771 | /data/office-home/images/Art/Calendar/00019.jpg 8 772 | /data/office-home/images/Art/Calendar/00003.jpg 8 773 | /data/office-home/images/Art/Calendar/00017.jpg 8 774 | /data/office-home/images/Art/Calendar/00015.jpg 8 775 | /data/office-home/images/Art/Calendar/00011.jpg 8 776 | /data/office-home/images/Art/Calendar/00013.jpg 8 777 | /data/office-home/images/Art/Calendar/00008.jpg 8 778 | /data/office-home/images/Art/Calendar/00006.jpg 8 779 | /data/office-home/images/Art/Calendar/00007.jpg 8 780 | /data/office-home/images/Art/Calculator/00014.jpg 7 781 | /data/office-home/images/Art/Calculator/00027.jpg 7 782 | /data/office-home/images/Art/Calculator/00033.jpg 7 783 | /data/office-home/images/Art/Calculator/00005.jpg 7 784 | /data/office-home/images/Art/Calculator/00026.jpg 7 785 | /data/office-home/images/Art/Calculator/00012.jpg 7 786 | /data/office-home/images/Art/Calculator/00004.jpg 7 787 | /data/office-home/images/Art/Calculator/00016.jpg 7 788 | /data/office-home/images/Art/Calculator/00020.jpg 7 789 | /data/office-home/images/Art/Calculator/00022.jpg 7 790 | /data/office-home/images/Art/Calculator/00025.jpg 7 791 | /data/office-home/images/Art/Calculator/00009.jpg 7 792 | /data/office-home/images/Art/Calculator/00023.jpg 7 793 | /data/office-home/images/Art/Calculator/00029.jpg 7 794 | /data/office-home/images/Art/Calculator/00010.jpg 7 795 | /data/office-home/images/Art/Calculator/00021.jpg 7 796 | /data/office-home/images/Art/Calculator/00001.jpg 7 797 | /data/office-home/images/Art/Calculator/00002.jpg 7 798 | /data/office-home/images/Art/Calculator/00018.jpg 7 799 | /data/office-home/images/Art/Calculator/00019.jpg 7 800 | /data/office-home/images/Art/Calculator/00028.jpg 7 801 | /data/office-home/images/Art/Calculator/00032.jpg 7 802 | /data/office-home/images/Art/Calculator/00003.jpg 7 803 | /data/office-home/images/Art/Calculator/00017.jpg 7 804 | /data/office-home/images/Art/Calculator/00015.jpg 7 805 | /data/office-home/images/Art/Calculator/00011.jpg 7 806 | /data/office-home/images/Art/Calculator/00013.jpg 7 807 | /data/office-home/images/Art/Calculator/00008.jpg 7 808 | /data/office-home/images/Art/Calculator/00030.jpg 7 809 | /data/office-home/images/Art/Calculator/00006.jpg 7 810 | /data/office-home/images/Art/Calculator/00007.jpg 7 811 | /data/office-home/images/Art/Calculator/00024.jpg 7 812 | /data/office-home/images/Art/Calculator/00031.jpg 7 813 | /data/office-home/images/Art/Flowers/00014.jpg 22 814 | /data/office-home/images/Art/Flowers/00027.jpg 22 815 | /data/office-home/images/Art/Flowers/00036.jpg 22 816 | /data/office-home/images/Art/Flowers/00047.jpg 22 817 | /data/office-home/images/Art/Flowers/00033.jpg 22 818 | /data/office-home/images/Art/Flowers/00005.jpg 22 819 | /data/office-home/images/Art/Flowers/00026.jpg 22 820 | /data/office-home/images/Art/Flowers/00076.jpg 22 821 | /data/office-home/images/Art/Flowers/00064.jpg 22 822 | /data/office-home/images/Art/Flowers/00086.jpg 22 823 | /data/office-home/images/Art/Flowers/00071.jpg 22 824 | /data/office-home/images/Art/Flowers/00012.jpg 22 825 | /data/office-home/images/Art/Flowers/00070.jpg 22 826 | /data/office-home/images/Art/Flowers/00004.jpg 22 827 | /data/office-home/images/Art/Flowers/00044.jpg 22 828 | /data/office-home/images/Art/Flowers/00016.jpg 22 829 | /data/office-home/images/Art/Flowers/00041.jpg 22 830 | /data/office-home/images/Art/Flowers/00020.jpg 22 831 | /data/office-home/images/Art/Flowers/00052.jpg 22 832 | /data/office-home/images/Art/Flowers/00084.jpg 22 833 | /data/office-home/images/Art/Flowers/00081.jpg 22 834 | /data/office-home/images/Art/Flowers/00049.jpg 22 835 | /data/office-home/images/Art/Flowers/00089.jpg 22 836 | /data/office-home/images/Art/Flowers/00022.jpg 22 837 | /data/office-home/images/Art/Flowers/00025.jpg 22 838 | /data/office-home/images/Art/Flowers/00046.jpg 22 839 | /data/office-home/images/Art/Flowers/00060.jpg 22 840 | /data/office-home/images/Art/Flowers/00074.jpg 22 841 | /data/office-home/images/Art/Flowers/00051.jpg 22 842 | /data/office-home/images/Art/Flowers/00075.jpg 22 843 | /data/office-home/images/Art/Flowers/00009.jpg 22 844 | /data/office-home/images/Art/Flowers/00023.jpg 22 845 | /data/office-home/images/Art/Flowers/00079.jpg 22 846 | /data/office-home/images/Art/Flowers/00078.jpg 22 847 | /data/office-home/images/Art/Flowers/00068.jpg 22 848 | /data/office-home/images/Art/Flowers/00029.jpg 22 849 | /data/office-home/images/Art/Flowers/00080.jpg 22 850 | /data/office-home/images/Art/Flowers/00043.jpg 22 851 | /data/office-home/images/Art/Flowers/00057.jpg 22 852 | /data/office-home/images/Art/Flowers/00066.jpg 22 853 | /data/office-home/images/Art/Flowers/00077.jpg 22 854 | /data/office-home/images/Art/Flowers/00048.jpg 22 855 | /data/office-home/images/Art/Flowers/00058.jpg 22 856 | /data/office-home/images/Art/Flowers/00059.jpg 22 857 | /data/office-home/images/Art/Flowers/00010.jpg 22 858 | /data/office-home/images/Art/Flowers/00082.jpg 22 859 | /data/office-home/images/Art/Flowers/00083.jpg 22 860 | /data/office-home/images/Art/Flowers/00073.jpg 22 861 | /data/office-home/images/Art/Flowers/00021.jpg 22 862 | /data/office-home/images/Art/Flowers/00001.jpg 22 863 | /data/office-home/images/Art/Flowers/00067.jpg 22 864 | /data/office-home/images/Art/Flowers/00002.jpg 22 865 | /data/office-home/images/Art/Flowers/00065.jpg 22 866 | /data/office-home/images/Art/Flowers/00056.jpg 22 867 | /data/office-home/images/Art/Flowers/00063.jpg 22 868 | /data/office-home/images/Art/Flowers/00018.jpg 22 869 | /data/office-home/images/Art/Flowers/00039.jpg 22 870 | /data/office-home/images/Art/Flowers/00019.jpg 22 871 | /data/office-home/images/Art/Flowers/00028.jpg 22 872 | /data/office-home/images/Art/Flowers/00053.jpg 22 873 | /data/office-home/images/Art/Flowers/00062.jpg 22 874 | /data/office-home/images/Art/Flowers/00032.jpg 22 875 | /data/office-home/images/Art/Flowers/00040.jpg 22 876 | /data/office-home/images/Art/Flowers/00003.jpg 22 877 | /data/office-home/images/Art/Flowers/00038.jpg 22 878 | /data/office-home/images/Art/Flowers/00035.jpg 22 879 | /data/office-home/images/Art/Flowers/00087.jpg 22 880 | /data/office-home/images/Art/Flowers/00072.jpg 22 881 | /data/office-home/images/Art/Flowers/00090.jpg 22 882 | /data/office-home/images/Art/Flowers/00017.jpg 22 883 | /data/office-home/images/Art/Flowers/00037.jpg 22 884 | /data/office-home/images/Art/Flowers/00045.jpg 22 885 | /data/office-home/images/Art/Flowers/00015.jpg 22 886 | /data/office-home/images/Art/Flowers/00011.jpg 22 887 | /data/office-home/images/Art/Flowers/00061.jpg 22 888 | /data/office-home/images/Art/Flowers/00088.jpg 22 889 | /data/office-home/images/Art/Flowers/00013.jpg 22 890 | /data/office-home/images/Art/Flowers/00055.jpg 22 891 | /data/office-home/images/Art/Flowers/00085.jpg 22 892 | /data/office-home/images/Art/Flowers/00008.jpg 22 893 | /data/office-home/images/Art/Flowers/00030.jpg 22 894 | /data/office-home/images/Art/Flowers/00006.jpg 22 895 | /data/office-home/images/Art/Flowers/00007.jpg 22 896 | /data/office-home/images/Art/Flowers/00024.jpg 22 897 | /data/office-home/images/Art/Flowers/00050.jpg 22 898 | /data/office-home/images/Art/Flowers/00034.jpg 22 899 | /data/office-home/images/Art/Flowers/00054.jpg 22 900 | /data/office-home/images/Art/Flowers/00069.jpg 22 901 | /data/office-home/images/Art/Flowers/00031.jpg 22 902 | /data/office-home/images/Art/Flowers/00042.jpg 22 903 | /data/office-home/images/Art/Candles/00014.jpg 9 904 | /data/office-home/images/Art/Candles/00027.jpg 9 905 | /data/office-home/images/Art/Candles/00036.jpg 9 906 | /data/office-home/images/Art/Candles/00047.jpg 9 907 | /data/office-home/images/Art/Candles/00033.jpg 9 908 | /data/office-home/images/Art/Candles/00005.jpg 9 909 | /data/office-home/images/Art/Candles/00026.jpg 9 910 | /data/office-home/images/Art/Candles/00076.jpg 9 911 | /data/office-home/images/Art/Candles/00064.jpg 9 912 | /data/office-home/images/Art/Candles/00071.jpg 9 913 | /data/office-home/images/Art/Candles/00012.jpg 9 914 | /data/office-home/images/Art/Candles/00070.jpg 9 915 | /data/office-home/images/Art/Candles/00004.jpg 9 916 | /data/office-home/images/Art/Candles/00044.jpg 9 917 | /data/office-home/images/Art/Candles/00016.jpg 9 918 | /data/office-home/images/Art/Candles/00041.jpg 9 919 | /data/office-home/images/Art/Candles/00020.jpg 9 920 | /data/office-home/images/Art/Candles/00052.jpg 9 921 | /data/office-home/images/Art/Candles/00049.jpg 9 922 | /data/office-home/images/Art/Candles/00022.jpg 9 923 | /data/office-home/images/Art/Candles/00025.jpg 9 924 | /data/office-home/images/Art/Candles/00046.jpg 9 925 | /data/office-home/images/Art/Candles/00060.jpg 9 926 | /data/office-home/images/Art/Candles/00074.jpg 9 927 | /data/office-home/images/Art/Candles/00051.jpg 9 928 | /data/office-home/images/Art/Candles/00075.jpg 9 929 | /data/office-home/images/Art/Candles/00009.jpg 9 930 | /data/office-home/images/Art/Candles/00023.jpg 9 931 | /data/office-home/images/Art/Candles/00068.jpg 9 932 | /data/office-home/images/Art/Candles/00029.jpg 9 933 | /data/office-home/images/Art/Candles/00043.jpg 9 934 | /data/office-home/images/Art/Candles/00057.jpg 9 935 | /data/office-home/images/Art/Candles/00066.jpg 9 936 | /data/office-home/images/Art/Candles/00048.jpg 9 937 | /data/office-home/images/Art/Candles/00058.jpg 9 938 | /data/office-home/images/Art/Candles/00059.jpg 9 939 | /data/office-home/images/Art/Candles/00010.jpg 9 940 | /data/office-home/images/Art/Candles/00073.jpg 9 941 | /data/office-home/images/Art/Candles/00021.jpg 9 942 | /data/office-home/images/Art/Candles/00001.jpg 9 943 | /data/office-home/images/Art/Candles/00067.jpg 9 944 | /data/office-home/images/Art/Candles/00002.jpg 9 945 | /data/office-home/images/Art/Candles/00065.jpg 9 946 | /data/office-home/images/Art/Candles/00056.jpg 9 947 | /data/office-home/images/Art/Candles/00063.jpg 9 948 | /data/office-home/images/Art/Candles/00018.jpg 9 949 | /data/office-home/images/Art/Candles/00039.jpg 9 950 | /data/office-home/images/Art/Candles/00019.jpg 9 951 | /data/office-home/images/Art/Candles/00028.jpg 9 952 | /data/office-home/images/Art/Candles/00053.jpg 9 953 | /data/office-home/images/Art/Candles/00062.jpg 9 954 | /data/office-home/images/Art/Candles/00032.jpg 9 955 | /data/office-home/images/Art/Candles/00040.jpg 9 956 | /data/office-home/images/Art/Candles/00003.jpg 9 957 | /data/office-home/images/Art/Candles/00038.jpg 9 958 | /data/office-home/images/Art/Candles/00035.jpg 9 959 | /data/office-home/images/Art/Candles/00072.jpg 9 960 | /data/office-home/images/Art/Candles/00017.jpg 9 961 | /data/office-home/images/Art/Candles/00037.jpg 9 962 | /data/office-home/images/Art/Candles/00045.jpg 9 963 | /data/office-home/images/Art/Candles/00015.jpg 9 964 | /data/office-home/images/Art/Candles/00011.jpg 9 965 | /data/office-home/images/Art/Candles/00061.jpg 9 966 | /data/office-home/images/Art/Candles/00013.jpg 9 967 | /data/office-home/images/Art/Candles/00055.jpg 9 968 | /data/office-home/images/Art/Candles/00008.jpg 9 969 | /data/office-home/images/Art/Candles/00030.jpg 9 970 | /data/office-home/images/Art/Candles/00006.jpg 9 971 | /data/office-home/images/Art/Candles/00007.jpg 9 972 | /data/office-home/images/Art/Candles/00024.jpg 9 973 | /data/office-home/images/Art/Candles/00050.jpg 9 974 | /data/office-home/images/Art/Candles/00034.jpg 9 975 | /data/office-home/images/Art/Candles/00054.jpg 9 976 | /data/office-home/images/Art/Candles/00069.jpg 9 977 | /data/office-home/images/Art/Candles/00031.jpg 9 978 | /data/office-home/images/Art/Candles/00042.jpg 9 979 | /data/office-home/images/Art/Clipboards/00014.jpg 11 980 | /data/office-home/images/Art/Clipboards/00005.jpg 11 981 | /data/office-home/images/Art/Clipboards/00012.jpg 11 982 | /data/office-home/images/Art/Clipboards/00004.jpg 11 983 | /data/office-home/images/Art/Clipboards/00016.jpg 11 984 | /data/office-home/images/Art/Clipboards/00020.jpg 11 985 | /data/office-home/images/Art/Clipboards/00022.jpg 11 986 | /data/office-home/images/Art/Clipboards/00025.jpg 11 987 | /data/office-home/images/Art/Clipboards/00009.jpg 11 988 | /data/office-home/images/Art/Clipboards/00023.jpg 11 989 | /data/office-home/images/Art/Clipboards/00010.jpg 11 990 | /data/office-home/images/Art/Clipboards/00021.jpg 11 991 | /data/office-home/images/Art/Clipboards/00001.jpg 11 992 | /data/office-home/images/Art/Clipboards/00002.jpg 11 993 | /data/office-home/images/Art/Clipboards/00018.jpg 11 994 | /data/office-home/images/Art/Clipboards/00019.jpg 11 995 | /data/office-home/images/Art/Clipboards/00003.jpg 11 996 | /data/office-home/images/Art/Clipboards/00017.jpg 11 997 | /data/office-home/images/Art/Clipboards/00015.jpg 11 998 | /data/office-home/images/Art/Clipboards/00011.jpg 11 999 | /data/office-home/images/Art/Clipboards/00013.jpg 11 1000 | /data/office-home/images/Art/Clipboards/00008.jpg 11 1001 | /data/office-home/images/Art/Clipboards/00006.jpg 11 1002 | /data/office-home/images/Art/Clipboards/00007.jpg 11 1003 | /data/office-home/images/Art/Clipboards/00024.jpg 11 1004 | /data/office-home/images/Art/Curtains/00014.jpg 14 1005 | /data/office-home/images/Art/Curtains/00027.jpg 14 1006 | /data/office-home/images/Art/Curtains/00036.jpg 14 1007 | /data/office-home/images/Art/Curtains/00033.jpg 14 1008 | /data/office-home/images/Art/Curtains/00005.jpg 14 1009 | /data/office-home/images/Art/Curtains/00026.jpg 14 1010 | /data/office-home/images/Art/Curtains/00012.jpg 14 1011 | /data/office-home/images/Art/Curtains/00004.jpg 14 1012 | /data/office-home/images/Art/Curtains/00016.jpg 14 1013 | /data/office-home/images/Art/Curtains/00020.jpg 14 1014 | /data/office-home/images/Art/Curtains/00022.jpg 14 1015 | /data/office-home/images/Art/Curtains/00025.jpg 14 1016 | /data/office-home/images/Art/Curtains/00009.jpg 14 1017 | /data/office-home/images/Art/Curtains/00023.jpg 14 1018 | /data/office-home/images/Art/Curtains/00029.jpg 14 1019 | /data/office-home/images/Art/Curtains/00010.jpg 14 1020 | /data/office-home/images/Art/Curtains/00021.jpg 14 1021 | /data/office-home/images/Art/Curtains/00001.jpg 14 1022 | /data/office-home/images/Art/Curtains/00002.jpg 14 1023 | /data/office-home/images/Art/Curtains/00018.jpg 14 1024 | /data/office-home/images/Art/Curtains/00039.jpg 14 1025 | /data/office-home/images/Art/Curtains/00019.jpg 14 1026 | /data/office-home/images/Art/Curtains/00028.jpg 14 1027 | /data/office-home/images/Art/Curtains/00032.jpg 14 1028 | /data/office-home/images/Art/Curtains/00040.jpg 14 1029 | /data/office-home/images/Art/Curtains/00003.jpg 14 1030 | /data/office-home/images/Art/Curtains/00038.jpg 14 1031 | /data/office-home/images/Art/Curtains/00035.jpg 14 1032 | /data/office-home/images/Art/Curtains/00017.jpg 14 1033 | /data/office-home/images/Art/Curtains/00037.jpg 14 1034 | /data/office-home/images/Art/Curtains/00015.jpg 14 1035 | /data/office-home/images/Art/Curtains/00011.jpg 14 1036 | /data/office-home/images/Art/Curtains/00013.jpg 14 1037 | /data/office-home/images/Art/Curtains/00008.jpg 14 1038 | /data/office-home/images/Art/Curtains/00030.jpg 14 1039 | /data/office-home/images/Art/Curtains/00006.jpg 14 1040 | /data/office-home/images/Art/Curtains/00007.jpg 14 1041 | /data/office-home/images/Art/Curtains/00024.jpg 14 1042 | /data/office-home/images/Art/Curtains/00034.jpg 14 1043 | /data/office-home/images/Art/Curtains/00031.jpg 14 1044 | /data/office-home/images/Art/Fork/00014.jpg 24 1045 | /data/office-home/images/Art/Fork/00027.jpg 24 1046 | /data/office-home/images/Art/Fork/00036.jpg 24 1047 | /data/office-home/images/Art/Fork/00033.jpg 24 1048 | /data/office-home/images/Art/Fork/00005.jpg 24 1049 | /data/office-home/images/Art/Fork/00026.jpg 24 1050 | /data/office-home/images/Art/Fork/00012.jpg 24 1051 | /data/office-home/images/Art/Fork/00004.jpg 24 1052 | /data/office-home/images/Art/Fork/00044.jpg 24 1053 | /data/office-home/images/Art/Fork/00016.jpg 24 1054 | /data/office-home/images/Art/Fork/00041.jpg 24 1055 | /data/office-home/images/Art/Fork/00020.jpg 24 1056 | /data/office-home/images/Art/Fork/00022.jpg 24 1057 | /data/office-home/images/Art/Fork/00025.jpg 24 1058 | /data/office-home/images/Art/Fork/00046.jpg 24 1059 | /data/office-home/images/Art/Fork/00009.jpg 24 1060 | /data/office-home/images/Art/Fork/00023.jpg 24 1061 | /data/office-home/images/Art/Fork/00029.jpg 24 1062 | /data/office-home/images/Art/Fork/00043.jpg 24 1063 | /data/office-home/images/Art/Fork/00010.jpg 24 1064 | /data/office-home/images/Art/Fork/00021.jpg 24 1065 | /data/office-home/images/Art/Fork/00001.jpg 24 1066 | /data/office-home/images/Art/Fork/00002.jpg 24 1067 | /data/office-home/images/Art/Fork/00018.jpg 24 1068 | /data/office-home/images/Art/Fork/00039.jpg 24 1069 | /data/office-home/images/Art/Fork/00019.jpg 24 1070 | /data/office-home/images/Art/Fork/00028.jpg 24 1071 | /data/office-home/images/Art/Fork/00032.jpg 24 1072 | /data/office-home/images/Art/Fork/00040.jpg 24 1073 | /data/office-home/images/Art/Fork/00003.jpg 24 1074 | /data/office-home/images/Art/Fork/00038.jpg 24 1075 | /data/office-home/images/Art/Fork/00035.jpg 24 1076 | /data/office-home/images/Art/Fork/00017.jpg 24 1077 | /data/office-home/images/Art/Fork/00037.jpg 24 1078 | /data/office-home/images/Art/Fork/00045.jpg 24 1079 | /data/office-home/images/Art/Fork/00015.jpg 24 1080 | /data/office-home/images/Art/Fork/00011.jpg 24 1081 | /data/office-home/images/Art/Fork/00013.jpg 24 1082 | /data/office-home/images/Art/Fork/00008.jpg 24 1083 | /data/office-home/images/Art/Fork/00030.jpg 24 1084 | /data/office-home/images/Art/Fork/00006.jpg 24 1085 | /data/office-home/images/Art/Fork/00007.jpg 24 1086 | /data/office-home/images/Art/Fork/00024.jpg 24 1087 | /data/office-home/images/Art/Fork/00034.jpg 24 1088 | /data/office-home/images/Art/Fork/00031.jpg 24 1089 | /data/office-home/images/Art/Fork/00042.jpg 24 1090 | -------------------------------------------------------------------------------- /data/office/dslr_list.txt: -------------------------------------------------------------------------------- 1 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0001.jpg 5 2 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0002.jpg 5 3 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0003.jpg 5 4 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0004.jpg 5 5 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0005.jpg 5 6 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0006.jpg 5 7 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0007.jpg 5 8 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0008.jpg 5 9 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0009.jpg 5 10 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0010.jpg 5 11 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0011.jpg 5 12 | /data/office/domain_adaptation_images/dslr/images/calculator/frame_0012.jpg 5 13 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0001.jpg 24 14 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0002.jpg 24 15 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0003.jpg 24 16 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0004.jpg 24 17 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0005.jpg 24 18 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0006.jpg 24 19 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0007.jpg 24 20 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0008.jpg 24 21 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0009.jpg 24 22 | /data/office/domain_adaptation_images/dslr/images/ring_binder/frame_0010.jpg 24 23 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0001.jpg 21 24 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0002.jpg 21 25 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0003.jpg 21 26 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0004.jpg 21 27 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0005.jpg 21 28 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0006.jpg 21 29 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0007.jpg 21 30 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0008.jpg 21 31 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0009.jpg 21 32 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0010.jpg 21 33 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0011.jpg 21 34 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0012.jpg 21 35 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0013.jpg 21 36 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0014.jpg 21 37 | /data/office/domain_adaptation_images/dslr/images/printer/frame_0015.jpg 21 38 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0001.jpg 11 39 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0002.jpg 11 40 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0003.jpg 11 41 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0004.jpg 11 42 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0005.jpg 11 43 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0006.jpg 11 44 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0007.jpg 11 45 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0008.jpg 11 46 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0009.jpg 11 47 | /data/office/domain_adaptation_images/dslr/images/keyboard/frame_0010.jpg 11 48 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0001.jpg 26 49 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0002.jpg 26 50 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0003.jpg 26 51 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0004.jpg 26 52 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0005.jpg 26 53 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0006.jpg 26 54 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0007.jpg 26 55 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0008.jpg 26 56 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0009.jpg 26 57 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0010.jpg 26 58 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0011.jpg 26 59 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0012.jpg 26 60 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0013.jpg 26 61 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0014.jpg 26 62 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0015.jpg 26 63 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0016.jpg 26 64 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0017.jpg 26 65 | /data/office/domain_adaptation_images/dslr/images/scissors/frame_0018.jpg 26 66 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0001.jpg 12 67 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0002.jpg 12 68 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0003.jpg 12 69 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0004.jpg 12 70 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0005.jpg 12 71 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0006.jpg 12 72 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0007.jpg 12 73 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0008.jpg 12 74 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0009.jpg 12 75 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0010.jpg 12 76 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0011.jpg 12 77 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0012.jpg 12 78 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0013.jpg 12 79 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0014.jpg 12 80 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0015.jpg 12 81 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0016.jpg 12 82 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0017.jpg 12 83 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0018.jpg 12 84 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0019.jpg 12 85 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0020.jpg 12 86 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0021.jpg 12 87 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0022.jpg 12 88 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0023.jpg 12 89 | /data/office/domain_adaptation_images/dslr/images/laptop_computer/frame_0024.jpg 12 90 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0001.jpg 16 91 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0002.jpg 16 92 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0003.jpg 16 93 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0004.jpg 16 94 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0005.jpg 16 95 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0006.jpg 16 96 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0007.jpg 16 97 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0008.jpg 16 98 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0009.jpg 16 99 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0010.jpg 16 100 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0011.jpg 16 101 | /data/office/domain_adaptation_images/dslr/images/mouse/frame_0012.jpg 16 102 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0001.jpg 15 103 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0002.jpg 15 104 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0003.jpg 15 105 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0004.jpg 15 106 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0005.jpg 15 107 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0006.jpg 15 108 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0007.jpg 15 109 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0008.jpg 15 110 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0009.jpg 15 111 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0010.jpg 15 112 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0011.jpg 15 113 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0012.jpg 15 114 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0013.jpg 15 115 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0014.jpg 15 116 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0015.jpg 15 117 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0016.jpg 15 118 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0017.jpg 15 119 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0018.jpg 15 120 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0019.jpg 15 121 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0020.jpg 15 122 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0021.jpg 15 123 | /data/office/domain_adaptation_images/dslr/images/monitor/frame_0022.jpg 15 124 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0001.jpg 17 125 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0002.jpg 17 126 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0003.jpg 17 127 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0004.jpg 17 128 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0005.jpg 17 129 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0006.jpg 17 130 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0007.jpg 17 131 | /data/office/domain_adaptation_images/dslr/images/mug/frame_0008.jpg 17 132 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0001.jpg 29 133 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0002.jpg 29 134 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0003.jpg 29 135 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0004.jpg 29 136 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0005.jpg 29 137 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0006.jpg 29 138 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0007.jpg 29 139 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0008.jpg 29 140 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0009.jpg 29 141 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0010.jpg 29 142 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0011.jpg 29 143 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0012.jpg 29 144 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0013.jpg 29 145 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0014.jpg 29 146 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0015.jpg 29 147 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0016.jpg 29 148 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0017.jpg 29 149 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0018.jpg 29 150 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0019.jpg 29 151 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0020.jpg 29 152 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0021.jpg 29 153 | /data/office/domain_adaptation_images/dslr/images/tape_dispenser/frame_0022.jpg 29 154 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0001.jpg 19 155 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0002.jpg 19 156 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0003.jpg 19 157 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0004.jpg 19 158 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0005.jpg 19 159 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0006.jpg 19 160 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0007.jpg 19 161 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0008.jpg 19 162 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0009.jpg 19 163 | /data/office/domain_adaptation_images/dslr/images/pen/frame_0010.jpg 19 164 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0001.jpg 1 165 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0002.jpg 1 166 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0003.jpg 1 167 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0004.jpg 1 168 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0005.jpg 1 169 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0006.jpg 1 170 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0007.jpg 1 171 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0008.jpg 1 172 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0009.jpg 1 173 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0010.jpg 1 174 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0011.jpg 1 175 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0012.jpg 1 176 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0013.jpg 1 177 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0014.jpg 1 178 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0015.jpg 1 179 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0016.jpg 1 180 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0017.jpg 1 181 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0018.jpg 1 182 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0019.jpg 1 183 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0020.jpg 1 184 | /data/office/domain_adaptation_images/dslr/images/bike/frame_0021.jpg 1 185 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0001.jpg 23 186 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0002.jpg 23 187 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0003.jpg 23 188 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0004.jpg 23 189 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0005.jpg 23 190 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0006.jpg 23 191 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0007.jpg 23 192 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0008.jpg 23 193 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0009.jpg 23 194 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0010.jpg 23 195 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0011.jpg 23 196 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0012.jpg 23 197 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0013.jpg 23 198 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0014.jpg 23 199 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0015.jpg 23 200 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0016.jpg 23 201 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0017.jpg 23 202 | /data/office/domain_adaptation_images/dslr/images/punchers/frame_0018.jpg 23 203 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0001.jpg 0 204 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0002.jpg 0 205 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0003.jpg 0 206 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0004.jpg 0 207 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0005.jpg 0 208 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0006.jpg 0 209 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0007.jpg 0 210 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0008.jpg 0 211 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0009.jpg 0 212 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0010.jpg 0 213 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0011.jpg 0 214 | /data/office/domain_adaptation_images/dslr/images/back_pack/frame_0012.jpg 0 215 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0001.jpg 8 216 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0002.jpg 8 217 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0003.jpg 8 218 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0004.jpg 8 219 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0005.jpg 8 220 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0006.jpg 8 221 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0007.jpg 8 222 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0008.jpg 8 223 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0009.jpg 8 224 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0010.jpg 8 225 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0011.jpg 8 226 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0012.jpg 8 227 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0013.jpg 8 228 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0014.jpg 8 229 | /data/office/domain_adaptation_images/dslr/images/desktop_computer/frame_0015.jpg 8 230 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0001.jpg 27 231 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0002.jpg 27 232 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0003.jpg 27 233 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0004.jpg 27 234 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0005.jpg 27 235 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0006.jpg 27 236 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0007.jpg 27 237 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0008.jpg 27 238 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0009.jpg 27 239 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0010.jpg 27 240 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0011.jpg 27 241 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0012.jpg 27 242 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0013.jpg 27 243 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0014.jpg 27 244 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0015.jpg 27 245 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0016.jpg 27 246 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0017.jpg 27 247 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0018.jpg 27 248 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0019.jpg 27 249 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0020.jpg 27 250 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0021.jpg 27 251 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0022.jpg 27 252 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0023.jpg 27 253 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0024.jpg 27 254 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0025.jpg 27 255 | /data/office/domain_adaptation_images/dslr/images/speaker/frame_0026.jpg 27 256 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0001.jpg 14 257 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0002.jpg 14 258 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0003.jpg 14 259 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0004.jpg 14 260 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0005.jpg 14 261 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0006.jpg 14 262 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0007.jpg 14 263 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0008.jpg 14 264 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0009.jpg 14 265 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0010.jpg 14 266 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0011.jpg 14 267 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0012.jpg 14 268 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0013.jpg 14 269 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0014.jpg 14 270 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0015.jpg 14 271 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0016.jpg 14 272 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0017.jpg 14 273 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0018.jpg 14 274 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0019.jpg 14 275 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0020.jpg 14 276 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0021.jpg 14 277 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0022.jpg 14 278 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0023.jpg 14 279 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0024.jpg 14 280 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0025.jpg 14 281 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0026.jpg 14 282 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0027.jpg 14 283 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0028.jpg 14 284 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0029.jpg 14 285 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0030.jpg 14 286 | /data/office/domain_adaptation_images/dslr/images/mobile_phone/frame_0031.jpg 14 287 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0001.jpg 18 288 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0002.jpg 18 289 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0003.jpg 18 290 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0004.jpg 18 291 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0005.jpg 18 292 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0006.jpg 18 293 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0007.jpg 18 294 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0008.jpg 18 295 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0009.jpg 18 296 | /data/office/domain_adaptation_images/dslr/images/paper_notebook/frame_0010.jpg 18 297 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0001.jpg 25 298 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0002.jpg 25 299 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0003.jpg 25 300 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0004.jpg 25 301 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0005.jpg 25 302 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0006.jpg 25 303 | /data/office/domain_adaptation_images/dslr/images/ruler/frame_0007.jpg 25 304 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0001.jpg 13 305 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0002.jpg 13 306 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0003.jpg 13 307 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0004.jpg 13 308 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0005.jpg 13 309 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0006.jpg 13 310 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0007.jpg 13 311 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0008.jpg 13 312 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0009.jpg 13 313 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0010.jpg 13 314 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0011.jpg 13 315 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0012.jpg 13 316 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0013.jpg 13 317 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0014.jpg 13 318 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0015.jpg 13 319 | /data/office/domain_adaptation_images/dslr/images/letter_tray/frame_0016.jpg 13 320 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0001.jpg 9 321 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0002.jpg 9 322 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0003.jpg 9 323 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0004.jpg 9 324 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0005.jpg 9 325 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0006.jpg 9 326 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0007.jpg 9 327 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0008.jpg 9 328 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0009.jpg 9 329 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0010.jpg 9 330 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0011.jpg 9 331 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0012.jpg 9 332 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0013.jpg 9 333 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0014.jpg 9 334 | /data/office/domain_adaptation_images/dslr/images/file_cabinet/frame_0015.jpg 9 335 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0001.jpg 20 336 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0002.jpg 20 337 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0003.jpg 20 338 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0004.jpg 20 339 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0005.jpg 20 340 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0006.jpg 20 341 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0007.jpg 20 342 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0008.jpg 20 343 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0009.jpg 20 344 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0010.jpg 20 345 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0011.jpg 20 346 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0012.jpg 20 347 | /data/office/domain_adaptation_images/dslr/images/phone/frame_0013.jpg 20 348 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0001.jpg 3 349 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0002.jpg 3 350 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0003.jpg 3 351 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0004.jpg 3 352 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0005.jpg 3 353 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0006.jpg 3 354 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0007.jpg 3 355 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0008.jpg 3 356 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0009.jpg 3 357 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0010.jpg 3 358 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0011.jpg 3 359 | /data/office/domain_adaptation_images/dslr/images/bookcase/frame_0012.jpg 3 360 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0001.jpg 22 361 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0002.jpg 22 362 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0003.jpg 22 363 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0004.jpg 22 364 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0005.jpg 22 365 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0006.jpg 22 366 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0007.jpg 22 367 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0008.jpg 22 368 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0009.jpg 22 369 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0010.jpg 22 370 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0011.jpg 22 371 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0012.jpg 22 372 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0013.jpg 22 373 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0014.jpg 22 374 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0015.jpg 22 375 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0016.jpg 22 376 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0017.jpg 22 377 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0018.jpg 22 378 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0019.jpg 22 379 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0020.jpg 22 380 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0021.jpg 22 381 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0022.jpg 22 382 | /data/office/domain_adaptation_images/dslr/images/projector/frame_0023.jpg 22 383 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0001.jpg 28 384 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0002.jpg 28 385 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0003.jpg 28 386 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0004.jpg 28 387 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0005.jpg 28 388 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0006.jpg 28 389 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0007.jpg 28 390 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0008.jpg 28 391 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0009.jpg 28 392 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0010.jpg 28 393 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0011.jpg 28 394 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0012.jpg 28 395 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0013.jpg 28 396 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0014.jpg 28 397 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0015.jpg 28 398 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0016.jpg 28 399 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0017.jpg 28 400 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0018.jpg 28 401 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0019.jpg 28 402 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0020.jpg 28 403 | /data/office/domain_adaptation_images/dslr/images/stapler/frame_0021.jpg 28 404 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0001.jpg 30 405 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0002.jpg 30 406 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0003.jpg 30 407 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0004.jpg 30 408 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0005.jpg 30 409 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0006.jpg 30 410 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0007.jpg 30 411 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0008.jpg 30 412 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0009.jpg 30 413 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0010.jpg 30 414 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0011.jpg 30 415 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0012.jpg 30 416 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0013.jpg 30 417 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0014.jpg 30 418 | /data/office/domain_adaptation_images/dslr/images/trash_can/frame_0015.jpg 30 419 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0001.jpg 2 420 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0002.jpg 2 421 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0003.jpg 2 422 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0004.jpg 2 423 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0005.jpg 2 424 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0006.jpg 2 425 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0007.jpg 2 426 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0008.jpg 2 427 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0009.jpg 2 428 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0010.jpg 2 429 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0011.jpg 2 430 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0012.jpg 2 431 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0013.jpg 2 432 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0014.jpg 2 433 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0015.jpg 2 434 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0016.jpg 2 435 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0017.jpg 2 436 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0018.jpg 2 437 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0019.jpg 2 438 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0020.jpg 2 439 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0021.jpg 2 440 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0022.jpg 2 441 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0023.jpg 2 442 | /data/office/domain_adaptation_images/dslr/images/bike_helmet/frame_0024.jpg 2 443 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0001.jpg 10 444 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0002.jpg 10 445 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0003.jpg 10 446 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0004.jpg 10 447 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0005.jpg 10 448 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0006.jpg 10 449 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0007.jpg 10 450 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0008.jpg 10 451 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0009.jpg 10 452 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0010.jpg 10 453 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0011.jpg 10 454 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0012.jpg 10 455 | /data/office/domain_adaptation_images/dslr/images/headphones/frame_0013.jpg 10 456 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0001.jpg 7 457 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0002.jpg 7 458 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0003.jpg 7 459 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0004.jpg 7 460 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0005.jpg 7 461 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0006.jpg 7 462 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0007.jpg 7 463 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0008.jpg 7 464 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0009.jpg 7 465 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0010.jpg 7 466 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0011.jpg 7 467 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0012.jpg 7 468 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0013.jpg 7 469 | /data/office/domain_adaptation_images/dslr/images/desk_lamp/frame_0014.jpg 7 470 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0001.jpg 6 471 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0002.jpg 6 472 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0003.jpg 6 473 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0004.jpg 6 474 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0005.jpg 6 475 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0006.jpg 6 476 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0007.jpg 6 477 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0008.jpg 6 478 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0009.jpg 6 479 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0010.jpg 6 480 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0011.jpg 6 481 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0012.jpg 6 482 | /data/office/domain_adaptation_images/dslr/images/desk_chair/frame_0013.jpg 6 483 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0001.jpg 4 484 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0002.jpg 4 485 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0003.jpg 4 486 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0004.jpg 4 487 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0005.jpg 4 488 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0006.jpg 4 489 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0007.jpg 4 490 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0008.jpg 4 491 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0009.jpg 4 492 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0010.jpg 4 493 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0011.jpg 4 494 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0012.jpg 4 495 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0013.jpg 4 496 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0014.jpg 4 497 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0015.jpg 4 498 | /data/office/domain_adaptation_images/dslr/images/bottle/frame_0016.jpg 4 499 | -------------------------------------------------------------------------------- /pytorch/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thuml/Versatile-Domain-Adaptation/db5012a058a1288edfeb9cb8b1e22b2c78abcfe9/pytorch/__init__.py -------------------------------------------------------------------------------- /pytorch/alexnet.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import os 3 | import torch.nn as nn 4 | import torch.utils.model_zoo as model_zoo 5 | 6 | 7 | __all__ = ['AlexNet', 'alexnet'] 8 | 9 | class LRN(nn.Module): 10 | def __init__(self, local_size=1, alpha=1.0, beta=0.75, ACROSS_CHANNELS=True): 11 | super(LRN, self).__init__() 12 | self.ACROSS_CHANNELS = ACROSS_CHANNELS 13 | if ACROSS_CHANNELS: 14 | self.average=nn.AvgPool3d(kernel_size=(local_size, 1, 1), 15 | stride=1, 16 | padding=(int((local_size-1.0)/2), 0, 0)) 17 | else: 18 | self.average=nn.AvgPool2d(kernel_size=local_size, 19 | stride=1, 20 | padding=int((local_size-1.0)/2)) 21 | self.alpha = alpha 22 | self.beta = beta 23 | 24 | 25 | def forward(self, x): 26 | if self.ACROSS_CHANNELS: 27 | div = x.pow(2).unsqueeze(1) 28 | div = self.average(div).squeeze(1) 29 | div = div.mul(self.alpha).add(1.0).pow(self.beta) 30 | else: 31 | div = x.pow(2) 32 | div = self.average(div) 33 | div = div.mul(self.alpha).add(1.0).pow(self.beta) 34 | x = x.div(div) 35 | return x 36 | 37 | class AlexNet(nn.Module): 38 | 39 | def __init__(self, num_classes=1000): 40 | super(AlexNet, self).__init__() 41 | self.features = nn.Sequential( 42 | nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=0), 43 | nn.ReLU(inplace=True), 44 | LRN(local_size=5, alpha=0.0001, beta=0.75), 45 | nn.MaxPool2d(kernel_size=3, stride=2), 46 | nn.Conv2d(96, 256, kernel_size=5, padding=2, groups=2), 47 | nn.ReLU(inplace=True), 48 | LRN(local_size=5, alpha=0.0001, beta=0.75), 49 | nn.MaxPool2d(kernel_size=3, stride=2), 50 | nn.Conv2d(256, 384, kernel_size=3, padding=1), 51 | nn.ReLU(inplace=True), 52 | nn.Conv2d(384, 384, kernel_size=3, padding=1, groups=2), 53 | nn.ReLU(inplace=True), 54 | nn.Conv2d(384, 256, kernel_size=3, padding=1, groups=2), 55 | nn.ReLU(inplace=True), 56 | nn.MaxPool2d(kernel_size=3, stride=2), 57 | ) 58 | self.classifier = nn.Sequential( 59 | nn.Linear(256 * 6 * 6, 4096), 60 | nn.ReLU(inplace=True), 61 | nn.Dropout(), 62 | nn.Linear(4096, 4096), 63 | nn.ReLU(inplace=True), 64 | nn.Dropout(), 65 | nn.Linear(4096, num_classes), 66 | ) 67 | 68 | def forward(self, x): 69 | x = self.features(x) 70 | x = x.view(x.size(0), 256 * 6 * 6) 71 | x = self.classifier(x) 72 | return x 73 | 74 | 75 | def alexnet(pretrained=False, **kwargs): 76 | r"""AlexNet model architecture from the 77 | `"One weird trick..." `_ paper. 78 | Args: 79 | pretrained (bool): If True, returns a model pre-trained on ImageNet 80 | """ 81 | model = AlexNet(**kwargs) 82 | if pretrained: 83 | model_path = './alexnet.pth.tar' 84 | pretrained_model = torch.load(model_path) 85 | model.load_state_dict(pretrained_model['state_dict']) 86 | return model 87 | -------------------------------------------------------------------------------- /pytorch/data_list.py: -------------------------------------------------------------------------------- 1 | #from __future__ import print_function, division 2 | 3 | import torch 4 | import numpy as np 5 | import random 6 | from PIL import Image 7 | from torch.utils.data import Dataset 8 | import os 9 | import os.path 10 | 11 | def make_dataset(image_list, labels): 12 | if labels: 13 | len_ = len(image_list) 14 | images = [(image_list[i].strip(), labels[i, :]) for i in range(len_)] 15 | else: 16 | if len(image_list[0].split()) > 2: 17 | images = [(val.split()[0], np.array([int(la) for la in val.split()[1:]])) for val in image_list] 18 | else: 19 | images = [(val.split()[0], int(val.split()[1])) for val in image_list] 20 | return images 21 | 22 | 23 | def rgb_loader(path): 24 | with open(path, 'rb') as f: 25 | with Image.open(f) as img: 26 | return img.convert('RGB') 27 | 28 | def l_loader(path): 29 | with open(path, 'rb') as f: 30 | with Image.open(f) as img: 31 | return img.convert('L') 32 | 33 | class ImageList(Dataset): 34 | def __init__(self, image_list, labels=None, transform=None, target_transform=None, mode='RGB'): 35 | imgs = make_dataset(image_list, labels) 36 | if len(imgs) == 0: 37 | raise(RuntimeError("Found 0 images in subfolders of: " + root + "\n" 38 | "Supported image extensions are: " + ",".join(IMG_EXTENSIONS))) 39 | 40 | self.imgs = imgs 41 | self.transform = transform 42 | self.target_transform = target_transform 43 | if mode == 'RGB': 44 | self.loader = rgb_loader 45 | elif mode == 'L': 46 | self.loader = l_loader 47 | 48 | def __getitem__(self, index): 49 | path, target = self.imgs[index] 50 | img = self.loader(path) 51 | if self.transform is not None: 52 | img = self.transform(img) 53 | if self.target_transform is not None: 54 | target = self.target_transform(target) 55 | 56 | return img, target 57 | 58 | def __len__(self): 59 | return len(self.imgs) 60 | 61 | class ImageValueList(Dataset): 62 | def __init__(self, image_list, labels=None, transform=None, target_transform=None, 63 | loader=rgb_loader): 64 | imgs = make_dataset(image_list, labels) 65 | if len(imgs) == 0: 66 | raise(RuntimeError("Found 0 images in subfolders of: " + root + "\n" 67 | "Supported image extensions are: " + ",".join(IMG_EXTENSIONS))) 68 | 69 | self.imgs = imgs 70 | self.values = [1.0] * len(imgs) 71 | self.transform = transform 72 | self.target_transform = target_transform 73 | self.loader = loader 74 | 75 | def set_values(self, values): 76 | self.values = values 77 | 78 | def __getitem__(self, index): 79 | path, target = self.imgs[index] 80 | img = self.loader(path) 81 | if self.transform is not None: 82 | img = self.transform(img) 83 | if self.target_transform is not None: 84 | target = self.target_transform(target) 85 | 86 | return img, target 87 | 88 | def __len__(self): 89 | return len(self.imgs) 90 | 91 | -------------------------------------------------------------------------------- /pytorch/loss.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | import torch.nn as nn 4 | from torch.autograd import Variable 5 | import math 6 | import torch.nn.functional as F 7 | import pdb 8 | def Entropy(input_): 9 | bs = input_.size(0) 10 | epsilon = 1e-5 11 | entropy = -input_ * torch.log(input_ + epsilon) 12 | entropy = torch.sum(entropy, dim=1) 13 | return entropy 14 | 15 | 16 | def grl_hook(coeff): 17 | def fun1(grad): 18 | return -coeff*grad.clone() 19 | return fun1 20 | 21 | 22 | def CDAN(input_list, ad_net, entropy=None, coeff=None, random_layer=None): 23 | softmax_output = input_list[1].detach() 24 | feature = input_list[0] 25 | if random_layer is None: 26 | op_out = torch.bmm(softmax_output.unsqueeze(2), feature.unsqueeze(1)) 27 | ad_out = ad_net(op_out.view(-1, softmax_output.size(1) * feature.size(1))) 28 | else: 29 | random_out = random_layer.forward([feature, softmax_output]) 30 | ad_out = ad_net(random_out.view(-1, random_out.size(1))) 31 | batch_size = softmax_output.size(0) // 2 32 | dc_target = torch.from_numpy(np.array([[1]] * batch_size + [[0]] * batch_size)).float().cuda() 33 | if entropy is not None: 34 | entropy.register_hook(grl_hook(coeff)) 35 | entropy = 1.0+torch.exp(-entropy) 36 | source_mask = torch.ones_like(entropy) 37 | source_mask[feature.size(0)//2:] = 0 38 | source_weight = entropy*source_mask 39 | target_mask = torch.ones_like(entropy) 40 | target_mask[0:feature.size(0)//2] = 0 41 | target_weight = entropy*target_mask 42 | weight = source_weight / torch.sum(source_weight).detach().item() + \ 43 | target_weight / torch.sum(target_weight).detach().item() 44 | return torch.sum(weight.view(-1, 1) * nn.BCELoss(reduction='none')(ad_out, dc_target)) / torch.sum(weight).detach().item() 45 | else: 46 | return nn.BCELoss()(ad_out, dc_target) 47 | 48 | def BSP(feature): 49 | feature_s = feature.narrow(0, 0, int(feature.size(0) / 2)) 50 | feature_t = feature.narrow(0, int(feature.size(0) / 2), int(feature.size(0) / 2)) 51 | _, s_s, _ = torch.svd(feature_s) 52 | _, s_t, _ = torch.svd(feature_t) 53 | sigma = torch.pow(s_s[0], 2) + torch.pow(s_t[0], 2) 54 | return sigma 55 | 56 | 57 | def DANN(features, ad_net): 58 | ad_out = ad_net(features) 59 | batch_size = ad_out.size(0) // 2 60 | dc_target = torch.from_numpy(np.array([[1]] * batch_size + [[0]] * batch_size)).float().cuda() 61 | return nn.BCELoss()(ad_out, dc_target) 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /pytorch/lr_schedule.py: -------------------------------------------------------------------------------- 1 | def inv_lr_scheduler(optimizer, iter_num, gamma, power, lr=0.001, weight_decay=0.0005): 2 | """Decay learning rate by a factor of 0.1 every lr_decay_epoch epochs.""" 3 | lr = lr * (1 + gamma * iter_num) ** (-power) 4 | i=0 5 | for param_group in optimizer.param_groups: 6 | param_group['lr'] = lr * param_group['lr_mult'] 7 | param_group['weight_decay'] = weight_decay * param_group['decay_mult'] 8 | i+=1 9 | 10 | return optimizer 11 | 12 | 13 | schedule_dict = {"inv":inv_lr_scheduler} 14 | -------------------------------------------------------------------------------- /pytorch/network.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | import torch.nn as nn 4 | import torchvision 5 | from torchvision import models 6 | from torch.autograd import Variable 7 | import math 8 | import pdb 9 | 10 | def calc_coeff(iter_num, high=1.0, low=0.0, alpha=10.0, max_iter=10000.0): 11 | return np.float(2.0 * (high - low) / (1.0 + np.exp(-alpha*iter_num / max_iter)) - (high - low) + low) 12 | 13 | def init_weights(m): 14 | classname = m.__class__.__name__ 15 | if classname.find('Conv2d') != -1 or classname.find('ConvTranspose2d') != -1: 16 | nn.init.kaiming_uniform_(m.weight) 17 | nn.init.zeros_(m.bias) 18 | elif classname.find('BatchNorm') != -1: 19 | nn.init.normal_(m.weight, 1.0, 0.02) 20 | nn.init.zeros_(m.bias) 21 | elif classname.find('Linear') != -1: 22 | nn.init.xavier_normal_(m.weight) 23 | nn.init.zeros_(m.bias) 24 | 25 | class RandomLayer(nn.Module): 26 | def __init__(self, input_dim_list=[], output_dim=1024): 27 | super(RandomLayer, self).__init__() 28 | self.input_num = len(input_dim_list) 29 | self.output_dim = output_dim 30 | self.random_matrix = [torch.randn(input_dim_list[i], output_dim) for i in range(self.input_num)] 31 | 32 | def forward(self, input_list): 33 | return_list = [torch.mm(input_list[i], self.random_matrix[i]) for i in range(self.input_num)] 34 | return_tensor = return_list[0] / math.pow(float(self.output_dim), 1.0/len(return_list)) 35 | for single in return_list[1:]: 36 | return_tensor = torch.mul(return_tensor, single) 37 | return return_tensor 38 | 39 | def cuda(self): 40 | super(RandomLayer, self).cuda() 41 | self.random_matrix = [val.cuda() for val in self.random_matrix] 42 | 43 | class LRN(nn.Module): 44 | def __init__(self, local_size=1, alpha=1.0, beta=0.75, ACROSS_CHANNELS=True): 45 | super(LRN, self).__init__() 46 | self.ACROSS_CHANNELS = ACROSS_CHANNELS 47 | if ACROSS_CHANNELS: 48 | self.average=nn.AvgPool3d(kernel_size=(local_size, 1, 1), 49 | stride=1, 50 | padding=(int((local_size-1.0)/2), 0, 0)) 51 | else: 52 | self.average=nn.AvgPool2d(kernel_size=local_size, 53 | stride=1, 54 | padding=int((local_size-1.0)/2)) 55 | self.alpha = alpha 56 | self.beta = beta 57 | 58 | 59 | def forward(self, x): 60 | if self.ACROSS_CHANNELS: 61 | div = x.pow(2).unsqueeze(1) 62 | div = self.average(div).squeeze(1) 63 | div = div.mul(self.alpha).add(1.0).pow(self.beta) 64 | else: 65 | div = x.pow(2) 66 | div = self.average(div) 67 | div = div.mul(self.alpha).add(1.0).pow(self.beta) 68 | x = x.div(div) 69 | return x 70 | 71 | class AlexNet(nn.Module): 72 | 73 | def __init__(self, num_classes=1000): 74 | super(AlexNet, self).__init__() 75 | self.features = nn.Sequential( 76 | nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=0), 77 | nn.ReLU(inplace=True), 78 | LRN(local_size=5, alpha=0.0001, beta=0.75), 79 | nn.MaxPool2d(kernel_size=3, stride=2), 80 | nn.Conv2d(96, 256, kernel_size=5, padding=2, groups=2), 81 | nn.ReLU(inplace=True), 82 | LRN(local_size=5, alpha=0.0001, beta=0.75), 83 | nn.MaxPool2d(kernel_size=3, stride=2), 84 | nn.Conv2d(256, 384, kernel_size=3, padding=1), 85 | nn.ReLU(inplace=True), 86 | nn.Conv2d(384, 384, kernel_size=3, padding=1, groups=2), 87 | nn.ReLU(inplace=True), 88 | nn.Conv2d(384, 256, kernel_size=3, padding=1, groups=2), 89 | nn.ReLU(inplace=True), 90 | nn.MaxPool2d(kernel_size=3, stride=2), 91 | ) 92 | self.classifier = nn.Sequential( 93 | nn.Linear(256 * 6 * 6, 4096), 94 | nn.ReLU(inplace=True), 95 | nn.Dropout(), 96 | nn.Linear(4096, 4096), 97 | nn.ReLU(inplace=True), 98 | nn.Dropout(), 99 | nn.Linear(4096, num_classes), 100 | ) 101 | 102 | def forward(self, x): 103 | x = self.features(x) 104 | print(x.size()) 105 | x = x.view(x.size(0), 256 * 6 * 6) 106 | x = self.classifier(x) 107 | return x 108 | 109 | 110 | def alexnet(pretrained=False, **kwargs): 111 | r"""AlexNet model architecture from the 112 | `"One weird trick..." `_ paper. 113 | Args: 114 | pretrained (bool): If True, returns a model pre-trained on ImageNet 115 | """ 116 | model = AlexNet(**kwargs) 117 | if pretrained: 118 | model_path = './alexnet.pth.tar' 119 | pretrained_model = torch.load(model_path) 120 | model.load_state_dict(pretrained_model['state_dict']) 121 | return model 122 | 123 | # convnet without the last layer 124 | class AlexNetFc(nn.Module): 125 | def __init__(self, use_bottleneck=True, bottleneck_dim=256, new_cls=False, class_num=1000): 126 | super(AlexNetFc, self).__init__() 127 | model_alexnet = alexnet(pretrained=True) 128 | self.features = model_alexnet.features 129 | self.classifier = nn.Sequential() 130 | for i in range(6): 131 | self.classifier.add_module("classifier"+str(i), model_alexnet.classifier[i]) 132 | self.feature_layers = nn.Sequential(self.features, self.classifier) 133 | 134 | self.use_bottleneck = use_bottleneck 135 | self.new_cls = new_cls 136 | if new_cls: 137 | if self.use_bottleneck: 138 | self.bottleneck = nn.Linear(4096, bottleneck_dim) 139 | self.fc = nn.Linear(bottleneck_dim, class_num) 140 | self.bottleneck.apply(init_weights) 141 | self.fc.apply(init_weights) 142 | self.__in_features = bottleneck_dim 143 | else: 144 | self.fc = nn.Linear(4096, class_num) 145 | self.fc.apply(init_weights) 146 | self.__in_features = 4096 147 | else: 148 | self.fc = model_alexnet.classifier[6] 149 | self.__in_features = 4096 150 | 151 | def forward(self, x): 152 | x = self.features(x) 153 | x = x.view(x.size(0), -1) 154 | x = self.classifier(x) 155 | if self.use_bottleneck and self.new_cls: 156 | x = self.bottleneck(x) 157 | y = self.fc(x) 158 | return x, y 159 | 160 | def output_num(self): 161 | return self.__in_features 162 | 163 | def get_parameters(self): 164 | if self.new_cls: 165 | if self.use_bottleneck: 166 | parameter_list = [{"params":self.features.parameters(), "lr_mult":1, 'decay_mult':2}, \ 167 | {"params":self.classifier.parameters(), "lr_mult":1, 'decay_mult':2}, \ 168 | {"params":self.bottleneck.parameters(), "lr_mult":10, 'decay_mult':2}, \ 169 | {"params":self.fc.parameters(), "lr_mult":10, 'decay_mult':2}] 170 | else: 171 | parameter_list = [{"params":self.feature_layers.parameters(), "lr_mult":1, 'decay_mult':2}, \ 172 | {"params":self.classifier.parameters(), "lr_mult":1, 'decay_mult':2}, \ 173 | {"params":self.fc.parameters(), "lr_mult":10, 'decay_mult':2}] 174 | else: 175 | parameter_list = [{"params":self.parameters(), "lr_mult":1, 'decay_mult':2}] 176 | return parameter_list 177 | 178 | 179 | resnet_dict = {"ResNet18":models.resnet18, "ResNet34":models.resnet34, "ResNet50":models.resnet50, "ResNet101":models.resnet101, "ResNet152":models.resnet152} 180 | 181 | def grl_hook(coeff): 182 | def fun1(grad): 183 | return -coeff*grad.clone() 184 | return fun1 185 | 186 | class ResNetFc(nn.Module): 187 | def __init__(self, resnet_name, use_bottleneck=True, bottleneck_dim=1024, new_cls=False, class_num=1000): 188 | super(ResNetFc, self).__init__() 189 | model_resnet = resnet_dict[resnet_name](pretrained=True) 190 | self.conv1 = model_resnet.conv1 191 | self.bn1 = model_resnet.bn1 192 | self.relu = model_resnet.relu 193 | self.maxpool = model_resnet.maxpool 194 | self.layer1 = model_resnet.layer1 195 | self.layer2 = model_resnet.layer2 196 | self.layer3 = model_resnet.layer3 197 | self.layer4 = model_resnet.layer4 198 | self.avgpool = model_resnet.avgpool 199 | self.feature_layers = nn.Sequential(self.conv1, self.bn1, self.relu, self.maxpool, \ 200 | self.layer1, self.layer2, self.layer3, self.layer4, self.avgpool) 201 | 202 | self.use_bottleneck = use_bottleneck 203 | self.new_cls = new_cls 204 | if new_cls: 205 | if self.use_bottleneck: 206 | self.bottleneck = nn.Linear(model_resnet.fc.in_features, bottleneck_dim) 207 | self.bottleneck_bn = nn.BatchNorm1d(bottleneck_dim) 208 | self.fc = nn.Linear(bottleneck_dim, class_num) 209 | self.bottleneck.apply(init_weights) 210 | self.fc.apply(init_weights) 211 | self.bottleneck_bn.weight.data.normal_(0, 0.005) 212 | self.bottleneck_bn.bias.data.fill_(0.0) 213 | self.__in_features = bottleneck_dim 214 | else: 215 | self.fc = nn.Linear(model_resnet.fc.in_features, class_num) 216 | self.fc.apply(init_weights) 217 | self.__in_features = model_resnet.fc.in_features 218 | else: 219 | self.fc = model_resnet.fc 220 | self.__in_features = model_resnet.fc.in_features 221 | 222 | def forward(self, x): 223 | x = self.feature_layers(x) 224 | x = x.view(x.size(0), -1) 225 | if self.use_bottleneck and self.new_cls: 226 | x = self.bottleneck(x) 227 | x = self.bottleneck_bn(x) 228 | y = self.fc(x) 229 | return x, y 230 | 231 | def output_num(self): 232 | return self.__in_features 233 | 234 | def get_parameters(self): 235 | if self.new_cls: 236 | if self.use_bottleneck: 237 | parameter_list = [{"params":self.feature_layers.parameters(), "lr_mult":1, 'decay_mult':2}, \ 238 | {"params":self.bottleneck.parameters(), "lr_mult":10, 'decay_mult':2}, \ 239 | {"params":self.bottleneck_bn.parameters(), "lr_mult":10, 'decay_mult':2}, \ 240 | {"params":self.fc.parameters(), "lr_mult":10, 'decay_mult':2}] 241 | else: 242 | parameter_list = [{"params":self.feature_layers.parameters(), "lr_mult":1, 'decay_mult':2}, \ 243 | {"params":self.fc.parameters(), "lr_mult":10, 'decay_mult':2}] 244 | else: 245 | parameter_list = [{"params":self.parameters(), "lr_mult":1, 'decay_mult':2}] 246 | return parameter_list 247 | 248 | vgg_dict = {"VGG11":models.vgg11, "VGG13":models.vgg13, "VGG16":models.vgg16, "VGG19":models.vgg19, "VGG11BN":models.vgg11_bn, "VGG13BN":models.vgg13_bn, "VGG16BN":models.vgg16_bn, "VGG19BN":models.vgg19_bn} 249 | class VGGFc(nn.Module): 250 | def __init__(self, vgg_name, use_bottleneck=True, bottleneck_dim=256, new_cls=False, class_num=1000): 251 | super(VGGFc, self).__init__() 252 | model_vgg = vgg_dict[vgg_name](pretrained=True) 253 | self.features = model_vgg.features 254 | self.classifier = nn.Sequential() 255 | for i in range(6): 256 | self.classifier.add_module("classifier"+str(i), model_vgg.classifier[i]) 257 | self.feature_layers = nn.Sequential(self.features, self.classifier) 258 | 259 | self.use_bottleneck = use_bottleneck 260 | self.new_cls = new_cls 261 | if new_cls: 262 | if self.use_bottleneck: 263 | self.bottleneck = nn.Linear(4096, bottleneck_dim) 264 | self.fc = nn.Linear(bottleneck_dim, class_num) 265 | self.bottleneck.apply(init_weights) 266 | self.fc.apply(init_weights) 267 | self.__in_features = bottleneck_dim 268 | else: 269 | self.fc = nn.Linear(4096, class_num) 270 | self.fc.apply(init_weights) 271 | self.__in_features = 4096 272 | else: 273 | self.fc = model_vgg.classifier[6] 274 | self.__in_features = 4096 275 | 276 | def forward(self, x): 277 | x = self.features(x) 278 | x = x.view(x.size(0), -1) 279 | x = self.classifier(x) 280 | if self.use_bottleneck and self.new_cls: 281 | x = self.bottleneck(x) 282 | y = self.fc(x) 283 | return x, y 284 | 285 | def output_num(self): 286 | return self.__in_features 287 | 288 | def get_parameters(self): 289 | if self.new_cls: 290 | if self.use_bottleneck: 291 | parameter_list = [{"params":self.features.parameters(), "lr_mult":1, 'decay_mult':2}, \ 292 | {"params":self.classifier.parameters(), "lr_mult":1, 'decay_mult':2}, \ 293 | {"params":self.bottleneck.parameters(), "lr_mult":10, 'decay_mult':2}, \ 294 | {"params":self.fc.parameters(), "lr_mult":10, 'decay_mult':2}] 295 | else: 296 | parameter_list = [{"params":self.feature_layers.parameters(), "lr_mult":1, 'decay_mult':2}, \ 297 | {"params":self.classifier.parameters(), "lr_mult":1, 'decay_mult':2}, \ 298 | {"params":self.fc.parameters(), "lr_mult":10, 'decay_mult':2}] 299 | else: 300 | parameter_list = [{"params":self.parameters(), "lr_mult":1, 'decay_mult':2}] 301 | return parameter_list 302 | 303 | # For SVHN dataset 304 | class DTN(nn.Module): 305 | def __init__(self): 306 | super(DTN, self).__init__() 307 | self.conv_params = nn.Sequential ( 308 | nn.Conv2d(3, 64, kernel_size=5, stride=2, padding=2), 309 | nn.BatchNorm2d(64), 310 | nn.Dropout2d(0.1), 311 | nn.ReLU(), 312 | nn.Conv2d(64, 128, kernel_size=5, stride=2, padding=2), 313 | nn.BatchNorm2d(128), 314 | nn.Dropout2d(0.3), 315 | nn.ReLU(), 316 | nn.Conv2d(128, 256, kernel_size=5, stride=2, padding=2), 317 | nn.BatchNorm2d(256), 318 | nn.Dropout2d(0.5), 319 | nn.ReLU() 320 | ) 321 | 322 | self.fc_params = nn.Sequential ( 323 | nn.Linear(256*4*4, 512), 324 | nn.BatchNorm1d(512), 325 | nn.ReLU(), 326 | nn.Dropout() 327 | ) 328 | 329 | self.classifier = nn.Linear(512, 10) 330 | self.__in_features = 512 331 | 332 | def forward(self, x): 333 | x = self.conv_params(x) 334 | x = x.view(x.size(0), -1) 335 | x = self.fc_params(x) 336 | y = self.classifier(x) 337 | return x, y 338 | 339 | def output_num(self): 340 | return self.__in_features 341 | 342 | class LeNet(nn.Module): 343 | def __init__(self): 344 | super(LeNet, self).__init__() 345 | self.conv_params = nn.Sequential( 346 | nn.Conv2d(1, 20, kernel_size=5), 347 | nn.MaxPool2d(2), 348 | nn.ReLU(), 349 | nn.Conv2d(20, 50, kernel_size=5), 350 | nn.Dropout2d(p=0.5), 351 | nn.MaxPool2d(2), 352 | nn.ReLU(), 353 | ) 354 | 355 | self.fc_params = nn.Sequential(nn.Linear(50*4*4, 500), nn.ReLU(), nn.Dropout(p=0.5)) 356 | self.classifier = nn.Linear(500, 10) 357 | self.__in_features = 500 358 | 359 | 360 | def forward(self, x): 361 | x = self.conv_params(x) 362 | x = x.view(x.size(0), -1) 363 | x = self.fc_params(x) 364 | y = self.classifier(x) 365 | return x, y 366 | 367 | def output_num(self): 368 | return self.__in_features 369 | 370 | class AdversarialNetwork(nn.Module): 371 | def __init__(self, in_feature, hidden_size, output_dim = 1): 372 | super(AdversarialNetwork, self).__init__() 373 | self.ad_layer1 = nn.Linear(in_feature, hidden_size) 374 | self.ad_layer2 = nn.Linear(hidden_size, hidden_size) 375 | self.ad_layer3 = nn.Linear(hidden_size, output_dim) 376 | self.relu1 = nn.ReLU() 377 | self.relu2 = nn.ReLU() 378 | self.dropout1 = nn.Dropout(0.5) 379 | self.dropout2 = nn.Dropout(0.5) 380 | self.sigmoid = nn.Sigmoid() 381 | self.apply(init_weights) 382 | self.iter_num = 0 383 | self.alpha = 10 384 | self.low = 0.0 385 | self.high = 1.0 386 | self.max_iter = 10000.0 387 | self.output_dim = output_dim 388 | 389 | def forward(self, x): 390 | if self.training: 391 | self.iter_num += 1 392 | coeff = calc_coeff(self.iter_num, self.high, self.low, self.alpha, self.max_iter) 393 | x = x * 1.0 394 | x.register_hook(grl_hook(coeff)) 395 | x = self.ad_layer1(x) 396 | x = self.relu1(x) 397 | x = self.dropout1(x) 398 | x = self.ad_layer2(x) 399 | x = self.relu2(x) 400 | x = self.dropout2(x) 401 | y = self.ad_layer3(x) 402 | y = self.sigmoid(y) 403 | return y 404 | 405 | def output_num(self): 406 | return self.output_dim 407 | 408 | def get_parameters(self): 409 | return [{"params":self.parameters(), "lr_mult":10, 'decay_mult':2}] 410 | 411 | class ANet(nn.Module): 412 | def __init__(self, in_feature): 413 | super(ANet, self).__init__() 414 | self.ad_layer1 = nn.Linear(in_feature, 1) 415 | self.sigmoid = nn.Sigmoid() 416 | self.apply(init_weights) 417 | 418 | def forward(self, x): 419 | x = self.ad_layer1(x) 420 | x = self.sigmoid(x) 421 | return x 422 | 423 | def output_num(self): 424 | return 1 425 | 426 | def get_parameters(self): 427 | return [{"params":self.parameters(), "lr_mult":10, 'decay_mult':2}] 428 | 429 | class LambdaNet(nn.Module): 430 | def __init__(self, in_feature): 431 | super(LambdaNet, self).__init__() 432 | self.ad_layer1 = nn.Linear(in_feature, 31) 433 | self.ad_layer1.weight.data.normal_(0, 0.3) 434 | self.ad_layer1.bias.data.fill_(0.0) 435 | # self.apply(init_weights) 436 | 437 | def forward(self, x): 438 | x = self.ad_layer1(x) 439 | return x 440 | -------------------------------------------------------------------------------- /pytorch/pre_process.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from torchvision import transforms 3 | import os 4 | from PIL import Image, ImageOps 5 | import numbers 6 | import torch 7 | 8 | class ResizeImage(): 9 | def __init__(self, size): 10 | if isinstance(size, int): 11 | self.size = (int(size), int(size)) 12 | else: 13 | self.size = size 14 | def __call__(self, img): 15 | th, tw = self.size 16 | return img.resize((th, tw)) 17 | 18 | class RandomSizedCrop(object): 19 | """Crop the given PIL.Image to random size and aspect ratio. 20 | A crop of random size of (0.08 to 1.0) of the original size and a random 21 | aspect ratio of 3/4 to 4/3 of the original aspect ratio is made. This crop 22 | is finally resized to given size. 23 | This is popularly used to train the Inception networks. 24 | Args: 25 | size: size of the smaller edge 26 | interpolation: Default: PIL.Image.BILINEAR 27 | """ 28 | 29 | def __init__(self, size, interpolation=Image.BILINEAR): 30 | self.size = size 31 | self.interpolation = interpolation 32 | 33 | def __call__(self, img): 34 | h_off = random.randint(0, img.shape[1]-self.size) 35 | w_off = random.randint(0, img.shape[2]-self.size) 36 | img = img[:, h_off:h_off+self.size, w_off:w_off+self.size] 37 | return img 38 | 39 | 40 | class Normalize(object): 41 | """Normalize an tensor image with mean and standard deviation. 42 | Given mean: (R, G, B), 43 | will normalize each channel of the torch.*Tensor, i.e. 44 | channel = channel - mean 45 | Args: 46 | mean (sequence): Sequence of means for R, G, B channels respecitvely. 47 | """ 48 | 49 | def __init__(self, mean=None, meanfile=None): 50 | if mean: 51 | self.mean = mean 52 | else: 53 | arr = np.load(meanfile) 54 | self.mean = torch.from_numpy(arr.astype('float32')/255.0)[[2,1,0],:,:] 55 | 56 | def __call__(self, tensor): 57 | """ 58 | Args: 59 | tensor (Tensor): Tensor image of size (C, H, W) to be normalized. 60 | Returns: 61 | Tensor: Normalized image. 62 | """ 63 | # TODO: make efficient 64 | for t, m in zip(tensor, self.mean): 65 | t.sub_(m) 66 | return tensor 67 | 68 | 69 | 70 | class PlaceCrop(object): 71 | """Crops the given PIL.Image at the particular index. 72 | Args: 73 | size (sequence or int): Desired output size of the crop. If size is an 74 | int instead of sequence like (w, h), a square crop (size, size) is 75 | made. 76 | """ 77 | 78 | def __init__(self, size, start_x, start_y): 79 | if isinstance(size, int): 80 | self.size = (int(size), int(size)) 81 | else: 82 | self.size = size 83 | self.start_x = start_x 84 | self.start_y = start_y 85 | 86 | def __call__(self, img): 87 | """ 88 | Args: 89 | img (PIL.Image): Image to be cropped. 90 | Returns: 91 | PIL.Image: Cropped image. 92 | """ 93 | th, tw = self.size 94 | return img.crop((self.start_x, self.start_y, self.start_x + tw, self.start_y + th)) 95 | 96 | 97 | class ForceFlip(object): 98 | """Horizontally flip the given PIL.Image randomly with a probability of 0.5.""" 99 | 100 | def __call__(self, img): 101 | """ 102 | Args: 103 | img (PIL.Image): Image to be flipped. 104 | Returns: 105 | PIL.Image: Randomly flipped image. 106 | """ 107 | return img.transpose(Image.FLIP_LEFT_RIGHT) 108 | 109 | class CenterCrop(object): 110 | """Crops the given PIL.Image at the center. 111 | Args: 112 | size (sequence or int): Desired output size of the crop. If size is an 113 | int instead of sequence like (h, w), a square crop (size, size) is 114 | made. 115 | """ 116 | 117 | def __init__(self, size): 118 | if isinstance(size, numbers.Number): 119 | self.size = (int(size), int(size)) 120 | else: 121 | self.size = size 122 | 123 | def __call__(self, img): 124 | """ 125 | Args: 126 | img (PIL.Image): Image to be cropped. 127 | Returns: 128 | PIL.Image: Cropped image. 129 | """ 130 | w, h = (img.shape[1], img.shape[2]) 131 | th, tw = self.size 132 | w_off = int((w - tw) / 2.) 133 | h_off = int((h - th) / 2.) 134 | img = img[:, h_off:h_off+th, w_off:w_off+tw] 135 | return img 136 | 137 | 138 | def image_train(resize_size=256, crop_size=224, alexnet=False): 139 | if not alexnet: 140 | normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 141 | std=[0.229, 0.224, 0.225]) 142 | else: 143 | normalize = Normalize(meanfile='./ilsvrc_2012_mean.npy') 144 | return transforms.Compose([ 145 | ResizeImage(resize_size), 146 | transforms.RandomResizedCrop(crop_size), 147 | transforms.RandomHorizontalFlip(), 148 | transforms.ToTensor(), 149 | normalize 150 | ]) 151 | 152 | def image_test(resize_size=256, crop_size=224, alexnet=False): 153 | if not alexnet: 154 | normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 155 | std=[0.229, 0.224, 0.225]) 156 | else: 157 | normalize = Normalize(meanfile='./ilsvrc_2012_mean.npy') 158 | start_first = 0 159 | start_center = (resize_size - crop_size - 1) / 2 160 | start_last = resize_size - crop_size - 1 161 | 162 | return transforms.Compose([ 163 | ResizeImage(resize_size), 164 | PlaceCrop(crop_size, start_center, start_center), 165 | transforms.ToTensor(), 166 | normalize 167 | ]) 168 | 169 | def image_test_10crop(resize_size=256, crop_size=224, alexnet=False): 170 | if not alexnet: 171 | normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 172 | std=[0.229, 0.224, 0.225]) 173 | else: 174 | normalize = Normalize(meanfile='./ilsvrc_2012_mean.npy') 175 | start_first = 0 176 | start_center = (resize_size - crop_size - 1) / 2 177 | start_last = resize_size - crop_size - 1 178 | data_transforms = [ 179 | transforms.Compose([ 180 | ResizeImage(resize_size),ForceFlip(), 181 | PlaceCrop(crop_size, start_first, start_first), 182 | transforms.ToTensor(), 183 | normalize 184 | ]), 185 | transforms.Compose([ 186 | ResizeImage(resize_size),ForceFlip(), 187 | PlaceCrop(crop_size, start_last, start_last), 188 | transforms.ToTensor(), 189 | normalize 190 | ]), 191 | transforms.Compose([ 192 | ResizeImage(resize_size),ForceFlip(), 193 | PlaceCrop(crop_size, start_last, start_first), 194 | transforms.ToTensor(), 195 | normalize 196 | ]), 197 | transforms.Compose([ 198 | ResizeImage(resize_size),ForceFlip(), 199 | PlaceCrop(crop_size, start_first, start_last), 200 | transforms.ToTensor(), 201 | normalize 202 | ]), 203 | transforms.Compose([ 204 | ResizeImage(resize_size),ForceFlip(), 205 | PlaceCrop(crop_size, start_center, start_center), 206 | transforms.ToTensor(), 207 | normalize 208 | ]), 209 | transforms.Compose([ 210 | ResizeImage(resize_size), 211 | PlaceCrop(crop_size, start_first, start_first), 212 | transforms.ToTensor(), 213 | normalize 214 | ]), 215 | transforms.Compose([ 216 | ResizeImage(resize_size), 217 | PlaceCrop(crop_size, start_last, start_last), 218 | transforms.ToTensor(), 219 | normalize 220 | ]), 221 | transforms.Compose([ 222 | ResizeImage(resize_size), 223 | PlaceCrop(crop_size, start_last, start_first), 224 | transforms.ToTensor(), 225 | normalize 226 | ]), 227 | transforms.Compose([ 228 | ResizeImage(resize_size), 229 | PlaceCrop(crop_size, start_first, start_last), 230 | transforms.ToTensor(), 231 | normalize 232 | ]), 233 | transforms.Compose([ 234 | ResizeImage(resize_size), 235 | PlaceCrop(crop_size, start_center, start_center), 236 | transforms.ToTensor(), 237 | normalize 238 | ]) 239 | ] 240 | return data_transforms 241 | -------------------------------------------------------------------------------- /pytorch/pre_process_visda.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from torchvision import transforms 3 | import os 4 | from PIL import Image, ImageOps 5 | import numbers 6 | import torch 7 | 8 | class ResizeImage(): 9 | def __init__(self, size): 10 | if isinstance(size, int): 11 | self.size = (int(size), int(size)) 12 | else: 13 | self.size = size 14 | def __call__(self, img): 15 | th, tw = self.size 16 | return img.resize((th, tw)) 17 | 18 | class RandomSizedCrop(object): 19 | """Crop the given PIL.Image to random size and aspect ratio. 20 | A crop of random size of (0.08 to 1.0) of the original size and a random 21 | aspect ratio of 3/4 to 4/3 of the original aspect ratio is made. This crop 22 | is finally resized to given size. 23 | This is popularly used to train the Inception networks. 24 | Args: 25 | size: size of the smaller edge 26 | interpolation: Default: PIL.Image.BILINEAR 27 | """ 28 | 29 | def __init__(self, size, interpolation=Image.BILINEAR): 30 | self.size = size 31 | self.interpolation = interpolation 32 | 33 | def __call__(self, img): 34 | h_off = random.randint(0, img.shape[1]-self.size) 35 | w_off = random.randint(0, img.shape[2]-self.size) 36 | img = img[:, h_off:h_off+self.size, w_off:w_off+self.size] 37 | return img 38 | 39 | 40 | class Normalize(object): 41 | """Normalize an tensor image with mean and standard deviation. 42 | Given mean: (R, G, B), 43 | will normalize each channel of the torch.*Tensor, i.e. 44 | channel = channel - mean 45 | Args: 46 | mean (sequence): Sequence of means for R, G, B channels respecitvely. 47 | """ 48 | 49 | def __init__(self, mean=None, meanfile=None): 50 | if mean: 51 | self.mean = mean 52 | else: 53 | arr = np.load(meanfile) 54 | self.mean = torch.from_numpy(arr.astype('float32')/255.0)[[2,1,0],:,:] 55 | 56 | def __call__(self, tensor): 57 | """ 58 | Args: 59 | tensor (Tensor): Tensor image of size (C, H, W) to be normalized. 60 | Returns: 61 | Tensor: Normalized image. 62 | """ 63 | # TODO: make efficient 64 | for t, m in zip(tensor, self.mean): 65 | t.sub_(m) 66 | return tensor 67 | 68 | 69 | 70 | class PlaceCrop(object): 71 | """Crops the given PIL.Image at the particular index. 72 | Args: 73 | size (sequence or int): Desired output size of the crop. If size is an 74 | int instead of sequence like (w, h), a square crop (size, size) is 75 | made. 76 | """ 77 | 78 | def __init__(self, size, start_x, start_y): 79 | if isinstance(size, int): 80 | self.size = (int(size), int(size)) 81 | else: 82 | self.size = size 83 | self.start_x = start_x 84 | self.start_y = start_y 85 | 86 | def __call__(self, img): 87 | """ 88 | Args: 89 | img (PIL.Image): Image to be cropped. 90 | Returns: 91 | PIL.Image: Cropped image. 92 | """ 93 | th, tw = self.size 94 | return img.crop((self.start_x, self.start_y, self.start_x + tw, self.start_y + th)) 95 | 96 | 97 | class ForceFlip(object): 98 | """Horizontally flip the given PIL.Image randomly with a probability of 0.5.""" 99 | 100 | def __call__(self, img): 101 | """ 102 | Args: 103 | img (PIL.Image): Image to be flipped. 104 | Returns: 105 | PIL.Image: Randomly flipped image. 106 | """ 107 | return img.transpose(Image.FLIP_LEFT_RIGHT) 108 | 109 | class CenterCrop(object): 110 | """Crops the given PIL.Image at the center. 111 | Args: 112 | size (sequence or int): Desired output size of the crop. If size is an 113 | int instead of sequence like (h, w), a square crop (size, size) is 114 | made. 115 | """ 116 | 117 | def __init__(self, size): 118 | if isinstance(size, numbers.Number): 119 | self.size = (int(size), int(size)) 120 | else: 121 | self.size = size 122 | 123 | def __call__(self, img): 124 | """ 125 | Args: 126 | img (PIL.Image): Image to be cropped. 127 | Returns: 128 | PIL.Image: Cropped image. 129 | """ 130 | w, h = (img.shape[1], img.shape[2]) 131 | th, tw = self.size 132 | w_off = int((w - tw) / 2.) 133 | h_off = int((h - th) / 2.) 134 | img = img[:, h_off:h_off+th, w_off:w_off+tw] 135 | return img 136 | 137 | 138 | def image_train(resize_size=256, crop_size=224, alexnet=False): 139 | if not alexnet: 140 | normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 141 | std=[0.229, 0.224, 0.225]) 142 | else: 143 | normalize = Normalize(meanfile='./ilsvrc_2012_mean.npy') 144 | return transforms.Compose([ 145 | ResizeImage(resize_size), 146 | transforms.CenterCrop(crop_size), 147 | transforms.RandomHorizontalFlip(), 148 | transforms.ToTensor(), 149 | normalize 150 | ]) 151 | 152 | def image_test(resize_size=256, crop_size=224, alexnet=False): 153 | if not alexnet: 154 | normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 155 | std=[0.229, 0.224, 0.225]) 156 | else: 157 | normalize = Normalize(meanfile='./ilsvrc_2012_mean.npy') 158 | start_first = 0 159 | start_center = (resize_size - crop_size - 1) / 2 160 | start_last = resize_size - crop_size - 1 161 | 162 | return transforms.Compose([ 163 | ResizeImage(resize_size), 164 | PlaceCrop(crop_size, start_center, start_center), 165 | transforms.ToTensor(), 166 | normalize 167 | ]) 168 | 169 | def image_test_10crop(resize_size=256, crop_size=224, alexnet=False): 170 | if not alexnet: 171 | normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 172 | std=[0.229, 0.224, 0.225]) 173 | else: 174 | normalize = Normalize(meanfile='./ilsvrc_2012_mean.npy') 175 | start_first = 0 176 | start_center = (resize_size - crop_size - 1) / 2 177 | start_last = resize_size - crop_size - 1 178 | data_transforms = [ 179 | transforms.Compose([ 180 | ResizeImage(resize_size),ForceFlip(), 181 | PlaceCrop(crop_size, start_first, start_first), 182 | transforms.ToTensor(), 183 | normalize 184 | ]), 185 | transforms.Compose([ 186 | ResizeImage(resize_size),ForceFlip(), 187 | PlaceCrop(crop_size, start_last, start_last), 188 | transforms.ToTensor(), 189 | normalize 190 | ]), 191 | transforms.Compose([ 192 | ResizeImage(resize_size),ForceFlip(), 193 | PlaceCrop(crop_size, start_last, start_first), 194 | transforms.ToTensor(), 195 | normalize 196 | ]), 197 | transforms.Compose([ 198 | ResizeImage(resize_size),ForceFlip(), 199 | PlaceCrop(crop_size, start_first, start_last), 200 | transforms.ToTensor(), 201 | normalize 202 | ]), 203 | transforms.Compose([ 204 | ResizeImage(resize_size),ForceFlip(), 205 | PlaceCrop(crop_size, start_center, start_center), 206 | transforms.ToTensor(), 207 | normalize 208 | ]), 209 | transforms.Compose([ 210 | ResizeImage(resize_size), 211 | PlaceCrop(crop_size, start_first, start_first), 212 | transforms.ToTensor(), 213 | normalize 214 | ]), 215 | transforms.Compose([ 216 | ResizeImage(resize_size), 217 | PlaceCrop(crop_size, start_last, start_last), 218 | transforms.ToTensor(), 219 | normalize 220 | ]), 221 | transforms.Compose([ 222 | ResizeImage(resize_size), 223 | PlaceCrop(crop_size, start_last, start_first), 224 | transforms.ToTensor(), 225 | normalize 226 | ]), 227 | transforms.Compose([ 228 | ResizeImage(resize_size), 229 | PlaceCrop(crop_size, start_first, start_last), 230 | transforms.ToTensor(), 231 | normalize 232 | ]), 233 | transforms.Compose([ 234 | ResizeImage(resize_size), 235 | PlaceCrop(crop_size, start_center, start_center), 236 | transforms.ToTensor(), 237 | normalize 238 | ]) 239 | ] 240 | return data_transforms 241 | -------------------------------------------------------------------------------- /pytorch/train_image_office.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import os.path as osp 4 | 5 | import numpy as np 6 | import torch 7 | import torch.nn as nn 8 | import torch.optim as optim 9 | import network 10 | import loss 11 | import pre_process as prep 12 | from torch.utils.data import DataLoader 13 | import lr_schedule 14 | import data_list 15 | from data_list import ImageList 16 | from tensorboardX import SummaryWriter 17 | from sklearn.metrics import confusion_matrix 18 | from torch.autograd import Variable 19 | import random 20 | import pdb 21 | import math 22 | 23 | def image_classification_test(loader, model, test_10crop=True): 24 | start_test = True 25 | with torch.no_grad(): 26 | if test_10crop: 27 | iter_test = [iter(loader['test'][i]) for i in range(10)] 28 | for i in range(len(loader['test'][0])): 29 | data = [iter_test[j].next() for j in range(10)] 30 | inputs = [data[j][0] for j in range(10)] 31 | labels = data[0][1] 32 | for j in range(10): 33 | inputs[j] = inputs[j].cuda() 34 | labels = labels 35 | outputs = [] 36 | for j in range(10): 37 | feature_out, predict_out = model(inputs[j]) 38 | outputs.append(nn.Softmax(dim=1)(predict_out)) 39 | outputs = sum(outputs) / 10 40 | if start_test: 41 | all_output = outputs.float().cpu() 42 | all_label = labels.float() 43 | all_feature = feature_out.float().cpu() 44 | start_test = False 45 | else: 46 | all_output = torch.cat((all_output, outputs.float().cpu()), 0) 47 | all_feature = torch.cat((all_feature, feature_out.float().cpu()), 0) 48 | all_label = torch.cat((all_label, labels.float()), 0) 49 | else: 50 | iter_test = iter(loader["test"]) 51 | for i in range(len(loader['test'])): 52 | data = iter_test.next() 53 | inputs = data[0] 54 | labels = data[1] 55 | inputs = inputs.cuda() 56 | labels = labels.cuda() 57 | feature_out, outputs = model(inputs) 58 | if start_test: 59 | all_output = outputs.float().cpu() 60 | all_label = labels.float().cpu() 61 | all_feature = feature_out.float().cpu() 62 | start_test = False 63 | else: 64 | all_output = torch.cat((all_output, outputs.float().cpu()), 0) 65 | all_feature = torch.cat((all_feature, feature_out.float().cpu()), 0) 66 | all_label = torch.cat((all_label, labels.float().cpu() ), 0) 67 | _, predict = torch.max(all_output, 1) 68 | accuracy = torch.sum(torch.squeeze(predict).float() == all_label).item() / float(all_label.size()[0]) 69 | return accuracy, all_output.numpy(), predict.numpy(), all_label.numpy(), all_feature.numpy() 70 | 71 | 72 | def train(config): 73 | ## set pre-process 74 | prep_dict = {} 75 | prep_config = config["prep"] 76 | prep_dict["source"] = prep.image_train(**config["prep"]['params']) 77 | prep_dict["target"] = prep.image_train(**config["prep"]['params']) 78 | if prep_config["test_10crop"]: 79 | prep_dict["test"] = prep.image_test_10crop(**config["prep"]['params']) 80 | else: 81 | prep_dict["test"] = prep.image_test(**config["prep"]['params']) 82 | 83 | tensor_writer = SummaryWriter(config["tensorboard_path"]) 84 | 85 | ## prepare data 86 | dsets = {} 87 | dset_loaders = {} 88 | data_config = config["data"] 89 | train_bs = data_config["source"]["batch_size"] 90 | test_bs = data_config["test"]["batch_size"] 91 | 92 | dsets["source"] = ImageList(open(data_config["source"]["list_path"]).readlines(), \ 93 | transform=prep_dict["source"]) 94 | dset_loaders["source"] = DataLoader(dsets["source"], batch_size=train_bs, \ 95 | shuffle=True, num_workers=4, drop_last=True) 96 | dsets["target"] = ImageList(open(data_config["target"]["list_path"]).readlines(), \ 97 | transform=prep_dict["target"]) 98 | dset_loaders["target"] = DataLoader(dsets["target"], batch_size=train_bs, \ 99 | shuffle=True, num_workers=4, drop_last=True) 100 | 101 | if prep_config["test_10crop"]: 102 | for i in range(10): 103 | dsets["test"] = [ImageList(open(data_config["test"]["list_path"]).readlines(), \ 104 | transform=prep_dict["test"][i]) for i in range(10)] 105 | dset_loaders["test"] = [DataLoader(dset, batch_size=test_bs, \ 106 | shuffle=False, num_workers=4) for dset in dsets['test']] 107 | else: 108 | dsets["test"] = ImageList(open(data_config["test"]["list_path"]).readlines(), \ 109 | transform=prep_dict["test"]) 110 | dset_loaders["test"] = DataLoader(dsets["test"], batch_size=test_bs, \ 111 | shuffle=False, num_workers=4) 112 | 113 | class_num = config["network"]["params"]["class_num"] 114 | 115 | ## set base network 116 | net_config = config["network"] 117 | base_network = net_config["name"](**net_config["params"]) 118 | base_network = base_network.cuda() 119 | parameter_list = base_network.get_parameters() 120 | 121 | ## set optimizer 122 | optimizer_config = config["optimizer"] 123 | optimizer = optimizer_config["type"](parameter_list, \ 124 | **(optimizer_config["optim_params"])) 125 | param_lr = [] 126 | for param_group in optimizer.param_groups: 127 | param_lr.append(param_group["lr"]) 128 | schedule_param = optimizer_config["lr_param"] 129 | lr_scheduler = lr_schedule.schedule_dict[optimizer_config["lr_type"]] 130 | 131 | gpus = config['gpu'].split(',') 132 | if len(gpus) > 1: 133 | base_network = nn.DataParallel(base_network, device_ids=[int(i) for i in gpus]) 134 | 135 | ## train 136 | len_train_source = len(dset_loaders["source"]) 137 | len_train_target = len(dset_loaders["target"]) 138 | best_acc = 0.0 139 | for i in range(config["num_iterations"]): 140 | if i % config["test_interval"] == config["test_interval"] - 1 or i==0: 141 | base_network.train(False) 142 | temp_acc, output, prediction, label, feature = image_classification_test(dset_loaders, \ 143 | base_network, test_10crop=prep_config["test_10crop"]) 144 | temp_model = nn.Sequential(base_network) 145 | if temp_acc > best_acc: 146 | best_acc = temp_acc 147 | best_model = temp_model 148 | log_str = "iter: {:05d}, precision: {:.5f}".format(i, temp_acc) 149 | config["out_file"].write(log_str+"\n") 150 | config["out_file"].flush() 151 | print(log_str) 152 | if i % config["snapshot_interval"] == 0: 153 | torch.save(nn.Sequential(base_network), osp.join(config["output_path"], \ 154 | "iter_{:05d}_model.pth.tar".format(i))) 155 | 156 | loss_params = config["loss"] 157 | ## train one iter 158 | base_network.train(True) 159 | optimizer = lr_scheduler(optimizer, i, **schedule_param) 160 | optimizer.zero_grad() 161 | if i % len_train_source == 0: 162 | iter_source = iter(dset_loaders["source"]) 163 | if i % len_train_target == 0: 164 | iter_target = iter(dset_loaders["target"]) 165 | inputs_source, labels_source = iter_source.next() 166 | inputs_target, labels_target = iter_target.next() 167 | inputs_source, inputs_target, labels_source = inputs_source.cuda(), inputs_target.cuda(), labels_source.cuda() 168 | features_source, outputs_source = base_network(inputs_source) 169 | features_target, outputs_target = base_network(inputs_target) 170 | 171 | outputs_target_temp = outputs_target / config['temperature'] 172 | target_softmax_out_temp = nn.Softmax(dim=1)(outputs_target_temp) 173 | target_entropy_weight = loss.Entropy(target_softmax_out_temp).detach() 174 | target_entropy_weight = 1 + torch.exp(-target_entropy_weight) 175 | target_entropy_weight = train_bs * target_entropy_weight / torch.sum(target_entropy_weight) 176 | cov_matrix_t = target_softmax_out_temp.mul(target_entropy_weight.view(-1,1)).transpose(1,0).mm(target_softmax_out_temp) 177 | cov_matrix_t = cov_matrix_t / torch.sum(cov_matrix_t, dim=1) 178 | mcc_loss = (torch.sum(cov_matrix_t) - torch.trace(cov_matrix_t)) / class_num 179 | 180 | classifier_loss = nn.CrossEntropyLoss()(outputs_source, labels_source) 181 | total_loss = classifier_loss + mcc_loss 182 | total_loss.backward() 183 | optimizer.step() 184 | 185 | tensor_writer.add_scalar('total_loss', total_loss, i) 186 | tensor_writer.add_scalar('classifier_loss', classifier_loss, i) 187 | tensor_writer.add_scalar('cov_matrix_penalty', mcc_loss, i) 188 | 189 | torch.save(best_model, osp.join(config["output_path"], "best_model.pth.tar")) 190 | return best_acc 191 | 192 | if __name__ == "__main__": 193 | parser = argparse.ArgumentParser(description='Conditional Domain Adversarial Network') 194 | parser.add_argument('--gpu_id', type=str, nargs='?', default='5', help="device id to run") 195 | parser.add_argument('--net', type=str, default='ResNet50', choices=["ResNet18", "ResNet34", "ResNet50", "ResNet101", "ResNet152", "VGG11", "VGG13", "VGG16", "VGG19", "VGG11BN", "VGG13BN", "VGG16BN", "VGG19BN", "AlexNet"]) 196 | parser.add_argument('--dset', type=str, default='office', choices=['office', 'image-clef', 'visda', 'office-home','DomainNet'], help="The dataset or source dataset used") 197 | parser.add_argument('--s_dset_path', type=str, default='../data/office/dslr_list.txt', help="The source dataset path list") 198 | parser.add_argument('--t_dset_path', type=str, default='../data/office/amazon_list.txt', help="The target dataset path list") 199 | parser.add_argument('--test_interval', type=int, default=500, help="interval of two continuous test phase") 200 | parser.add_argument('--snapshot_interval', type=int, default=5000, help="interval of two continuous output model") 201 | parser.add_argument('--output_dir', type=str, default='office_temp2.5', help="output directory of our model (in ../snapshot directory)") 202 | parser.add_argument('--lr', type=float, default=0.001, help="learning rate") 203 | parser.add_argument('--random', type=bool, default=False, help="whether use random projection") 204 | parser.add_argument('--temperature', type=float, default=2.5, help="temperature value in MCC") 205 | args = parser.parse_args() 206 | os.environ["CUDA_VISIBLE_DEVICES"] = args.gpu_id 207 | # os.environ["CUDA_VISIBLE_DEVICES"] = '0,1,2,3' 208 | 209 | # train config 210 | config = {} 211 | config["gpu"] = args.gpu_id 212 | config["num_iterations"] = 50004 213 | config["test_interval"] = args.test_interval 214 | config["snapshot_interval"] = args.snapshot_interval 215 | config["output_for_test"] = True 216 | task_name = args.output_dir + '/' + osp.basename(args.s_dset_path)[0].upper() + '2' + osp.basename(args.t_dset_path)[0].upper() 217 | config["output_path"] = "snapshot-eccv-opensource/" + task_name 218 | config["tensorboard_path"] = "vis/" + task_name 219 | config['temperature'] = args.temperature 220 | if not osp.exists(config["output_path"]): 221 | os.system('mkdir -p '+config["output_path"]) 222 | config["out_file"] = open(osp.join(config["output_path"], "log.txt"), "w") 223 | if not osp.exists(config["output_path"]): 224 | os.mkdir(config["output_path"]) 225 | 226 | config["prep"] = {"test_10crop":False, 'params':{"resize_size":256, "crop_size":224, 'alexnet':False}} 227 | config["loss"] = {"trade_off":1.0} 228 | if "AlexNet" in args.net: 229 | config["prep"]['params']['alexnet'] = True 230 | config["prep"]['params']['crop_size'] = 227 231 | config["network"] = {"name":network.AlexNetFc, \ 232 | "params":{"use_bottleneck":True, "bottleneck_dim":256, "new_cls":True} } 233 | elif "ResNet" in args.net: 234 | config["network"] = {"name":network.ResNetFc, \ 235 | "params":{"resnet_name":args.net, "use_bottleneck":True, "bottleneck_dim":256, "new_cls":True} } 236 | elif "VGG" in args.net: 237 | config["network"] = {"name":network.VGGFc, \ 238 | "params":{"vgg_name":args.net, "use_bottleneck":True, "bottleneck_dim":256, "new_cls":True} } 239 | config["loss"]["random"] = args.random 240 | config["loss"]["random_dim"] = 1024 241 | 242 | config["optimizer"] = {"type":optim.SGD, "optim_params":{'lr':args.lr, "momentum":0.9, \ 243 | "weight_decay":0.0005, "nesterov":True}, "lr_type":"inv", \ 244 | "lr_param":{"lr":args.lr, "gamma":0.001, "power":0.75} } 245 | 246 | config["dataset"] = args.dset 247 | config["data"] = {"source":{"list_path":args.s_dset_path, "batch_size":28}, \ 248 | "target":{"list_path":args.t_dset_path, "batch_size":28}, \ 249 | "test":{"list_path":args.t_dset_path, "batch_size":4}} 250 | 251 | if config["dataset"] == "office": 252 | config["optimizer"]["lr_param"]["lr"] = 0.0003 253 | config["network"]["params"]["class_num"] = 31 254 | elif config["dataset"] == "image-clef": 255 | config["optimizer"]["lr_param"]["lr"] = 0.001 # optimal parameters 256 | config["network"]["params"]["class_num"] = 12 257 | elif config["dataset"] == "visda": 258 | config["optimizer"]["lr_param"]["lr"] = 0.001 # optimal parameters 259 | config["network"]["params"]["class_num"] = 12 260 | config['loss']["trade_off"] = 1.0 261 | elif config["dataset"] == "office-home": 262 | config["optimizer"]["lr_param"]["lr"] = 0.001 # optimal parameters 263 | config["network"]["params"]["class_num"] = 65 264 | elif config["dataset"] == "DomainNet": 265 | config["optimizer"]["lr_param"]["lr"] = 0.001 # optimal parameters 266 | config["network"]["params"]["class_num"] = 345 267 | else: 268 | raise ValueError('Dataset cannot be recognized. Please define your own dataset here.') 269 | config["out_file"].write(str(config)) 270 | config["out_file"].flush() 271 | train(config) 272 | -------------------------------------------------------------------------------- /pytorch/train_image_visda.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import os.path as osp 4 | 5 | import numpy as np 6 | import torch 7 | import torch.nn as nn 8 | import torch.optim as optim 9 | import network as network 10 | import loss 11 | import pre_process_visda as prep 12 | from torch.utils.data import DataLoader 13 | import lr_schedule 14 | import data_list 15 | from data_list import ImageList 16 | from tensorboardX import SummaryWriter 17 | from sklearn.metrics import confusion_matrix 18 | from torch.autograd import Variable 19 | import random 20 | import pdb 21 | import math 22 | 23 | def EntropyLoss(input_): 24 | # print("input_ shape", input_.shape) 25 | mask = input_.ge(0.000001) 26 | mask_out = torch.masked_select(input_, mask) 27 | entropy = -(torch.sum(mask_out * torch.log(mask_out + 1e-5))) 28 | return entropy / float(input_.size(0)) 29 | 30 | def image_classification_val(loader, model, test_10crop=True): 31 | start_test = True 32 | with torch.no_grad(): 33 | if test_10crop: 34 | iter_test = [iter(loader['source_val'][i]) for i in range(10)] 35 | for i in range(len(loader['source_val'][0])): 36 | data = [iter_test[j].next() for j in range(10)] 37 | inputs = [data[j][0] for j in range(10)] 38 | labels = data[0][1] 39 | for j in range(10): 40 | inputs[j] = inputs[j].cuda() 41 | labels = labels 42 | outputs = [] 43 | for j in range(10): 44 | feature_out, predict_out = model(inputs[j]) 45 | outputs.append(nn.Softmax(dim=1)(predict_out)) 46 | outputs = sum(outputs) / 10 47 | if start_test: 48 | all_output = outputs.float().cpu() 49 | all_label = labels.float().cpu() 50 | all_feature = feature_out.float().cpu() 51 | start_test = False 52 | else: 53 | all_output = torch.cat((all_output, outputs.float().cpu()), 0) 54 | all_feature = torch.cat((all_feature, feature_out.float().cpu()), 0) 55 | all_label = torch.cat((all_label, labels.float().cpu()), 0) 56 | else: 57 | iter_test = iter(loader["test"]) 58 | for i in range(len(loader['test'])): 59 | data = iter_test.next() 60 | inputs = data[0] 61 | labels = data[1] 62 | inputs = inputs.cuda() 63 | labels = labels.cuda() 64 | feature_out, outputs = model(inputs) 65 | if start_test: 66 | all_output = outputs.float().cpu() 67 | all_label = labels.float().cpu() 68 | all_feature = feature_out.float().cpu() 69 | start_test = False 70 | else: 71 | all_output = torch.cat((all_output, outputs.float().cpu()), 0) 72 | all_label = torch.cat((all_label, labels.float().cpu()), 0) 73 | all_feature = torch.cat((all_feature, feature_out.float().cpu()), 0) 74 | _, predict = torch.max(all_output, 1) 75 | accuracy = torch.sum(torch.squeeze(predict).float() == all_label).item() / float(all_label.size()[0]) 76 | return accuracy, all_output.numpy(), predict.numpy(), all_label.numpy(), all_feature.numpy() 77 | 78 | 79 | def image_classification_test(loader, model, test_10crop=True): 80 | start_test = True 81 | with torch.no_grad(): 82 | if test_10crop: 83 | iter_test = [iter(loader['test'][i]) for i in range(10)] 84 | for i in range(len(loader['test'][0])): 85 | data = [iter_test[j].next() for j in range(10)] 86 | inputs = [data[j][0] for j in range(10)] 87 | labels = data[0][1] 88 | for j in range(10): 89 | inputs[j] = inputs[j].cuda() 90 | labels = labels 91 | outputs = [] 92 | for j in range(10): 93 | feature_out, predict_out = model(inputs[j]) 94 | outputs.append(nn.Softmax(dim=1)(predict_out)) 95 | outputs = sum(outputs) / 10 96 | if start_test: 97 | all_output = outputs.float().cpu() 98 | all_label = labels.float().cpu() 99 | all_feature = feature_out.float().cpu() 100 | start_test = False 101 | else: 102 | all_output = torch.cat((all_output, outputs.float().cpu()), 0) 103 | all_feature = torch.cat((all_feature, feature_out.float().cpu()), 0) 104 | all_label = torch.cat((all_label, labels.float().cpu()), 0) 105 | else: 106 | iter_test = iter(loader["test"]) 107 | for i in range(len(loader['test'])): 108 | data = iter_test.next() 109 | inputs = data[0] 110 | labels = data[1] 111 | inputs = inputs.cuda() 112 | labels = labels.cuda() 113 | feature_out, outputs = model(inputs) 114 | if start_test: 115 | all_output = outputs.float().cpu() 116 | all_label = labels.float().cpu() 117 | all_feature = feature_out.float().cpu() 118 | start_test = False 119 | else: 120 | all_output = torch.cat((all_output, outputs.float().cpu()), 0) 121 | all_feature = torch.cat((all_feature, feature_out.float().cpu()), 0) 122 | all_label = torch.cat((all_label, labels.float().cpu()), 0) 123 | class_num = all_output.shape[1] 124 | _, predict = torch.max(all_output, 1) 125 | # accuracy = torch.sum(torch.squeeze(predict).float() == all_label).item() / float(all_label.size()[0]) 126 | subclasses_correct = np.zeros(class_num) 127 | subclasses_tick = np.zeros(class_num) 128 | correct = 0 129 | tick = 0 130 | for i in range(predict.size()[0]): 131 | subclasses_tick[int(all_label[i])] += 1 132 | if predict[i].float() == all_label[i]: 133 | correct += 1 134 | subclasses_correct[predict[i]] += 1 135 | accuracy = correct * 1.0 / float(all_label.size()[0]) 136 | subclasses_result = np.divide(subclasses_correct, subclasses_tick) 137 | print("========accuracy per class==========") 138 | print(subclasses_result, subclasses_result.mean()) 139 | 140 | return accuracy, all_output.numpy(), predict.numpy(), all_label.numpy(), all_feature.numpy() 141 | 142 | 143 | def train(config): 144 | ## set pre-process 145 | prep_dict = {} 146 | prep_config = config["prep"] 147 | prep_dict["source"] = prep.image_train(**config["prep"]['params']) 148 | prep_dict["target"] = prep.image_train(**config["prep"]['params']) 149 | if prep_config["test_10crop"]: 150 | prep_dict["test"] = prep.image_test_10crop(**config["prep"]['params']) 151 | else: 152 | prep_dict["test"] = prep.image_test(**config["prep"]['params']) 153 | 154 | tensor_writer = SummaryWriter(config["tensorboard_path"]) 155 | 156 | ## prepare data 157 | dsets = {} 158 | dset_loaders = {} 159 | data_config = config["data"] 160 | train_bs = data_config["source"]["batch_size"] 161 | test_bs = data_config["test"]["batch_size"] 162 | dsets["source"] = ImageList(open(data_config["source"]["list_path"]).readlines(), \ 163 | transform=prep_dict["source"]) 164 | dset_loaders["source"] = DataLoader(dsets["source"], batch_size=train_bs, \ 165 | shuffle=True, num_workers=4, drop_last=True) 166 | 167 | dsets["target"] = ImageList(open(data_config["target"]["list_path"]).readlines(), \ 168 | transform=prep_dict["target"]) 169 | dset_loaders["target"] = DataLoader(dsets["target"], batch_size=train_bs, \ 170 | shuffle=True, num_workers=4, drop_last=True) 171 | 172 | if prep_config["test_10crop"]: 173 | for i in range(10): 174 | dsets["test"] = [ImageList(open(data_config["test"]["list_path"]).readlines(), \ 175 | transform=prep_dict["test"][i]) for i in range(10)] 176 | dset_loaders["test"] = [DataLoader(dset, batch_size=test_bs, \ 177 | shuffle=False, num_workers=4) for dset in dsets['test']] 178 | dsets["source_val"] = [ImageList(open(data_config["source"]["list_path"]).readlines(), \ 179 | transform=prep_dict["test"][i]) for i in range(10)] 180 | dset_loaders["source_val"] = [DataLoader(dset, batch_size=test_bs, \ 181 | shuffle=False, num_workers=4) for dset in dsets['source_val']] 182 | else: 183 | dsets["test"] = ImageList(open(data_config["test"]["list_path"]).readlines(), \ 184 | transform=prep_dict["test"]) 185 | dset_loaders["test"] = DataLoader(dsets["test"], batch_size=test_bs, \ 186 | shuffle=False, num_workers=4) 187 | 188 | class_num = config["network"]["params"]["class_num"] 189 | 190 | ## set base network 191 | net_config = config["network"] 192 | base_network = net_config["name"](**net_config["params"]) 193 | base_network = base_network.cuda() 194 | 195 | ## add additional network for some methods 196 | if config["loss"]["random"]: 197 | random_layer = network.RandomLayer([base_network.output_num(), class_num], config["loss"]["random_dim"]) 198 | ad_net = network.AdversarialNetwork(config["loss"]["random_dim"], 1024) 199 | else: 200 | random_layer = None 201 | # ad_net = network.AdversarialNetwork(base_network.output_num() * class_num, 1024) 202 | ad_net = network.AdversarialNetwork(base_network.output_num(), 1024) 203 | if config["loss"]["random"]: 204 | random_layer.cuda() 205 | ad_net = ad_net.cuda() 206 | parameter_list = base_network.get_parameters() + ad_net.get_parameters() 207 | 208 | ## set optimizer 209 | optimizer_config = config["optimizer"] 210 | optimizer = optimizer_config["type"](parameter_list, \ 211 | **(optimizer_config["optim_params"])) 212 | param_lr = [] 213 | for param_group in optimizer.param_groups: 214 | param_lr.append(param_group["lr"]) 215 | schedule_param = optimizer_config["lr_param"] 216 | lr_scheduler = lr_schedule.schedule_dict[optimizer_config["lr_type"]] 217 | 218 | gpus = config['gpu'].split(',') 219 | if len(gpus) > 1: 220 | ad_net = nn.DataParallel(ad_net, device_ids=[int(i) for i in gpus]) 221 | base_network = nn.DataParallel(base_network, device_ids=[int(i) for i in gpus]) 222 | 223 | 224 | ## train 225 | len_train_source = len(dset_loaders["source"]) 226 | len_train_target = len(dset_loaders["target"]) 227 | transfer_loss_value = classifier_loss_value = total_loss_value = 0.0 228 | best_acc = 0.0 229 | for i in range(config["num_iterations"]): 230 | if i % config["test_interval"] == config["test_interval"] - 1: 231 | base_network.train(False) 232 | temp_acc, output, prediction, label, feature = image_classification_test(dset_loaders, \ 233 | base_network, test_10crop=prep_config["test_10crop"]) 234 | _, output_src, prediction_src, label_src, feature_src = image_classification_val(dset_loaders, \ 235 | base_network, test_10crop=prep_config["test_10crop"]) 236 | temp_model = nn.Sequential(base_network) 237 | if temp_acc > best_acc: 238 | best_acc = temp_acc 239 | best_model = temp_model 240 | if i % config["snapshot_interval"] == 0: 241 | torch.save(nn.Sequential(base_network), osp.join(config["output_path"], \ 242 | "iter_{:05d}_model.pth.tar".format(i))) 243 | 244 | loss_params = config["loss"] 245 | ## train one iter 246 | base_network.train(True) 247 | ad_net.train(True) 248 | optimizer = lr_scheduler(optimizer, i, **schedule_param) 249 | optimizer.zero_grad() 250 | if i % len_train_source == 0: 251 | iter_source = iter(dset_loaders["source"]) 252 | if i % len_train_target == 0: 253 | iter_target = iter(dset_loaders["target"]) 254 | inputs_source, labels_source = iter_source.next() 255 | inputs_target, labels_target = iter_target.next() 256 | inputs_source, inputs_target, labels_source = inputs_source.cuda(), inputs_target.cuda(), labels_source.cuda() 257 | features_source, outputs_source = base_network(inputs_source) 258 | features_target, outputs_target = base_network(inputs_target) 259 | features = torch.cat((features_source, features_target), dim=0) 260 | outputs = torch.cat((outputs_source, outputs_target), dim=0) 261 | softmax_out = nn.Softmax(dim=1)(outputs) 262 | 263 | target_softmax_out = nn.Softmax(dim=1)(outputs_target) 264 | target_entropy = EntropyLoss(target_softmax_out) 265 | 266 | temperature = 3.0 267 | outputs_target_temp = outputs_target / temperature 268 | target_softmax_out_temp = nn.Softmax(dim=1)(outputs_target_temp) 269 | target_entropy_weight = loss.Entropy(target_softmax_out_temp).detach() 270 | target_entropy_weight = 1 + torch.exp(-target_entropy_weight) 271 | target_entropy_weight = train_bs * target_entropy_weight / torch.sum(target_entropy_weight) 272 | 273 | cov_matrix_t_temp = target_softmax_out_temp.mul(target_entropy_weight.view(-1,1)).transpose(1,0).mm(target_softmax_out_temp) 274 | cov_matrix_t_temp = cov_matrix_t_temp / torch.sum(cov_matrix_t_temp, dim=1) 275 | 276 | mcc_loss = (torch.sum(cov_matrix_t_temp) - torch.trace(cov_matrix_t_temp)) / class_num 277 | 278 | classifier_loss = nn.CrossEntropyLoss()(outputs_source, labels_source) 279 | total_loss = classifier_loss + mcc_loss 280 | total_loss.backward() 281 | optimizer.step() 282 | 283 | tensor_writer.add_scalar('total_loss', total_loss, i) 284 | tensor_writer.add_scalar('classifier_loss', classifier_loss, i) 285 | tensor_writer.add_scalar('cov_matrix_penalty', mcc_loss, i) 286 | 287 | torch.save(best_model, osp.join(config["output_path"], "best_model.pth.tar")) 288 | return best_acc 289 | 290 | if __name__ == "__main__": 291 | parser = argparse.ArgumentParser(description='Conditional Domain Adversarial Network') 292 | parser.add_argument('--method', type=str, default='DANN', choices=['CDAN', 'CDAN+E', 'DANN']) 293 | parser.add_argument('--gpu_id', type=str, nargs='?', default='4', help="device id to run") 294 | parser.add_argument('--net', type=str, default='ResNet101', choices=["ResNet18", "ResNet34", "ResNet50", "ResNet101", "ResNet152", "VGG11", "VGG13", "VGG16", "VGG19", "VGG11BN", "VGG13BN", "VGG16BN", "VGG19BN", "AlexNet"]) 295 | parser.add_argument('--dset', type=str, default='visda', choices=['office', 'image-clef', 'visda', 'office-home'], help="The dataset or source dataset used") 296 | parser.add_argument('--s_dset_path', type=str, default='../data/visda-2017/train_list.txt', help="The source dataset path list") 297 | parser.add_argument('--t_dset_path', type=str, default='../data/visda-2017/validation_list.txt', help="The target dataset path list") 298 | parser.add_argument('--test_interval', type=int, default=500, help="interval of two continuous test phase") 299 | parser.add_argument('--snapshot_interval', type=int, default=2000, help="interval of two continuous output model") 300 | parser.add_argument('--output_dir', type=str, default='visda_temp3.0', help="output directory of our model (in ../snapshot directory)") 301 | parser.add_argument('--lr', type=float, default=0.001, help="learning rate") 302 | parser.add_argument('--random', type=bool, default=False, help="whether use random projection") 303 | args = parser.parse_args() 304 | os.environ["CUDA_VISIBLE_DEVICES"] = args.gpu_id 305 | # os.environ["CUDA_VISIBLE_DEVICES"] = '0,1,2,3' 306 | 307 | # train config 308 | config = {} 309 | config['method'] = args.method 310 | config["gpu"] = args.gpu_id 311 | config["num_iterations"] = 10004 312 | config["test_interval"] = args.test_interval 313 | config["snapshot_interval"] = args.snapshot_interval 314 | config["output_for_test"] = True 315 | task_name = args.output_dir + '/' + osp.basename(args.s_dset_path)[0].upper() + '2' + osp.basename(args.t_dset_path)[0].upper() 316 | config["output_path"] = "snapshot-eccv/" + task_name 317 | config["tensorboard_path"] = "vis/" + task_name 318 | if not osp.exists(config["output_path"]): 319 | os.system('mkdir -p '+config["output_path"]) 320 | config["out_file"] = open(osp.join(config["output_path"], "log.txt"), "w") 321 | if not osp.exists(config["output_path"]): 322 | os.mkdir(config["output_path"]) 323 | 324 | config["prep"] = {"test_10crop":False, 'params':{"resize_size":256, "crop_size":224, 'alexnet':False}} 325 | config["loss"] = {"trade_off":1.0} 326 | if "AlexNet" in args.net: 327 | config["prep"]['params']['alexnet'] = True 328 | config["prep"]['params']['crop_size'] = 227 329 | config["network"] = {"name":network.AlexNetFc, \ 330 | "params":{"use_bottleneck":True, "bottleneck_dim":256, "new_cls":True} } 331 | elif "ResNet" in args.net: 332 | config["network"] = {"name":network.ResNetFc, \ 333 | "params":{"resnet_name":args.net, "use_bottleneck":True, "bottleneck_dim":256, "new_cls":True} } 334 | elif "VGG" in args.net: 335 | config["network"] = {"name":network.VGGFc, \ 336 | "params":{"vgg_name":args.net, "use_bottleneck":True, "bottleneck_dim":256, "new_cls":True} } 337 | config["loss"]["random"] = args.random 338 | config["loss"]["random_dim"] = 1024 339 | 340 | config["optimizer"] = {"type":optim.SGD, "optim_params":{'lr':args.lr, "momentum":0.9, \ 341 | "weight_decay":0.0005, "nesterov":True}, "lr_type":"inv", \ 342 | "lr_param":{"lr":args.lr, "gamma":0.001, "power":0.75} } 343 | 344 | config["dataset"] = args.dset 345 | config["data"] = {"source":{"list_path":args.s_dset_path, "batch_size":36}, \ 346 | "target":{"list_path":args.t_dset_path, "batch_size":36}, \ 347 | "test":{"list_path":args.t_dset_path, "batch_size":4}} 348 | 349 | if config["dataset"] == "office": 350 | config["optimizer"]["lr_param"]["lr"] = 0.0003 # optimal parameters 351 | config["network"]["params"]["class_num"] = 31 352 | elif config["dataset"] == "image-clef": 353 | config["optimizer"]["lr_param"]["lr"] = 0.001 # optimal parameters 354 | config["network"]["params"]["class_num"] = 12 355 | elif config["dataset"] == "visda": 356 | config["optimizer"]["lr_param"]["lr"] = 0.0003 # optimal parameters 357 | config["network"]["params"]["class_num"] = 12 358 | elif config["dataset"] == "office-home": 359 | config["optimizer"]["lr_param"]["lr"] = 0.001 # optimal parameters 360 | config["network"]["params"]["class_num"] = 65 361 | else: 362 | raise ValueError('Dataset cannot be recognized. Please define your own dataset here.') 363 | config["out_file"].write(str(config)) 364 | config["out_file"].flush() 365 | train(config) 366 | -------------------------------------------------------------------------------- /pytorch/utils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #coding:utf-8 3 | #@Time: 2019/5/1713:58 4 | #@Author: wangximei 5 | #@File: utils.py 6 | #@describtion: 7 | 8 | import argparse 9 | import os 10 | import numpy as np 11 | import torch 12 | 13 | import matplotlib.pyplot as plt 14 | plt.switch_backend('agg') 15 | import scipy.misc 16 | 17 | import scipy.misc 18 | from skimage import transform, filters 19 | 20 | 21 | def get_blend_map(img, att_map, blur=True, overlap=True): 22 | # att_map -= att_map.min() 23 | # if att_map.max() > 0: 24 | # att_map /= att_map.max() 25 | # att_map = transform.resize(att_map, (img.shape[:2]), order=3) 26 | if blur: 27 | att_map = filters.gaussian(att_map, 0.02 * max(img.shape[:2])) 28 | att_map -= att_map.min() 29 | att_map = att_map / att_map.max() 30 | cmap = plt.get_cmap('jet') 31 | att_map_v = cmap(att_map) 32 | att_map_v = np.delete(att_map_v, 3, 2) 33 | if overlap: 34 | att_map = 1 * (1 - att_map ** 0.7).reshape(att_map.shape + (1,)) * img + (att_map ** 0.7).reshape( 35 | att_map.shape + (1,)) * att_map_v 36 | return att_map 37 | 38 | def visualize_and_save(input, image_path, att, test_epoch, ckpt_dir, channel_index): 39 | # image_path = "/data/office-home/images/Product/Bike/00001.jpg" 40 | fig = plt.figure() 41 | fig.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0) 42 | # orig_img = scipy.misc.imread(image_path) 43 | # orig = scipy.misc.imresize(orig_img, (256, 256), interp='bicubic') 44 | # start_x = (256 - 224 - 1) // 2 45 | # start_y = (256 - 224 - 1) // 2 46 | # orig = orig[start_x:start_x + 224, start_y:start_y + 224, :] 47 | # print("max(input)", max(max(input))) 48 | # print("min(input)", min(min(input))) 49 | 50 | # print("input.shape:", input.shape) 51 | input = input.permute(1,2,0) ## 3*224*224 ==> 224*224*3 52 | # print("before: ",input[0,0,:]) 53 | mean = torch.tensor([[[0.485, 0.456, 0.406]]]).float().cuda() 54 | std = torch.tensor([[[0.229, 0.224, 0.225]]]).float().cuda() 55 | input = input * std + mean 56 | input = input.cpu().numpy() 57 | # print("after: ",input[0,0,:]) 58 | 59 | atten = scipy.misc.imresize(att, (224, 224), interp='bicubic') 60 | ax = plt.subplot(1, 3, 1) 61 | ax.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off') 62 | ax.tick_params(axis='y', which='both', left='off', right='off', labelleft='off') 63 | ax.imshow(input) 64 | 65 | ax = plt.subplot(1, 3, 2) 66 | ax.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off') 67 | ax.tick_params(axis='y', which='both', left='off', right='off', labelleft='off') 68 | ax.imshow(atten, alpha=1.0, cmap=plt.cm.Reds) 69 | # ax.set_xlabel("just for test", fontsize=10, labelpad=5, ha='center') 70 | 71 | ax = plt.subplot(1, 3, 3) 72 | ax.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off') 73 | ax.tick_params(axis='y', which='both', left='off', right='off', labelleft='off') 74 | 75 | ax.imshow(get_blend_map(input, atten)) 76 | # plt.show() 77 | output_dir = os.path.join(ckpt_dir, "test_epoch_%d" % test_epoch, str(channel_index)) 78 | if not os.path.exists(output_dir): 79 | os.makedirs(output_dir) 80 | image_name = "_".join(image_path.split('/')[-3:]).strip(".jpg") 81 | output_path = os.path.join(output_dir, image_name + '.pdf') 82 | fig.savefig(output_path, bbox_inches='tight') --------------------------------------------------------------------------------