├── LICENSE ├── README.md ├── __pycache__ ├── main.cpython-36.pyc ├── opts.cpython-36.pyc └── trainer.cpython-36.pyc ├── data ├── __pycache__ │ └── prepare_data.cpython-36.pyc ├── datasets │ └── Office31 │ │ ├── amazon │ │ └── images.txt │ │ ├── amazon_half │ │ └── images.txt │ │ ├── amazon_half2 │ │ └── images.txt │ │ ├── dslr │ │ └── images.txt │ │ ├── dslr_half │ │ └── images.txt │ │ ├── dslr_half2 │ │ └── images.txt │ │ ├── webcam │ │ └── images.txt │ │ ├── webcam_half │ │ └── images.txt │ │ └── webcam_half2 │ │ └── images.txt └── prepare_data.py ├── main.py ├── models ├── __pycache__ │ ├── model_construct.cpython-36.pyc │ └── resnet.cpython-36.pyc ├── model_construct.py └── resnet.py ├── opts.py ├── run_office31.sh ├── trainer.py └── utils ├── __init__.py ├── __pycache__ ├── __init__.cpython-36.pyc ├── consensus_loss.cpython-36.pyc ├── folder.cpython-36.pyc └── kernel_kmeans.cpython-36.pyc ├── consensus_loss.py ├── folder.py └── kernel_kmeans.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 HuiTang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SRDC-CVPR2020 2 | Code release for Unsupervised Domain Adaptation via Structurally Regularized Deep Clustering (CVPR2020-Oral). 3 | 4 | The paper is avaliable [here](http://arxiv.org/abs/2003.08607). 5 | 6 | # Requirements 7 | - Python 3.6.3 8 | - Pytorch 1.1.0 9 | 10 | # Dataset 11 | The structure of the dataset should be like 12 | ``` 13 | Office31 14 | |_ amazon 15 | | |_ back_pack 16 | | |_ .jpg 17 | | |_ ... 18 | | |_ bike 19 | | |_ .jpg 20 | | |_ ... 21 | | |_ ... (omit 28 classes) 22 | | |_ trash_can 23 | | |_ .jpg 24 | | |_ ... 25 | |_ amazon_half 26 | | |_ back_pack 27 | | |_ .jpg 28 | | |_ ... 29 | | |_ bike 30 | | |_ .jpg 31 | | |_ ... 32 | | |_ ... (omit 28 classes) 33 | | |_ trash_can 34 | | |_ .jpg 35 | | |_ ... 36 | |_ amazon_half2 37 | | |_ back_pack 38 | | |_ .jpg 39 | | |_ ... 40 | | |_ bike 41 | | |_ .jpg 42 | | |_ ... 43 | | |_ ... (omit 28 classes) 44 | | |_ trash_can 45 | | |_ .jpg 46 | | |_ ... 47 | |_ dslr 48 | | |_ back_pack 49 | | |_ .jpg 50 | | |_ ... 51 | | |_ bike 52 | | |_ .jpg 53 | | |_ ... 54 | | |_ ... (omit 28 classes) 55 | | |_ trash_can 56 | | |_ .jpg 57 | | |_ ... 58 | |_ ... 59 | ``` 60 | # Training 61 | ## [Office-31](https://drive.google.com/file/d/0B4IapRTv9pJ1WGZVd1VDMmhwdlE/view) 62 | Replace paths and domains in run_office31.sh with those in your own system. 63 | 64 | # Citation 65 | ``` 66 | @InProceedings{srdc, 67 | title={Unsupervised Domain Adaptation via Structurally Regularized Deep Clustering}, 68 | author={Hui Tang, Ke Chen, and Kui Jia}, 69 | booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, 70 | year={2020}, 71 | } 72 | ``` 73 | -------------------------------------------------------------------------------- /__pycache__/main.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/__pycache__/main.cpython-36.pyc -------------------------------------------------------------------------------- /__pycache__/opts.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/__pycache__/opts.cpython-36.pyc -------------------------------------------------------------------------------- /__pycache__/trainer.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/__pycache__/trainer.cpython-36.pyc -------------------------------------------------------------------------------- /data/__pycache__/prepare_data.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/data/__pycache__/prepare_data.cpython-36.pyc -------------------------------------------------------------------------------- /data/datasets/Office31/amazon/images.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /data/datasets/Office31/amazon_half/images.txt: -------------------------------------------------------------------------------- 1 | ./back_pack/frame_0001.jpg 2 | ./back_pack/frame_0002.jpg 3 | ./back_pack/frame_0008.jpg 4 | ./back_pack/frame_0009.jpg 5 | ./back_pack/frame_0010.jpg 6 | ./back_pack/frame_0012.jpg 7 | ./back_pack/frame_0013.jpg 8 | ./back_pack/frame_0014.jpg 9 | ./back_pack/frame_0015.jpg 10 | ./back_pack/frame_0016.jpg 11 | ./back_pack/frame_0018.jpg 12 | ./back_pack/frame_0020.jpg 13 | ./back_pack/frame_0022.jpg 14 | ./back_pack/frame_0024.jpg 15 | ./back_pack/frame_0025.jpg 16 | ./back_pack/frame_0026.jpg 17 | ./back_pack/frame_0029.jpg 18 | ./back_pack/frame_0032.jpg 19 | ./back_pack/frame_0033.jpg 20 | ./back_pack/frame_0036.jpg 21 | ./back_pack/frame_0041.jpg 22 | ./back_pack/frame_0045.jpg 23 | ./back_pack/frame_0046.jpg 24 | ./back_pack/frame_0047.jpg 25 | ./back_pack/frame_0048.jpg 26 | ./back_pack/frame_0049.jpg 27 | ./back_pack/frame_0051.jpg 28 | ./back_pack/frame_0053.jpg 29 | ./back_pack/frame_0054.jpg 30 | ./back_pack/frame_0060.jpg 31 | ./back_pack/frame_0061.jpg 32 | ./back_pack/frame_0065.jpg 33 | ./back_pack/frame_0067.jpg 34 | ./back_pack/frame_0068.jpg 35 | ./back_pack/frame_0069.jpg 36 | ./back_pack/frame_0070.jpg 37 | ./back_pack/frame_0072.jpg 38 | ./back_pack/frame_0074.jpg 39 | ./back_pack/frame_0075.jpg 40 | ./back_pack/frame_0078.jpg 41 | ./back_pack/frame_0080.jpg 42 | ./back_pack/frame_0081.jpg 43 | ./back_pack/frame_0083.jpg 44 | ./back_pack/frame_0086.jpg 45 | ./back_pack/frame_0087.jpg 46 | ./back_pack/frame_0088.jpg 47 | ./bike/frame_0004.jpg 48 | ./bike/frame_0006.jpg 49 | ./bike/frame_0009.jpg 50 | ./bike/frame_0012.jpg 51 | ./bike/frame_0015.jpg 52 | ./bike/frame_0016.jpg 53 | ./bike/frame_0017.jpg 54 | ./bike/frame_0019.jpg 55 | ./bike/frame_0020.jpg 56 | ./bike/frame_0022.jpg 57 | ./bike/frame_0023.jpg 58 | ./bike/frame_0024.jpg 59 | ./bike/frame_0025.jpg 60 | ./bike/frame_0028.jpg 61 | ./bike/frame_0030.jpg 62 | ./bike/frame_0031.jpg 63 | ./bike/frame_0033.jpg 64 | ./bike/frame_0034.jpg 65 | ./bike/frame_0035.jpg 66 | ./bike/frame_0038.jpg 67 | ./bike/frame_0039.jpg 68 | ./bike/frame_0041.jpg 69 | ./bike/frame_0045.jpg 70 | ./bike/frame_0047.jpg 71 | ./bike/frame_0048.jpg 72 | ./bike/frame_0050.jpg 73 | ./bike/frame_0052.jpg 74 | ./bike/frame_0053.jpg 75 | ./bike/frame_0054.jpg 76 | ./bike/frame_0055.jpg 77 | ./bike/frame_0058.jpg 78 | ./bike/frame_0060.jpg 79 | ./bike/frame_0064.jpg 80 | ./bike/frame_0065.jpg 81 | ./bike/frame_0069.jpg 82 | ./bike/frame_0070.jpg 83 | ./bike/frame_0074.jpg 84 | ./bike/frame_0075.jpg 85 | ./bike/frame_0080.jpg 86 | ./bike/frame_0081.jpg 87 | ./bike/frame_0082.jpg 88 | ./bike_helmet/frame_0003.jpg 89 | ./bike_helmet/frame_0004.jpg 90 | ./bike_helmet/frame_0007.jpg 91 | ./bike_helmet/frame_0010.jpg 92 | ./bike_helmet/frame_0013.jpg 93 | ./bike_helmet/frame_0015.jpg 94 | ./bike_helmet/frame_0017.jpg 95 | ./bike_helmet/frame_0020.jpg 96 | ./bike_helmet/frame_0023.jpg 97 | ./bike_helmet/frame_0025.jpg 98 | ./bike_helmet/frame_0026.jpg 99 | ./bike_helmet/frame_0028.jpg 100 | ./bike_helmet/frame_0030.jpg 101 | ./bike_helmet/frame_0034.jpg 102 | ./bike_helmet/frame_0037.jpg 103 | ./bike_helmet/frame_0040.jpg 104 | ./bike_helmet/frame_0041.jpg 105 | ./bike_helmet/frame_0042.jpg 106 | ./bike_helmet/frame_0046.jpg 107 | ./bike_helmet/frame_0047.jpg 108 | ./bike_helmet/frame_0048.jpg 109 | ./bike_helmet/frame_0051.jpg 110 | ./bike_helmet/frame_0052.jpg 111 | ./bike_helmet/frame_0053.jpg 112 | ./bike_helmet/frame_0056.jpg 113 | ./bike_helmet/frame_0057.jpg 114 | ./bike_helmet/frame_0058.jpg 115 | ./bike_helmet/frame_0059.jpg 116 | ./bike_helmet/frame_0061.jpg 117 | ./bike_helmet/frame_0062.jpg 118 | ./bike_helmet/frame_0066.jpg 119 | ./bike_helmet/frame_0067.jpg 120 | ./bike_helmet/frame_0068.jpg 121 | ./bike_helmet/frame_0069.jpg 122 | ./bike_helmet/frame_0070.jpg 123 | ./bike_helmet/frame_0071.jpg 124 | ./bookcase/frame_0002.jpg 125 | ./bookcase/frame_0003.jpg 126 | ./bookcase/frame_0007.jpg 127 | ./bookcase/frame_0010.jpg 128 | ./bookcase/frame_0012.jpg 129 | ./bookcase/frame_0014.jpg 130 | ./bookcase/frame_0016.jpg 131 | ./bookcase/frame_0019.jpg 132 | ./bookcase/frame_0023.jpg 133 | ./bookcase/frame_0025.jpg 134 | ./bookcase/frame_0026.jpg 135 | ./bookcase/frame_0027.jpg 136 | ./bookcase/frame_0028.jpg 137 | ./bookcase/frame_0031.jpg 138 | ./bookcase/frame_0032.jpg 139 | ./bookcase/frame_0033.jpg 140 | ./bookcase/frame_0037.jpg 141 | ./bookcase/frame_0038.jpg 142 | ./bookcase/frame_0043.jpg 143 | ./bookcase/frame_0044.jpg 144 | ./bookcase/frame_0045.jpg 145 | ./bookcase/frame_0046.jpg 146 | ./bookcase/frame_0048.jpg 147 | ./bookcase/frame_0049.jpg 148 | ./bookcase/frame_0050.jpg 149 | ./bookcase/frame_0051.jpg 150 | ./bookcase/frame_0052.jpg 151 | ./bookcase/frame_0056.jpg 152 | ./bookcase/frame_0062.jpg 153 | ./bookcase/frame_0064.jpg 154 | ./bookcase/frame_0065.jpg 155 | ./bookcase/frame_0066.jpg 156 | ./bookcase/frame_0069.jpg 157 | ./bookcase/frame_0072.jpg 158 | ./bookcase/frame_0074.jpg 159 | ./bookcase/frame_0075.jpg 160 | ./bookcase/frame_0076.jpg 161 | ./bookcase/frame_0077.jpg 162 | ./bookcase/frame_0078.jpg 163 | ./bookcase/frame_0080.jpg 164 | ./bookcase/frame_0082.jpg 165 | ./bottle/frame_0002.jpg 166 | ./bottle/frame_0004.jpg 167 | ./bottle/frame_0005.jpg 168 | ./bottle/frame_0007.jpg 169 | ./bottle/frame_0009.jpg 170 | ./bottle/frame_0010.jpg 171 | ./bottle/frame_0013.jpg 172 | ./bottle/frame_0014.jpg 173 | ./bottle/frame_0015.jpg 174 | ./bottle/frame_0020.jpg 175 | ./bottle/frame_0023.jpg 176 | ./bottle/frame_0024.jpg 177 | ./bottle/frame_0026.jpg 178 | ./bottle/frame_0029.jpg 179 | ./bottle/frame_0030.jpg 180 | ./bottle/frame_0031.jpg 181 | ./bottle/frame_0034.jpg 182 | ./bottle/frame_0036.jpg 183 | ./calculator/frame_0001.jpg 184 | ./calculator/frame_0004.jpg 185 | ./calculator/frame_0006.jpg 186 | ./calculator/frame_0007.jpg 187 | ./calculator/frame_0010.jpg 188 | ./calculator/frame_0011.jpg 189 | ./calculator/frame_0014.jpg 190 | ./calculator/frame_0015.jpg 191 | ./calculator/frame_0016.jpg 192 | ./calculator/frame_0019.jpg 193 | ./calculator/frame_0023.jpg 194 | ./calculator/frame_0025.jpg 195 | ./calculator/frame_0026.jpg 196 | ./calculator/frame_0027.jpg 197 | ./calculator/frame_0028.jpg 198 | ./calculator/frame_0029.jpg 199 | ./calculator/frame_0032.jpg 200 | ./calculator/frame_0034.jpg 201 | ./calculator/frame_0040.jpg 202 | ./calculator/frame_0041.jpg 203 | ./calculator/frame_0043.jpg 204 | ./calculator/frame_0044.jpg 205 | ./calculator/frame_0045.jpg 206 | ./calculator/frame_0048.jpg 207 | ./calculator/frame_0051.jpg 208 | ./calculator/frame_0053.jpg 209 | ./calculator/frame_0056.jpg 210 | ./calculator/frame_0057.jpg 211 | ./calculator/frame_0058.jpg 212 | ./calculator/frame_0060.jpg 213 | ./calculator/frame_0063.jpg 214 | ./calculator/frame_0065.jpg 215 | ./calculator/frame_0066.jpg 216 | ./calculator/frame_0071.jpg 217 | ./calculator/frame_0073.jpg 218 | ./calculator/frame_0075.jpg 219 | ./calculator/frame_0076.jpg 220 | ./calculator/frame_0078.jpg 221 | ./calculator/frame_0079.jpg 222 | ./calculator/frame_0081.jpg 223 | ./calculator/frame_0082.jpg 224 | ./calculator/frame_0083.jpg 225 | ./calculator/frame_0084.jpg 226 | ./calculator/frame_0086.jpg 227 | ./calculator/frame_0089.jpg 228 | ./calculator/frame_0090.jpg 229 | ./calculator/frame_0094.jpg 230 | ./desk_chair/frame_0002.jpg 231 | ./desk_chair/frame_0003.jpg 232 | ./desk_chair/frame_0005.jpg 233 | ./desk_chair/frame_0007.jpg 234 | ./desk_chair/frame_0009.jpg 235 | ./desk_chair/frame_0012.jpg 236 | ./desk_chair/frame_0016.jpg 237 | ./desk_chair/frame_0017.jpg 238 | ./desk_chair/frame_0018.jpg 239 | ./desk_chair/frame_0021.jpg 240 | ./desk_chair/frame_0022.jpg 241 | ./desk_chair/frame_0023.jpg 242 | ./desk_chair/frame_0025.jpg 243 | ./desk_chair/frame_0026.jpg 244 | ./desk_chair/frame_0028.jpg 245 | ./desk_chair/frame_0031.jpg 246 | ./desk_chair/frame_0033.jpg 247 | ./desk_chair/frame_0036.jpg 248 | ./desk_chair/frame_0038.jpg 249 | ./desk_chair/frame_0040.jpg 250 | ./desk_chair/frame_0043.jpg 251 | ./desk_chair/frame_0045.jpg 252 | ./desk_chair/frame_0046.jpg 253 | ./desk_chair/frame_0047.jpg 254 | ./desk_chair/frame_0048.jpg 255 | ./desk_chair/frame_0049.jpg 256 | ./desk_chair/frame_0051.jpg 257 | ./desk_chair/frame_0052.jpg 258 | ./desk_chair/frame_0055.jpg 259 | ./desk_chair/frame_0057.jpg 260 | ./desk_chair/frame_0060.jpg 261 | ./desk_chair/frame_0061.jpg 262 | ./desk_chair/frame_0063.jpg 263 | ./desk_chair/frame_0067.jpg 264 | ./desk_chair/frame_0071.jpg 265 | ./desk_chair/frame_0072.jpg 266 | ./desk_chair/frame_0073.jpg 267 | ./desk_chair/frame_0074.jpg 268 | ./desk_chair/frame_0079.jpg 269 | ./desk_chair/frame_0081.jpg 270 | ./desk_chair/frame_0082.jpg 271 | ./desk_chair/frame_0085.jpg 272 | ./desk_chair/frame_0089.jpg 273 | ./desk_chair/frame_0090.jpg 274 | ./desk_chair/frame_0091.jpg 275 | ./desk_lamp/frame_0001.jpg 276 | ./desk_lamp/frame_0003.jpg 277 | ./desk_lamp/frame_0004.jpg 278 | ./desk_lamp/frame_0010.jpg 279 | ./desk_lamp/frame_0011.jpg 280 | ./desk_lamp/frame_0013.jpg 281 | ./desk_lamp/frame_0015.jpg 282 | ./desk_lamp/frame_0016.jpg 283 | ./desk_lamp/frame_0017.jpg 284 | ./desk_lamp/frame_0018.jpg 285 | ./desk_lamp/frame_0019.jpg 286 | ./desk_lamp/frame_0020.jpg 287 | ./desk_lamp/frame_0021.jpg 288 | ./desk_lamp/frame_0022.jpg 289 | ./desk_lamp/frame_0023.jpg 290 | ./desk_lamp/frame_0030.jpg 291 | ./desk_lamp/frame_0031.jpg 292 | ./desk_lamp/frame_0032.jpg 293 | ./desk_lamp/frame_0033.jpg 294 | ./desk_lamp/frame_0035.jpg 295 | ./desk_lamp/frame_0036.jpg 296 | ./desk_lamp/frame_0038.jpg 297 | ./desk_lamp/frame_0039.jpg 298 | ./desk_lamp/frame_0040.jpg 299 | ./desk_lamp/frame_0041.jpg 300 | ./desk_lamp/frame_0042.jpg 301 | ./desk_lamp/frame_0044.jpg 302 | ./desk_lamp/frame_0045.jpg 303 | ./desk_lamp/frame_0046.jpg 304 | ./desk_lamp/frame_0050.jpg 305 | ./desk_lamp/frame_0060.jpg 306 | ./desk_lamp/frame_0061.jpg 307 | ./desk_lamp/frame_0065.jpg 308 | ./desk_lamp/frame_0068.jpg 309 | ./desk_lamp/frame_0072.jpg 310 | ./desk_lamp/frame_0074.jpg 311 | ./desk_lamp/frame_0075.jpg 312 | ./desk_lamp/frame_0076.jpg 313 | ./desk_lamp/frame_0080.jpg 314 | ./desk_lamp/frame_0081.jpg 315 | ./desk_lamp/frame_0082.jpg 316 | ./desk_lamp/frame_0084.jpg 317 | ./desk_lamp/frame_0085.jpg 318 | ./desk_lamp/frame_0086.jpg 319 | ./desk_lamp/frame_0090.jpg 320 | ./desk_lamp/frame_0093.jpg 321 | ./desk_lamp/frame_0094.jpg 322 | ./desk_lamp/frame_0095.jpg 323 | ./desktop_computer/frame_0004.jpg 324 | ./desktop_computer/frame_0005.jpg 325 | ./desktop_computer/frame_0006.jpg 326 | ./desktop_computer/frame_0007.jpg 327 | ./desktop_computer/frame_0012.jpg 328 | ./desktop_computer/frame_0013.jpg 329 | ./desktop_computer/frame_0016.jpg 330 | ./desktop_computer/frame_0017.jpg 331 | ./desktop_computer/frame_0020.jpg 332 | ./desktop_computer/frame_0021.jpg 333 | ./desktop_computer/frame_0023.jpg 334 | ./desktop_computer/frame_0025.jpg 335 | ./desktop_computer/frame_0027.jpg 336 | ./desktop_computer/frame_0030.jpg 337 | ./desktop_computer/frame_0031.jpg 338 | ./desktop_computer/frame_0034.jpg 339 | ./desktop_computer/frame_0036.jpg 340 | ./desktop_computer/frame_0037.jpg 341 | ./desktop_computer/frame_0038.jpg 342 | ./desktop_computer/frame_0039.jpg 343 | ./desktop_computer/frame_0040.jpg 344 | ./desktop_computer/frame_0042.jpg 345 | ./desktop_computer/frame_0043.jpg 346 | ./desktop_computer/frame_0045.jpg 347 | ./desktop_computer/frame_0046.jpg 348 | ./desktop_computer/frame_0047.jpg 349 | ./desktop_computer/frame_0050.jpg 350 | ./desktop_computer/frame_0053.jpg 351 | ./desktop_computer/frame_0056.jpg 352 | ./desktop_computer/frame_0058.jpg 353 | ./desktop_computer/frame_0060.jpg 354 | ./desktop_computer/frame_0061.jpg 355 | ./desktop_computer/frame_0062.jpg 356 | ./desktop_computer/frame_0063.jpg 357 | ./desktop_computer/frame_0066.jpg 358 | ./desktop_computer/frame_0068.jpg 359 | ./desktop_computer/frame_0069.jpg 360 | ./desktop_computer/frame_0074.jpg 361 | ./desktop_computer/frame_0076.jpg 362 | ./desktop_computer/frame_0079.jpg 363 | ./desktop_computer/frame_0080.jpg 364 | ./desktop_computer/frame_0081.jpg 365 | ./desktop_computer/frame_0082.jpg 366 | ./desktop_computer/frame_0084.jpg 367 | ./desktop_computer/frame_0085.jpg 368 | ./desktop_computer/frame_0088.jpg 369 | ./desktop_computer/frame_0094.jpg 370 | ./desktop_computer/frame_0095.jpg 371 | ./file_cabinet/frame_0002.jpg 372 | ./file_cabinet/frame_0004.jpg 373 | ./file_cabinet/frame_0006.jpg 374 | ./file_cabinet/frame_0008.jpg 375 | ./file_cabinet/frame_0010.jpg 376 | ./file_cabinet/frame_0013.jpg 377 | ./file_cabinet/frame_0015.jpg 378 | ./file_cabinet/frame_0017.jpg 379 | ./file_cabinet/frame_0019.jpg 380 | ./file_cabinet/frame_0027.jpg 381 | ./file_cabinet/frame_0028.jpg 382 | ./file_cabinet/frame_0031.jpg 383 | ./file_cabinet/frame_0032.jpg 384 | ./file_cabinet/frame_0034.jpg 385 | ./file_cabinet/frame_0036.jpg 386 | ./file_cabinet/frame_0037.jpg 387 | ./file_cabinet/frame_0041.jpg 388 | ./file_cabinet/frame_0043.jpg 389 | ./file_cabinet/frame_0044.jpg 390 | ./file_cabinet/frame_0045.jpg 391 | ./file_cabinet/frame_0051.jpg 392 | ./file_cabinet/frame_0053.jpg 393 | ./file_cabinet/frame_0054.jpg 394 | ./file_cabinet/frame_0055.jpg 395 | ./file_cabinet/frame_0056.jpg 396 | ./file_cabinet/frame_0057.jpg 397 | ./file_cabinet/frame_0059.jpg 398 | ./file_cabinet/frame_0060.jpg 399 | ./file_cabinet/frame_0061.jpg 400 | ./file_cabinet/frame_0062.jpg 401 | ./file_cabinet/frame_0063.jpg 402 | ./file_cabinet/frame_0064.jpg 403 | ./file_cabinet/frame_0066.jpg 404 | ./file_cabinet/frame_0068.jpg 405 | ./file_cabinet/frame_0069.jpg 406 | ./file_cabinet/frame_0073.jpg 407 | ./file_cabinet/frame_0074.jpg 408 | ./file_cabinet/frame_0076.jpg 409 | ./file_cabinet/frame_0078.jpg 410 | ./file_cabinet/frame_0079.jpg 411 | ./headphones/frame_0006.jpg 412 | ./headphones/frame_0007.jpg 413 | ./headphones/frame_0010.jpg 414 | ./headphones/frame_0011.jpg 415 | ./headphones/frame_0013.jpg 416 | ./headphones/frame_0014.jpg 417 | ./headphones/frame_0015.jpg 418 | ./headphones/frame_0016.jpg 419 | ./headphones/frame_0017.jpg 420 | ./headphones/frame_0018.jpg 421 | ./headphones/frame_0022.jpg 422 | ./headphones/frame_0023.jpg 423 | ./headphones/frame_0028.jpg 424 | ./headphones/frame_0029.jpg 425 | ./headphones/frame_0030.jpg 426 | ./headphones/frame_0031.jpg 427 | ./headphones/frame_0032.jpg 428 | ./headphones/frame_0033.jpg 429 | ./headphones/frame_0034.jpg 430 | ./headphones/frame_0036.jpg 431 | ./headphones/frame_0037.jpg 432 | ./headphones/frame_0039.jpg 433 | ./headphones/frame_0041.jpg 434 | ./headphones/frame_0045.jpg 435 | ./headphones/frame_0046.jpg 436 | ./headphones/frame_0049.jpg 437 | ./headphones/frame_0050.jpg 438 | ./headphones/frame_0051.jpg 439 | ./headphones/frame_0063.jpg 440 | ./headphones/frame_0066.jpg 441 | ./headphones/frame_0068.jpg 442 | ./headphones/frame_0071.jpg 443 | ./headphones/frame_0074.jpg 444 | ./headphones/frame_0076.jpg 445 | ./headphones/frame_0078.jpg 446 | ./headphones/frame_0079.jpg 447 | ./headphones/frame_0080.jpg 448 | ./headphones/frame_0081.jpg 449 | ./headphones/frame_0082.jpg 450 | ./headphones/frame_0084.jpg 451 | ./headphones/frame_0085.jpg 452 | ./headphones/frame_0086.jpg 453 | ./headphones/frame_0087.jpg 454 | ./headphones/frame_0088.jpg 455 | ./headphones/frame_0091.jpg 456 | ./headphones/frame_0092.jpg 457 | ./headphones/frame_0093.jpg 458 | ./headphones/frame_0094.jpg 459 | ./headphones/frame_0095.jpg 460 | ./keyboard/frame_0001.jpg 461 | ./keyboard/frame_0005.jpg 462 | ./keyboard/frame_0007.jpg 463 | ./keyboard/frame_0017.jpg 464 | ./keyboard/frame_0018.jpg 465 | ./keyboard/frame_0019.jpg 466 | ./keyboard/frame_0020.jpg 467 | ./keyboard/frame_0022.jpg 468 | ./keyboard/frame_0026.jpg 469 | ./keyboard/frame_0028.jpg 470 | ./keyboard/frame_0029.jpg 471 | ./keyboard/frame_0032.jpg 472 | ./keyboard/frame_0033.jpg 473 | ./keyboard/frame_0034.jpg 474 | ./keyboard/frame_0036.jpg 475 | ./keyboard/frame_0037.jpg 476 | ./keyboard/frame_0039.jpg 477 | ./keyboard/frame_0040.jpg 478 | ./keyboard/frame_0041.jpg 479 | ./keyboard/frame_0042.jpg 480 | ./keyboard/frame_0043.jpg 481 | ./keyboard/frame_0045.jpg 482 | ./keyboard/frame_0047.jpg 483 | ./keyboard/frame_0049.jpg 484 | ./keyboard/frame_0051.jpg 485 | ./keyboard/frame_0055.jpg 486 | ./keyboard/frame_0063.jpg 487 | ./keyboard/frame_0064.jpg 488 | ./keyboard/frame_0065.jpg 489 | ./keyboard/frame_0066.jpg 490 | ./keyboard/frame_0068.jpg 491 | ./keyboard/frame_0074.jpg 492 | ./keyboard/frame_0076.jpg 493 | ./keyboard/frame_0077.jpg 494 | ./keyboard/frame_0078.jpg 495 | ./keyboard/frame_0080.jpg 496 | ./keyboard/frame_0081.jpg 497 | ./keyboard/frame_0082.jpg 498 | ./keyboard/frame_0083.jpg 499 | ./keyboard/frame_0084.jpg 500 | ./keyboard/frame_0086.jpg 501 | ./keyboard/frame_0088.jpg 502 | ./keyboard/frame_0089.jpg 503 | ./keyboard/frame_0090.jpg 504 | ./keyboard/frame_0092.jpg 505 | ./keyboard/frame_0093.jpg 506 | ./keyboard/frame_0094.jpg 507 | ./keyboard/frame_0095.jpg 508 | ./keyboard/frame_0098.jpg 509 | ./keyboard/frame_0099.jpg 510 | ./laptop_computer/frame_0006.jpg 511 | ./laptop_computer/frame_0007.jpg 512 | ./laptop_computer/frame_0009.jpg 513 | ./laptop_computer/frame_0016.jpg 514 | ./laptop_computer/frame_0017.jpg 515 | ./laptop_computer/frame_0020.jpg 516 | ./laptop_computer/frame_0021.jpg 517 | ./laptop_computer/frame_0022.jpg 518 | ./laptop_computer/frame_0024.jpg 519 | ./laptop_computer/frame_0028.jpg 520 | ./laptop_computer/frame_0030.jpg 521 | ./laptop_computer/frame_0032.jpg 522 | ./laptop_computer/frame_0033.jpg 523 | ./laptop_computer/frame_0035.jpg 524 | ./laptop_computer/frame_0037.jpg 525 | ./laptop_computer/frame_0039.jpg 526 | ./laptop_computer/frame_0043.jpg 527 | ./laptop_computer/frame_0044.jpg 528 | ./laptop_computer/frame_0046.jpg 529 | ./laptop_computer/frame_0047.jpg 530 | ./laptop_computer/frame_0049.jpg 531 | ./laptop_computer/frame_0050.jpg 532 | ./laptop_computer/frame_0052.jpg 533 | ./laptop_computer/frame_0053.jpg 534 | ./laptop_computer/frame_0056.jpg 535 | ./laptop_computer/frame_0057.jpg 536 | ./laptop_computer/frame_0058.jpg 537 | ./laptop_computer/frame_0060.jpg 538 | ./laptop_computer/frame_0061.jpg 539 | ./laptop_computer/frame_0062.jpg 540 | ./laptop_computer/frame_0068.jpg 541 | ./laptop_computer/frame_0069.jpg 542 | ./laptop_computer/frame_0072.jpg 543 | ./laptop_computer/frame_0073.jpg 544 | ./laptop_computer/frame_0074.jpg 545 | ./laptop_computer/frame_0075.jpg 546 | ./laptop_computer/frame_0076.jpg 547 | ./laptop_computer/frame_0079.jpg 548 | ./laptop_computer/frame_0082.jpg 549 | ./laptop_computer/frame_0083.jpg 550 | ./laptop_computer/frame_0084.jpg 551 | ./laptop_computer/frame_0086.jpg 552 | ./laptop_computer/frame_0087.jpg 553 | ./laptop_computer/frame_0088.jpg 554 | ./laptop_computer/frame_0092.jpg 555 | ./laptop_computer/frame_0094.jpg 556 | ./laptop_computer/frame_0095.jpg 557 | ./laptop_computer/frame_0097.jpg 558 | ./laptop_computer/frame_0098.jpg 559 | ./laptop_computer/frame_0100.jpg 560 | ./letter_tray/frame_0001.jpg 561 | ./letter_tray/frame_0003.jpg 562 | ./letter_tray/frame_0005.jpg 563 | ./letter_tray/frame_0006.jpg 564 | ./letter_tray/frame_0012.jpg 565 | ./letter_tray/frame_0013.jpg 566 | ./letter_tray/frame_0014.jpg 567 | ./letter_tray/frame_0015.jpg 568 | ./letter_tray/frame_0017.jpg 569 | ./letter_tray/frame_0018.jpg 570 | ./letter_tray/frame_0019.jpg 571 | ./letter_tray/frame_0020.jpg 572 | ./letter_tray/frame_0021.jpg 573 | ./letter_tray/frame_0024.jpg 574 | ./letter_tray/frame_0025.jpg 575 | ./letter_tray/frame_0026.jpg 576 | ./letter_tray/frame_0027.jpg 577 | ./letter_tray/frame_0028.jpg 578 | ./letter_tray/frame_0029.jpg 579 | ./letter_tray/frame_0032.jpg 580 | ./letter_tray/frame_0035.jpg 581 | ./letter_tray/frame_0037.jpg 582 | ./letter_tray/frame_0040.jpg 583 | ./letter_tray/frame_0042.jpg 584 | ./letter_tray/frame_0045.jpg 585 | ./letter_tray/frame_0046.jpg 586 | ./letter_tray/frame_0047.jpg 587 | ./letter_tray/frame_0049.jpg 588 | ./letter_tray/frame_0052.jpg 589 | ./letter_tray/frame_0056.jpg 590 | ./letter_tray/frame_0057.jpg 591 | ./letter_tray/frame_0060.jpg 592 | ./letter_tray/frame_0061.jpg 593 | ./letter_tray/frame_0065.jpg 594 | ./letter_tray/frame_0067.jpg 595 | ./letter_tray/frame_0069.jpg 596 | ./letter_tray/frame_0073.jpg 597 | ./letter_tray/frame_0076.jpg 598 | ./letter_tray/frame_0078.jpg 599 | ./letter_tray/frame_0082.jpg 600 | ./letter_tray/frame_0083.jpg 601 | ./letter_tray/frame_0084.jpg 602 | ./letter_tray/frame_0085.jpg 603 | ./letter_tray/frame_0086.jpg 604 | ./letter_tray/frame_0087.jpg 605 | ./letter_tray/frame_0092.jpg 606 | ./letter_tray/frame_0096.jpg 607 | ./letter_tray/frame_0097.jpg 608 | ./letter_tray/frame_0098.jpg 609 | ./mobile_phone/frame_0003.jpg 610 | ./mobile_phone/frame_0007.jpg 611 | ./mobile_phone/frame_0008.jpg 612 | ./mobile_phone/frame_0009.jpg 613 | ./mobile_phone/frame_0010.jpg 614 | ./mobile_phone/frame_0014.jpg 615 | ./mobile_phone/frame_0015.jpg 616 | ./mobile_phone/frame_0020.jpg 617 | ./mobile_phone/frame_0021.jpg 618 | ./mobile_phone/frame_0022.jpg 619 | ./mobile_phone/frame_0026.jpg 620 | ./mobile_phone/frame_0032.jpg 621 | ./mobile_phone/frame_0035.jpg 622 | ./mobile_phone/frame_0036.jpg 623 | ./mobile_phone/frame_0037.jpg 624 | ./mobile_phone/frame_0038.jpg 625 | ./mobile_phone/frame_0041.jpg 626 | ./mobile_phone/frame_0044.jpg 627 | ./mobile_phone/frame_0045.jpg 628 | ./mobile_phone/frame_0046.jpg 629 | ./mobile_phone/frame_0047.jpg 630 | ./mobile_phone/frame_0048.jpg 631 | ./mobile_phone/frame_0050.jpg 632 | ./mobile_phone/frame_0051.jpg 633 | ./mobile_phone/frame_0052.jpg 634 | ./mobile_phone/frame_0053.jpg 635 | ./mobile_phone/frame_0056.jpg 636 | ./mobile_phone/frame_0059.jpg 637 | ./mobile_phone/frame_0060.jpg 638 | ./mobile_phone/frame_0061.jpg 639 | ./mobile_phone/frame_0063.jpg 640 | ./mobile_phone/frame_0064.jpg 641 | ./mobile_phone/frame_0070.jpg 642 | ./mobile_phone/frame_0072.jpg 643 | ./mobile_phone/frame_0073.jpg 644 | ./mobile_phone/frame_0078.jpg 645 | ./mobile_phone/frame_0079.jpg 646 | ./mobile_phone/frame_0081.jpg 647 | ./mobile_phone/frame_0084.jpg 648 | ./mobile_phone/frame_0085.jpg 649 | ./mobile_phone/frame_0086.jpg 650 | ./mobile_phone/frame_0087.jpg 651 | ./mobile_phone/frame_0088.jpg 652 | ./mobile_phone/frame_0089.jpg 653 | ./mobile_phone/frame_0091.jpg 654 | ./mobile_phone/frame_0093.jpg 655 | ./mobile_phone/frame_0094.jpg 656 | ./mobile_phone/frame_0096.jpg 657 | ./mobile_phone/frame_0097.jpg 658 | ./mobile_phone/frame_0100.jpg 659 | ./monitor/frame_0002.jpg 660 | ./monitor/frame_0005.jpg 661 | ./monitor/frame_0006.jpg 662 | ./monitor/frame_0009.jpg 663 | ./monitor/frame_0010.jpg 664 | ./monitor/frame_0012.jpg 665 | ./monitor/frame_0013.jpg 666 | ./monitor/frame_0014.jpg 667 | ./monitor/frame_0015.jpg 668 | ./monitor/frame_0017.jpg 669 | ./monitor/frame_0018.jpg 670 | ./monitor/frame_0019.jpg 671 | ./monitor/frame_0021.jpg 672 | ./monitor/frame_0022.jpg 673 | ./monitor/frame_0023.jpg 674 | ./monitor/frame_0026.jpg 675 | ./monitor/frame_0028.jpg 676 | ./monitor/frame_0032.jpg 677 | ./monitor/frame_0039.jpg 678 | ./monitor/frame_0040.jpg 679 | ./monitor/frame_0041.jpg 680 | ./monitor/frame_0043.jpg 681 | ./monitor/frame_0046.jpg 682 | ./monitor/frame_0047.jpg 683 | ./monitor/frame_0048.jpg 684 | ./monitor/frame_0051.jpg 685 | ./monitor/frame_0054.jpg 686 | ./monitor/frame_0055.jpg 687 | ./monitor/frame_0057.jpg 688 | ./monitor/frame_0058.jpg 689 | ./monitor/frame_0059.jpg 690 | ./monitor/frame_0060.jpg 691 | ./monitor/frame_0061.jpg 692 | ./monitor/frame_0065.jpg 693 | ./monitor/frame_0071.jpg 694 | ./monitor/frame_0081.jpg 695 | ./monitor/frame_0082.jpg 696 | ./monitor/frame_0083.jpg 697 | ./monitor/frame_0084.jpg 698 | ./monitor/frame_0085.jpg 699 | ./monitor/frame_0086.jpg 700 | ./monitor/frame_0087.jpg 701 | ./monitor/frame_0088.jpg 702 | ./monitor/frame_0090.jpg 703 | ./monitor/frame_0091.jpg 704 | ./monitor/frame_0094.jpg 705 | ./monitor/frame_0096.jpg 706 | ./monitor/frame_0097.jpg 707 | ./monitor/frame_0098.jpg 708 | ./mouse/frame_0001.jpg 709 | ./mouse/frame_0002.jpg 710 | ./mouse/frame_0005.jpg 711 | ./mouse/frame_0008.jpg 712 | ./mouse/frame_0009.jpg 713 | ./mouse/frame_0011.jpg 714 | ./mouse/frame_0012.jpg 715 | ./mouse/frame_0014.jpg 716 | ./mouse/frame_0015.jpg 717 | ./mouse/frame_0018.jpg 718 | ./mouse/frame_0019.jpg 719 | ./mouse/frame_0021.jpg 720 | ./mouse/frame_0022.jpg 721 | ./mouse/frame_0024.jpg 722 | ./mouse/frame_0027.jpg 723 | ./mouse/frame_0028.jpg 724 | ./mouse/frame_0031.jpg 725 | ./mouse/frame_0034.jpg 726 | ./mouse/frame_0036.jpg 727 | ./mouse/frame_0039.jpg 728 | ./mouse/frame_0040.jpg 729 | ./mouse/frame_0041.jpg 730 | ./mouse/frame_0042.jpg 731 | ./mouse/frame_0043.jpg 732 | ./mouse/frame_0044.jpg 733 | ./mouse/frame_0048.jpg 734 | ./mouse/frame_0049.jpg 735 | ./mouse/frame_0050.jpg 736 | ./mouse/frame_0052.jpg 737 | ./mouse/frame_0053.jpg 738 | ./mouse/frame_0054.jpg 739 | ./mouse/frame_0056.jpg 740 | ./mouse/frame_0062.jpg 741 | ./mouse/frame_0065.jpg 742 | ./mouse/frame_0066.jpg 743 | ./mouse/frame_0067.jpg 744 | ./mouse/frame_0069.jpg 745 | ./mouse/frame_0071.jpg 746 | ./mouse/frame_0073.jpg 747 | ./mouse/frame_0074.jpg 748 | ./mouse/frame_0075.jpg 749 | ./mouse/frame_0078.jpg 750 | ./mouse/frame_0079.jpg 751 | ./mouse/frame_0080.jpg 752 | ./mouse/frame_0081.jpg 753 | ./mouse/frame_0086.jpg 754 | ./mouse/frame_0090.jpg 755 | ./mouse/frame_0093.jpg 756 | ./mouse/frame_0096.jpg 757 | ./mouse/frame_0099.jpg 758 | ./mug/frame_0002.jpg 759 | ./mug/frame_0005.jpg 760 | ./mug/frame_0006.jpg 761 | ./mug/frame_0008.jpg 762 | ./mug/frame_0010.jpg 763 | ./mug/frame_0011.jpg 764 | ./mug/frame_0016.jpg 765 | ./mug/frame_0017.jpg 766 | ./mug/frame_0019.jpg 767 | ./mug/frame_0020.jpg 768 | ./mug/frame_0022.jpg 769 | ./mug/frame_0023.jpg 770 | ./mug/frame_0030.jpg 771 | ./mug/frame_0032.jpg 772 | ./mug/frame_0033.jpg 773 | ./mug/frame_0036.jpg 774 | ./mug/frame_0037.jpg 775 | ./mug/frame_0039.jpg 776 | ./mug/frame_0040.jpg 777 | ./mug/frame_0042.jpg 778 | ./mug/frame_0043.jpg 779 | ./mug/frame_0044.jpg 780 | ./mug/frame_0046.jpg 781 | ./mug/frame_0048.jpg 782 | ./mug/frame_0049.jpg 783 | ./mug/frame_0051.jpg 784 | ./mug/frame_0052.jpg 785 | ./mug/frame_0055.jpg 786 | ./mug/frame_0057.jpg 787 | ./mug/frame_0059.jpg 788 | ./mug/frame_0061.jpg 789 | ./mug/frame_0063.jpg 790 | ./mug/frame_0066.jpg 791 | ./mug/frame_0069.jpg 792 | ./mug/frame_0071.jpg 793 | ./mug/frame_0074.jpg 794 | ./mug/frame_0075.jpg 795 | ./mug/frame_0077.jpg 796 | ./mug/frame_0078.jpg 797 | ./mug/frame_0079.jpg 798 | ./mug/frame_0081.jpg 799 | ./mug/frame_0082.jpg 800 | ./mug/frame_0086.jpg 801 | ./mug/frame_0087.jpg 802 | ./mug/frame_0090.jpg 803 | ./mug/frame_0091.jpg 804 | ./mug/frame_0094.jpg 805 | ./paper_notebook/frame_0002.jpg 806 | ./paper_notebook/frame_0003.jpg 807 | ./paper_notebook/frame_0004.jpg 808 | ./paper_notebook/frame_0005.jpg 809 | ./paper_notebook/frame_0008.jpg 810 | ./paper_notebook/frame_0011.jpg 811 | ./paper_notebook/frame_0014.jpg 812 | ./paper_notebook/frame_0018.jpg 813 | ./paper_notebook/frame_0019.jpg 814 | ./paper_notebook/frame_0024.jpg 815 | ./paper_notebook/frame_0025.jpg 816 | ./paper_notebook/frame_0027.jpg 817 | ./paper_notebook/frame_0029.jpg 818 | ./paper_notebook/frame_0031.jpg 819 | ./paper_notebook/frame_0034.jpg 820 | ./paper_notebook/frame_0035.jpg 821 | ./paper_notebook/frame_0037.jpg 822 | ./paper_notebook/frame_0038.jpg 823 | ./paper_notebook/frame_0039.jpg 824 | ./paper_notebook/frame_0041.jpg 825 | ./paper_notebook/frame_0042.jpg 826 | ./paper_notebook/frame_0044.jpg 827 | ./paper_notebook/frame_0047.jpg 828 | ./paper_notebook/frame_0049.jpg 829 | ./paper_notebook/frame_0053.jpg 830 | ./paper_notebook/frame_0054.jpg 831 | ./paper_notebook/frame_0056.jpg 832 | ./paper_notebook/frame_0058.jpg 833 | ./paper_notebook/frame_0060.jpg 834 | ./paper_notebook/frame_0061.jpg 835 | ./paper_notebook/frame_0063.jpg 836 | ./paper_notebook/frame_0068.jpg 837 | ./paper_notebook/frame_0071.jpg 838 | ./paper_notebook/frame_0073.jpg 839 | ./paper_notebook/frame_0075.jpg 840 | ./paper_notebook/frame_0076.jpg 841 | ./paper_notebook/frame_0077.jpg 842 | ./paper_notebook/frame_0078.jpg 843 | ./paper_notebook/frame_0079.jpg 844 | ./paper_notebook/frame_0083.jpg 845 | ./paper_notebook/frame_0084.jpg 846 | ./paper_notebook/frame_0085.jpg 847 | ./paper_notebook/frame_0086.jpg 848 | ./paper_notebook/frame_0088.jpg 849 | ./paper_notebook/frame_0090.jpg 850 | ./paper_notebook/frame_0092.jpg 851 | ./paper_notebook/frame_0093.jpg 852 | ./paper_notebook/frame_0094.jpg 853 | ./pen/frame_0001.jpg 854 | ./pen/frame_0004.jpg 855 | ./pen/frame_0007.jpg 856 | ./pen/frame_0008.jpg 857 | ./pen/frame_0009.jpg 858 | ./pen/frame_0010.jpg 859 | ./pen/frame_0012.jpg 860 | ./pen/frame_0013.jpg 861 | ./pen/frame_0014.jpg 862 | ./pen/frame_0016.jpg 863 | ./pen/frame_0019.jpg 864 | ./pen/frame_0020.jpg 865 | ./pen/frame_0021.jpg 866 | ./pen/frame_0022.jpg 867 | ./pen/frame_0024.jpg 868 | ./pen/frame_0026.jpg 869 | ./pen/frame_0028.jpg 870 | ./pen/frame_0029.jpg 871 | ./pen/frame_0032.jpg 872 | ./pen/frame_0035.jpg 873 | ./pen/frame_0036.jpg 874 | ./pen/frame_0040.jpg 875 | ./pen/frame_0041.jpg 876 | ./pen/frame_0042.jpg 877 | ./pen/frame_0046.jpg 878 | ./pen/frame_0048.jpg 879 | ./pen/frame_0051.jpg 880 | ./pen/frame_0055.jpg 881 | ./pen/frame_0056.jpg 882 | ./pen/frame_0057.jpg 883 | ./pen/frame_0059.jpg 884 | ./pen/frame_0060.jpg 885 | ./pen/frame_0062.jpg 886 | ./pen/frame_0064.jpg 887 | ./pen/frame_0068.jpg 888 | ./pen/frame_0069.jpg 889 | ./pen/frame_0073.jpg 890 | ./pen/frame_0074.jpg 891 | ./pen/frame_0076.jpg 892 | ./pen/frame_0080.jpg 893 | ./pen/frame_0081.jpg 894 | ./pen/frame_0084.jpg 895 | ./pen/frame_0085.jpg 896 | ./pen/frame_0087.jpg 897 | ./pen/frame_0090.jpg 898 | ./pen/frame_0091.jpg 899 | ./pen/frame_0095.jpg 900 | ./phone/frame_0001.jpg 901 | ./phone/frame_0002.jpg 902 | ./phone/frame_0004.jpg 903 | ./phone/frame_0005.jpg 904 | ./phone/frame_0008.jpg 905 | ./phone/frame_0010.jpg 906 | ./phone/frame_0011.jpg 907 | ./phone/frame_0013.jpg 908 | ./phone/frame_0014.jpg 909 | ./phone/frame_0017.jpg 910 | ./phone/frame_0019.jpg 911 | ./phone/frame_0022.jpg 912 | ./phone/frame_0023.jpg 913 | ./phone/frame_0024.jpg 914 | ./phone/frame_0025.jpg 915 | ./phone/frame_0026.jpg 916 | ./phone/frame_0027.jpg 917 | ./phone/frame_0029.jpg 918 | ./phone/frame_0030.jpg 919 | ./phone/frame_0031.jpg 920 | ./phone/frame_0032.jpg 921 | ./phone/frame_0038.jpg 922 | ./phone/frame_0040.jpg 923 | ./phone/frame_0043.jpg 924 | ./phone/frame_0045.jpg 925 | ./phone/frame_0047.jpg 926 | ./phone/frame_0048.jpg 927 | ./phone/frame_0049.jpg 928 | ./phone/frame_0052.jpg 929 | ./phone/frame_0054.jpg 930 | ./phone/frame_0055.jpg 931 | ./phone/frame_0057.jpg 932 | ./phone/frame_0058.jpg 933 | ./phone/frame_0061.jpg 934 | ./phone/frame_0063.jpg 935 | ./phone/frame_0067.jpg 936 | ./phone/frame_0068.jpg 937 | ./phone/frame_0071.jpg 938 | ./phone/frame_0074.jpg 939 | ./phone/frame_0076.jpg 940 | ./phone/frame_0081.jpg 941 | ./phone/frame_0083.jpg 942 | ./phone/frame_0084.jpg 943 | ./phone/frame_0086.jpg 944 | ./phone/frame_0087.jpg 945 | ./phone/frame_0093.jpg 946 | ./printer/frame_0002.jpg 947 | ./printer/frame_0003.jpg 948 | ./printer/frame_0007.jpg 949 | ./printer/frame_0010.jpg 950 | ./printer/frame_0011.jpg 951 | ./printer/frame_0013.jpg 952 | ./printer/frame_0015.jpg 953 | ./printer/frame_0017.jpg 954 | ./printer/frame_0021.jpg 955 | ./printer/frame_0022.jpg 956 | ./printer/frame_0024.jpg 957 | ./printer/frame_0026.jpg 958 | ./printer/frame_0028.jpg 959 | ./printer/frame_0030.jpg 960 | ./printer/frame_0031.jpg 961 | ./printer/frame_0033.jpg 962 | ./printer/frame_0037.jpg 963 | ./printer/frame_0038.jpg 964 | ./printer/frame_0040.jpg 965 | ./printer/frame_0044.jpg 966 | ./printer/frame_0045.jpg 967 | ./printer/frame_0047.jpg 968 | ./printer/frame_0048.jpg 969 | ./printer/frame_0049.jpg 970 | ./printer/frame_0052.jpg 971 | ./printer/frame_0054.jpg 972 | ./printer/frame_0056.jpg 973 | ./printer/frame_0057.jpg 974 | ./printer/frame_0058.jpg 975 | ./printer/frame_0059.jpg 976 | ./printer/frame_0061.jpg 977 | ./printer/frame_0063.jpg 978 | ./printer/frame_0064.jpg 979 | ./printer/frame_0065.jpg 980 | ./printer/frame_0066.jpg 981 | ./printer/frame_0067.jpg 982 | ./printer/frame_0070.jpg 983 | ./printer/frame_0075.jpg 984 | ./printer/frame_0076.jpg 985 | ./printer/frame_0079.jpg 986 | ./printer/frame_0083.jpg 987 | ./printer/frame_0085.jpg 988 | ./printer/frame_0086.jpg 989 | ./printer/frame_0087.jpg 990 | ./printer/frame_0090.jpg 991 | ./printer/frame_0091.jpg 992 | ./printer/frame_0093.jpg 993 | ./printer/frame_0094.jpg 994 | ./printer/frame_0095.jpg 995 | ./printer/frame_0100.jpg 996 | ./projector/frame_0002.jpg 997 | ./projector/frame_0005.jpg 998 | ./projector/frame_0006.jpg 999 | ./projector/frame_0010.jpg 1000 | ./projector/frame_0011.jpg 1001 | ./projector/frame_0012.jpg 1002 | ./projector/frame_0015.jpg 1003 | ./projector/frame_0016.jpg 1004 | ./projector/frame_0021.jpg 1005 | ./projector/frame_0022.jpg 1006 | ./projector/frame_0023.jpg 1007 | ./projector/frame_0025.jpg 1008 | ./projector/frame_0028.jpg 1009 | ./projector/frame_0030.jpg 1010 | ./projector/frame_0032.jpg 1011 | ./projector/frame_0034.jpg 1012 | ./projector/frame_0036.jpg 1013 | ./projector/frame_0040.jpg 1014 | ./projector/frame_0041.jpg 1015 | ./projector/frame_0043.jpg 1016 | ./projector/frame_0048.jpg 1017 | ./projector/frame_0049.jpg 1018 | ./projector/frame_0051.jpg 1019 | ./projector/frame_0053.jpg 1020 | ./projector/frame_0054.jpg 1021 | ./projector/frame_0056.jpg 1022 | ./projector/frame_0057.jpg 1023 | ./projector/frame_0058.jpg 1024 | ./projector/frame_0061.jpg 1025 | ./projector/frame_0066.jpg 1026 | ./projector/frame_0067.jpg 1027 | ./projector/frame_0069.jpg 1028 | ./projector/frame_0072.jpg 1029 | ./projector/frame_0073.jpg 1030 | ./projector/frame_0077.jpg 1031 | ./projector/frame_0078.jpg 1032 | ./projector/frame_0079.jpg 1033 | ./projector/frame_0081.jpg 1034 | ./projector/frame_0084.jpg 1035 | ./projector/frame_0085.jpg 1036 | ./projector/frame_0087.jpg 1037 | ./projector/frame_0088.jpg 1038 | ./projector/frame_0089.jpg 1039 | ./projector/frame_0090.jpg 1040 | ./projector/frame_0094.jpg 1041 | ./projector/frame_0095.jpg 1042 | ./projector/frame_0096.jpg 1043 | ./projector/frame_0097.jpg 1044 | ./projector/frame_0098.jpg 1045 | ./punchers/frame_0001.jpg 1046 | ./punchers/frame_0002.jpg 1047 | ./punchers/frame_0003.jpg 1048 | ./punchers/frame_0004.jpg 1049 | ./punchers/frame_0005.jpg 1050 | ./punchers/frame_0007.jpg 1051 | ./punchers/frame_0009.jpg 1052 | ./punchers/frame_0010.jpg 1053 | ./punchers/frame_0012.jpg 1054 | ./punchers/frame_0014.jpg 1055 | ./punchers/frame_0017.jpg 1056 | ./punchers/frame_0019.jpg 1057 | ./punchers/frame_0020.jpg 1058 | ./punchers/frame_0021.jpg 1059 | ./punchers/frame_0023.jpg 1060 | ./punchers/frame_0025.jpg 1061 | ./punchers/frame_0026.jpg 1062 | ./punchers/frame_0028.jpg 1063 | ./punchers/frame_0029.jpg 1064 | ./punchers/frame_0033.jpg 1065 | ./punchers/frame_0034.jpg 1066 | ./punchers/frame_0037.jpg 1067 | ./punchers/frame_0038.jpg 1068 | ./punchers/frame_0041.jpg 1069 | ./punchers/frame_0046.jpg 1070 | ./punchers/frame_0048.jpg 1071 | ./punchers/frame_0052.jpg 1072 | ./punchers/frame_0054.jpg 1073 | ./punchers/frame_0058.jpg 1074 | ./punchers/frame_0060.jpg 1075 | ./punchers/frame_0061.jpg 1076 | ./punchers/frame_0066.jpg 1077 | ./punchers/frame_0068.jpg 1078 | ./punchers/frame_0069.jpg 1079 | ./punchers/frame_0071.jpg 1080 | ./punchers/frame_0074.jpg 1081 | ./punchers/frame_0076.jpg 1082 | ./punchers/frame_0077.jpg 1083 | ./punchers/frame_0078.jpg 1084 | ./punchers/frame_0079.jpg 1085 | ./punchers/frame_0081.jpg 1086 | ./punchers/frame_0085.jpg 1087 | ./punchers/frame_0086.jpg 1088 | ./punchers/frame_0088.jpg 1089 | ./punchers/frame_0091.jpg 1090 | ./punchers/frame_0092.jpg 1091 | ./punchers/frame_0093.jpg 1092 | ./punchers/frame_0095.jpg 1093 | ./punchers/frame_0098.jpg 1094 | ./ring_binder/frame_0004.jpg 1095 | ./ring_binder/frame_0008.jpg 1096 | ./ring_binder/frame_0011.jpg 1097 | ./ring_binder/frame_0014.jpg 1098 | ./ring_binder/frame_0015.jpg 1099 | ./ring_binder/frame_0017.jpg 1100 | ./ring_binder/frame_0018.jpg 1101 | ./ring_binder/frame_0019.jpg 1102 | ./ring_binder/frame_0020.jpg 1103 | ./ring_binder/frame_0021.jpg 1104 | ./ring_binder/frame_0023.jpg 1105 | ./ring_binder/frame_0024.jpg 1106 | ./ring_binder/frame_0029.jpg 1107 | ./ring_binder/frame_0034.jpg 1108 | ./ring_binder/frame_0035.jpg 1109 | ./ring_binder/frame_0036.jpg 1110 | ./ring_binder/frame_0037.jpg 1111 | ./ring_binder/frame_0040.jpg 1112 | ./ring_binder/frame_0043.jpg 1113 | ./ring_binder/frame_0044.jpg 1114 | ./ring_binder/frame_0047.jpg 1115 | ./ring_binder/frame_0048.jpg 1116 | ./ring_binder/frame_0049.jpg 1117 | ./ring_binder/frame_0050.jpg 1118 | ./ring_binder/frame_0051.jpg 1119 | ./ring_binder/frame_0052.jpg 1120 | ./ring_binder/frame_0054.jpg 1121 | ./ring_binder/frame_0055.jpg 1122 | ./ring_binder/frame_0058.jpg 1123 | ./ring_binder/frame_0059.jpg 1124 | ./ring_binder/frame_0060.jpg 1125 | ./ring_binder/frame_0061.jpg 1126 | ./ring_binder/frame_0065.jpg 1127 | ./ring_binder/frame_0066.jpg 1128 | ./ring_binder/frame_0070.jpg 1129 | ./ring_binder/frame_0072.jpg 1130 | ./ring_binder/frame_0073.jpg 1131 | ./ring_binder/frame_0074.jpg 1132 | ./ring_binder/frame_0075.jpg 1133 | ./ring_binder/frame_0077.jpg 1134 | ./ring_binder/frame_0081.jpg 1135 | ./ring_binder/frame_0083.jpg 1136 | ./ring_binder/frame_0084.jpg 1137 | ./ring_binder/frame_0085.jpg 1138 | ./ring_binder/frame_0088.jpg 1139 | ./ruler/frame_0001.jpg 1140 | ./ruler/frame_0002.jpg 1141 | ./ruler/frame_0003.jpg 1142 | ./ruler/frame_0007.jpg 1143 | ./ruler/frame_0008.jpg 1144 | ./ruler/frame_0010.jpg 1145 | ./ruler/frame_0014.jpg 1146 | ./ruler/frame_0015.jpg 1147 | ./ruler/frame_0018.jpg 1148 | ./ruler/frame_0020.jpg 1149 | ./ruler/frame_0021.jpg 1150 | ./ruler/frame_0023.jpg 1151 | ./ruler/frame_0025.jpg 1152 | ./ruler/frame_0026.jpg 1153 | ./ruler/frame_0028.jpg 1154 | ./ruler/frame_0029.jpg 1155 | ./ruler/frame_0030.jpg 1156 | ./ruler/frame_0031.jpg 1157 | ./ruler/frame_0033.jpg 1158 | ./ruler/frame_0035.jpg 1159 | ./ruler/frame_0037.jpg 1160 | ./ruler/frame_0038.jpg 1161 | ./ruler/frame_0040.jpg 1162 | ./ruler/frame_0041.jpg 1163 | ./ruler/frame_0042.jpg 1164 | ./ruler/frame_0044.jpg 1165 | ./ruler/frame_0045.jpg 1166 | ./ruler/frame_0047.jpg 1167 | ./ruler/frame_0052.jpg 1168 | ./ruler/frame_0054.jpg 1169 | ./ruler/frame_0055.jpg 1170 | ./ruler/frame_0056.jpg 1171 | ./ruler/frame_0057.jpg 1172 | ./ruler/frame_0060.jpg 1173 | ./ruler/frame_0064.jpg 1174 | ./ruler/frame_0066.jpg 1175 | ./ruler/frame_0070.jpg 1176 | ./scissors/frame_0001.jpg 1177 | ./scissors/frame_0005.jpg 1178 | ./scissors/frame_0007.jpg 1179 | ./scissors/frame_0013.jpg 1180 | ./scissors/frame_0014.jpg 1181 | ./scissors/frame_0021.jpg 1182 | ./scissors/frame_0022.jpg 1183 | ./scissors/frame_0023.jpg 1184 | ./scissors/frame_0025.jpg 1185 | ./scissors/frame_0026.jpg 1186 | ./scissors/frame_0027.jpg 1187 | ./scissors/frame_0029.jpg 1188 | ./scissors/frame_0033.jpg 1189 | ./scissors/frame_0034.jpg 1190 | ./scissors/frame_0035.jpg 1191 | ./scissors/frame_0036.jpg 1192 | ./scissors/frame_0037.jpg 1193 | ./scissors/frame_0038.jpg 1194 | ./scissors/frame_0039.jpg 1195 | ./scissors/frame_0040.jpg 1196 | ./scissors/frame_0041.jpg 1197 | ./scissors/frame_0042.jpg 1198 | ./scissors/frame_0045.jpg 1199 | ./scissors/frame_0047.jpg 1200 | ./scissors/frame_0050.jpg 1201 | ./scissors/frame_0051.jpg 1202 | ./scissors/frame_0052.jpg 1203 | ./scissors/frame_0053.jpg 1204 | ./scissors/frame_0054.jpg 1205 | ./scissors/frame_0056.jpg 1206 | ./scissors/frame_0057.jpg 1207 | ./scissors/frame_0058.jpg 1208 | ./scissors/frame_0060.jpg 1209 | ./scissors/frame_0064.jpg 1210 | ./scissors/frame_0065.jpg 1211 | ./scissors/frame_0068.jpg 1212 | ./scissors/frame_0071.jpg 1213 | ./scissors/frame_0073.jpg 1214 | ./scissors/frame_0074.jpg 1215 | ./scissors/frame_0075.jpg 1216 | ./scissors/frame_0080.jpg 1217 | ./scissors/frame_0081.jpg 1218 | ./scissors/frame_0086.jpg 1219 | ./scissors/frame_0087.jpg 1220 | ./scissors/frame_0088.jpg 1221 | ./scissors/frame_0091.jpg 1222 | ./scissors/frame_0092.jpg 1223 | ./scissors/frame_0093.jpg 1224 | ./scissors/frame_0096.jpg 1225 | ./scissors/frame_0100.jpg 1226 | ./speaker/frame_0003.jpg 1227 | ./speaker/frame_0004.jpg 1228 | ./speaker/frame_0005.jpg 1229 | ./speaker/frame_0008.jpg 1230 | ./speaker/frame_0009.jpg 1231 | ./speaker/frame_0010.jpg 1232 | ./speaker/frame_0011.jpg 1233 | ./speaker/frame_0012.jpg 1234 | ./speaker/frame_0015.jpg 1235 | ./speaker/frame_0016.jpg 1236 | ./speaker/frame_0018.jpg 1237 | ./speaker/frame_0019.jpg 1238 | ./speaker/frame_0022.jpg 1239 | ./speaker/frame_0023.jpg 1240 | ./speaker/frame_0025.jpg 1241 | ./speaker/frame_0026.jpg 1242 | ./speaker/frame_0027.jpg 1243 | ./speaker/frame_0032.jpg 1244 | ./speaker/frame_0033.jpg 1245 | ./speaker/frame_0035.jpg 1246 | ./speaker/frame_0036.jpg 1247 | ./speaker/frame_0038.jpg 1248 | ./speaker/frame_0042.jpg 1249 | ./speaker/frame_0045.jpg 1250 | ./speaker/frame_0048.jpg 1251 | ./speaker/frame_0050.jpg 1252 | ./speaker/frame_0052.jpg 1253 | ./speaker/frame_0059.jpg 1254 | ./speaker/frame_0060.jpg 1255 | ./speaker/frame_0061.jpg 1256 | ./speaker/frame_0062.jpg 1257 | ./speaker/frame_0065.jpg 1258 | ./speaker/frame_0067.jpg 1259 | ./speaker/frame_0069.jpg 1260 | ./speaker/frame_0070.jpg 1261 | ./speaker/frame_0072.jpg 1262 | ./speaker/frame_0074.jpg 1263 | ./speaker/frame_0075.jpg 1264 | ./speaker/frame_0076.jpg 1265 | ./speaker/frame_0078.jpg 1266 | ./speaker/frame_0079.jpg 1267 | ./speaker/frame_0080.jpg 1268 | ./speaker/frame_0083.jpg 1269 | ./speaker/frame_0084.jpg 1270 | ./speaker/frame_0086.jpg 1271 | ./speaker/frame_0087.jpg 1272 | ./speaker/frame_0089.jpg 1273 | ./speaker/frame_0091.jpg 1274 | ./speaker/frame_0098.jpg 1275 | ./stapler/frame_0001.jpg 1276 | ./stapler/frame_0002.jpg 1277 | ./stapler/frame_0004.jpg 1278 | ./stapler/frame_0005.jpg 1279 | ./stapler/frame_0007.jpg 1280 | ./stapler/frame_0008.jpg 1281 | ./stapler/frame_0012.jpg 1282 | ./stapler/frame_0013.jpg 1283 | ./stapler/frame_0014.jpg 1284 | ./stapler/frame_0015.jpg 1285 | ./stapler/frame_0016.jpg 1286 | ./stapler/frame_0017.jpg 1287 | ./stapler/frame_0018.jpg 1288 | ./stapler/frame_0019.jpg 1289 | ./stapler/frame_0020.jpg 1290 | ./stapler/frame_0022.jpg 1291 | ./stapler/frame_0028.jpg 1292 | ./stapler/frame_0031.jpg 1293 | ./stapler/frame_0032.jpg 1294 | ./stapler/frame_0033.jpg 1295 | ./stapler/frame_0037.jpg 1296 | ./stapler/frame_0041.jpg 1297 | ./stapler/frame_0046.jpg 1298 | ./stapler/frame_0047.jpg 1299 | ./stapler/frame_0051.jpg 1300 | ./stapler/frame_0052.jpg 1301 | ./stapler/frame_0055.jpg 1302 | ./stapler/frame_0056.jpg 1303 | ./stapler/frame_0060.jpg 1304 | ./stapler/frame_0061.jpg 1305 | ./stapler/frame_0062.jpg 1306 | ./stapler/frame_0064.jpg 1307 | ./stapler/frame_0068.jpg 1308 | ./stapler/frame_0069.jpg 1309 | ./stapler/frame_0070.jpg 1310 | ./stapler/frame_0075.jpg 1311 | ./stapler/frame_0076.jpg 1312 | ./stapler/frame_0077.jpg 1313 | ./stapler/frame_0078.jpg 1314 | ./stapler/frame_0082.jpg 1315 | ./stapler/frame_0083.jpg 1316 | ./stapler/frame_0086.jpg 1317 | ./stapler/frame_0087.jpg 1318 | ./stapler/frame_0088.jpg 1319 | ./stapler/frame_0089.jpg 1320 | ./stapler/frame_0090.jpg 1321 | ./stapler/frame_0091.jpg 1322 | ./stapler/frame_0096.jpg 1323 | ./stapler/frame_0099.jpg 1324 | ./tape_dispenser/frame_0001.jpg 1325 | ./tape_dispenser/frame_0004.jpg 1326 | ./tape_dispenser/frame_0007.jpg 1327 | ./tape_dispenser/frame_0008.jpg 1328 | ./tape_dispenser/frame_0010.jpg 1329 | ./tape_dispenser/frame_0011.jpg 1330 | ./tape_dispenser/frame_0015.jpg 1331 | ./tape_dispenser/frame_0017.jpg 1332 | ./tape_dispenser/frame_0019.jpg 1333 | ./tape_dispenser/frame_0022.jpg 1334 | ./tape_dispenser/frame_0023.jpg 1335 | ./tape_dispenser/frame_0024.jpg 1336 | ./tape_dispenser/frame_0027.jpg 1337 | ./tape_dispenser/frame_0030.jpg 1338 | ./tape_dispenser/frame_0037.jpg 1339 | ./tape_dispenser/frame_0038.jpg 1340 | ./tape_dispenser/frame_0040.jpg 1341 | ./tape_dispenser/frame_0041.jpg 1342 | ./tape_dispenser/frame_0043.jpg 1343 | ./tape_dispenser/frame_0045.jpg 1344 | ./tape_dispenser/frame_0046.jpg 1345 | ./tape_dispenser/frame_0048.jpg 1346 | ./tape_dispenser/frame_0049.jpg 1347 | ./tape_dispenser/frame_0050.jpg 1348 | ./tape_dispenser/frame_0051.jpg 1349 | ./tape_dispenser/frame_0052.jpg 1350 | ./tape_dispenser/frame_0053.jpg 1351 | ./tape_dispenser/frame_0056.jpg 1352 | ./tape_dispenser/frame_0060.jpg 1353 | ./tape_dispenser/frame_0061.jpg 1354 | ./tape_dispenser/frame_0062.jpg 1355 | ./tape_dispenser/frame_0066.jpg 1356 | ./tape_dispenser/frame_0067.jpg 1357 | ./tape_dispenser/frame_0068.jpg 1358 | ./tape_dispenser/frame_0069.jpg 1359 | ./tape_dispenser/frame_0071.jpg 1360 | ./tape_dispenser/frame_0073.jpg 1361 | ./tape_dispenser/frame_0075.jpg 1362 | ./tape_dispenser/frame_0079.jpg 1363 | ./tape_dispenser/frame_0080.jpg 1364 | ./tape_dispenser/frame_0086.jpg 1365 | ./tape_dispenser/frame_0088.jpg 1366 | ./tape_dispenser/frame_0089.jpg 1367 | ./tape_dispenser/frame_0091.jpg 1368 | ./tape_dispenser/frame_0092.jpg 1369 | ./tape_dispenser/frame_0093.jpg 1370 | ./tape_dispenser/frame_0095.jpg 1371 | ./tape_dispenser/frame_0096.jpg 1372 | ./trash_can/frame_0005.jpg 1373 | ./trash_can/frame_0006.jpg 1374 | ./trash_can/frame_0007.jpg 1375 | ./trash_can/frame_0008.jpg 1376 | ./trash_can/frame_0010.jpg 1377 | ./trash_can/frame_0012.jpg 1378 | ./trash_can/frame_0014.jpg 1379 | ./trash_can/frame_0015.jpg 1380 | ./trash_can/frame_0018.jpg 1381 | ./trash_can/frame_0020.jpg 1382 | ./trash_can/frame_0023.jpg 1383 | ./trash_can/frame_0024.jpg 1384 | ./trash_can/frame_0026.jpg 1385 | ./trash_can/frame_0027.jpg 1386 | ./trash_can/frame_0029.jpg 1387 | ./trash_can/frame_0030.jpg 1388 | ./trash_can/frame_0031.jpg 1389 | ./trash_can/frame_0036.jpg 1390 | ./trash_can/frame_0037.jpg 1391 | ./trash_can/frame_0038.jpg 1392 | ./trash_can/frame_0040.jpg 1393 | ./trash_can/frame_0042.jpg 1394 | ./trash_can/frame_0043.jpg 1395 | ./trash_can/frame_0046.jpg 1396 | ./trash_can/frame_0047.jpg 1397 | ./trash_can/frame_0049.jpg 1398 | ./trash_can/frame_0050.jpg 1399 | ./trash_can/frame_0051.jpg 1400 | ./trash_can/frame_0053.jpg 1401 | ./trash_can/frame_0058.jpg 1402 | ./trash_can/frame_0059.jpg 1403 | ./trash_can/frame_0060.jpg 1404 | -------------------------------------------------------------------------------- /data/datasets/Office31/amazon_half2/images.txt: -------------------------------------------------------------------------------- 1 | ./back_pack/frame_0003.jpg 2 | ./back_pack/frame_0004.jpg 3 | ./back_pack/frame_0005.jpg 4 | ./back_pack/frame_0006.jpg 5 | ./back_pack/frame_0007.jpg 6 | ./back_pack/frame_0011.jpg 7 | ./back_pack/frame_0017.jpg 8 | ./back_pack/frame_0019.jpg 9 | ./back_pack/frame_0021.jpg 10 | ./back_pack/frame_0023.jpg 11 | ./back_pack/frame_0027.jpg 12 | ./back_pack/frame_0028.jpg 13 | ./back_pack/frame_0030.jpg 14 | ./back_pack/frame_0031.jpg 15 | ./back_pack/frame_0034.jpg 16 | ./back_pack/frame_0035.jpg 17 | ./back_pack/frame_0037.jpg 18 | ./back_pack/frame_0038.jpg 19 | ./back_pack/frame_0039.jpg 20 | ./back_pack/frame_0040.jpg 21 | ./back_pack/frame_0042.jpg 22 | ./back_pack/frame_0043.jpg 23 | ./back_pack/frame_0044.jpg 24 | ./back_pack/frame_0050.jpg 25 | ./back_pack/frame_0052.jpg 26 | ./back_pack/frame_0055.jpg 27 | ./back_pack/frame_0056.jpg 28 | ./back_pack/frame_0057.jpg 29 | ./back_pack/frame_0058.jpg 30 | ./back_pack/frame_0059.jpg 31 | ./back_pack/frame_0062.jpg 32 | ./back_pack/frame_0063.jpg 33 | ./back_pack/frame_0064.jpg 34 | ./back_pack/frame_0066.jpg 35 | ./back_pack/frame_0071.jpg 36 | ./back_pack/frame_0073.jpg 37 | ./back_pack/frame_0076.jpg 38 | ./back_pack/frame_0077.jpg 39 | ./back_pack/frame_0079.jpg 40 | ./back_pack/frame_0082.jpg 41 | ./back_pack/frame_0084.jpg 42 | ./back_pack/frame_0085.jpg 43 | ./back_pack/frame_0089.jpg 44 | ./back_pack/frame_0090.jpg 45 | ./back_pack/frame_0091.jpg 46 | ./back_pack/frame_0092.jpg 47 | ./bike/frame_0001.jpg 48 | ./bike/frame_0002.jpg 49 | ./bike/frame_0003.jpg 50 | ./bike/frame_0005.jpg 51 | ./bike/frame_0007.jpg 52 | ./bike/frame_0008.jpg 53 | ./bike/frame_0010.jpg 54 | ./bike/frame_0011.jpg 55 | ./bike/frame_0013.jpg 56 | ./bike/frame_0014.jpg 57 | ./bike/frame_0018.jpg 58 | ./bike/frame_0021.jpg 59 | ./bike/frame_0026.jpg 60 | ./bike/frame_0027.jpg 61 | ./bike/frame_0029.jpg 62 | ./bike/frame_0032.jpg 63 | ./bike/frame_0036.jpg 64 | ./bike/frame_0037.jpg 65 | ./bike/frame_0040.jpg 66 | ./bike/frame_0042.jpg 67 | ./bike/frame_0043.jpg 68 | ./bike/frame_0044.jpg 69 | ./bike/frame_0046.jpg 70 | ./bike/frame_0049.jpg 71 | ./bike/frame_0051.jpg 72 | ./bike/frame_0056.jpg 73 | ./bike/frame_0057.jpg 74 | ./bike/frame_0059.jpg 75 | ./bike/frame_0061.jpg 76 | ./bike/frame_0062.jpg 77 | ./bike/frame_0063.jpg 78 | ./bike/frame_0066.jpg 79 | ./bike/frame_0067.jpg 80 | ./bike/frame_0068.jpg 81 | ./bike/frame_0071.jpg 82 | ./bike/frame_0072.jpg 83 | ./bike/frame_0073.jpg 84 | ./bike/frame_0076.jpg 85 | ./bike/frame_0077.jpg 86 | ./bike/frame_0078.jpg 87 | ./bike/frame_0079.jpg 88 | ./bike_helmet/frame_0001.jpg 89 | ./bike_helmet/frame_0002.jpg 90 | ./bike_helmet/frame_0005.jpg 91 | ./bike_helmet/frame_0006.jpg 92 | ./bike_helmet/frame_0008.jpg 93 | ./bike_helmet/frame_0009.jpg 94 | ./bike_helmet/frame_0011.jpg 95 | ./bike_helmet/frame_0012.jpg 96 | ./bike_helmet/frame_0014.jpg 97 | ./bike_helmet/frame_0016.jpg 98 | ./bike_helmet/frame_0018.jpg 99 | ./bike_helmet/frame_0019.jpg 100 | ./bike_helmet/frame_0021.jpg 101 | ./bike_helmet/frame_0022.jpg 102 | ./bike_helmet/frame_0024.jpg 103 | ./bike_helmet/frame_0027.jpg 104 | ./bike_helmet/frame_0029.jpg 105 | ./bike_helmet/frame_0031.jpg 106 | ./bike_helmet/frame_0032.jpg 107 | ./bike_helmet/frame_0033.jpg 108 | ./bike_helmet/frame_0035.jpg 109 | ./bike_helmet/frame_0036.jpg 110 | ./bike_helmet/frame_0038.jpg 111 | ./bike_helmet/frame_0039.jpg 112 | ./bike_helmet/frame_0043.jpg 113 | ./bike_helmet/frame_0044.jpg 114 | ./bike_helmet/frame_0045.jpg 115 | ./bike_helmet/frame_0049.jpg 116 | ./bike_helmet/frame_0050.jpg 117 | ./bike_helmet/frame_0054.jpg 118 | ./bike_helmet/frame_0055.jpg 119 | ./bike_helmet/frame_0060.jpg 120 | ./bike_helmet/frame_0063.jpg 121 | ./bike_helmet/frame_0064.jpg 122 | ./bike_helmet/frame_0065.jpg 123 | ./bike_helmet/frame_0072.jpg 124 | ./bookcase/frame_0001.jpg 125 | ./bookcase/frame_0004.jpg 126 | ./bookcase/frame_0005.jpg 127 | ./bookcase/frame_0006.jpg 128 | ./bookcase/frame_0008.jpg 129 | ./bookcase/frame_0009.jpg 130 | ./bookcase/frame_0011.jpg 131 | ./bookcase/frame_0013.jpg 132 | ./bookcase/frame_0015.jpg 133 | ./bookcase/frame_0017.jpg 134 | ./bookcase/frame_0018.jpg 135 | ./bookcase/frame_0020.jpg 136 | ./bookcase/frame_0021.jpg 137 | ./bookcase/frame_0022.jpg 138 | ./bookcase/frame_0024.jpg 139 | ./bookcase/frame_0029.jpg 140 | ./bookcase/frame_0030.jpg 141 | ./bookcase/frame_0034.jpg 142 | ./bookcase/frame_0035.jpg 143 | ./bookcase/frame_0036.jpg 144 | ./bookcase/frame_0039.jpg 145 | ./bookcase/frame_0040.jpg 146 | ./bookcase/frame_0041.jpg 147 | ./bookcase/frame_0042.jpg 148 | ./bookcase/frame_0047.jpg 149 | ./bookcase/frame_0053.jpg 150 | ./bookcase/frame_0054.jpg 151 | ./bookcase/frame_0055.jpg 152 | ./bookcase/frame_0057.jpg 153 | ./bookcase/frame_0058.jpg 154 | ./bookcase/frame_0059.jpg 155 | ./bookcase/frame_0060.jpg 156 | ./bookcase/frame_0061.jpg 157 | ./bookcase/frame_0063.jpg 158 | ./bookcase/frame_0067.jpg 159 | ./bookcase/frame_0068.jpg 160 | ./bookcase/frame_0070.jpg 161 | ./bookcase/frame_0071.jpg 162 | ./bookcase/frame_0073.jpg 163 | ./bookcase/frame_0079.jpg 164 | ./bookcase/frame_0081.jpg 165 | ./bottle/frame_0001.jpg 166 | ./bottle/frame_0003.jpg 167 | ./bottle/frame_0006.jpg 168 | ./bottle/frame_0008.jpg 169 | ./bottle/frame_0011.jpg 170 | ./bottle/frame_0012.jpg 171 | ./bottle/frame_0016.jpg 172 | ./bottle/frame_0017.jpg 173 | ./bottle/frame_0018.jpg 174 | ./bottle/frame_0019.jpg 175 | ./bottle/frame_0021.jpg 176 | ./bottle/frame_0022.jpg 177 | ./bottle/frame_0025.jpg 178 | ./bottle/frame_0027.jpg 179 | ./bottle/frame_0028.jpg 180 | ./bottle/frame_0032.jpg 181 | ./bottle/frame_0033.jpg 182 | ./bottle/frame_0035.jpg 183 | ./calculator/frame_0002.jpg 184 | ./calculator/frame_0003.jpg 185 | ./calculator/frame_0005.jpg 186 | ./calculator/frame_0008.jpg 187 | ./calculator/frame_0009.jpg 188 | ./calculator/frame_0012.jpg 189 | ./calculator/frame_0013.jpg 190 | ./calculator/frame_0017.jpg 191 | ./calculator/frame_0018.jpg 192 | ./calculator/frame_0020.jpg 193 | ./calculator/frame_0021.jpg 194 | ./calculator/frame_0022.jpg 195 | ./calculator/frame_0024.jpg 196 | ./calculator/frame_0030.jpg 197 | ./calculator/frame_0031.jpg 198 | ./calculator/frame_0033.jpg 199 | ./calculator/frame_0035.jpg 200 | ./calculator/frame_0036.jpg 201 | ./calculator/frame_0037.jpg 202 | ./calculator/frame_0038.jpg 203 | ./calculator/frame_0039.jpg 204 | ./calculator/frame_0042.jpg 205 | ./calculator/frame_0046.jpg 206 | ./calculator/frame_0047.jpg 207 | ./calculator/frame_0049.jpg 208 | ./calculator/frame_0050.jpg 209 | ./calculator/frame_0052.jpg 210 | ./calculator/frame_0054.jpg 211 | ./calculator/frame_0055.jpg 212 | ./calculator/frame_0059.jpg 213 | ./calculator/frame_0061.jpg 214 | ./calculator/frame_0062.jpg 215 | ./calculator/frame_0064.jpg 216 | ./calculator/frame_0067.jpg 217 | ./calculator/frame_0068.jpg 218 | ./calculator/frame_0069.jpg 219 | ./calculator/frame_0070.jpg 220 | ./calculator/frame_0072.jpg 221 | ./calculator/frame_0074.jpg 222 | ./calculator/frame_0077.jpg 223 | ./calculator/frame_0080.jpg 224 | ./calculator/frame_0085.jpg 225 | ./calculator/frame_0087.jpg 226 | ./calculator/frame_0088.jpg 227 | ./calculator/frame_0091.jpg 228 | ./calculator/frame_0092.jpg 229 | ./calculator/frame_0093.jpg 230 | ./desk_chair/frame_0001.jpg 231 | ./desk_chair/frame_0004.jpg 232 | ./desk_chair/frame_0006.jpg 233 | ./desk_chair/frame_0008.jpg 234 | ./desk_chair/frame_0010.jpg 235 | ./desk_chair/frame_0011.jpg 236 | ./desk_chair/frame_0013.jpg 237 | ./desk_chair/frame_0014.jpg 238 | ./desk_chair/frame_0015.jpg 239 | ./desk_chair/frame_0019.jpg 240 | ./desk_chair/frame_0020.jpg 241 | ./desk_chair/frame_0024.jpg 242 | ./desk_chair/frame_0027.jpg 243 | ./desk_chair/frame_0029.jpg 244 | ./desk_chair/frame_0030.jpg 245 | ./desk_chair/frame_0032.jpg 246 | ./desk_chair/frame_0034.jpg 247 | ./desk_chair/frame_0035.jpg 248 | ./desk_chair/frame_0037.jpg 249 | ./desk_chair/frame_0039.jpg 250 | ./desk_chair/frame_0041.jpg 251 | ./desk_chair/frame_0042.jpg 252 | ./desk_chair/frame_0044.jpg 253 | ./desk_chair/frame_0050.jpg 254 | ./desk_chair/frame_0053.jpg 255 | ./desk_chair/frame_0054.jpg 256 | ./desk_chair/frame_0056.jpg 257 | ./desk_chair/frame_0058.jpg 258 | ./desk_chair/frame_0059.jpg 259 | ./desk_chair/frame_0062.jpg 260 | ./desk_chair/frame_0064.jpg 261 | ./desk_chair/frame_0065.jpg 262 | ./desk_chair/frame_0066.jpg 263 | ./desk_chair/frame_0068.jpg 264 | ./desk_chair/frame_0069.jpg 265 | ./desk_chair/frame_0070.jpg 266 | ./desk_chair/frame_0075.jpg 267 | ./desk_chair/frame_0076.jpg 268 | ./desk_chair/frame_0077.jpg 269 | ./desk_chair/frame_0078.jpg 270 | ./desk_chair/frame_0080.jpg 271 | ./desk_chair/frame_0083.jpg 272 | ./desk_chair/frame_0084.jpg 273 | ./desk_chair/frame_0086.jpg 274 | ./desk_chair/frame_0087.jpg 275 | ./desk_chair/frame_0088.jpg 276 | ./desk_lamp/frame_0002.jpg 277 | ./desk_lamp/frame_0005.jpg 278 | ./desk_lamp/frame_0006.jpg 279 | ./desk_lamp/frame_0007.jpg 280 | ./desk_lamp/frame_0008.jpg 281 | ./desk_lamp/frame_0009.jpg 282 | ./desk_lamp/frame_0012.jpg 283 | ./desk_lamp/frame_0014.jpg 284 | ./desk_lamp/frame_0024.jpg 285 | ./desk_lamp/frame_0025.jpg 286 | ./desk_lamp/frame_0026.jpg 287 | ./desk_lamp/frame_0027.jpg 288 | ./desk_lamp/frame_0028.jpg 289 | ./desk_lamp/frame_0029.jpg 290 | ./desk_lamp/frame_0034.jpg 291 | ./desk_lamp/frame_0037.jpg 292 | ./desk_lamp/frame_0043.jpg 293 | ./desk_lamp/frame_0047.jpg 294 | ./desk_lamp/frame_0048.jpg 295 | ./desk_lamp/frame_0049.jpg 296 | ./desk_lamp/frame_0051.jpg 297 | ./desk_lamp/frame_0052.jpg 298 | ./desk_lamp/frame_0053.jpg 299 | ./desk_lamp/frame_0054.jpg 300 | ./desk_lamp/frame_0055.jpg 301 | ./desk_lamp/frame_0056.jpg 302 | ./desk_lamp/frame_0057.jpg 303 | ./desk_lamp/frame_0058.jpg 304 | ./desk_lamp/frame_0059.jpg 305 | ./desk_lamp/frame_0062.jpg 306 | ./desk_lamp/frame_0063.jpg 307 | ./desk_lamp/frame_0064.jpg 308 | ./desk_lamp/frame_0066.jpg 309 | ./desk_lamp/frame_0067.jpg 310 | ./desk_lamp/frame_0069.jpg 311 | ./desk_lamp/frame_0070.jpg 312 | ./desk_lamp/frame_0071.jpg 313 | ./desk_lamp/frame_0073.jpg 314 | ./desk_lamp/frame_0077.jpg 315 | ./desk_lamp/frame_0078.jpg 316 | ./desk_lamp/frame_0079.jpg 317 | ./desk_lamp/frame_0083.jpg 318 | ./desk_lamp/frame_0087.jpg 319 | ./desk_lamp/frame_0088.jpg 320 | ./desk_lamp/frame_0089.jpg 321 | ./desk_lamp/frame_0091.jpg 322 | ./desk_lamp/frame_0092.jpg 323 | ./desk_lamp/frame_0096.jpg 324 | ./desk_lamp/frame_0097.jpg 325 | ./desktop_computer/frame_0001.jpg 326 | ./desktop_computer/frame_0002.jpg 327 | ./desktop_computer/frame_0003.jpg 328 | ./desktop_computer/frame_0008.jpg 329 | ./desktop_computer/frame_0009.jpg 330 | ./desktop_computer/frame_0010.jpg 331 | ./desktop_computer/frame_0011.jpg 332 | ./desktop_computer/frame_0014.jpg 333 | ./desktop_computer/frame_0015.jpg 334 | ./desktop_computer/frame_0018.jpg 335 | ./desktop_computer/frame_0019.jpg 336 | ./desktop_computer/frame_0022.jpg 337 | ./desktop_computer/frame_0024.jpg 338 | ./desktop_computer/frame_0026.jpg 339 | ./desktop_computer/frame_0028.jpg 340 | ./desktop_computer/frame_0029.jpg 341 | ./desktop_computer/frame_0032.jpg 342 | ./desktop_computer/frame_0033.jpg 343 | ./desktop_computer/frame_0035.jpg 344 | ./desktop_computer/frame_0041.jpg 345 | ./desktop_computer/frame_0044.jpg 346 | ./desktop_computer/frame_0048.jpg 347 | ./desktop_computer/frame_0049.jpg 348 | ./desktop_computer/frame_0051.jpg 349 | ./desktop_computer/frame_0052.jpg 350 | ./desktop_computer/frame_0054.jpg 351 | ./desktop_computer/frame_0055.jpg 352 | ./desktop_computer/frame_0057.jpg 353 | ./desktop_computer/frame_0059.jpg 354 | ./desktop_computer/frame_0064.jpg 355 | ./desktop_computer/frame_0065.jpg 356 | ./desktop_computer/frame_0067.jpg 357 | ./desktop_computer/frame_0070.jpg 358 | ./desktop_computer/frame_0071.jpg 359 | ./desktop_computer/frame_0072.jpg 360 | ./desktop_computer/frame_0073.jpg 361 | ./desktop_computer/frame_0075.jpg 362 | ./desktop_computer/frame_0077.jpg 363 | ./desktop_computer/frame_0078.jpg 364 | ./desktop_computer/frame_0083.jpg 365 | ./desktop_computer/frame_0086.jpg 366 | ./desktop_computer/frame_0087.jpg 367 | ./desktop_computer/frame_0089.jpg 368 | ./desktop_computer/frame_0090.jpg 369 | ./desktop_computer/frame_0091.jpg 370 | ./desktop_computer/frame_0092.jpg 371 | ./desktop_computer/frame_0093.jpg 372 | ./desktop_computer/frame_0096.jpg 373 | ./desktop_computer/frame_0097.jpg 374 | ./file_cabinet/frame_0001.jpg 375 | ./file_cabinet/frame_0003.jpg 376 | ./file_cabinet/frame_0005.jpg 377 | ./file_cabinet/frame_0007.jpg 378 | ./file_cabinet/frame_0009.jpg 379 | ./file_cabinet/frame_0011.jpg 380 | ./file_cabinet/frame_0012.jpg 381 | ./file_cabinet/frame_0014.jpg 382 | ./file_cabinet/frame_0016.jpg 383 | ./file_cabinet/frame_0018.jpg 384 | ./file_cabinet/frame_0020.jpg 385 | ./file_cabinet/frame_0021.jpg 386 | ./file_cabinet/frame_0022.jpg 387 | ./file_cabinet/frame_0023.jpg 388 | ./file_cabinet/frame_0024.jpg 389 | ./file_cabinet/frame_0025.jpg 390 | ./file_cabinet/frame_0026.jpg 391 | ./file_cabinet/frame_0029.jpg 392 | ./file_cabinet/frame_0030.jpg 393 | ./file_cabinet/frame_0033.jpg 394 | ./file_cabinet/frame_0035.jpg 395 | ./file_cabinet/frame_0038.jpg 396 | ./file_cabinet/frame_0039.jpg 397 | ./file_cabinet/frame_0040.jpg 398 | ./file_cabinet/frame_0042.jpg 399 | ./file_cabinet/frame_0046.jpg 400 | ./file_cabinet/frame_0047.jpg 401 | ./file_cabinet/frame_0048.jpg 402 | ./file_cabinet/frame_0049.jpg 403 | ./file_cabinet/frame_0050.jpg 404 | ./file_cabinet/frame_0052.jpg 405 | ./file_cabinet/frame_0058.jpg 406 | ./file_cabinet/frame_0065.jpg 407 | ./file_cabinet/frame_0067.jpg 408 | ./file_cabinet/frame_0070.jpg 409 | ./file_cabinet/frame_0071.jpg 410 | ./file_cabinet/frame_0072.jpg 411 | ./file_cabinet/frame_0075.jpg 412 | ./file_cabinet/frame_0077.jpg 413 | ./file_cabinet/frame_0080.jpg 414 | ./file_cabinet/frame_0081.jpg 415 | ./headphones/frame_0001.jpg 416 | ./headphones/frame_0002.jpg 417 | ./headphones/frame_0003.jpg 418 | ./headphones/frame_0004.jpg 419 | ./headphones/frame_0005.jpg 420 | ./headphones/frame_0008.jpg 421 | ./headphones/frame_0009.jpg 422 | ./headphones/frame_0012.jpg 423 | ./headphones/frame_0019.jpg 424 | ./headphones/frame_0020.jpg 425 | ./headphones/frame_0021.jpg 426 | ./headphones/frame_0024.jpg 427 | ./headphones/frame_0025.jpg 428 | ./headphones/frame_0026.jpg 429 | ./headphones/frame_0027.jpg 430 | ./headphones/frame_0035.jpg 431 | ./headphones/frame_0038.jpg 432 | ./headphones/frame_0040.jpg 433 | ./headphones/frame_0042.jpg 434 | ./headphones/frame_0043.jpg 435 | ./headphones/frame_0044.jpg 436 | ./headphones/frame_0047.jpg 437 | ./headphones/frame_0048.jpg 438 | ./headphones/frame_0052.jpg 439 | ./headphones/frame_0053.jpg 440 | ./headphones/frame_0054.jpg 441 | ./headphones/frame_0055.jpg 442 | ./headphones/frame_0056.jpg 443 | ./headphones/frame_0057.jpg 444 | ./headphones/frame_0058.jpg 445 | ./headphones/frame_0059.jpg 446 | ./headphones/frame_0060.jpg 447 | ./headphones/frame_0061.jpg 448 | ./headphones/frame_0062.jpg 449 | ./headphones/frame_0064.jpg 450 | ./headphones/frame_0065.jpg 451 | ./headphones/frame_0067.jpg 452 | ./headphones/frame_0069.jpg 453 | ./headphones/frame_0070.jpg 454 | ./headphones/frame_0072.jpg 455 | ./headphones/frame_0073.jpg 456 | ./headphones/frame_0075.jpg 457 | ./headphones/frame_0077.jpg 458 | ./headphones/frame_0083.jpg 459 | ./headphones/frame_0089.jpg 460 | ./headphones/frame_0090.jpg 461 | ./headphones/frame_0096.jpg 462 | ./headphones/frame_0097.jpg 463 | ./headphones/frame_0098.jpg 464 | ./headphones/frame_0099.jpg 465 | ./keyboard/frame_0002.jpg 466 | ./keyboard/frame_0003.jpg 467 | ./keyboard/frame_0004.jpg 468 | ./keyboard/frame_0006.jpg 469 | ./keyboard/frame_0008.jpg 470 | ./keyboard/frame_0009.jpg 471 | ./keyboard/frame_0010.jpg 472 | ./keyboard/frame_0011.jpg 473 | ./keyboard/frame_0012.jpg 474 | ./keyboard/frame_0013.jpg 475 | ./keyboard/frame_0014.jpg 476 | ./keyboard/frame_0015.jpg 477 | ./keyboard/frame_0016.jpg 478 | ./keyboard/frame_0021.jpg 479 | ./keyboard/frame_0023.jpg 480 | ./keyboard/frame_0024.jpg 481 | ./keyboard/frame_0025.jpg 482 | ./keyboard/frame_0027.jpg 483 | ./keyboard/frame_0030.jpg 484 | ./keyboard/frame_0031.jpg 485 | ./keyboard/frame_0035.jpg 486 | ./keyboard/frame_0038.jpg 487 | ./keyboard/frame_0044.jpg 488 | ./keyboard/frame_0046.jpg 489 | ./keyboard/frame_0048.jpg 490 | ./keyboard/frame_0050.jpg 491 | ./keyboard/frame_0052.jpg 492 | ./keyboard/frame_0053.jpg 493 | ./keyboard/frame_0054.jpg 494 | ./keyboard/frame_0056.jpg 495 | ./keyboard/frame_0057.jpg 496 | ./keyboard/frame_0058.jpg 497 | ./keyboard/frame_0059.jpg 498 | ./keyboard/frame_0060.jpg 499 | ./keyboard/frame_0061.jpg 500 | ./keyboard/frame_0062.jpg 501 | ./keyboard/frame_0067.jpg 502 | ./keyboard/frame_0069.jpg 503 | ./keyboard/frame_0070.jpg 504 | ./keyboard/frame_0071.jpg 505 | ./keyboard/frame_0072.jpg 506 | ./keyboard/frame_0073.jpg 507 | ./keyboard/frame_0075.jpg 508 | ./keyboard/frame_0079.jpg 509 | ./keyboard/frame_0085.jpg 510 | ./keyboard/frame_0087.jpg 511 | ./keyboard/frame_0091.jpg 512 | ./keyboard/frame_0096.jpg 513 | ./keyboard/frame_0097.jpg 514 | ./keyboard/frame_0100.jpg 515 | ./laptop_computer/frame_0001.jpg 516 | ./laptop_computer/frame_0002.jpg 517 | ./laptop_computer/frame_0003.jpg 518 | ./laptop_computer/frame_0004.jpg 519 | ./laptop_computer/frame_0005.jpg 520 | ./laptop_computer/frame_0008.jpg 521 | ./laptop_computer/frame_0010.jpg 522 | ./laptop_computer/frame_0011.jpg 523 | ./laptop_computer/frame_0012.jpg 524 | ./laptop_computer/frame_0013.jpg 525 | ./laptop_computer/frame_0014.jpg 526 | ./laptop_computer/frame_0015.jpg 527 | ./laptop_computer/frame_0018.jpg 528 | ./laptop_computer/frame_0019.jpg 529 | ./laptop_computer/frame_0023.jpg 530 | ./laptop_computer/frame_0025.jpg 531 | ./laptop_computer/frame_0026.jpg 532 | ./laptop_computer/frame_0027.jpg 533 | ./laptop_computer/frame_0029.jpg 534 | ./laptop_computer/frame_0031.jpg 535 | ./laptop_computer/frame_0034.jpg 536 | ./laptop_computer/frame_0036.jpg 537 | ./laptop_computer/frame_0038.jpg 538 | ./laptop_computer/frame_0040.jpg 539 | ./laptop_computer/frame_0041.jpg 540 | ./laptop_computer/frame_0042.jpg 541 | ./laptop_computer/frame_0045.jpg 542 | ./laptop_computer/frame_0048.jpg 543 | ./laptop_computer/frame_0051.jpg 544 | ./laptop_computer/frame_0054.jpg 545 | ./laptop_computer/frame_0055.jpg 546 | ./laptop_computer/frame_0059.jpg 547 | ./laptop_computer/frame_0063.jpg 548 | ./laptop_computer/frame_0064.jpg 549 | ./laptop_computer/frame_0065.jpg 550 | ./laptop_computer/frame_0066.jpg 551 | ./laptop_computer/frame_0067.jpg 552 | ./laptop_computer/frame_0070.jpg 553 | ./laptop_computer/frame_0071.jpg 554 | ./laptop_computer/frame_0077.jpg 555 | ./laptop_computer/frame_0078.jpg 556 | ./laptop_computer/frame_0080.jpg 557 | ./laptop_computer/frame_0081.jpg 558 | ./laptop_computer/frame_0085.jpg 559 | ./laptop_computer/frame_0089.jpg 560 | ./laptop_computer/frame_0090.jpg 561 | ./laptop_computer/frame_0091.jpg 562 | ./laptop_computer/frame_0093.jpg 563 | ./laptop_computer/frame_0096.jpg 564 | ./laptop_computer/frame_0099.jpg 565 | ./letter_tray/frame_0002.jpg 566 | ./letter_tray/frame_0004.jpg 567 | ./letter_tray/frame_0007.jpg 568 | ./letter_tray/frame_0008.jpg 569 | ./letter_tray/frame_0009.jpg 570 | ./letter_tray/frame_0010.jpg 571 | ./letter_tray/frame_0011.jpg 572 | ./letter_tray/frame_0016.jpg 573 | ./letter_tray/frame_0022.jpg 574 | ./letter_tray/frame_0023.jpg 575 | ./letter_tray/frame_0030.jpg 576 | ./letter_tray/frame_0031.jpg 577 | ./letter_tray/frame_0033.jpg 578 | ./letter_tray/frame_0034.jpg 579 | ./letter_tray/frame_0036.jpg 580 | ./letter_tray/frame_0038.jpg 581 | ./letter_tray/frame_0039.jpg 582 | ./letter_tray/frame_0041.jpg 583 | ./letter_tray/frame_0043.jpg 584 | ./letter_tray/frame_0044.jpg 585 | ./letter_tray/frame_0048.jpg 586 | ./letter_tray/frame_0050.jpg 587 | ./letter_tray/frame_0051.jpg 588 | ./letter_tray/frame_0053.jpg 589 | ./letter_tray/frame_0054.jpg 590 | ./letter_tray/frame_0055.jpg 591 | ./letter_tray/frame_0058.jpg 592 | ./letter_tray/frame_0059.jpg 593 | ./letter_tray/frame_0062.jpg 594 | ./letter_tray/frame_0063.jpg 595 | ./letter_tray/frame_0064.jpg 596 | ./letter_tray/frame_0066.jpg 597 | ./letter_tray/frame_0068.jpg 598 | ./letter_tray/frame_0070.jpg 599 | ./letter_tray/frame_0071.jpg 600 | ./letter_tray/frame_0072.jpg 601 | ./letter_tray/frame_0074.jpg 602 | ./letter_tray/frame_0075.jpg 603 | ./letter_tray/frame_0077.jpg 604 | ./letter_tray/frame_0079.jpg 605 | ./letter_tray/frame_0080.jpg 606 | ./letter_tray/frame_0081.jpg 607 | ./letter_tray/frame_0088.jpg 608 | ./letter_tray/frame_0089.jpg 609 | ./letter_tray/frame_0090.jpg 610 | ./letter_tray/frame_0091.jpg 611 | ./letter_tray/frame_0093.jpg 612 | ./letter_tray/frame_0094.jpg 613 | ./letter_tray/frame_0095.jpg 614 | ./mobile_phone/frame_0001.jpg 615 | ./mobile_phone/frame_0002.jpg 616 | ./mobile_phone/frame_0004.jpg 617 | ./mobile_phone/frame_0005.jpg 618 | ./mobile_phone/frame_0006.jpg 619 | ./mobile_phone/frame_0011.jpg 620 | ./mobile_phone/frame_0012.jpg 621 | ./mobile_phone/frame_0013.jpg 622 | ./mobile_phone/frame_0016.jpg 623 | ./mobile_phone/frame_0017.jpg 624 | ./mobile_phone/frame_0018.jpg 625 | ./mobile_phone/frame_0019.jpg 626 | ./mobile_phone/frame_0023.jpg 627 | ./mobile_phone/frame_0024.jpg 628 | ./mobile_phone/frame_0025.jpg 629 | ./mobile_phone/frame_0027.jpg 630 | ./mobile_phone/frame_0028.jpg 631 | ./mobile_phone/frame_0029.jpg 632 | ./mobile_phone/frame_0030.jpg 633 | ./mobile_phone/frame_0031.jpg 634 | ./mobile_phone/frame_0033.jpg 635 | ./mobile_phone/frame_0034.jpg 636 | ./mobile_phone/frame_0039.jpg 637 | ./mobile_phone/frame_0040.jpg 638 | ./mobile_phone/frame_0042.jpg 639 | ./mobile_phone/frame_0043.jpg 640 | ./mobile_phone/frame_0049.jpg 641 | ./mobile_phone/frame_0054.jpg 642 | ./mobile_phone/frame_0055.jpg 643 | ./mobile_phone/frame_0057.jpg 644 | ./mobile_phone/frame_0058.jpg 645 | ./mobile_phone/frame_0062.jpg 646 | ./mobile_phone/frame_0065.jpg 647 | ./mobile_phone/frame_0066.jpg 648 | ./mobile_phone/frame_0067.jpg 649 | ./mobile_phone/frame_0068.jpg 650 | ./mobile_phone/frame_0069.jpg 651 | ./mobile_phone/frame_0071.jpg 652 | ./mobile_phone/frame_0074.jpg 653 | ./mobile_phone/frame_0075.jpg 654 | ./mobile_phone/frame_0076.jpg 655 | ./mobile_phone/frame_0077.jpg 656 | ./mobile_phone/frame_0080.jpg 657 | ./mobile_phone/frame_0082.jpg 658 | ./mobile_phone/frame_0083.jpg 659 | ./mobile_phone/frame_0090.jpg 660 | ./mobile_phone/frame_0092.jpg 661 | ./mobile_phone/frame_0095.jpg 662 | ./mobile_phone/frame_0098.jpg 663 | ./mobile_phone/frame_0099.jpg 664 | ./monitor/frame_0001.jpg 665 | ./monitor/frame_0003.jpg 666 | ./monitor/frame_0004.jpg 667 | ./monitor/frame_0007.jpg 668 | ./monitor/frame_0008.jpg 669 | ./monitor/frame_0011.jpg 670 | ./monitor/frame_0016.jpg 671 | ./monitor/frame_0020.jpg 672 | ./monitor/frame_0024.jpg 673 | ./monitor/frame_0025.jpg 674 | ./monitor/frame_0027.jpg 675 | ./monitor/frame_0029.jpg 676 | ./monitor/frame_0030.jpg 677 | ./monitor/frame_0031.jpg 678 | ./monitor/frame_0033.jpg 679 | ./monitor/frame_0034.jpg 680 | ./monitor/frame_0035.jpg 681 | ./monitor/frame_0036.jpg 682 | ./monitor/frame_0037.jpg 683 | ./monitor/frame_0038.jpg 684 | ./monitor/frame_0042.jpg 685 | ./monitor/frame_0044.jpg 686 | ./monitor/frame_0045.jpg 687 | ./monitor/frame_0049.jpg 688 | ./monitor/frame_0050.jpg 689 | ./monitor/frame_0052.jpg 690 | ./monitor/frame_0053.jpg 691 | ./monitor/frame_0056.jpg 692 | ./monitor/frame_0062.jpg 693 | ./monitor/frame_0063.jpg 694 | ./monitor/frame_0064.jpg 695 | ./monitor/frame_0066.jpg 696 | ./monitor/frame_0067.jpg 697 | ./monitor/frame_0068.jpg 698 | ./monitor/frame_0069.jpg 699 | ./monitor/frame_0070.jpg 700 | ./monitor/frame_0072.jpg 701 | ./monitor/frame_0073.jpg 702 | ./monitor/frame_0074.jpg 703 | ./monitor/frame_0075.jpg 704 | ./monitor/frame_0076.jpg 705 | ./monitor/frame_0077.jpg 706 | ./monitor/frame_0078.jpg 707 | ./monitor/frame_0079.jpg 708 | ./monitor/frame_0080.jpg 709 | ./monitor/frame_0089.jpg 710 | ./monitor/frame_0092.jpg 711 | ./monitor/frame_0093.jpg 712 | ./monitor/frame_0095.jpg 713 | ./monitor/frame_0099.jpg 714 | ./mouse/frame_0003.jpg 715 | ./mouse/frame_0004.jpg 716 | ./mouse/frame_0006.jpg 717 | ./mouse/frame_0007.jpg 718 | ./mouse/frame_0010.jpg 719 | ./mouse/frame_0013.jpg 720 | ./mouse/frame_0016.jpg 721 | ./mouse/frame_0017.jpg 722 | ./mouse/frame_0020.jpg 723 | ./mouse/frame_0023.jpg 724 | ./mouse/frame_0025.jpg 725 | ./mouse/frame_0026.jpg 726 | ./mouse/frame_0029.jpg 727 | ./mouse/frame_0030.jpg 728 | ./mouse/frame_0032.jpg 729 | ./mouse/frame_0033.jpg 730 | ./mouse/frame_0035.jpg 731 | ./mouse/frame_0037.jpg 732 | ./mouse/frame_0038.jpg 733 | ./mouse/frame_0045.jpg 734 | ./mouse/frame_0046.jpg 735 | ./mouse/frame_0047.jpg 736 | ./mouse/frame_0051.jpg 737 | ./mouse/frame_0055.jpg 738 | ./mouse/frame_0057.jpg 739 | ./mouse/frame_0058.jpg 740 | ./mouse/frame_0059.jpg 741 | ./mouse/frame_0060.jpg 742 | ./mouse/frame_0061.jpg 743 | ./mouse/frame_0063.jpg 744 | ./mouse/frame_0064.jpg 745 | ./mouse/frame_0068.jpg 746 | ./mouse/frame_0070.jpg 747 | ./mouse/frame_0072.jpg 748 | ./mouse/frame_0076.jpg 749 | ./mouse/frame_0077.jpg 750 | ./mouse/frame_0082.jpg 751 | ./mouse/frame_0083.jpg 752 | ./mouse/frame_0084.jpg 753 | ./mouse/frame_0085.jpg 754 | ./mouse/frame_0087.jpg 755 | ./mouse/frame_0088.jpg 756 | ./mouse/frame_0089.jpg 757 | ./mouse/frame_0091.jpg 758 | ./mouse/frame_0092.jpg 759 | ./mouse/frame_0094.jpg 760 | ./mouse/frame_0095.jpg 761 | ./mouse/frame_0097.jpg 762 | ./mouse/frame_0098.jpg 763 | ./mouse/frame_0100.jpg 764 | ./mug/frame_0001.jpg 765 | ./mug/frame_0003.jpg 766 | ./mug/frame_0004.jpg 767 | ./mug/frame_0007.jpg 768 | ./mug/frame_0009.jpg 769 | ./mug/frame_0012.jpg 770 | ./mug/frame_0013.jpg 771 | ./mug/frame_0014.jpg 772 | ./mug/frame_0015.jpg 773 | ./mug/frame_0018.jpg 774 | ./mug/frame_0021.jpg 775 | ./mug/frame_0024.jpg 776 | ./mug/frame_0025.jpg 777 | ./mug/frame_0026.jpg 778 | ./mug/frame_0027.jpg 779 | ./mug/frame_0028.jpg 780 | ./mug/frame_0029.jpg 781 | ./mug/frame_0031.jpg 782 | ./mug/frame_0034.jpg 783 | ./mug/frame_0035.jpg 784 | ./mug/frame_0038.jpg 785 | ./mug/frame_0041.jpg 786 | ./mug/frame_0045.jpg 787 | ./mug/frame_0047.jpg 788 | ./mug/frame_0050.jpg 789 | ./mug/frame_0053.jpg 790 | ./mug/frame_0054.jpg 791 | ./mug/frame_0056.jpg 792 | ./mug/frame_0058.jpg 793 | ./mug/frame_0060.jpg 794 | ./mug/frame_0062.jpg 795 | ./mug/frame_0064.jpg 796 | ./mug/frame_0065.jpg 797 | ./mug/frame_0067.jpg 798 | ./mug/frame_0068.jpg 799 | ./mug/frame_0070.jpg 800 | ./mug/frame_0072.jpg 801 | ./mug/frame_0073.jpg 802 | ./mug/frame_0076.jpg 803 | ./mug/frame_0080.jpg 804 | ./mug/frame_0083.jpg 805 | ./mug/frame_0084.jpg 806 | ./mug/frame_0085.jpg 807 | ./mug/frame_0088.jpg 808 | ./mug/frame_0089.jpg 809 | ./mug/frame_0092.jpg 810 | ./mug/frame_0093.jpg 811 | ./paper_notebook/frame_0001.jpg 812 | ./paper_notebook/frame_0006.jpg 813 | ./paper_notebook/frame_0007.jpg 814 | ./paper_notebook/frame_0009.jpg 815 | ./paper_notebook/frame_0010.jpg 816 | ./paper_notebook/frame_0012.jpg 817 | ./paper_notebook/frame_0013.jpg 818 | ./paper_notebook/frame_0015.jpg 819 | ./paper_notebook/frame_0016.jpg 820 | ./paper_notebook/frame_0017.jpg 821 | ./paper_notebook/frame_0020.jpg 822 | ./paper_notebook/frame_0021.jpg 823 | ./paper_notebook/frame_0022.jpg 824 | ./paper_notebook/frame_0023.jpg 825 | ./paper_notebook/frame_0026.jpg 826 | ./paper_notebook/frame_0028.jpg 827 | ./paper_notebook/frame_0030.jpg 828 | ./paper_notebook/frame_0032.jpg 829 | ./paper_notebook/frame_0033.jpg 830 | ./paper_notebook/frame_0036.jpg 831 | ./paper_notebook/frame_0040.jpg 832 | ./paper_notebook/frame_0043.jpg 833 | ./paper_notebook/frame_0045.jpg 834 | ./paper_notebook/frame_0046.jpg 835 | ./paper_notebook/frame_0048.jpg 836 | ./paper_notebook/frame_0050.jpg 837 | ./paper_notebook/frame_0051.jpg 838 | ./paper_notebook/frame_0052.jpg 839 | ./paper_notebook/frame_0055.jpg 840 | ./paper_notebook/frame_0057.jpg 841 | ./paper_notebook/frame_0059.jpg 842 | ./paper_notebook/frame_0062.jpg 843 | ./paper_notebook/frame_0064.jpg 844 | ./paper_notebook/frame_0065.jpg 845 | ./paper_notebook/frame_0066.jpg 846 | ./paper_notebook/frame_0067.jpg 847 | ./paper_notebook/frame_0069.jpg 848 | ./paper_notebook/frame_0070.jpg 849 | ./paper_notebook/frame_0072.jpg 850 | ./paper_notebook/frame_0074.jpg 851 | ./paper_notebook/frame_0080.jpg 852 | ./paper_notebook/frame_0081.jpg 853 | ./paper_notebook/frame_0082.jpg 854 | ./paper_notebook/frame_0087.jpg 855 | ./paper_notebook/frame_0089.jpg 856 | ./paper_notebook/frame_0091.jpg 857 | ./paper_notebook/frame_0095.jpg 858 | ./paper_notebook/frame_0096.jpg 859 | ./pen/frame_0002.jpg 860 | ./pen/frame_0003.jpg 861 | ./pen/frame_0005.jpg 862 | ./pen/frame_0006.jpg 863 | ./pen/frame_0011.jpg 864 | ./pen/frame_0015.jpg 865 | ./pen/frame_0017.jpg 866 | ./pen/frame_0018.jpg 867 | ./pen/frame_0023.jpg 868 | ./pen/frame_0025.jpg 869 | ./pen/frame_0027.jpg 870 | ./pen/frame_0030.jpg 871 | ./pen/frame_0031.jpg 872 | ./pen/frame_0033.jpg 873 | ./pen/frame_0034.jpg 874 | ./pen/frame_0037.jpg 875 | ./pen/frame_0038.jpg 876 | ./pen/frame_0039.jpg 877 | ./pen/frame_0043.jpg 878 | ./pen/frame_0044.jpg 879 | ./pen/frame_0045.jpg 880 | ./pen/frame_0047.jpg 881 | ./pen/frame_0049.jpg 882 | ./pen/frame_0050.jpg 883 | ./pen/frame_0052.jpg 884 | ./pen/frame_0053.jpg 885 | ./pen/frame_0054.jpg 886 | ./pen/frame_0058.jpg 887 | ./pen/frame_0061.jpg 888 | ./pen/frame_0063.jpg 889 | ./pen/frame_0065.jpg 890 | ./pen/frame_0066.jpg 891 | ./pen/frame_0067.jpg 892 | ./pen/frame_0070.jpg 893 | ./pen/frame_0071.jpg 894 | ./pen/frame_0072.jpg 895 | ./pen/frame_0075.jpg 896 | ./pen/frame_0077.jpg 897 | ./pen/frame_0078.jpg 898 | ./pen/frame_0079.jpg 899 | ./pen/frame_0082.jpg 900 | ./pen/frame_0083.jpg 901 | ./pen/frame_0086.jpg 902 | ./pen/frame_0088.jpg 903 | ./pen/frame_0089.jpg 904 | ./pen/frame_0092.jpg 905 | ./pen/frame_0093.jpg 906 | ./pen/frame_0094.jpg 907 | ./phone/frame_0003.jpg 908 | ./phone/frame_0006.jpg 909 | ./phone/frame_0007.jpg 910 | ./phone/frame_0009.jpg 911 | ./phone/frame_0012.jpg 912 | ./phone/frame_0015.jpg 913 | ./phone/frame_0016.jpg 914 | ./phone/frame_0018.jpg 915 | ./phone/frame_0020.jpg 916 | ./phone/frame_0021.jpg 917 | ./phone/frame_0028.jpg 918 | ./phone/frame_0033.jpg 919 | ./phone/frame_0034.jpg 920 | ./phone/frame_0035.jpg 921 | ./phone/frame_0036.jpg 922 | ./phone/frame_0037.jpg 923 | ./phone/frame_0039.jpg 924 | ./phone/frame_0041.jpg 925 | ./phone/frame_0042.jpg 926 | ./phone/frame_0044.jpg 927 | ./phone/frame_0046.jpg 928 | ./phone/frame_0050.jpg 929 | ./phone/frame_0051.jpg 930 | ./phone/frame_0053.jpg 931 | ./phone/frame_0056.jpg 932 | ./phone/frame_0059.jpg 933 | ./phone/frame_0060.jpg 934 | ./phone/frame_0062.jpg 935 | ./phone/frame_0064.jpg 936 | ./phone/frame_0065.jpg 937 | ./phone/frame_0066.jpg 938 | ./phone/frame_0069.jpg 939 | ./phone/frame_0070.jpg 940 | ./phone/frame_0072.jpg 941 | ./phone/frame_0073.jpg 942 | ./phone/frame_0075.jpg 943 | ./phone/frame_0077.jpg 944 | ./phone/frame_0078.jpg 945 | ./phone/frame_0079.jpg 946 | ./phone/frame_0080.jpg 947 | ./phone/frame_0082.jpg 948 | ./phone/frame_0085.jpg 949 | ./phone/frame_0088.jpg 950 | ./phone/frame_0089.jpg 951 | ./phone/frame_0090.jpg 952 | ./phone/frame_0091.jpg 953 | ./phone/frame_0092.jpg 954 | ./printer/frame_0001.jpg 955 | ./printer/frame_0004.jpg 956 | ./printer/frame_0005.jpg 957 | ./printer/frame_0006.jpg 958 | ./printer/frame_0008.jpg 959 | ./printer/frame_0009.jpg 960 | ./printer/frame_0012.jpg 961 | ./printer/frame_0014.jpg 962 | ./printer/frame_0016.jpg 963 | ./printer/frame_0018.jpg 964 | ./printer/frame_0019.jpg 965 | ./printer/frame_0020.jpg 966 | ./printer/frame_0023.jpg 967 | ./printer/frame_0025.jpg 968 | ./printer/frame_0027.jpg 969 | ./printer/frame_0029.jpg 970 | ./printer/frame_0032.jpg 971 | ./printer/frame_0034.jpg 972 | ./printer/frame_0035.jpg 973 | ./printer/frame_0036.jpg 974 | ./printer/frame_0039.jpg 975 | ./printer/frame_0041.jpg 976 | ./printer/frame_0042.jpg 977 | ./printer/frame_0043.jpg 978 | ./printer/frame_0046.jpg 979 | ./printer/frame_0050.jpg 980 | ./printer/frame_0051.jpg 981 | ./printer/frame_0053.jpg 982 | ./printer/frame_0055.jpg 983 | ./printer/frame_0060.jpg 984 | ./printer/frame_0062.jpg 985 | ./printer/frame_0068.jpg 986 | ./printer/frame_0069.jpg 987 | ./printer/frame_0071.jpg 988 | ./printer/frame_0072.jpg 989 | ./printer/frame_0073.jpg 990 | ./printer/frame_0074.jpg 991 | ./printer/frame_0077.jpg 992 | ./printer/frame_0078.jpg 993 | ./printer/frame_0080.jpg 994 | ./printer/frame_0081.jpg 995 | ./printer/frame_0082.jpg 996 | ./printer/frame_0084.jpg 997 | ./printer/frame_0088.jpg 998 | ./printer/frame_0089.jpg 999 | ./printer/frame_0092.jpg 1000 | ./printer/frame_0096.jpg 1001 | ./printer/frame_0097.jpg 1002 | ./printer/frame_0098.jpg 1003 | ./printer/frame_0099.jpg 1004 | ./projector/frame_0001.jpg 1005 | ./projector/frame_0003.jpg 1006 | ./projector/frame_0004.jpg 1007 | ./projector/frame_0007.jpg 1008 | ./projector/frame_0008.jpg 1009 | ./projector/frame_0009.jpg 1010 | ./projector/frame_0013.jpg 1011 | ./projector/frame_0014.jpg 1012 | ./projector/frame_0017.jpg 1013 | ./projector/frame_0018.jpg 1014 | ./projector/frame_0019.jpg 1015 | ./projector/frame_0020.jpg 1016 | ./projector/frame_0024.jpg 1017 | ./projector/frame_0026.jpg 1018 | ./projector/frame_0027.jpg 1019 | ./projector/frame_0029.jpg 1020 | ./projector/frame_0031.jpg 1021 | ./projector/frame_0033.jpg 1022 | ./projector/frame_0035.jpg 1023 | ./projector/frame_0037.jpg 1024 | ./projector/frame_0038.jpg 1025 | ./projector/frame_0039.jpg 1026 | ./projector/frame_0042.jpg 1027 | ./projector/frame_0044.jpg 1028 | ./projector/frame_0045.jpg 1029 | ./projector/frame_0046.jpg 1030 | ./projector/frame_0047.jpg 1031 | ./projector/frame_0050.jpg 1032 | ./projector/frame_0052.jpg 1033 | ./projector/frame_0055.jpg 1034 | ./projector/frame_0059.jpg 1035 | ./projector/frame_0060.jpg 1036 | ./projector/frame_0062.jpg 1037 | ./projector/frame_0063.jpg 1038 | ./projector/frame_0064.jpg 1039 | ./projector/frame_0065.jpg 1040 | ./projector/frame_0068.jpg 1041 | ./projector/frame_0070.jpg 1042 | ./projector/frame_0071.jpg 1043 | ./projector/frame_0074.jpg 1044 | ./projector/frame_0075.jpg 1045 | ./projector/frame_0076.jpg 1046 | ./projector/frame_0080.jpg 1047 | ./projector/frame_0082.jpg 1048 | ./projector/frame_0083.jpg 1049 | ./projector/frame_0086.jpg 1050 | ./projector/frame_0091.jpg 1051 | ./projector/frame_0092.jpg 1052 | ./projector/frame_0093.jpg 1053 | ./punchers/frame_0006.jpg 1054 | ./punchers/frame_0008.jpg 1055 | ./punchers/frame_0011.jpg 1056 | ./punchers/frame_0013.jpg 1057 | ./punchers/frame_0015.jpg 1058 | ./punchers/frame_0016.jpg 1059 | ./punchers/frame_0018.jpg 1060 | ./punchers/frame_0022.jpg 1061 | ./punchers/frame_0024.jpg 1062 | ./punchers/frame_0027.jpg 1063 | ./punchers/frame_0030.jpg 1064 | ./punchers/frame_0031.jpg 1065 | ./punchers/frame_0032.jpg 1066 | ./punchers/frame_0035.jpg 1067 | ./punchers/frame_0036.jpg 1068 | ./punchers/frame_0039.jpg 1069 | ./punchers/frame_0040.jpg 1070 | ./punchers/frame_0042.jpg 1071 | ./punchers/frame_0043.jpg 1072 | ./punchers/frame_0044.jpg 1073 | ./punchers/frame_0045.jpg 1074 | ./punchers/frame_0047.jpg 1075 | ./punchers/frame_0049.jpg 1076 | ./punchers/frame_0050.jpg 1077 | ./punchers/frame_0051.jpg 1078 | ./punchers/frame_0053.jpg 1079 | ./punchers/frame_0055.jpg 1080 | ./punchers/frame_0056.jpg 1081 | ./punchers/frame_0057.jpg 1082 | ./punchers/frame_0059.jpg 1083 | ./punchers/frame_0062.jpg 1084 | ./punchers/frame_0063.jpg 1085 | ./punchers/frame_0064.jpg 1086 | ./punchers/frame_0065.jpg 1087 | ./punchers/frame_0067.jpg 1088 | ./punchers/frame_0070.jpg 1089 | ./punchers/frame_0072.jpg 1090 | ./punchers/frame_0073.jpg 1091 | ./punchers/frame_0075.jpg 1092 | ./punchers/frame_0080.jpg 1093 | ./punchers/frame_0082.jpg 1094 | ./punchers/frame_0083.jpg 1095 | ./punchers/frame_0084.jpg 1096 | ./punchers/frame_0087.jpg 1097 | ./punchers/frame_0089.jpg 1098 | ./punchers/frame_0090.jpg 1099 | ./punchers/frame_0094.jpg 1100 | ./punchers/frame_0096.jpg 1101 | ./punchers/frame_0097.jpg 1102 | ./ring_binder/frame_0001.jpg 1103 | ./ring_binder/frame_0002.jpg 1104 | ./ring_binder/frame_0003.jpg 1105 | ./ring_binder/frame_0005.jpg 1106 | ./ring_binder/frame_0006.jpg 1107 | ./ring_binder/frame_0007.jpg 1108 | ./ring_binder/frame_0009.jpg 1109 | ./ring_binder/frame_0010.jpg 1110 | ./ring_binder/frame_0012.jpg 1111 | ./ring_binder/frame_0013.jpg 1112 | ./ring_binder/frame_0016.jpg 1113 | ./ring_binder/frame_0022.jpg 1114 | ./ring_binder/frame_0025.jpg 1115 | ./ring_binder/frame_0026.jpg 1116 | ./ring_binder/frame_0027.jpg 1117 | ./ring_binder/frame_0028.jpg 1118 | ./ring_binder/frame_0030.jpg 1119 | ./ring_binder/frame_0031.jpg 1120 | ./ring_binder/frame_0032.jpg 1121 | ./ring_binder/frame_0033.jpg 1122 | ./ring_binder/frame_0038.jpg 1123 | ./ring_binder/frame_0039.jpg 1124 | ./ring_binder/frame_0041.jpg 1125 | ./ring_binder/frame_0042.jpg 1126 | ./ring_binder/frame_0045.jpg 1127 | ./ring_binder/frame_0046.jpg 1128 | ./ring_binder/frame_0053.jpg 1129 | ./ring_binder/frame_0056.jpg 1130 | ./ring_binder/frame_0057.jpg 1131 | ./ring_binder/frame_0062.jpg 1132 | ./ring_binder/frame_0063.jpg 1133 | ./ring_binder/frame_0064.jpg 1134 | ./ring_binder/frame_0067.jpg 1135 | ./ring_binder/frame_0068.jpg 1136 | ./ring_binder/frame_0069.jpg 1137 | ./ring_binder/frame_0071.jpg 1138 | ./ring_binder/frame_0076.jpg 1139 | ./ring_binder/frame_0078.jpg 1140 | ./ring_binder/frame_0079.jpg 1141 | ./ring_binder/frame_0080.jpg 1142 | ./ring_binder/frame_0082.jpg 1143 | ./ring_binder/frame_0086.jpg 1144 | ./ring_binder/frame_0087.jpg 1145 | ./ring_binder/frame_0089.jpg 1146 | ./ring_binder/frame_0090.jpg 1147 | ./ruler/frame_0004.jpg 1148 | ./ruler/frame_0005.jpg 1149 | ./ruler/frame_0006.jpg 1150 | ./ruler/frame_0009.jpg 1151 | ./ruler/frame_0011.jpg 1152 | ./ruler/frame_0012.jpg 1153 | ./ruler/frame_0013.jpg 1154 | ./ruler/frame_0016.jpg 1155 | ./ruler/frame_0017.jpg 1156 | ./ruler/frame_0019.jpg 1157 | ./ruler/frame_0022.jpg 1158 | ./ruler/frame_0024.jpg 1159 | ./ruler/frame_0027.jpg 1160 | ./ruler/frame_0032.jpg 1161 | ./ruler/frame_0034.jpg 1162 | ./ruler/frame_0036.jpg 1163 | ./ruler/frame_0039.jpg 1164 | ./ruler/frame_0043.jpg 1165 | ./ruler/frame_0046.jpg 1166 | ./ruler/frame_0048.jpg 1167 | ./ruler/frame_0049.jpg 1168 | ./ruler/frame_0050.jpg 1169 | ./ruler/frame_0051.jpg 1170 | ./ruler/frame_0053.jpg 1171 | ./ruler/frame_0058.jpg 1172 | ./ruler/frame_0059.jpg 1173 | ./ruler/frame_0061.jpg 1174 | ./ruler/frame_0062.jpg 1175 | ./ruler/frame_0063.jpg 1176 | ./ruler/frame_0065.jpg 1177 | ./ruler/frame_0067.jpg 1178 | ./ruler/frame_0068.jpg 1179 | ./ruler/frame_0069.jpg 1180 | ./ruler/frame_0071.jpg 1181 | ./ruler/frame_0072.jpg 1182 | ./ruler/frame_0073.jpg 1183 | ./ruler/frame_0074.jpg 1184 | ./ruler/frame_0075.jpg 1185 | ./scissors/frame_0002.jpg 1186 | ./scissors/frame_0003.jpg 1187 | ./scissors/frame_0004.jpg 1188 | ./scissors/frame_0006.jpg 1189 | ./scissors/frame_0008.jpg 1190 | ./scissors/frame_0009.jpg 1191 | ./scissors/frame_0010.jpg 1192 | ./scissors/frame_0011.jpg 1193 | ./scissors/frame_0012.jpg 1194 | ./scissors/frame_0015.jpg 1195 | ./scissors/frame_0016.jpg 1196 | ./scissors/frame_0017.jpg 1197 | ./scissors/frame_0018.jpg 1198 | ./scissors/frame_0019.jpg 1199 | ./scissors/frame_0020.jpg 1200 | ./scissors/frame_0024.jpg 1201 | ./scissors/frame_0028.jpg 1202 | ./scissors/frame_0030.jpg 1203 | ./scissors/frame_0031.jpg 1204 | ./scissors/frame_0032.jpg 1205 | ./scissors/frame_0043.jpg 1206 | ./scissors/frame_0044.jpg 1207 | ./scissors/frame_0046.jpg 1208 | ./scissors/frame_0048.jpg 1209 | ./scissors/frame_0049.jpg 1210 | ./scissors/frame_0055.jpg 1211 | ./scissors/frame_0059.jpg 1212 | ./scissors/frame_0061.jpg 1213 | ./scissors/frame_0062.jpg 1214 | ./scissors/frame_0063.jpg 1215 | ./scissors/frame_0066.jpg 1216 | ./scissors/frame_0067.jpg 1217 | ./scissors/frame_0069.jpg 1218 | ./scissors/frame_0070.jpg 1219 | ./scissors/frame_0072.jpg 1220 | ./scissors/frame_0076.jpg 1221 | ./scissors/frame_0077.jpg 1222 | ./scissors/frame_0078.jpg 1223 | ./scissors/frame_0079.jpg 1224 | ./scissors/frame_0082.jpg 1225 | ./scissors/frame_0083.jpg 1226 | ./scissors/frame_0084.jpg 1227 | ./scissors/frame_0085.jpg 1228 | ./scissors/frame_0089.jpg 1229 | ./scissors/frame_0090.jpg 1230 | ./scissors/frame_0094.jpg 1231 | ./scissors/frame_0095.jpg 1232 | ./scissors/frame_0097.jpg 1233 | ./scissors/frame_0098.jpg 1234 | ./scissors/frame_0099.jpg 1235 | ./speaker/frame_0001.jpg 1236 | ./speaker/frame_0002.jpg 1237 | ./speaker/frame_0006.jpg 1238 | ./speaker/frame_0007.jpg 1239 | ./speaker/frame_0013.jpg 1240 | ./speaker/frame_0014.jpg 1241 | ./speaker/frame_0017.jpg 1242 | ./speaker/frame_0020.jpg 1243 | ./speaker/frame_0021.jpg 1244 | ./speaker/frame_0024.jpg 1245 | ./speaker/frame_0028.jpg 1246 | ./speaker/frame_0029.jpg 1247 | ./speaker/frame_0030.jpg 1248 | ./speaker/frame_0031.jpg 1249 | ./speaker/frame_0034.jpg 1250 | ./speaker/frame_0037.jpg 1251 | ./speaker/frame_0039.jpg 1252 | ./speaker/frame_0040.jpg 1253 | ./speaker/frame_0041.jpg 1254 | ./speaker/frame_0043.jpg 1255 | ./speaker/frame_0044.jpg 1256 | ./speaker/frame_0046.jpg 1257 | ./speaker/frame_0047.jpg 1258 | ./speaker/frame_0049.jpg 1259 | ./speaker/frame_0051.jpg 1260 | ./speaker/frame_0053.jpg 1261 | ./speaker/frame_0054.jpg 1262 | ./speaker/frame_0055.jpg 1263 | ./speaker/frame_0056.jpg 1264 | ./speaker/frame_0057.jpg 1265 | ./speaker/frame_0058.jpg 1266 | ./speaker/frame_0063.jpg 1267 | ./speaker/frame_0064.jpg 1268 | ./speaker/frame_0066.jpg 1269 | ./speaker/frame_0068.jpg 1270 | ./speaker/frame_0071.jpg 1271 | ./speaker/frame_0073.jpg 1272 | ./speaker/frame_0077.jpg 1273 | ./speaker/frame_0081.jpg 1274 | ./speaker/frame_0082.jpg 1275 | ./speaker/frame_0085.jpg 1276 | ./speaker/frame_0088.jpg 1277 | ./speaker/frame_0090.jpg 1278 | ./speaker/frame_0092.jpg 1279 | ./speaker/frame_0093.jpg 1280 | ./speaker/frame_0094.jpg 1281 | ./speaker/frame_0095.jpg 1282 | ./speaker/frame_0096.jpg 1283 | ./speaker/frame_0097.jpg 1284 | ./speaker/frame_0099.jpg 1285 | ./stapler/frame_0003.jpg 1286 | ./stapler/frame_0006.jpg 1287 | ./stapler/frame_0009.jpg 1288 | ./stapler/frame_0010.jpg 1289 | ./stapler/frame_0011.jpg 1290 | ./stapler/frame_0021.jpg 1291 | ./stapler/frame_0023.jpg 1292 | ./stapler/frame_0024.jpg 1293 | ./stapler/frame_0025.jpg 1294 | ./stapler/frame_0026.jpg 1295 | ./stapler/frame_0027.jpg 1296 | ./stapler/frame_0029.jpg 1297 | ./stapler/frame_0030.jpg 1298 | ./stapler/frame_0034.jpg 1299 | ./stapler/frame_0035.jpg 1300 | ./stapler/frame_0036.jpg 1301 | ./stapler/frame_0038.jpg 1302 | ./stapler/frame_0039.jpg 1303 | ./stapler/frame_0040.jpg 1304 | ./stapler/frame_0042.jpg 1305 | ./stapler/frame_0043.jpg 1306 | ./stapler/frame_0044.jpg 1307 | ./stapler/frame_0045.jpg 1308 | ./stapler/frame_0048.jpg 1309 | ./stapler/frame_0049.jpg 1310 | ./stapler/frame_0050.jpg 1311 | ./stapler/frame_0053.jpg 1312 | ./stapler/frame_0054.jpg 1313 | ./stapler/frame_0057.jpg 1314 | ./stapler/frame_0058.jpg 1315 | ./stapler/frame_0059.jpg 1316 | ./stapler/frame_0063.jpg 1317 | ./stapler/frame_0065.jpg 1318 | ./stapler/frame_0066.jpg 1319 | ./stapler/frame_0067.jpg 1320 | ./stapler/frame_0071.jpg 1321 | ./stapler/frame_0072.jpg 1322 | ./stapler/frame_0073.jpg 1323 | ./stapler/frame_0074.jpg 1324 | ./stapler/frame_0079.jpg 1325 | ./stapler/frame_0080.jpg 1326 | ./stapler/frame_0081.jpg 1327 | ./stapler/frame_0084.jpg 1328 | ./stapler/frame_0085.jpg 1329 | ./stapler/frame_0092.jpg 1330 | ./stapler/frame_0093.jpg 1331 | ./stapler/frame_0094.jpg 1332 | ./stapler/frame_0095.jpg 1333 | ./stapler/frame_0097.jpg 1334 | ./stapler/frame_0098.jpg 1335 | ./tape_dispenser/frame_0002.jpg 1336 | ./tape_dispenser/frame_0003.jpg 1337 | ./tape_dispenser/frame_0005.jpg 1338 | ./tape_dispenser/frame_0006.jpg 1339 | ./tape_dispenser/frame_0009.jpg 1340 | ./tape_dispenser/frame_0012.jpg 1341 | ./tape_dispenser/frame_0013.jpg 1342 | ./tape_dispenser/frame_0014.jpg 1343 | ./tape_dispenser/frame_0016.jpg 1344 | ./tape_dispenser/frame_0018.jpg 1345 | ./tape_dispenser/frame_0020.jpg 1346 | ./tape_dispenser/frame_0021.jpg 1347 | ./tape_dispenser/frame_0025.jpg 1348 | ./tape_dispenser/frame_0026.jpg 1349 | ./tape_dispenser/frame_0028.jpg 1350 | ./tape_dispenser/frame_0029.jpg 1351 | ./tape_dispenser/frame_0031.jpg 1352 | ./tape_dispenser/frame_0032.jpg 1353 | ./tape_dispenser/frame_0033.jpg 1354 | ./tape_dispenser/frame_0034.jpg 1355 | ./tape_dispenser/frame_0035.jpg 1356 | ./tape_dispenser/frame_0036.jpg 1357 | ./tape_dispenser/frame_0039.jpg 1358 | ./tape_dispenser/frame_0042.jpg 1359 | ./tape_dispenser/frame_0044.jpg 1360 | ./tape_dispenser/frame_0047.jpg 1361 | ./tape_dispenser/frame_0054.jpg 1362 | ./tape_dispenser/frame_0055.jpg 1363 | ./tape_dispenser/frame_0057.jpg 1364 | ./tape_dispenser/frame_0058.jpg 1365 | ./tape_dispenser/frame_0059.jpg 1366 | ./tape_dispenser/frame_0063.jpg 1367 | ./tape_dispenser/frame_0064.jpg 1368 | ./tape_dispenser/frame_0065.jpg 1369 | ./tape_dispenser/frame_0070.jpg 1370 | ./tape_dispenser/frame_0072.jpg 1371 | ./tape_dispenser/frame_0074.jpg 1372 | ./tape_dispenser/frame_0076.jpg 1373 | ./tape_dispenser/frame_0077.jpg 1374 | ./tape_dispenser/frame_0078.jpg 1375 | ./tape_dispenser/frame_0081.jpg 1376 | ./tape_dispenser/frame_0082.jpg 1377 | ./tape_dispenser/frame_0083.jpg 1378 | ./tape_dispenser/frame_0084.jpg 1379 | ./tape_dispenser/frame_0085.jpg 1380 | ./tape_dispenser/frame_0087.jpg 1381 | ./tape_dispenser/frame_0090.jpg 1382 | ./tape_dispenser/frame_0094.jpg 1383 | ./trash_can/frame_0001.jpg 1384 | ./trash_can/frame_0002.jpg 1385 | ./trash_can/frame_0003.jpg 1386 | ./trash_can/frame_0004.jpg 1387 | ./trash_can/frame_0009.jpg 1388 | ./trash_can/frame_0011.jpg 1389 | ./trash_can/frame_0013.jpg 1390 | ./trash_can/frame_0016.jpg 1391 | ./trash_can/frame_0017.jpg 1392 | ./trash_can/frame_0019.jpg 1393 | ./trash_can/frame_0021.jpg 1394 | ./trash_can/frame_0022.jpg 1395 | ./trash_can/frame_0025.jpg 1396 | ./trash_can/frame_0028.jpg 1397 | ./trash_can/frame_0032.jpg 1398 | ./trash_can/frame_0033.jpg 1399 | ./trash_can/frame_0034.jpg 1400 | ./trash_can/frame_0035.jpg 1401 | ./trash_can/frame_0039.jpg 1402 | ./trash_can/frame_0041.jpg 1403 | ./trash_can/frame_0044.jpg 1404 | ./trash_can/frame_0045.jpg 1405 | ./trash_can/frame_0048.jpg 1406 | ./trash_can/frame_0052.jpg 1407 | ./trash_can/frame_0054.jpg 1408 | ./trash_can/frame_0055.jpg 1409 | ./trash_can/frame_0056.jpg 1410 | ./trash_can/frame_0057.jpg 1411 | ./trash_can/frame_0061.jpg 1412 | ./trash_can/frame_0062.jpg 1413 | ./trash_can/frame_0063.jpg 1414 | ./trash_can/frame_0064.jpg 1415 | -------------------------------------------------------------------------------- /data/datasets/Office31/dslr/images.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /data/datasets/Office31/dslr_half/images.txt: -------------------------------------------------------------------------------- 1 | ./back_pack/frame_0001.jpg 2 | ./back_pack/frame_0004.jpg 3 | ./back_pack/frame_0005.jpg 4 | ./back_pack/frame_0008.jpg 5 | ./back_pack/frame_0010.jpg 6 | ./back_pack/frame_0011.jpg 7 | ./bike/frame_0004.jpg 8 | ./bike/frame_0005.jpg 9 | ./bike/frame_0006.jpg 10 | ./bike/frame_0007.jpg 11 | ./bike/frame_0010.jpg 12 | ./bike/frame_0011.jpg 13 | ./bike/frame_0013.jpg 14 | ./bike/frame_0015.jpg 15 | ./bike/frame_0016.jpg 16 | ./bike/frame_0018.jpg 17 | ./bike_helmet/frame_0003.jpg 18 | ./bike_helmet/frame_0004.jpg 19 | ./bike_helmet/frame_0005.jpg 20 | ./bike_helmet/frame_0007.jpg 21 | ./bike_helmet/frame_0008.jpg 22 | ./bike_helmet/frame_0009.jpg 23 | ./bike_helmet/frame_0010.jpg 24 | ./bike_helmet/frame_0011.jpg 25 | ./bike_helmet/frame_0012.jpg 26 | ./bike_helmet/frame_0016.jpg 27 | ./bike_helmet/frame_0018.jpg 28 | ./bike_helmet/frame_0023.jpg 29 | ./bookcase/frame_0001.jpg 30 | ./bookcase/frame_0002.jpg 31 | ./bookcase/frame_0003.jpg 32 | ./bookcase/frame_0006.jpg 33 | ./bookcase/frame_0011.jpg 34 | ./bookcase/frame_0012.jpg 35 | ./bottle/frame_0001.jpg 36 | ./bottle/frame_0002.jpg 37 | ./bottle/frame_0005.jpg 38 | ./bottle/frame_0006.jpg 39 | ./bottle/frame_0007.jpg 40 | ./bottle/frame_0008.jpg 41 | ./bottle/frame_0010.jpg 42 | ./bottle/frame_0013.jpg 43 | ./calculator/frame_0001.jpg 44 | ./calculator/frame_0002.jpg 45 | ./calculator/frame_0003.jpg 46 | ./calculator/frame_0007.jpg 47 | ./calculator/frame_0010.jpg 48 | ./calculator/frame_0011.jpg 49 | ./desk_chair/frame_0002.jpg 50 | ./desk_chair/frame_0003.jpg 51 | ./desk_chair/frame_0008.jpg 52 | ./desk_chair/frame_0010.jpg 53 | ./desk_chair/frame_0011.jpg 54 | ./desk_chair/frame_0012.jpg 55 | ./desk_lamp/frame_0002.jpg 56 | ./desk_lamp/frame_0005.jpg 57 | ./desk_lamp/frame_0006.jpg 58 | ./desk_lamp/frame_0007.jpg 59 | ./desk_lamp/frame_0008.jpg 60 | ./desk_lamp/frame_0011.jpg 61 | ./desk_lamp/frame_0014.jpg 62 | ./desktop_computer/frame_0001.jpg 63 | ./desktop_computer/frame_0004.jpg 64 | ./desktop_computer/frame_0005.jpg 65 | ./desktop_computer/frame_0006.jpg 66 | ./desktop_computer/frame_0013.jpg 67 | ./desktop_computer/frame_0014.jpg 68 | ./desktop_computer/frame_0015.jpg 69 | ./file_cabinet/frame_0003.jpg 70 | ./file_cabinet/frame_0004.jpg 71 | ./file_cabinet/frame_0005.jpg 72 | ./file_cabinet/frame_0007.jpg 73 | ./file_cabinet/frame_0008.jpg 74 | ./file_cabinet/frame_0011.jpg 75 | ./file_cabinet/frame_0014.jpg 76 | ./headphones/frame_0002.jpg 77 | ./headphones/frame_0004.jpg 78 | ./headphones/frame_0008.jpg 79 | ./headphones/frame_0009.jpg 80 | ./headphones/frame_0010.jpg 81 | ./headphones/frame_0011.jpg 82 | ./keyboard/frame_0003.jpg 83 | ./keyboard/frame_0005.jpg 84 | ./keyboard/frame_0007.jpg 85 | ./keyboard/frame_0009.jpg 86 | ./keyboard/frame_0010.jpg 87 | ./laptop_computer/frame_0001.jpg 88 | ./laptop_computer/frame_0002.jpg 89 | ./laptop_computer/frame_0003.jpg 90 | ./laptop_computer/frame_0008.jpg 91 | ./laptop_computer/frame_0009.jpg 92 | ./laptop_computer/frame_0010.jpg 93 | ./laptop_computer/frame_0013.jpg 94 | ./laptop_computer/frame_0016.jpg 95 | ./laptop_computer/frame_0019.jpg 96 | ./laptop_computer/frame_0020.jpg 97 | ./laptop_computer/frame_0023.jpg 98 | ./laptop_computer/frame_0024.jpg 99 | ./letter_tray/frame_0005.jpg 100 | ./letter_tray/frame_0006.jpg 101 | ./letter_tray/frame_0007.jpg 102 | ./letter_tray/frame_0008.jpg 103 | ./letter_tray/frame_0011.jpg 104 | ./letter_tray/frame_0013.jpg 105 | ./letter_tray/frame_0014.jpg 106 | ./letter_tray/frame_0015.jpg 107 | ./mobile_phone/frame_0001.jpg 108 | ./mobile_phone/frame_0003.jpg 109 | ./mobile_phone/frame_0005.jpg 110 | ./mobile_phone/frame_0010.jpg 111 | ./mobile_phone/frame_0012.jpg 112 | ./mobile_phone/frame_0014.jpg 113 | ./mobile_phone/frame_0016.jpg 114 | ./mobile_phone/frame_0017.jpg 115 | ./mobile_phone/frame_0018.jpg 116 | ./mobile_phone/frame_0024.jpg 117 | ./mobile_phone/frame_0025.jpg 118 | ./mobile_phone/frame_0026.jpg 119 | ./mobile_phone/frame_0027.jpg 120 | ./mobile_phone/frame_0028.jpg 121 | ./mobile_phone/frame_0031.jpg 122 | ./monitor/frame_0001.jpg 123 | ./monitor/frame_0002.jpg 124 | ./monitor/frame_0005.jpg 125 | ./monitor/frame_0006.jpg 126 | ./monitor/frame_0007.jpg 127 | ./monitor/frame_0013.jpg 128 | ./monitor/frame_0016.jpg 129 | ./monitor/frame_0017.jpg 130 | ./monitor/frame_0018.jpg 131 | ./monitor/frame_0019.jpg 132 | ./monitor/frame_0022.jpg 133 | ./mouse/frame_0001.jpg 134 | ./mouse/frame_0002.jpg 135 | ./mouse/frame_0006.jpg 136 | ./mouse/frame_0008.jpg 137 | ./mouse/frame_0009.jpg 138 | ./mouse/frame_0010.jpg 139 | ./mug/frame_0001.jpg 140 | ./mug/frame_0002.jpg 141 | ./mug/frame_0004.jpg 142 | ./mug/frame_0005.jpg 143 | ./paper_notebook/frame_0004.jpg 144 | ./paper_notebook/frame_0006.jpg 145 | ./paper_notebook/frame_0007.jpg 146 | ./paper_notebook/frame_0008.jpg 147 | ./paper_notebook/frame_0009.jpg 148 | ./pen/frame_0001.jpg 149 | ./pen/frame_0004.jpg 150 | ./pen/frame_0008.jpg 151 | ./pen/frame_0009.jpg 152 | ./pen/frame_0010.jpg 153 | ./phone/frame_0001.jpg 154 | ./phone/frame_0003.jpg 155 | ./phone/frame_0009.jpg 156 | ./phone/frame_0011.jpg 157 | ./phone/frame_0012.jpg 158 | ./phone/frame_0013.jpg 159 | ./printer/frame_0001.jpg 160 | ./printer/frame_0002.jpg 161 | ./printer/frame_0005.jpg 162 | ./printer/frame_0008.jpg 163 | ./printer/frame_0011.jpg 164 | ./printer/frame_0012.jpg 165 | ./printer/frame_0014.jpg 166 | ./projector/frame_0003.jpg 167 | ./projector/frame_0004.jpg 168 | ./projector/frame_0005.jpg 169 | ./projector/frame_0006.jpg 170 | ./projector/frame_0012.jpg 171 | ./projector/frame_0013.jpg 172 | ./projector/frame_0017.jpg 173 | ./projector/frame_0018.jpg 174 | ./projector/frame_0019.jpg 175 | ./projector/frame_0021.jpg 176 | ./projector/frame_0022.jpg 177 | ./punchers/frame_0001.jpg 178 | ./punchers/frame_0002.jpg 179 | ./punchers/frame_0004.jpg 180 | ./punchers/frame_0005.jpg 181 | ./punchers/frame_0008.jpg 182 | ./punchers/frame_0009.jpg 183 | ./punchers/frame_0015.jpg 184 | ./punchers/frame_0017.jpg 185 | ./punchers/frame_0018.jpg 186 | ./ring_binder/frame_0002.jpg 187 | ./ring_binder/frame_0003.jpg 188 | ./ring_binder/frame_0005.jpg 189 | ./ring_binder/frame_0006.jpg 190 | ./ring_binder/frame_0009.jpg 191 | ./ruler/frame_0001.jpg 192 | ./ruler/frame_0002.jpg 193 | ./ruler/frame_0004.jpg 194 | ./scissors/frame_0005.jpg 195 | ./scissors/frame_0006.jpg 196 | ./scissors/frame_0009.jpg 197 | ./scissors/frame_0010.jpg 198 | ./scissors/frame_0012.jpg 199 | ./scissors/frame_0014.jpg 200 | ./scissors/frame_0015.jpg 201 | ./scissors/frame_0016.jpg 202 | ./scissors/frame_0017.jpg 203 | ./speaker/frame_0002.jpg 204 | ./speaker/frame_0003.jpg 205 | ./speaker/frame_0005.jpg 206 | ./speaker/frame_0006.jpg 207 | ./speaker/frame_0007.jpg 208 | ./speaker/frame_0008.jpg 209 | ./speaker/frame_0014.jpg 210 | ./speaker/frame_0015.jpg 211 | ./speaker/frame_0017.jpg 212 | ./speaker/frame_0019.jpg 213 | ./speaker/frame_0022.jpg 214 | ./speaker/frame_0024.jpg 215 | ./speaker/frame_0026.jpg 216 | ./stapler/frame_0002.jpg 217 | ./stapler/frame_0006.jpg 218 | ./stapler/frame_0008.jpg 219 | ./stapler/frame_0010.jpg 220 | ./stapler/frame_0011.jpg 221 | ./stapler/frame_0012.jpg 222 | ./stapler/frame_0013.jpg 223 | ./stapler/frame_0014.jpg 224 | ./stapler/frame_0016.jpg 225 | ./stapler/frame_0019.jpg 226 | ./tape_dispenser/frame_0001.jpg 227 | ./tape_dispenser/frame_0003.jpg 228 | ./tape_dispenser/frame_0004.jpg 229 | ./tape_dispenser/frame_0005.jpg 230 | ./tape_dispenser/frame_0006.jpg 231 | ./tape_dispenser/frame_0008.jpg 232 | ./tape_dispenser/frame_0011.jpg 233 | ./tape_dispenser/frame_0015.jpg 234 | ./tape_dispenser/frame_0016.jpg 235 | ./tape_dispenser/frame_0019.jpg 236 | ./tape_dispenser/frame_0022.jpg 237 | ./trash_can/frame_0001.jpg 238 | ./trash_can/frame_0003.jpg 239 | ./trash_can/frame_0005.jpg 240 | ./trash_can/frame_0006.jpg 241 | ./trash_can/frame_0012.jpg 242 | ./trash_can/frame_0014.jpg 243 | ./trash_can/frame_0015.jpg 244 | -------------------------------------------------------------------------------- /data/datasets/Office31/dslr_half2/images.txt: -------------------------------------------------------------------------------- 1 | ./back_pack/frame_0002.jpg 2 | ./back_pack/frame_0003.jpg 3 | ./back_pack/frame_0006.jpg 4 | ./back_pack/frame_0007.jpg 5 | ./back_pack/frame_0009.jpg 6 | ./back_pack/frame_0012.jpg 7 | ./bike/frame_0001.jpg 8 | ./bike/frame_0002.jpg 9 | ./bike/frame_0003.jpg 10 | ./bike/frame_0008.jpg 11 | ./bike/frame_0009.jpg 12 | ./bike/frame_0012.jpg 13 | ./bike/frame_0014.jpg 14 | ./bike/frame_0017.jpg 15 | ./bike/frame_0019.jpg 16 | ./bike/frame_0020.jpg 17 | ./bike/frame_0021.jpg 18 | ./bike_helmet/frame_0001.jpg 19 | ./bike_helmet/frame_0002.jpg 20 | ./bike_helmet/frame_0006.jpg 21 | ./bike_helmet/frame_0013.jpg 22 | ./bike_helmet/frame_0014.jpg 23 | ./bike_helmet/frame_0015.jpg 24 | ./bike_helmet/frame_0017.jpg 25 | ./bike_helmet/frame_0019.jpg 26 | ./bike_helmet/frame_0020.jpg 27 | ./bike_helmet/frame_0021.jpg 28 | ./bike_helmet/frame_0022.jpg 29 | ./bike_helmet/frame_0024.jpg 30 | ./bookcase/frame_0004.jpg 31 | ./bookcase/frame_0005.jpg 32 | ./bookcase/frame_0007.jpg 33 | ./bookcase/frame_0008.jpg 34 | ./bookcase/frame_0009.jpg 35 | ./bookcase/frame_0010.jpg 36 | ./bottle/frame_0003.jpg 37 | ./bottle/frame_0004.jpg 38 | ./bottle/frame_0009.jpg 39 | ./bottle/frame_0011.jpg 40 | ./bottle/frame_0012.jpg 41 | ./bottle/frame_0014.jpg 42 | ./bottle/frame_0015.jpg 43 | ./bottle/frame_0016.jpg 44 | ./calculator/frame_0004.jpg 45 | ./calculator/frame_0005.jpg 46 | ./calculator/frame_0006.jpg 47 | ./calculator/frame_0008.jpg 48 | ./calculator/frame_0009.jpg 49 | ./calculator/frame_0012.jpg 50 | ./desk_chair/frame_0001.jpg 51 | ./desk_chair/frame_0004.jpg 52 | ./desk_chair/frame_0005.jpg 53 | ./desk_chair/frame_0006.jpg 54 | ./desk_chair/frame_0007.jpg 55 | ./desk_chair/frame_0009.jpg 56 | ./desk_chair/frame_0013.jpg 57 | ./desk_lamp/frame_0001.jpg 58 | ./desk_lamp/frame_0003.jpg 59 | ./desk_lamp/frame_0004.jpg 60 | ./desk_lamp/frame_0009.jpg 61 | ./desk_lamp/frame_0010.jpg 62 | ./desk_lamp/frame_0012.jpg 63 | ./desk_lamp/frame_0013.jpg 64 | ./desktop_computer/frame_0002.jpg 65 | ./desktop_computer/frame_0003.jpg 66 | ./desktop_computer/frame_0007.jpg 67 | ./desktop_computer/frame_0008.jpg 68 | ./desktop_computer/frame_0009.jpg 69 | ./desktop_computer/frame_0010.jpg 70 | ./desktop_computer/frame_0011.jpg 71 | ./desktop_computer/frame_0012.jpg 72 | ./file_cabinet/frame_0001.jpg 73 | ./file_cabinet/frame_0002.jpg 74 | ./file_cabinet/frame_0006.jpg 75 | ./file_cabinet/frame_0009.jpg 76 | ./file_cabinet/frame_0010.jpg 77 | ./file_cabinet/frame_0012.jpg 78 | ./file_cabinet/frame_0013.jpg 79 | ./file_cabinet/frame_0015.jpg 80 | ./headphones/frame_0001.jpg 81 | ./headphones/frame_0003.jpg 82 | ./headphones/frame_0005.jpg 83 | ./headphones/frame_0006.jpg 84 | ./headphones/frame_0007.jpg 85 | ./headphones/frame_0012.jpg 86 | ./headphones/frame_0013.jpg 87 | ./keyboard/frame_0001.jpg 88 | ./keyboard/frame_0002.jpg 89 | ./keyboard/frame_0004.jpg 90 | ./keyboard/frame_0006.jpg 91 | ./keyboard/frame_0008.jpg 92 | ./laptop_computer/frame_0004.jpg 93 | ./laptop_computer/frame_0005.jpg 94 | ./laptop_computer/frame_0006.jpg 95 | ./laptop_computer/frame_0007.jpg 96 | ./laptop_computer/frame_0011.jpg 97 | ./laptop_computer/frame_0012.jpg 98 | ./laptop_computer/frame_0014.jpg 99 | ./laptop_computer/frame_0015.jpg 100 | ./laptop_computer/frame_0017.jpg 101 | ./laptop_computer/frame_0018.jpg 102 | ./laptop_computer/frame_0021.jpg 103 | ./laptop_computer/frame_0022.jpg 104 | ./letter_tray/frame_0001.jpg 105 | ./letter_tray/frame_0002.jpg 106 | ./letter_tray/frame_0003.jpg 107 | ./letter_tray/frame_0004.jpg 108 | ./letter_tray/frame_0009.jpg 109 | ./letter_tray/frame_0010.jpg 110 | ./letter_tray/frame_0012.jpg 111 | ./letter_tray/frame_0016.jpg 112 | ./mobile_phone/frame_0002.jpg 113 | ./mobile_phone/frame_0004.jpg 114 | ./mobile_phone/frame_0006.jpg 115 | ./mobile_phone/frame_0007.jpg 116 | ./mobile_phone/frame_0008.jpg 117 | ./mobile_phone/frame_0009.jpg 118 | ./mobile_phone/frame_0011.jpg 119 | ./mobile_phone/frame_0013.jpg 120 | ./mobile_phone/frame_0015.jpg 121 | ./mobile_phone/frame_0019.jpg 122 | ./mobile_phone/frame_0020.jpg 123 | ./mobile_phone/frame_0021.jpg 124 | ./mobile_phone/frame_0022.jpg 125 | ./mobile_phone/frame_0023.jpg 126 | ./mobile_phone/frame_0029.jpg 127 | ./mobile_phone/frame_0030.jpg 128 | ./monitor/frame_0003.jpg 129 | ./monitor/frame_0004.jpg 130 | ./monitor/frame_0008.jpg 131 | ./monitor/frame_0009.jpg 132 | ./monitor/frame_0010.jpg 133 | ./monitor/frame_0011.jpg 134 | ./monitor/frame_0012.jpg 135 | ./monitor/frame_0014.jpg 136 | ./monitor/frame_0015.jpg 137 | ./monitor/frame_0020.jpg 138 | ./monitor/frame_0021.jpg 139 | ./mouse/frame_0003.jpg 140 | ./mouse/frame_0004.jpg 141 | ./mouse/frame_0005.jpg 142 | ./mouse/frame_0007.jpg 143 | ./mouse/frame_0011.jpg 144 | ./mouse/frame_0012.jpg 145 | ./mug/frame_0003.jpg 146 | ./mug/frame_0006.jpg 147 | ./mug/frame_0007.jpg 148 | ./mug/frame_0008.jpg 149 | ./paper_notebook/frame_0001.jpg 150 | ./paper_notebook/frame_0002.jpg 151 | ./paper_notebook/frame_0003.jpg 152 | ./paper_notebook/frame_0005.jpg 153 | ./paper_notebook/frame_0010.jpg 154 | ./pen/frame_0002.jpg 155 | ./pen/frame_0003.jpg 156 | ./pen/frame_0005.jpg 157 | ./pen/frame_0006.jpg 158 | ./pen/frame_0007.jpg 159 | ./phone/frame_0002.jpg 160 | ./phone/frame_0004.jpg 161 | ./phone/frame_0005.jpg 162 | ./phone/frame_0006.jpg 163 | ./phone/frame_0007.jpg 164 | ./phone/frame_0008.jpg 165 | ./phone/frame_0010.jpg 166 | ./printer/frame_0003.jpg 167 | ./printer/frame_0004.jpg 168 | ./printer/frame_0006.jpg 169 | ./printer/frame_0007.jpg 170 | ./printer/frame_0009.jpg 171 | ./printer/frame_0010.jpg 172 | ./printer/frame_0013.jpg 173 | ./printer/frame_0015.jpg 174 | ./projector/frame_0001.jpg 175 | ./projector/frame_0002.jpg 176 | ./projector/frame_0007.jpg 177 | ./projector/frame_0008.jpg 178 | ./projector/frame_0009.jpg 179 | ./projector/frame_0010.jpg 180 | ./projector/frame_0011.jpg 181 | ./projector/frame_0014.jpg 182 | ./projector/frame_0015.jpg 183 | ./projector/frame_0016.jpg 184 | ./projector/frame_0020.jpg 185 | ./projector/frame_0023.jpg 186 | ./punchers/frame_0003.jpg 187 | ./punchers/frame_0006.jpg 188 | ./punchers/frame_0007.jpg 189 | ./punchers/frame_0010.jpg 190 | ./punchers/frame_0011.jpg 191 | ./punchers/frame_0012.jpg 192 | ./punchers/frame_0013.jpg 193 | ./punchers/frame_0014.jpg 194 | ./punchers/frame_0016.jpg 195 | ./ring_binder/frame_0001.jpg 196 | ./ring_binder/frame_0004.jpg 197 | ./ring_binder/frame_0007.jpg 198 | ./ring_binder/frame_0008.jpg 199 | ./ring_binder/frame_0010.jpg 200 | ./ruler/frame_0003.jpg 201 | ./ruler/frame_0005.jpg 202 | ./ruler/frame_0006.jpg 203 | ./ruler/frame_0007.jpg 204 | ./scissors/frame_0001.jpg 205 | ./scissors/frame_0002.jpg 206 | ./scissors/frame_0003.jpg 207 | ./scissors/frame_0004.jpg 208 | ./scissors/frame_0007.jpg 209 | ./scissors/frame_0008.jpg 210 | ./scissors/frame_0011.jpg 211 | ./scissors/frame_0013.jpg 212 | ./scissors/frame_0018.jpg 213 | ./speaker/frame_0001.jpg 214 | ./speaker/frame_0004.jpg 215 | ./speaker/frame_0009.jpg 216 | ./speaker/frame_0010.jpg 217 | ./speaker/frame_0011.jpg 218 | ./speaker/frame_0012.jpg 219 | ./speaker/frame_0013.jpg 220 | ./speaker/frame_0016.jpg 221 | ./speaker/frame_0018.jpg 222 | ./speaker/frame_0020.jpg 223 | ./speaker/frame_0021.jpg 224 | ./speaker/frame_0023.jpg 225 | ./speaker/frame_0025.jpg 226 | ./stapler/frame_0001.jpg 227 | ./stapler/frame_0003.jpg 228 | ./stapler/frame_0004.jpg 229 | ./stapler/frame_0005.jpg 230 | ./stapler/frame_0007.jpg 231 | ./stapler/frame_0009.jpg 232 | ./stapler/frame_0015.jpg 233 | ./stapler/frame_0017.jpg 234 | ./stapler/frame_0018.jpg 235 | ./stapler/frame_0020.jpg 236 | ./stapler/frame_0021.jpg 237 | ./tape_dispenser/frame_0002.jpg 238 | ./tape_dispenser/frame_0007.jpg 239 | ./tape_dispenser/frame_0009.jpg 240 | ./tape_dispenser/frame_0010.jpg 241 | ./tape_dispenser/frame_0012.jpg 242 | ./tape_dispenser/frame_0013.jpg 243 | ./tape_dispenser/frame_0014.jpg 244 | ./tape_dispenser/frame_0017.jpg 245 | ./tape_dispenser/frame_0018.jpg 246 | ./tape_dispenser/frame_0020.jpg 247 | ./tape_dispenser/frame_0021.jpg 248 | ./trash_can/frame_0002.jpg 249 | ./trash_can/frame_0004.jpg 250 | ./trash_can/frame_0007.jpg 251 | ./trash_can/frame_0008.jpg 252 | ./trash_can/frame_0009.jpg 253 | ./trash_can/frame_0010.jpg 254 | ./trash_can/frame_0011.jpg 255 | ./trash_can/frame_0013.jpg 256 | -------------------------------------------------------------------------------- /data/datasets/Office31/webcam/images.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /data/datasets/Office31/webcam_half/images.txt: -------------------------------------------------------------------------------- 1 | ./back_pack/frame_0002.jpg 2 | ./back_pack/frame_0003.jpg 3 | ./back_pack/frame_0006.jpg 4 | ./back_pack/frame_0008.jpg 5 | ./back_pack/frame_0009.jpg 6 | ./back_pack/frame_0011.jpg 7 | ./back_pack/frame_0012.jpg 8 | ./back_pack/frame_0014.jpg 9 | ./back_pack/frame_0015.jpg 10 | ./back_pack/frame_0019.jpg 11 | ./back_pack/frame_0025.jpg 12 | ./back_pack/frame_0026.jpg 13 | ./back_pack/frame_0027.jpg 14 | ./back_pack/frame_0029.jpg 15 | ./bike/frame_0004.jpg 16 | ./bike/frame_0006.jpg 17 | ./bike/frame_0007.jpg 18 | ./bike/frame_0008.jpg 19 | ./bike/frame_0011.jpg 20 | ./bike/frame_0013.jpg 21 | ./bike/frame_0015.jpg 22 | ./bike/frame_0017.jpg 23 | ./bike/frame_0018.jpg 24 | ./bike/frame_0021.jpg 25 | ./bike_helmet/frame_0001.jpg 26 | ./bike_helmet/frame_0003.jpg 27 | ./bike_helmet/frame_0004.jpg 28 | ./bike_helmet/frame_0006.jpg 29 | ./bike_helmet/frame_0007.jpg 30 | ./bike_helmet/frame_0009.jpg 31 | ./bike_helmet/frame_0010.jpg 32 | ./bike_helmet/frame_0014.jpg 33 | ./bike_helmet/frame_0015.jpg 34 | ./bike_helmet/frame_0017.jpg 35 | ./bike_helmet/frame_0020.jpg 36 | ./bike_helmet/frame_0022.jpg 37 | ./bike_helmet/frame_0023.jpg 38 | ./bike_helmet/frame_0025.jpg 39 | ./bookcase/frame_0001.jpg 40 | ./bookcase/frame_0002.jpg 41 | ./bookcase/frame_0003.jpg 42 | ./bookcase/frame_0009.jpg 43 | ./bookcase/frame_0010.jpg 44 | ./bookcase/frame_0011.jpg 45 | ./bottle/frame_0001.jpg 46 | ./bottle/frame_0003.jpg 47 | ./bottle/frame_0006.jpg 48 | ./bottle/frame_0007.jpg 49 | ./bottle/frame_0009.jpg 50 | ./bottle/frame_0012.jpg 51 | ./bottle/frame_0014.jpg 52 | ./bottle/frame_0015.jpg 53 | ./calculator/frame_0001.jpg 54 | ./calculator/frame_0002.jpg 55 | ./calculator/frame_0008.jpg 56 | ./calculator/frame_0011.jpg 57 | ./calculator/frame_0013.jpg 58 | ./calculator/frame_0015.jpg 59 | ./calculator/frame_0016.jpg 60 | ./calculator/frame_0019.jpg 61 | ./calculator/frame_0020.jpg 62 | ./calculator/frame_0023.jpg 63 | ./calculator/frame_0025.jpg 64 | ./calculator/frame_0026.jpg 65 | ./calculator/frame_0027.jpg 66 | ./calculator/frame_0028.jpg 67 | ./calculator/frame_0030.jpg 68 | ./desk_chair/frame_0001.jpg 69 | ./desk_chair/frame_0003.jpg 70 | ./desk_chair/frame_0005.jpg 71 | ./desk_chair/frame_0006.jpg 72 | ./desk_chair/frame_0009.jpg 73 | ./desk_chair/frame_0010.jpg 74 | ./desk_chair/frame_0011.jpg 75 | ./desk_chair/frame_0013.jpg 76 | ./desk_chair/frame_0017.jpg 77 | ./desk_chair/frame_0019.jpg 78 | ./desk_chair/frame_0020.jpg 79 | ./desk_chair/frame_0022.jpg 80 | ./desk_chair/frame_0026.jpg 81 | ./desk_chair/frame_0028.jpg 82 | ./desk_chair/frame_0030.jpg 83 | ./desk_chair/frame_0032.jpg 84 | ./desk_chair/frame_0034.jpg 85 | ./desk_chair/frame_0035.jpg 86 | ./desk_chair/frame_0036.jpg 87 | ./desk_chair/frame_0039.jpg 88 | ./desk_lamp/frame_0001.jpg 89 | ./desk_lamp/frame_0002.jpg 90 | ./desk_lamp/frame_0003.jpg 91 | ./desk_lamp/frame_0004.jpg 92 | ./desk_lamp/frame_0013.jpg 93 | ./desk_lamp/frame_0015.jpg 94 | ./desk_lamp/frame_0016.jpg 95 | ./desk_lamp/frame_0017.jpg 96 | ./desk_lamp/frame_0018.jpg 97 | ./desktop_computer/frame_0001.jpg 98 | ./desktop_computer/frame_0002.jpg 99 | ./desktop_computer/frame_0004.jpg 100 | ./desktop_computer/frame_0006.jpg 101 | ./desktop_computer/frame_0009.jpg 102 | ./desktop_computer/frame_0010.jpg 103 | ./desktop_computer/frame_0011.jpg 104 | ./desktop_computer/frame_0014.jpg 105 | ./desktop_computer/frame_0018.jpg 106 | ./desktop_computer/frame_0020.jpg 107 | ./file_cabinet/frame_0001.jpg 108 | ./file_cabinet/frame_0003.jpg 109 | ./file_cabinet/frame_0005.jpg 110 | ./file_cabinet/frame_0011.jpg 111 | ./file_cabinet/frame_0012.jpg 112 | ./file_cabinet/frame_0015.jpg 113 | ./file_cabinet/frame_0016.jpg 114 | ./file_cabinet/frame_0017.jpg 115 | ./file_cabinet/frame_0018.jpg 116 | ./headphones/frame_0001.jpg 117 | ./headphones/frame_0002.jpg 118 | ./headphones/frame_0003.jpg 119 | ./headphones/frame_0004.jpg 120 | ./headphones/frame_0005.jpg 121 | ./headphones/frame_0007.jpg 122 | ./headphones/frame_0011.jpg 123 | ./headphones/frame_0013.jpg 124 | ./headphones/frame_0014.jpg 125 | ./headphones/frame_0017.jpg 126 | ./headphones/frame_0020.jpg 127 | ./headphones/frame_0025.jpg 128 | ./headphones/frame_0027.jpg 129 | ./keyboard/frame_0002.jpg 130 | ./keyboard/frame_0003.jpg 131 | ./keyboard/frame_0004.jpg 132 | ./keyboard/frame_0007.jpg 133 | ./keyboard/frame_0011.jpg 134 | ./keyboard/frame_0016.jpg 135 | ./keyboard/frame_0017.jpg 136 | ./keyboard/frame_0018.jpg 137 | ./keyboard/frame_0020.jpg 138 | ./keyboard/frame_0021.jpg 139 | ./keyboard/frame_0023.jpg 140 | ./keyboard/frame_0026.jpg 141 | ./keyboard/frame_0027.jpg 142 | ./laptop_computer/frame_0001.jpg 143 | ./laptop_computer/frame_0002.jpg 144 | ./laptop_computer/frame_0003.jpg 145 | ./laptop_computer/frame_0004.jpg 146 | ./laptop_computer/frame_0011.jpg 147 | ./laptop_computer/frame_0012.jpg 148 | ./laptop_computer/frame_0014.jpg 149 | ./laptop_computer/frame_0016.jpg 150 | ./laptop_computer/frame_0017.jpg 151 | ./laptop_computer/frame_0019.jpg 152 | ./laptop_computer/frame_0022.jpg 153 | ./laptop_computer/frame_0023.jpg 154 | ./laptop_computer/frame_0025.jpg 155 | ./laptop_computer/frame_0027.jpg 156 | ./laptop_computer/frame_0030.jpg 157 | ./letter_tray/frame_0004.jpg 158 | ./letter_tray/frame_0005.jpg 159 | ./letter_tray/frame_0006.jpg 160 | ./letter_tray/frame_0007.jpg 161 | ./letter_tray/frame_0008.jpg 162 | ./letter_tray/frame_0009.jpg 163 | ./letter_tray/frame_0011.jpg 164 | ./letter_tray/frame_0013.jpg 165 | ./letter_tray/frame_0018.jpg 166 | ./mobile_phone/frame_0002.jpg 167 | ./mobile_phone/frame_0004.jpg 168 | ./mobile_phone/frame_0005.jpg 169 | ./mobile_phone/frame_0007.jpg 170 | ./mobile_phone/frame_0010.jpg 171 | ./mobile_phone/frame_0014.jpg 172 | ./mobile_phone/frame_0015.jpg 173 | ./mobile_phone/frame_0017.jpg 174 | ./mobile_phone/frame_0019.jpg 175 | ./mobile_phone/frame_0020.jpg 176 | ./mobile_phone/frame_0021.jpg 177 | ./mobile_phone/frame_0023.jpg 178 | ./mobile_phone/frame_0026.jpg 179 | ./mobile_phone/frame_0027.jpg 180 | ./mobile_phone/frame_0030.jpg 181 | ./monitor/frame_0002.jpg 182 | ./monitor/frame_0007.jpg 183 | ./monitor/frame_0009.jpg 184 | ./monitor/frame_0011.jpg 185 | ./monitor/frame_0012.jpg 186 | ./monitor/frame_0013.jpg 187 | ./monitor/frame_0016.jpg 188 | ./monitor/frame_0017.jpg 189 | ./monitor/frame_0022.jpg 190 | ./monitor/frame_0025.jpg 191 | ./monitor/frame_0030.jpg 192 | ./monitor/frame_0032.jpg 193 | ./monitor/frame_0033.jpg 194 | ./monitor/frame_0034.jpg 195 | ./monitor/frame_0037.jpg 196 | ./monitor/frame_0038.jpg 197 | ./monitor/frame_0039.jpg 198 | ./monitor/frame_0040.jpg 199 | ./monitor/frame_0041.jpg 200 | ./monitor/frame_0042.jpg 201 | ./monitor/frame_0043.jpg 202 | ./mouse/frame_0004.jpg 203 | ./mouse/frame_0005.jpg 204 | ./mouse/frame_0006.jpg 205 | ./mouse/frame_0008.jpg 206 | ./mouse/frame_0009.jpg 207 | ./mouse/frame_0013.jpg 208 | ./mouse/frame_0014.jpg 209 | ./mouse/frame_0015.jpg 210 | ./mouse/frame_0017.jpg 211 | ./mouse/frame_0020.jpg 212 | ./mouse/frame_0021.jpg 213 | ./mouse/frame_0026.jpg 214 | ./mouse/frame_0027.jpg 215 | ./mouse/frame_0029.jpg 216 | ./mouse/frame_0030.jpg 217 | ./mug/frame_0003.jpg 218 | ./mug/frame_0005.jpg 219 | ./mug/frame_0007.jpg 220 | ./mug/frame_0008.jpg 221 | ./mug/frame_0009.jpg 222 | ./mug/frame_0011.jpg 223 | ./mug/frame_0013.jpg 224 | ./mug/frame_0016.jpg 225 | ./mug/frame_0017.jpg 226 | ./mug/frame_0018.jpg 227 | ./mug/frame_0021.jpg 228 | ./mug/frame_0022.jpg 229 | ./mug/frame_0026.jpg 230 | ./paper_notebook/frame_0004.jpg 231 | ./paper_notebook/frame_0005.jpg 232 | ./paper_notebook/frame_0007.jpg 233 | ./paper_notebook/frame_0008.jpg 234 | ./paper_notebook/frame_0009.jpg 235 | ./paper_notebook/frame_0010.jpg 236 | ./paper_notebook/frame_0011.jpg 237 | ./paper_notebook/frame_0015.jpg 238 | ./paper_notebook/frame_0016.jpg 239 | ./paper_notebook/frame_0018.jpg 240 | ./paper_notebook/frame_0019.jpg 241 | ./paper_notebook/frame_0022.jpg 242 | ./paper_notebook/frame_0023.jpg 243 | ./paper_notebook/frame_0025.jpg 244 | ./pen/frame_0002.jpg 245 | ./pen/frame_0005.jpg 246 | ./pen/frame_0006.jpg 247 | ./pen/frame_0012.jpg 248 | ./pen/frame_0014.jpg 249 | ./pen/frame_0015.jpg 250 | ./pen/frame_0018.jpg 251 | ./pen/frame_0020.jpg 252 | ./pen/frame_0021.jpg 253 | ./pen/frame_0023.jpg 254 | ./pen/frame_0024.jpg 255 | ./pen/frame_0026.jpg 256 | ./pen/frame_0027.jpg 257 | ./pen/frame_0029.jpg 258 | ./pen/frame_0031.jpg 259 | ./pen/frame_0032.jpg 260 | ./phone/frame_0002.jpg 261 | ./phone/frame_0003.jpg 262 | ./phone/frame_0004.jpg 263 | ./phone/frame_0006.jpg 264 | ./phone/frame_0007.jpg 265 | ./phone/frame_0008.jpg 266 | ./phone/frame_0011.jpg 267 | ./phone/frame_0012.jpg 268 | ./printer/frame_0002.jpg 269 | ./printer/frame_0003.jpg 270 | ./printer/frame_0009.jpg 271 | ./printer/frame_0011.jpg 272 | ./printer/frame_0013.jpg 273 | ./printer/frame_0015.jpg 274 | ./printer/frame_0017.jpg 275 | ./printer/frame_0018.jpg 276 | ./printer/frame_0019.jpg 277 | ./printer/frame_0020.jpg 278 | ./projector/frame_0001.jpg 279 | ./projector/frame_0002.jpg 280 | ./projector/frame_0004.jpg 281 | ./projector/frame_0005.jpg 282 | ./projector/frame_0006.jpg 283 | ./projector/frame_0010.jpg 284 | ./projector/frame_0013.jpg 285 | ./projector/frame_0015.jpg 286 | ./projector/frame_0019.jpg 287 | ./projector/frame_0020.jpg 288 | ./projector/frame_0022.jpg 289 | ./projector/frame_0023.jpg 290 | ./projector/frame_0024.jpg 291 | ./projector/frame_0027.jpg 292 | ./projector/frame_0030.jpg 293 | ./punchers/frame_0003.jpg 294 | ./punchers/frame_0004.jpg 295 | ./punchers/frame_0006.jpg 296 | ./punchers/frame_0008.jpg 297 | ./punchers/frame_0009.jpg 298 | ./punchers/frame_0010.jpg 299 | ./punchers/frame_0016.jpg 300 | ./punchers/frame_0017.jpg 301 | ./punchers/frame_0019.jpg 302 | ./punchers/frame_0020.jpg 303 | ./punchers/frame_0025.jpg 304 | ./punchers/frame_0026.jpg 305 | ./punchers/frame_0027.jpg 306 | ./ring_binder/frame_0003.jpg 307 | ./ring_binder/frame_0004.jpg 308 | ./ring_binder/frame_0006.jpg 309 | ./ring_binder/frame_0010.jpg 310 | ./ring_binder/frame_0013.jpg 311 | ./ring_binder/frame_0016.jpg 312 | ./ring_binder/frame_0017.jpg 313 | ./ring_binder/frame_0018.jpg 314 | ./ring_binder/frame_0019.jpg 315 | ./ring_binder/frame_0022.jpg 316 | ./ring_binder/frame_0024.jpg 317 | ./ring_binder/frame_0025.jpg 318 | ./ring_binder/frame_0026.jpg 319 | ./ring_binder/frame_0027.jpg 320 | ./ring_binder/frame_0028.jpg 321 | ./ring_binder/frame_0029.jpg 322 | ./ring_binder/frame_0030.jpg 323 | ./ring_binder/frame_0032.jpg 324 | ./ring_binder/frame_0037.jpg 325 | ./ring_binder/frame_0038.jpg 326 | ./ruler/frame_0002.jpg 327 | ./ruler/frame_0003.jpg 328 | ./ruler/frame_0006.jpg 329 | ./ruler/frame_0007.jpg 330 | ./ruler/frame_0009.jpg 331 | ./scissors/frame_0006.jpg 332 | ./scissors/frame_0009.jpg 333 | ./scissors/frame_0010.jpg 334 | ./scissors/frame_0011.jpg 335 | ./scissors/frame_0013.jpg 336 | ./scissors/frame_0014.jpg 337 | ./scissors/frame_0015.jpg 338 | ./scissors/frame_0016.jpg 339 | ./scissors/frame_0017.jpg 340 | ./scissors/frame_0021.jpg 341 | ./scissors/frame_0023.jpg 342 | ./scissors/frame_0025.jpg 343 | ./speaker/frame_0002.jpg 344 | ./speaker/frame_0003.jpg 345 | ./speaker/frame_0004.jpg 346 | ./speaker/frame_0005.jpg 347 | ./speaker/frame_0006.jpg 348 | ./speaker/frame_0008.jpg 349 | ./speaker/frame_0010.jpg 350 | ./speaker/frame_0012.jpg 351 | ./speaker/frame_0014.jpg 352 | ./speaker/frame_0015.jpg 353 | ./speaker/frame_0017.jpg 354 | ./speaker/frame_0018.jpg 355 | ./speaker/frame_0020.jpg 356 | ./speaker/frame_0023.jpg 357 | ./speaker/frame_0028.jpg 358 | ./stapler/frame_0005.jpg 359 | ./stapler/frame_0006.jpg 360 | ./stapler/frame_0007.jpg 361 | ./stapler/frame_0008.jpg 362 | ./stapler/frame_0010.jpg 363 | ./stapler/frame_0013.jpg 364 | ./stapler/frame_0014.jpg 365 | ./stapler/frame_0015.jpg 366 | ./stapler/frame_0019.jpg 367 | ./stapler/frame_0021.jpg 368 | ./stapler/frame_0023.jpg 369 | ./stapler/frame_0024.jpg 370 | ./tape_dispenser/frame_0003.jpg 371 | ./tape_dispenser/frame_0005.jpg 372 | ./tape_dispenser/frame_0006.jpg 373 | ./tape_dispenser/frame_0010.jpg 374 | ./tape_dispenser/frame_0014.jpg 375 | ./tape_dispenser/frame_0016.jpg 376 | ./tape_dispenser/frame_0017.jpg 377 | ./tape_dispenser/frame_0018.jpg 378 | ./tape_dispenser/frame_0019.jpg 379 | ./tape_dispenser/frame_0022.jpg 380 | ./tape_dispenser/frame_0023.jpg 381 | ./trash_can/frame_0001.jpg 382 | ./trash_can/frame_0003.jpg 383 | ./trash_can/frame_0004.jpg 384 | ./trash_can/frame_0011.jpg 385 | ./trash_can/frame_0012.jpg 386 | ./trash_can/frame_0014.jpg 387 | ./trash_can/frame_0015.jpg 388 | ./trash_can/frame_0017.jpg 389 | ./trash_can/frame_0019.jpg 390 | ./trash_can/frame_0020.jpg 391 | -------------------------------------------------------------------------------- /data/datasets/Office31/webcam_half2/images.txt: -------------------------------------------------------------------------------- 1 | ./back_pack/frame_0001.jpg 2 | ./back_pack/frame_0004.jpg 3 | ./back_pack/frame_0005.jpg 4 | ./back_pack/frame_0007.jpg 5 | ./back_pack/frame_0010.jpg 6 | ./back_pack/frame_0013.jpg 7 | ./back_pack/frame_0016.jpg 8 | ./back_pack/frame_0017.jpg 9 | ./back_pack/frame_0018.jpg 10 | ./back_pack/frame_0020.jpg 11 | ./back_pack/frame_0021.jpg 12 | ./back_pack/frame_0022.jpg 13 | ./back_pack/frame_0023.jpg 14 | ./back_pack/frame_0024.jpg 15 | ./back_pack/frame_0028.jpg 16 | ./bike/frame_0001.jpg 17 | ./bike/frame_0002.jpg 18 | ./bike/frame_0003.jpg 19 | ./bike/frame_0005.jpg 20 | ./bike/frame_0009.jpg 21 | ./bike/frame_0010.jpg 22 | ./bike/frame_0012.jpg 23 | ./bike/frame_0014.jpg 24 | ./bike/frame_0016.jpg 25 | ./bike/frame_0019.jpg 26 | ./bike/frame_0020.jpg 27 | ./bike_helmet/frame_0002.jpg 28 | ./bike_helmet/frame_0005.jpg 29 | ./bike_helmet/frame_0008.jpg 30 | ./bike_helmet/frame_0011.jpg 31 | ./bike_helmet/frame_0012.jpg 32 | ./bike_helmet/frame_0013.jpg 33 | ./bike_helmet/frame_0016.jpg 34 | ./bike_helmet/frame_0018.jpg 35 | ./bike_helmet/frame_0019.jpg 36 | ./bike_helmet/frame_0021.jpg 37 | ./bike_helmet/frame_0024.jpg 38 | ./bike_helmet/frame_0026.jpg 39 | ./bike_helmet/frame_0027.jpg 40 | ./bike_helmet/frame_0028.jpg 41 | ./bookcase/frame_0004.jpg 42 | ./bookcase/frame_0005.jpg 43 | ./bookcase/frame_0006.jpg 44 | ./bookcase/frame_0007.jpg 45 | ./bookcase/frame_0008.jpg 46 | ./bookcase/frame_0012.jpg 47 | ./bottle/frame_0002.jpg 48 | ./bottle/frame_0004.jpg 49 | ./bottle/frame_0005.jpg 50 | ./bottle/frame_0008.jpg 51 | ./bottle/frame_0010.jpg 52 | ./bottle/frame_0011.jpg 53 | ./bottle/frame_0013.jpg 54 | ./bottle/frame_0016.jpg 55 | ./calculator/frame_0003.jpg 56 | ./calculator/frame_0004.jpg 57 | ./calculator/frame_0005.jpg 58 | ./calculator/frame_0006.jpg 59 | ./calculator/frame_0007.jpg 60 | ./calculator/frame_0009.jpg 61 | ./calculator/frame_0010.jpg 62 | ./calculator/frame_0012.jpg 63 | ./calculator/frame_0014.jpg 64 | ./calculator/frame_0017.jpg 65 | ./calculator/frame_0018.jpg 66 | ./calculator/frame_0021.jpg 67 | ./calculator/frame_0022.jpg 68 | ./calculator/frame_0024.jpg 69 | ./calculator/frame_0029.jpg 70 | ./calculator/frame_0031.jpg 71 | ./desk_chair/frame_0002.jpg 72 | ./desk_chair/frame_0004.jpg 73 | ./desk_chair/frame_0007.jpg 74 | ./desk_chair/frame_0008.jpg 75 | ./desk_chair/frame_0012.jpg 76 | ./desk_chair/frame_0014.jpg 77 | ./desk_chair/frame_0015.jpg 78 | ./desk_chair/frame_0016.jpg 79 | ./desk_chair/frame_0018.jpg 80 | ./desk_chair/frame_0021.jpg 81 | ./desk_chair/frame_0023.jpg 82 | ./desk_chair/frame_0024.jpg 83 | ./desk_chair/frame_0025.jpg 84 | ./desk_chair/frame_0027.jpg 85 | ./desk_chair/frame_0029.jpg 86 | ./desk_chair/frame_0031.jpg 87 | ./desk_chair/frame_0033.jpg 88 | ./desk_chair/frame_0037.jpg 89 | ./desk_chair/frame_0038.jpg 90 | ./desk_chair/frame_0040.jpg 91 | ./desk_lamp/frame_0005.jpg 92 | ./desk_lamp/frame_0006.jpg 93 | ./desk_lamp/frame_0007.jpg 94 | ./desk_lamp/frame_0008.jpg 95 | ./desk_lamp/frame_0009.jpg 96 | ./desk_lamp/frame_0010.jpg 97 | ./desk_lamp/frame_0011.jpg 98 | ./desk_lamp/frame_0012.jpg 99 | ./desk_lamp/frame_0014.jpg 100 | ./desktop_computer/frame_0003.jpg 101 | ./desktop_computer/frame_0005.jpg 102 | ./desktop_computer/frame_0007.jpg 103 | ./desktop_computer/frame_0008.jpg 104 | ./desktop_computer/frame_0012.jpg 105 | ./desktop_computer/frame_0013.jpg 106 | ./desktop_computer/frame_0015.jpg 107 | ./desktop_computer/frame_0016.jpg 108 | ./desktop_computer/frame_0017.jpg 109 | ./desktop_computer/frame_0019.jpg 110 | ./desktop_computer/frame_0021.jpg 111 | ./file_cabinet/frame_0002.jpg 112 | ./file_cabinet/frame_0004.jpg 113 | ./file_cabinet/frame_0006.jpg 114 | ./file_cabinet/frame_0007.jpg 115 | ./file_cabinet/frame_0008.jpg 116 | ./file_cabinet/frame_0009.jpg 117 | ./file_cabinet/frame_0010.jpg 118 | ./file_cabinet/frame_0013.jpg 119 | ./file_cabinet/frame_0014.jpg 120 | ./file_cabinet/frame_0019.jpg 121 | ./headphones/frame_0006.jpg 122 | ./headphones/frame_0008.jpg 123 | ./headphones/frame_0009.jpg 124 | ./headphones/frame_0010.jpg 125 | ./headphones/frame_0012.jpg 126 | ./headphones/frame_0015.jpg 127 | ./headphones/frame_0016.jpg 128 | ./headphones/frame_0018.jpg 129 | ./headphones/frame_0019.jpg 130 | ./headphones/frame_0021.jpg 131 | ./headphones/frame_0022.jpg 132 | ./headphones/frame_0023.jpg 133 | ./headphones/frame_0024.jpg 134 | ./headphones/frame_0026.jpg 135 | ./keyboard/frame_0001.jpg 136 | ./keyboard/frame_0005.jpg 137 | ./keyboard/frame_0006.jpg 138 | ./keyboard/frame_0008.jpg 139 | ./keyboard/frame_0009.jpg 140 | ./keyboard/frame_0010.jpg 141 | ./keyboard/frame_0012.jpg 142 | ./keyboard/frame_0013.jpg 143 | ./keyboard/frame_0014.jpg 144 | ./keyboard/frame_0015.jpg 145 | ./keyboard/frame_0019.jpg 146 | ./keyboard/frame_0022.jpg 147 | ./keyboard/frame_0024.jpg 148 | ./keyboard/frame_0025.jpg 149 | ./laptop_computer/frame_0005.jpg 150 | ./laptop_computer/frame_0006.jpg 151 | ./laptop_computer/frame_0007.jpg 152 | ./laptop_computer/frame_0008.jpg 153 | ./laptop_computer/frame_0009.jpg 154 | ./laptop_computer/frame_0010.jpg 155 | ./laptop_computer/frame_0013.jpg 156 | ./laptop_computer/frame_0015.jpg 157 | ./laptop_computer/frame_0018.jpg 158 | ./laptop_computer/frame_0020.jpg 159 | ./laptop_computer/frame_0021.jpg 160 | ./laptop_computer/frame_0024.jpg 161 | ./laptop_computer/frame_0026.jpg 162 | ./laptop_computer/frame_0028.jpg 163 | ./laptop_computer/frame_0029.jpg 164 | ./letter_tray/frame_0001.jpg 165 | ./letter_tray/frame_0002.jpg 166 | ./letter_tray/frame_0003.jpg 167 | ./letter_tray/frame_0010.jpg 168 | ./letter_tray/frame_0012.jpg 169 | ./letter_tray/frame_0014.jpg 170 | ./letter_tray/frame_0015.jpg 171 | ./letter_tray/frame_0016.jpg 172 | ./letter_tray/frame_0017.jpg 173 | ./letter_tray/frame_0019.jpg 174 | ./mobile_phone/frame_0001.jpg 175 | ./mobile_phone/frame_0003.jpg 176 | ./mobile_phone/frame_0006.jpg 177 | ./mobile_phone/frame_0008.jpg 178 | ./mobile_phone/frame_0009.jpg 179 | ./mobile_phone/frame_0011.jpg 180 | ./mobile_phone/frame_0012.jpg 181 | ./mobile_phone/frame_0013.jpg 182 | ./mobile_phone/frame_0016.jpg 183 | ./mobile_phone/frame_0018.jpg 184 | ./mobile_phone/frame_0022.jpg 185 | ./mobile_phone/frame_0024.jpg 186 | ./mobile_phone/frame_0025.jpg 187 | ./mobile_phone/frame_0028.jpg 188 | ./mobile_phone/frame_0029.jpg 189 | ./monitor/frame_0001.jpg 190 | ./monitor/frame_0003.jpg 191 | ./monitor/frame_0004.jpg 192 | ./monitor/frame_0005.jpg 193 | ./monitor/frame_0006.jpg 194 | ./monitor/frame_0008.jpg 195 | ./monitor/frame_0010.jpg 196 | ./monitor/frame_0014.jpg 197 | ./monitor/frame_0015.jpg 198 | ./monitor/frame_0018.jpg 199 | ./monitor/frame_0019.jpg 200 | ./monitor/frame_0020.jpg 201 | ./monitor/frame_0021.jpg 202 | ./monitor/frame_0023.jpg 203 | ./monitor/frame_0024.jpg 204 | ./monitor/frame_0026.jpg 205 | ./monitor/frame_0027.jpg 206 | ./monitor/frame_0028.jpg 207 | ./monitor/frame_0029.jpg 208 | ./monitor/frame_0031.jpg 209 | ./monitor/frame_0035.jpg 210 | ./monitor/frame_0036.jpg 211 | ./mouse/frame_0001.jpg 212 | ./mouse/frame_0002.jpg 213 | ./mouse/frame_0003.jpg 214 | ./mouse/frame_0007.jpg 215 | ./mouse/frame_0010.jpg 216 | ./mouse/frame_0011.jpg 217 | ./mouse/frame_0012.jpg 218 | ./mouse/frame_0016.jpg 219 | ./mouse/frame_0018.jpg 220 | ./mouse/frame_0019.jpg 221 | ./mouse/frame_0022.jpg 222 | ./mouse/frame_0023.jpg 223 | ./mouse/frame_0024.jpg 224 | ./mouse/frame_0025.jpg 225 | ./mouse/frame_0028.jpg 226 | ./mug/frame_0001.jpg 227 | ./mug/frame_0002.jpg 228 | ./mug/frame_0004.jpg 229 | ./mug/frame_0006.jpg 230 | ./mug/frame_0010.jpg 231 | ./mug/frame_0012.jpg 232 | ./mug/frame_0014.jpg 233 | ./mug/frame_0015.jpg 234 | ./mug/frame_0019.jpg 235 | ./mug/frame_0020.jpg 236 | ./mug/frame_0023.jpg 237 | ./mug/frame_0024.jpg 238 | ./mug/frame_0025.jpg 239 | ./mug/frame_0027.jpg 240 | ./paper_notebook/frame_0001.jpg 241 | ./paper_notebook/frame_0002.jpg 242 | ./paper_notebook/frame_0003.jpg 243 | ./paper_notebook/frame_0006.jpg 244 | ./paper_notebook/frame_0012.jpg 245 | ./paper_notebook/frame_0013.jpg 246 | ./paper_notebook/frame_0014.jpg 247 | ./paper_notebook/frame_0017.jpg 248 | ./paper_notebook/frame_0020.jpg 249 | ./paper_notebook/frame_0021.jpg 250 | ./paper_notebook/frame_0024.jpg 251 | ./paper_notebook/frame_0026.jpg 252 | ./paper_notebook/frame_0027.jpg 253 | ./paper_notebook/frame_0028.jpg 254 | ./pen/frame_0001.jpg 255 | ./pen/frame_0003.jpg 256 | ./pen/frame_0004.jpg 257 | ./pen/frame_0007.jpg 258 | ./pen/frame_0008.jpg 259 | ./pen/frame_0009.jpg 260 | ./pen/frame_0010.jpg 261 | ./pen/frame_0011.jpg 262 | ./pen/frame_0013.jpg 263 | ./pen/frame_0016.jpg 264 | ./pen/frame_0017.jpg 265 | ./pen/frame_0019.jpg 266 | ./pen/frame_0022.jpg 267 | ./pen/frame_0025.jpg 268 | ./pen/frame_0028.jpg 269 | ./pen/frame_0030.jpg 270 | ./phone/frame_0001.jpg 271 | ./phone/frame_0005.jpg 272 | ./phone/frame_0009.jpg 273 | ./phone/frame_0010.jpg 274 | ./phone/frame_0013.jpg 275 | ./phone/frame_0014.jpg 276 | ./phone/frame_0015.jpg 277 | ./phone/frame_0016.jpg 278 | ./printer/frame_0001.jpg 279 | ./printer/frame_0004.jpg 280 | ./printer/frame_0005.jpg 281 | ./printer/frame_0006.jpg 282 | ./printer/frame_0007.jpg 283 | ./printer/frame_0008.jpg 284 | ./printer/frame_0010.jpg 285 | ./printer/frame_0012.jpg 286 | ./printer/frame_0014.jpg 287 | ./printer/frame_0016.jpg 288 | ./projector/frame_0003.jpg 289 | ./projector/frame_0007.jpg 290 | ./projector/frame_0008.jpg 291 | ./projector/frame_0009.jpg 292 | ./projector/frame_0011.jpg 293 | ./projector/frame_0012.jpg 294 | ./projector/frame_0014.jpg 295 | ./projector/frame_0016.jpg 296 | ./projector/frame_0017.jpg 297 | ./projector/frame_0018.jpg 298 | ./projector/frame_0021.jpg 299 | ./projector/frame_0025.jpg 300 | ./projector/frame_0026.jpg 301 | ./projector/frame_0028.jpg 302 | ./projector/frame_0029.jpg 303 | ./punchers/frame_0001.jpg 304 | ./punchers/frame_0002.jpg 305 | ./punchers/frame_0005.jpg 306 | ./punchers/frame_0007.jpg 307 | ./punchers/frame_0011.jpg 308 | ./punchers/frame_0012.jpg 309 | ./punchers/frame_0013.jpg 310 | ./punchers/frame_0014.jpg 311 | ./punchers/frame_0015.jpg 312 | ./punchers/frame_0018.jpg 313 | ./punchers/frame_0021.jpg 314 | ./punchers/frame_0022.jpg 315 | ./punchers/frame_0023.jpg 316 | ./punchers/frame_0024.jpg 317 | ./ring_binder/frame_0001.jpg 318 | ./ring_binder/frame_0002.jpg 319 | ./ring_binder/frame_0005.jpg 320 | ./ring_binder/frame_0007.jpg 321 | ./ring_binder/frame_0008.jpg 322 | ./ring_binder/frame_0009.jpg 323 | ./ring_binder/frame_0011.jpg 324 | ./ring_binder/frame_0012.jpg 325 | ./ring_binder/frame_0014.jpg 326 | ./ring_binder/frame_0015.jpg 327 | ./ring_binder/frame_0020.jpg 328 | ./ring_binder/frame_0021.jpg 329 | ./ring_binder/frame_0023.jpg 330 | ./ring_binder/frame_0031.jpg 331 | ./ring_binder/frame_0033.jpg 332 | ./ring_binder/frame_0034.jpg 333 | ./ring_binder/frame_0035.jpg 334 | ./ring_binder/frame_0036.jpg 335 | ./ring_binder/frame_0039.jpg 336 | ./ring_binder/frame_0040.jpg 337 | ./ruler/frame_0001.jpg 338 | ./ruler/frame_0004.jpg 339 | ./ruler/frame_0005.jpg 340 | ./ruler/frame_0008.jpg 341 | ./ruler/frame_0010.jpg 342 | ./ruler/frame_0011.jpg 343 | ./scissors/frame_0001.jpg 344 | ./scissors/frame_0002.jpg 345 | ./scissors/frame_0003.jpg 346 | ./scissors/frame_0004.jpg 347 | ./scissors/frame_0005.jpg 348 | ./scissors/frame_0007.jpg 349 | ./scissors/frame_0008.jpg 350 | ./scissors/frame_0012.jpg 351 | ./scissors/frame_0018.jpg 352 | ./scissors/frame_0019.jpg 353 | ./scissors/frame_0020.jpg 354 | ./scissors/frame_0022.jpg 355 | ./scissors/frame_0024.jpg 356 | ./speaker/frame_0001.jpg 357 | ./speaker/frame_0007.jpg 358 | ./speaker/frame_0009.jpg 359 | ./speaker/frame_0011.jpg 360 | ./speaker/frame_0013.jpg 361 | ./speaker/frame_0016.jpg 362 | ./speaker/frame_0019.jpg 363 | ./speaker/frame_0021.jpg 364 | ./speaker/frame_0022.jpg 365 | ./speaker/frame_0024.jpg 366 | ./speaker/frame_0025.jpg 367 | ./speaker/frame_0026.jpg 368 | ./speaker/frame_0027.jpg 369 | ./speaker/frame_0029.jpg 370 | ./speaker/frame_0030.jpg 371 | ./stapler/frame_0001.jpg 372 | ./stapler/frame_0002.jpg 373 | ./stapler/frame_0003.jpg 374 | ./stapler/frame_0004.jpg 375 | ./stapler/frame_0009.jpg 376 | ./stapler/frame_0011.jpg 377 | ./stapler/frame_0012.jpg 378 | ./stapler/frame_0016.jpg 379 | ./stapler/frame_0017.jpg 380 | ./stapler/frame_0018.jpg 381 | ./stapler/frame_0020.jpg 382 | ./stapler/frame_0022.jpg 383 | ./tape_dispenser/frame_0001.jpg 384 | ./tape_dispenser/frame_0002.jpg 385 | ./tape_dispenser/frame_0004.jpg 386 | ./tape_dispenser/frame_0007.jpg 387 | ./tape_dispenser/frame_0008.jpg 388 | ./tape_dispenser/frame_0009.jpg 389 | ./tape_dispenser/frame_0011.jpg 390 | ./tape_dispenser/frame_0012.jpg 391 | ./tape_dispenser/frame_0013.jpg 392 | ./tape_dispenser/frame_0015.jpg 393 | ./tape_dispenser/frame_0020.jpg 394 | ./tape_dispenser/frame_0021.jpg 395 | ./trash_can/frame_0002.jpg 396 | ./trash_can/frame_0005.jpg 397 | ./trash_can/frame_0006.jpg 398 | ./trash_can/frame_0007.jpg 399 | ./trash_can/frame_0008.jpg 400 | ./trash_can/frame_0009.jpg 401 | ./trash_can/frame_0010.jpg 402 | ./trash_can/frame_0013.jpg 403 | ./trash_can/frame_0016.jpg 404 | ./trash_can/frame_0018.jpg 405 | ./trash_can/frame_0021.jpg 406 | -------------------------------------------------------------------------------- /data/prepare_data.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | import torch 4 | import torchvision.transforms as transforms 5 | import torchvision.datasets as datasets 6 | import torch.nn.functional as F 7 | from utils.folder import ImageFolder 8 | import numpy as np 9 | import cv2 10 | 11 | def generate_dataloader(args): 12 | # Data loading code 13 | traindir = os.path.join(args.data_path_source, args.src) 14 | traindir_t = os.path.join(args.data_path_target, args.tar) 15 | valdir = os.path.join(args.data_path_target, args.tar) 16 | valdir_t = os.path.join(args.data_path_target_t, args.tar_t) 17 | 18 | classes = os.listdir(traindir) 19 | classes.sort() 20 | ins_num_for_each_cls_src = torch.cuda.FloatTensor(args.num_classes) 21 | for i,c in enumerate(classes): 22 | ins_num_for_each_cls_src[i] = len(os.listdir(os.path.join(traindir, c))) 23 | 24 | if not os.path.isdir(traindir): 25 | raise ValueError ('the require data path is not exist, please download the dataset') 26 | 27 | if args.no_da: 28 | # transformation on the training data during training 29 | data_transform_train = transforms.Compose([ 30 | transforms.Resize((224, 224)), # spatial size of vgg-f input 31 | #transforms.RandomHorizontalFlip(), 32 | transforms.ToTensor(), 33 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 34 | ]) 35 | # transformation on the duplicated data during training 36 | data_transform_train_dup = transforms.Compose([ 37 | transforms.Resize((224, 224)), 38 | #transforms.RandomHorizontalFlip(), 39 | transforms.ToTensor(), 40 | transforms.Lambda(lambda x: _random_affine_augmentation(x)), 41 | transforms.Lambda(lambda x: _gaussian_blur(x, sigma=args.sigma)), 42 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 43 | ]) 44 | # transformation on the grayscale data during training 45 | data_transform_train_gray = transforms.Compose([ 46 | transforms.Grayscale(3), 47 | transforms.Resize((224, 224)), # spatial size of vgg-f input 48 | #transforms.RandomHorizontalFlip(), 49 | transforms.ToTensor(), 50 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 51 | ]) 52 | # transformation on the test data during test 53 | data_transform_test = transforms.Compose([ 54 | transforms.Resize((224, 224)), # spatial size of vgg-f input 55 | transforms.ToTensor(), 56 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 57 | ]) 58 | else: 59 | # transformation on the training data during training 60 | data_transform_train = transforms.Compose([ 61 | #transforms.Resize((256, 256)), # spatial size of vgg-f input 62 | transforms.Resize(256), 63 | transforms.RandomCrop(224), 64 | transforms.RandomHorizontalFlip(), 65 | transforms.ToTensor(), 66 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 67 | ]) 68 | # transformation on the duplicated data during training 69 | data_transform_train_dup = transforms.Compose([ 70 | transforms.Resize(256), 71 | transforms.RandomCrop(224), 72 | transforms.RandomHorizontalFlip(), 73 | transforms.ToTensor(), 74 | transforms.Lambda(lambda x: _random_affine_augmentation(x)), 75 | transforms.Lambda(lambda x: _gaussian_blur(x, sigma=args.sigma)), 76 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 77 | ]) 78 | # transformation on the grayscale data during training 79 | data_transform_train_gray = transforms.Compose([ 80 | transforms.Grayscale(3), 81 | transforms.Resize(256), # spatial size of vgg-f input 82 | transforms.RandomCrop(224), 83 | transforms.RandomHorizontalFlip(), 84 | transforms.ToTensor(), 85 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 86 | ]) 87 | # transformation on the test data during test 88 | data_transform_test = transforms.Compose([ 89 | transforms.Resize(256), # spatial size of vgg-f input 90 | transforms.CenterCrop(224), 91 | transforms.ToTensor(), 92 | transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), 93 | ]) 94 | 95 | source_train_dataset = ImageFolder(root=traindir, transform=data_transform_train) 96 | source_test_dataset = ImageFolder(root=traindir, transform=data_transform_test) 97 | if args.aug_tar_agree and (not args.gray_tar_agree): 98 | target_train_dataset = ImageFolder(root=traindir_t, transform=data_transform_train, transform_aug=data_transform_train_dup) 99 | elif args.gray_tar_agree and (not args.aug_tar_agree): 100 | target_train_dataset = ImageFolder(root=traindir_t, transform=data_transform_train, transform_gray=data_transform_train_gray) 101 | elif args.aug_tar_agree and args.gray_tar_agree: 102 | target_train_dataset = ImageFolder(root=traindir_t, transform=data_transform_train, transform_aug=data_transform_train_dup, transform_gray=data_transform_train_gray) 103 | else: 104 | target_train_dataset = ImageFolder(root=traindir_t, transform=data_transform_train) 105 | target_test_dataset = ImageFolder(root=valdir, transform=data_transform_test) 106 | target_test_dataset_t = ImageFolder(root=valdir_t, transform=data_transform_test) 107 | 108 | source_train_loader = torch.utils.data.DataLoader( 109 | source_train_dataset, batch_size=args.batch_size, shuffle=True, 110 | num_workers=args.workers, pin_memory=True, sampler=None, drop_last=True 111 | ) 112 | source_test_loader = torch.utils.data.DataLoader( 113 | source_test_dataset, batch_size=63, shuffle=False, 114 | num_workers=args.workers, pin_memory=True 115 | ) 116 | target_train_loader = torch.utils.data.DataLoader( 117 | target_train_dataset, batch_size=args.batch_size, shuffle=True, 118 | num_workers=args.workers, pin_memory=True, sampler=None, drop_last=True 119 | ) 120 | target_test_loader = torch.utils.data.DataLoader( 121 | target_test_dataset, batch_size=63, shuffle=False, 122 | num_workers=args.workers, pin_memory=True 123 | ) 124 | target_test_loader_t = torch.utils.data.DataLoader( 125 | target_test_dataset_t, batch_size=63, shuffle=False, 126 | num_workers=args.workers, pin_memory=True 127 | ) 128 | 129 | return source_train_loader, target_train_loader, target_test_loader, target_test_loader_t, source_test_loader 130 | 131 | 132 | def _random_affine_augmentation(x): 133 | M = np.float32([[1 + np.random.normal(0.0, 0.1), np.random.normal(0.0, 0.1), 0], 134 | [np.random.normal(0.0, 0.1), 1 + np.random.normal(0.0, 0.1), 0]]) 135 | rows, cols = x.shape[1:3] 136 | dst = cv2.warpAffine(np.transpose(x.numpy(), [1, 2, 0]), M, (cols,rows)) 137 | dst = np.transpose(dst, [2, 0, 1]) 138 | return torch.from_numpy(dst) 139 | 140 | 141 | def _gaussian_blur(x, sigma=0.1): 142 | ksize = int(sigma + 0.5) * 8 + 1 143 | dst = cv2.GaussianBlur(x.numpy(), (ksize, ksize), sigma) 144 | return torch.from_numpy(dst) 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # # 3 | # All the codes about the model constructing should be kept in the folder ./models/ # 4 | # All the codes about the data process should be kept in the folder ./data/ # 5 | # The file ./opts.py stores the options # 6 | # The file ./trainer.py stores the training and test strategy # 7 | # The ./main.py should be simple # 8 | # # 9 | ##################################################################################### 10 | import os 11 | import json 12 | import shutil 13 | import torch 14 | import random 15 | import numpy as np 16 | import torch.backends.cudnn as cudnn 17 | from torch.autograd import Variable 18 | from models.model_construct import Model_Construct # for the model construction 19 | from trainer import train # for the training process 20 | from trainer import validate, validate_compute_cen # for the validation/test process 21 | from trainer import k_means, spherical_k_means, kernel_k_means # for K-means clustering and its variants 22 | from trainer import source_select # for source sample selection 23 | from opts import opts # options for the project 24 | from data.prepare_data import generate_dataloader # prepare the data and dataloader 25 | from utils.consensus_loss import ConsensusLoss 26 | import time 27 | import ipdb 28 | import gc 29 | 30 | args = opts() 31 | 32 | best_prec1 = 0 33 | best_test_prec1 = 0 34 | cond_best_test_prec1 = 0 35 | best_cluster_acc = 0 36 | best_cluster_acc_2 = 0 37 | 38 | def main(): 39 | global args, best_prec1, best_test_prec1, cond_best_test_prec1, best_cluster_acc, best_cluster_acc_2 40 | 41 | # define model 42 | model = Model_Construct(args) 43 | print(model) 44 | model = torch.nn.DataParallel(model).cuda() # define multiple GPUs 45 | 46 | # define learnable cluster centers 47 | learn_cen = Variable(torch.cuda.FloatTensor(args.num_classes, 2048).fill_(0)) 48 | learn_cen.requires_grad_(True) 49 | learn_cen_2 = Variable(torch.cuda.FloatTensor(args.num_classes, args.num_neurons * 4).fill_(0)) 50 | learn_cen_2.requires_grad_(True) 51 | 52 | # define loss function/criterion and optimizer 53 | criterion = torch.nn.CrossEntropyLoss().cuda() 54 | criterion_cons = ConsensusLoss(nClass=args.num_classes, div=args.div).cuda() 55 | 56 | np.random.seed(1) # may fix test data 57 | random.seed(1) 58 | torch.manual_seed(1) 59 | 60 | # apply different learning rates to different layer 61 | optimizer = torch.optim.SGD([ 62 | {'params': model.module.conv1.parameters(), 'name': 'conv'}, 63 | {'params': model.module.bn1.parameters(), 'name': 'conv'}, 64 | {'params': model.module.layer1.parameters(), 'name': 'conv'}, 65 | {'params': model.module.layer2.parameters(), 'name': 'conv'}, 66 | {'params': model.module.layer3.parameters(), 'name': 'conv'}, 67 | {'params': model.module.layer4.parameters(), 'name': 'conv'}, 68 | {'params': model.module.fc1.parameters(), 'name': 'ca_cl'}, 69 | {'params': model.module.fc2.parameters(), 'name': 'ca_cl'}, 70 | {'params': learn_cen, 'name': 'conv'}, 71 | {'params': learn_cen_2, 'name': 'conv'} 72 | ], 73 | lr=args.lr, 74 | momentum=args.momentum, 75 | weight_decay=args.weight_decay, 76 | nesterov=args.nesterov) 77 | 78 | # resume 79 | epoch = 0 80 | init_state_dict = model.state_dict() 81 | if args.resume: 82 | if os.path.isfile(args.resume): 83 | print("==> loading checkpoints '{}'".format(args.resume)) 84 | checkpoint = torch.load(args.resume) 85 | epoch = checkpoint['epoch'] 86 | best_prec1 = checkpoint['best_prec1'] 87 | best_test_prec1 = checkpoint['best_test_prec1'] 88 | cond_best_test_prec1 = checkpoint['cond_best_test_prec1'] 89 | model.load_state_dict(checkpoint['state_dict']) 90 | learn_cen = checkpoint['learn_cen'] 91 | learn_cen_2 = checkpoint['learn_cen_2'] 92 | print("==> loaded checkpoint '{}'(epoch {})".format(args.resume, checkpoint['epoch'])) 93 | else: 94 | raise ValueError('The file to be resumed from does not exist!', args.resume) 95 | 96 | # make log directory 97 | if not os.path.isdir(args.log): 98 | os.makedirs(args.log) 99 | log = open(os.path.join(args.log, 'log.txt'), 'a') 100 | state = {k: v for k, v in args._get_kwargs()} 101 | log.write(json.dumps(state) + '\n') 102 | log.close() 103 | 104 | # start time 105 | log = open(os.path.join(args.log, 'log.txt'), 'a') 106 | log.write('\n-------------------------------------------\n') 107 | log.write(time.asctime(time.localtime(time.time()))) 108 | log.write('\n-------------------------------------------') 109 | log.close() 110 | 111 | cudnn.benchmark = True 112 | 113 | # process data and prepare dataloaders 114 | train_loader_source, train_loader_target, val_loader_target, val_loader_target_t, val_loader_source = generate_dataloader(args) 115 | train_loader_target.dataset.tgts = list(np.array(torch.LongTensor(train_loader_target.dataset.tgts).fill_(-1))) # avoid using ground truth labels of target 116 | 117 | print('begin training') 118 | batch_number = count_epoch_on_large_dataset(train_loader_target, train_loader_source, args) 119 | num_itern_total = args.epochs * batch_number 120 | 121 | new_epoch_flag = False # if new epoch, new_epoch_flag=True 122 | test_flag = False # if test, test_flag=True 123 | 124 | src_cs = torch.cuda.FloatTensor(len(train_loader_source.dataset.tgts)).fill_(1) # initialize source weights 125 | 126 | count_itern_each_epoch = 0 127 | for itern in range(epoch * batch_number, num_itern_total): 128 | # evaluate on the target training and test data 129 | if (itern == 0) or (count_itern_each_epoch == batch_number): 130 | prec1, c_s, c_s_2, c_t, c_t_2, c_srctar, c_srctar_2, source_features, source_features_2, source_targets, target_features, target_features_2, target_targets, pseudo_labels = validate_compute_cen(val_loader_target, val_loader_source, model, criterion, epoch, args) 131 | test_acc = validate(val_loader_target_t, model, criterion, epoch, args) 132 | test_flag = True 133 | 134 | # K-means clustering or its variants 135 | if ((itern == 0) and args.src_cen_first) or (args.initial_cluster == 2): 136 | cen = c_s 137 | cen_2 = c_s_2 138 | else: 139 | cen = c_t 140 | cen_2 = c_t_2 141 | if (itern != 0) and (args.initial_cluster != 0) and (args.cluster_method == 'kernel_kmeans'): 142 | cluster_acc, c_t = kernel_k_means(target_features, target_targets, pseudo_labels, train_loader_target, epoch, model, args, best_cluster_acc) 143 | cluster_acc_2, c_t_2 = kernel_k_means(target_features_2, target_targets, pseudo_labels, train_loader_target, epoch, model, args, best_cluster_acc_2, change_target=False) 144 | elif args.cluster_method != 'spherical_kmeans': 145 | cluster_acc, c_t = k_means(target_features, target_targets, train_loader_target, epoch, model, cen, args, best_cluster_acc) 146 | cluster_acc_2, c_t_2 = k_means(target_features_2, target_targets, train_loader_target, epoch, model, cen_2, args, best_cluster_acc_2, change_target=False) 147 | elif args.cluster_method == 'spherical_kmeans': 148 | cluster_acc, c_t = spherical_k_means(target_features, target_targets, train_loader_target, epoch, model, cen, args, best_cluster_acc) 149 | cluster_acc_2, c_t_2 = spherical_k_means(target_features_2, target_targets, train_loader_target, epoch, model, cen_2, args, best_cluster_acc_2, change_target=False) 150 | 151 | # record the best accuracy of K-means clustering 152 | log = open(os.path.join(args.log, 'log.txt'), 'a') 153 | if cluster_acc != best_cluster_acc: 154 | best_cluster_acc = cluster_acc 155 | log.write('\n best_cluster acc: %3f' % best_cluster_acc) 156 | if cluster_acc_2 != best_cluster_acc_2: 157 | best_cluster_acc_2 = cluster_acc_2 158 | log.write('\n best_cluster_2 acc: %3f' % best_cluster_acc_2) 159 | log.close() 160 | 161 | # re-initialize learnable cluster centers 162 | if args.init_cen_on_st: 163 | cen = (c_t + c_s) / 2# or c_srctar 164 | cen_2 = (c_t_2 + c_s_2) / 2# or c_srctar_2 165 | else: 166 | cen = c_t 167 | cen_2 = c_t_2 168 | #if itern == 0: 169 | learn_cen.data = cen.data.clone() 170 | learn_cen_2.data = cen_2.data.clone() 171 | 172 | # select source samples 173 | if (itern != 0) and (args.src_soft_select or args.src_hard_select): 174 | src_cs = source_select(source_features, source_targets, target_features, pseudo_labels, train_loader_source, epoch, c_t.data.clone(), args) 175 | 176 | # use source pre-trained model to extract features for first clustering 177 | if (itern == 0) and args.src_pretr_first: 178 | model.load_state_dict(init_state_dict) 179 | 180 | if itern != 0: 181 | count_itern_each_epoch = 0 182 | epoch += 1 183 | batch_number = count_epoch_on_large_dataset(train_loader_target, train_loader_source, args) 184 | train_loader_target_batch = enumerate(train_loader_target) 185 | train_loader_source_batch = enumerate(train_loader_source) 186 | 187 | new_epoch_flag = True 188 | 189 | del source_features 190 | del source_features_2 191 | del source_targets 192 | del target_features 193 | del target_features_2 194 | del target_targets 195 | del pseudo_labels 196 | gc.collect() 197 | torch.cuda.empty_cache() 198 | torch.cuda.empty_cache() 199 | elif (args.src.find('visda') != -1) and (itern % int(num_itern_total / 200) == 0): 200 | prec1, _, _, _, _, _, _, _, _, _, _, _, _, _ = validate_compute_cen(val_loader_target, val_loader_source, model, criterion, epoch, args, compute_cen=False) 201 | test_acc = validate(val_loader_target_t, model, criterion, epoch, args) 202 | test_flag = True 203 | if test_flag: 204 | # record the best prec1 and save checkpoint 205 | log = open(os.path.join(args.log, 'log.txt'), 'a') 206 | if prec1 > best_prec1: 207 | best_prec1 = prec1 208 | cond_best_test_prec1 = 0 209 | log.write('\n best val acc till now: %3f' % best_prec1) 210 | if test_acc > best_test_prec1: 211 | best_test_prec1 = test_acc 212 | log.write('\n best test acc till now: %3f' % best_test_prec1) 213 | is_cond_best = ((prec1 == best_prec1) and (test_acc > cond_best_test_prec1)) 214 | if is_cond_best: 215 | cond_best_test_prec1 = test_acc 216 | log.write('\n cond best test acc till now: %3f' % cond_best_test_prec1) 217 | log.close() 218 | save_checkpoint({ 219 | 'epoch': epoch, 220 | 'arch': args.arch, 221 | 'state_dict': model.state_dict(), 222 | 'learn_cen': learn_cen, 223 | 'learn_cen_2': learn_cen_2, 224 | 'best_prec1': best_prec1, 225 | 'best_test_prec1': best_test_prec1, 226 | 'cond_best_test_prec1': cond_best_test_prec1, 227 | }, is_cond_best, args) 228 | 229 | test_flag = False 230 | 231 | # early stop 232 | if epoch > args.stop_epoch: 233 | break 234 | 235 | # train for one iteration 236 | train_loader_source_batch, train_loader_target_batch = train(train_loader_source, train_loader_source_batch, train_loader_target, train_loader_target_batch, model, learn_cen, learn_cen_2, criterion_cons, optimizer, itern, epoch, new_epoch_flag, src_cs, args) 237 | 238 | model = model.cuda() 239 | new_epoch_flag = False 240 | count_itern_each_epoch += 1 241 | 242 | log = open(os.path.join(args.log, 'log.txt'), 'a') 243 | log.write('\n*** best val acc: %3f ***' % best_prec1) 244 | log.write('\n*** best test acc: %3f ***' % best_test_prec1) 245 | log.write('\n*** cond best test acc: %3f ***' % cond_best_test_prec1) 246 | # end time 247 | log.write('\n-------------------------------------------\n') 248 | log.write(time.asctime(time.localtime(time.time()))) 249 | log.write('\n-------------------------------------------\n') 250 | log.close() 251 | 252 | 253 | def count_epoch_on_large_dataset(train_loader_target, train_loader_source, args): 254 | batch_number_t = len(train_loader_target) 255 | batch_number = batch_number_t 256 | if args.src_cls: 257 | batch_number_s = len(train_loader_source) 258 | if batch_number_s > batch_number_t: 259 | batch_number = batch_number_s 260 | 261 | return batch_number 262 | 263 | 264 | def save_checkpoint(state, is_best, args): 265 | filename = 'checkpoint.pth.tar' 266 | dir_save_file = os.path.join(args.log, filename) 267 | torch.save(state, dir_save_file) 268 | if is_best: 269 | shutil.copyfile(dir_save_file, os.path.join(args.log, 'model_best.pth.tar')) 270 | 271 | 272 | if __name__ == '__main__': 273 | main() 274 | 275 | 276 | -------------------------------------------------------------------------------- /models/__pycache__/model_construct.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/models/__pycache__/model_construct.cpython-36.pyc -------------------------------------------------------------------------------- /models/__pycache__/resnet.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/models/__pycache__/resnet.cpython-36.pyc -------------------------------------------------------------------------------- /models/model_construct.py: -------------------------------------------------------------------------------- 1 | from models.resnet import resnet 2 | 3 | 4 | def Model_Construct(args): 5 | if args.arch.find('resnet') != -1: 6 | model = resnet(args) 7 | return model 8 | else: 9 | raise ValueError('The required model does not exist!') 10 | -------------------------------------------------------------------------------- /models/resnet.py: -------------------------------------------------------------------------------- 1 | import torch.nn as nn 2 | import math 3 | import torch.utils.model_zoo as model_zoo 4 | import torch 5 | import torch.nn.functional as F 6 | from torch.autograd import Variable 7 | from collections import OrderedDict 8 | import ipdb 9 | 10 | __all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 11 | 'resnet152'] 12 | 13 | 14 | model_urls = { 15 | 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', 16 | 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', 17 | 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', 18 | 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', 19 | 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', 20 | } 21 | 22 | 23 | def conv3x3(in_planes, out_planes, stride=1): 24 | "3x3 convolution with padding" 25 | return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, 26 | padding=1, bias=False) 27 | 28 | 29 | class BasicBlock(nn.Module): 30 | expansion = 1 31 | 32 | def __init__(self, inplanes, planes, stride=1, downsample=None): 33 | super(BasicBlock, self).__init__() 34 | self.conv1 = conv3x3(inplanes, planes, stride) 35 | self.bn1 = nn.BatchNorm2d(planes) 36 | self.relu = nn.ReLU(inplace=True) 37 | self.conv2 = conv3x3(planes, planes) 38 | self.bn2 = nn.BatchNorm2d(planes) 39 | self.downsample = downsample 40 | self.stride = stride 41 | 42 | def forward(self, x): 43 | residual = x 44 | 45 | out = self.conv1(x) 46 | out = self.bn1(out) 47 | out = self.relu(out) 48 | 49 | out = self.conv2(out) 50 | out = self.bn2(out) 51 | 52 | if self.downsample is not None: 53 | residual = self.downsample(x) 54 | 55 | out += residual 56 | out = self.relu(out) 57 | 58 | return out 59 | 60 | 61 | class Bottleneck(nn.Module): 62 | expansion = 4 63 | 64 | def __init__(self, inplanes, planes, stride=1, downsample=None): 65 | super(Bottleneck, self).__init__() 66 | self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) 67 | self.bn1 = nn.BatchNorm2d(planes) 68 | self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, 69 | padding=1, bias=False) 70 | self.bn2 = nn.BatchNorm2d(planes) 71 | self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) 72 | self.bn3 = nn.BatchNorm2d(planes * 4) 73 | self.relu = nn.ReLU(inplace=True) 74 | self.downsample = downsample 75 | self.stride = stride 76 | 77 | def forward(self, x): 78 | residual = x 79 | 80 | out = self.conv1(x) 81 | out = self.bn1(out) 82 | out = self.relu(out) 83 | 84 | out = self.conv2(out) 85 | out = self.bn2(out) 86 | out = self.relu(out) 87 | 88 | out = self.conv3(out) 89 | out = self.bn3(out) 90 | 91 | if self.downsample is not None: 92 | residual = self.downsample(x) 93 | 94 | out += residual 95 | out = self.relu(out) 96 | 97 | return out 98 | 99 | 100 | class ResNet(nn.Module): 101 | 102 | def __init__(self, block, layers, num_classeses=1000, num_neurons=128): 103 | self.inplanes = 64 104 | super(ResNet, self).__init__() 105 | self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, 106 | bias=False) 107 | self.bn1 = nn.BatchNorm2d(64) 108 | self.relu = nn.ReLU(inplace=True) 109 | self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) 110 | self.layer1 = self._make_layer(block, 64, layers[0]) 111 | self.layer2 = self._make_layer(block, 128, layers[1], stride=2) 112 | self.layer3 = self._make_layer(block, 256, layers[2], stride=2) 113 | self.layer4 = self._make_layer(block, 512, layers[3], stride=2) 114 | self.avgpool = nn.AvgPool2d(7) 115 | #self.fc = nn.Linear(512 * block.expansion, num_classeses) 116 | self.fc1 = nn.Sequential(nn.Linear(512 * block.expansion, num_neurons * block.expansion), 117 | nn.BatchNorm1d(num_neurons * block.expansion), 118 | nn.ReLU(inplace=True)) 119 | self.fc2 = nn.Linear(num_neurons * block.expansion, num_classeses) 120 | 121 | for m in self.modules(): 122 | if isinstance(m, nn.Conv2d): 123 | n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels 124 | m.weight.data.normal_(0, math.sqrt(2. / n)) 125 | elif isinstance(m, nn.BatchNorm2d): 126 | m.weight.data.fill_(1) 127 | m.bias.data.zero_() 128 | 129 | def _make_layer(self, block, planes, blocks, stride=1): 130 | downsample = None 131 | if stride != 1 or self.inplanes != planes * block.expansion: 132 | downsample = nn.Sequential( 133 | nn.Conv2d(self.inplanes, planes * block.expansion, 134 | kernel_size=1, stride=stride, bias=False), 135 | nn.BatchNorm2d(planes * block.expansion), 136 | ) 137 | 138 | layers = [] 139 | layers.append(block(self.inplanes, planes, stride, downsample)) 140 | self.inplanes = planes * block.expansion 141 | for i in range(1, blocks): 142 | layers.append(block(self.inplanes, planes)) 143 | 144 | return nn.Sequential(*layers) 145 | 146 | def forward(self, x): 147 | x = self.conv1(x) 148 | x = self.bn1(x) 149 | x = self.relu(x) 150 | x = self.maxpool(x) 151 | 152 | x = self.layer1(x) 153 | x = self.layer2(x) 154 | x = self.layer3(x) 155 | x = self.layer4(x) 156 | 157 | x = self.avgpool(x) 158 | x = x.view(x.size(0), -1) 159 | y = self.fc1(x) 160 | ca = self.fc2(y) 161 | 162 | return x, y, ca 163 | 164 | 165 | def resnet50(args, **kwargs): 166 | """Constructs a ResNet-50 model. 167 | Args: 168 | pretrained (bool): If True, returns a model pre-trained on ImageNet 169 | """ 170 | model = ResNet(Bottleneck, [3, 4, 6, 3], num_classeses=args.num_classes, num_neurons=args.num_neurons) 171 | if args.pretrained: 172 | model_dict = model.state_dict() 173 | pretrained_dict = model_zoo.load_url(model_urls['resnet50']) 174 | pretrained_dict.pop('fc.weight') 175 | pretrained_dict.pop('fc.bias') 176 | model_dict.update(pretrained_dict) 177 | model.load_state_dict(model_dict) 178 | 179 | return model 180 | 181 | 182 | def resnet101(args, **kwargs): 183 | """Constructs a ResNet-101 model. 184 | Args: 185 | pretrained (bool): If True, returns a model pre-trained on ImageNet 186 | """ 187 | model = ResNet(Bottleneck, [3, 4, 23, 3], num_classeses=args.num_classes, num_neurons=args.num_neurons) 188 | if args.pretrained: 189 | model_dict = model.state_dict() 190 | pretrained_dict = model_zoo.load_url(model_urls['resnet101']) 191 | pretrained_dict.pop('fc.weight') 192 | pretrained_dict.pop('fc.bias') 193 | model_dict.update(pretrained_dict) 194 | model.load_state_dict(model_dict) 195 | 196 | return model 197 | 198 | 199 | def resnet152(args, **kwargs): 200 | """Constructs a ResNet-152 model. 201 | Args: 202 | pretrained (bool): If True, returns a model pre-trained on ImageNet 203 | """ 204 | model = ResNet(Bottleneck, [3, 8, 36, 3], num_classeses=args.num_classes, num_neurons=args.num_neurons) 205 | if args.pretrained: 206 | model_dict = model.state_dict() 207 | pretrained_dict = model_zoo.load_url(model_urls['resnet152']) 208 | pretrained_dict.pop('fc.weight') 209 | pretrained_dict.pop('fc.bias') 210 | model_dict.update(pretrained_dict) 211 | model.load_state_dict(model_dict) 212 | 213 | return model 214 | 215 | 216 | def resnet(args, **kwargs): # Only the ResNet34 is supported. 217 | print("==> creating model '{}' ".format(args.arch)) 218 | if args.arch == 'resnet50': 219 | return resnet50(args) 220 | elif args.arch == 'resnet101': 221 | return resnet101(args) 222 | elif args.arch == 'resnet152': 223 | return resnet152(args) 224 | else: 225 | raise ValueError('Unrecognized model architecture', args.arch) 226 | -------------------------------------------------------------------------------- /opts.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | def opts(): 4 | parser = argparse.ArgumentParser(description='SRDC', formatter_class=argparse.ArgumentDefaultsHelpFormatter) 5 | # datasets 6 | parser.add_argument('--data_path_source', type=str, default='./data/datasets/Office31/', help='root of source training set') 7 | parser.add_argument('--data_path_target', type=str, default='./data/datasets/Office31/', help='root of target training set') 8 | parser.add_argument('--data_path_target_t', type=str, default='./data/datasets/Office31/', help='root of target test set') 9 | parser.add_argument('--src', type=str, default='amazon', help='source training set') 10 | parser.add_argument('--tar', type=str, default='webcam_half', help='target training set') 11 | parser.add_argument('--tar_t', type=str, default='webcam_half2', help='target test set') 12 | parser.add_argument('--num_classes', type=int, default=31, help='class number') 13 | # source sample selection 14 | parser.add_argument('--src_soft_select', action='store_true', help='whether to softly select source instances') 15 | parser.add_argument('--src_hard_select', action='store_true', help='whether to hardly select source instances') 16 | parser.add_argument('--src_mix_weight', action='store_true', help='whether to mix 1 and soft weight') 17 | parser.add_argument('--tao_param', type=float, default=0.5, help='threshold parameter of cosine similarity') 18 | # general optimization options 19 | parser.add_argument('--epochs', type=int, default=200, help='number of epochs to train') 20 | parser.add_argument('--batch_size', type=int, default=64, help='batch size') 21 | parser.add_argument('--workers', type=int, default=8, metavar='N', help='number of data loading workers (default: 8)') 22 | parser.add_argument('--no_da', action='store_true', help='whether to not use data augmentation') 23 | parser.add_argument('--lr', type=float, default=1e-2, help='learning rate') 24 | parser.add_argument('--lr_plan', type=str, default='dao', help='learning rate decay plan of step or dao') 25 | parser.add_argument('--schedule', type=int, nargs='+', default=[80, 120], help='decrease learning rate at these epochs for step decay') 26 | parser.add_argument('--momentum', type=float, default=0.9, help='momentum') 27 | parser.add_argument('--weight_decay', type=float, default=1e-4, help='weight decay (L2 penalty)') 28 | parser.add_argument('--nesterov', action='store_true', help='whether to use nesterov SGD') 29 | parser.add_argument('--eps', type=float, default=1e-6, help='a small value to prevent underflow') 30 | # specific optimization options 31 | parser.add_argument('--ao', action='store_true', help='whether to use alternative optimization') 32 | parser.add_argument('--cluster_method', type=str, default='kmeans', help='clustering method of kmeans or spherical_kmeans or kernel_kmeans to choose') 33 | parser.add_argument('--cluster_iter', type=int, default=5, help='number of iterations of K-means') 34 | parser.add_argument('--cluster_kernel', type=str, default='rbf', help='kernel to choose when using kernel K-means') 35 | parser.add_argument('--gamma', type=float, default=None, help='bandwidth for rbf or polynomial kernel when using kernel K-means') 36 | parser.add_argument('--sample_weight', action='store_true', help='whether to adapt sample weight when using kernel K-means') 37 | parser.add_argument('--initial_cluster', type=int, default=1, help='target or source class centroids for initialization of K-means') 38 | parser.add_argument('--init_cen_on_st', action='store_true', help='whether to initialize learnable cluster centers on both source and target instances') 39 | parser.add_argument('--src_cen_first', action='store_true', help='whether to use source class centroids as initial target cluster centers at the first epoch') 40 | parser.add_argument('--src_cls', action='store_true', help='whether to classify source instances when clustering target instances') 41 | parser.add_argument('--src_fit', action='store_true', help='whether to use convex combination of true label vector and predicted label vector as training guide') 42 | parser.add_argument('--src_pretr_first', action='store_true', help='whether to perform clustering over features extracted by source pre-trained model at the first epoch') 43 | parser.add_argument('--learn_embed', action='store_true', help='whether to apply embedding clustering') 44 | parser.add_argument('--no_second_embed', action='store_true', help='whether to not apply embedding clustering on output features of the first FC layer') 45 | parser.add_argument('--alpha', type=float, default=1.0, help='degrees of freedom of Student\'s t-distribution') 46 | parser.add_argument('--beta', type=float, default=1.0, help='weight of auxiliary target distribution or assigned cluster labels') 47 | parser.add_argument('--embed_softmax', action='store_true', help='whether to use softmax to normalize soft cluster assignments for embedding clustering') 48 | parser.add_argument('--div', type=str, default='kl', help='measure of prediction divergence between one target instance and its perturbed counterpart') 49 | parser.add_argument('--gray_tar_agree', action='store_true', help='whether to enforce the consistency between RGB and gray images on the target domain') 50 | parser.add_argument('--aug_tar_agree', action='store_true', help='whether to enforce the consistency between RGB and augmented images on the target domain') 51 | parser.add_argument('--sigma', type=float, default=0.1, help='standard deviation of Gaussian for data augmentation operation of blurring') 52 | # checkpoints 53 | parser.add_argument('--resume', type=str, default='', help='checkpoints path to resume') 54 | parser.add_argument('--log', type=str, default='./checkpoints/office31', help='log folder') 55 | parser.add_argument('--stop_epoch', type=int, default=200, metavar='N', help='stop epoch for early stop (default: 200)') 56 | # architecture 57 | parser.add_argument('--arch', type=str, default='resnet50', help='model name') 58 | parser.add_argument('--num_neurons', type=int, default=128, help='number of neurons of fc1') 59 | parser.add_argument('--pretrained', action='store_true', help='whether to use pretrained model') 60 | # i/o 61 | parser.add_argument('--print_freq', type=int, default=10, metavar='N', help='print frequency (default: 10)') 62 | 63 | args = parser.parse_args() 64 | args.pretrained = True 65 | if args.tar.find('amazon') == -1: 66 | args.init_cen_on_st = True 67 | elif args.src.find('webcam') != -1: 68 | args.beta = 0.5 69 | args.src_cls = True 70 | args.src_cen_first = True 71 | args.learn_embed = True 72 | args.embed_softmax = True 73 | args.log = args.log + '_adapt_' + args.src + '2' + args.tar + '_bs' + str(args.batch_size) + '_' + args.arch + '_lr' + str(args.lr) + '_' + args.cluster_method 74 | 75 | return args 76 | -------------------------------------------------------------------------------- /run_office31.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | python main.py --data_path_source ./data/datasets/Office31/ --src amazon --data_path_target ./data/datasets/Office31/ --tar webcam_half --data_path_target_t ./data/datasets/Office31/ --tar_t webcam_half2 # 4 | 5 | 6 | python main.py --data_path_source ./data/datasets/Office31/ --src amazon --data_path_target ./data/datasets/Office31/ --tar dslr_half --data_path_target_t ./data/datasets/Office31/ --tar_t dslr_half2 # 7 | 8 | 9 | python main.py --data_path_source ./data/datasets/Office31/ --src dslr --data_path_target ./data/datasets/Office31/ --tar amazon_half --data_path_target_t ./data/datasets/Office31/ --tar_t amazon_half2 # 10 | 11 | 12 | python main.py --data_path_source ./data/datasets/Office31/ --src webcam --data_path_target ./data/datasets/Office31/ --tar amazon_half --data_path_target_t ./data/datasets/Office31/ --tar_t amazon_half2 # 13 | 14 | 15 | -------------------------------------------------------------------------------- /trainer.py: -------------------------------------------------------------------------------- 1 | import time 2 | import torch 3 | import os 4 | import math 5 | import numpy as np 6 | import torch.nn.functional as F 7 | from torch.autograd import Variable 8 | from utils.kernel_kmeans import KernelKMeans 9 | import gc 10 | import ipdb 11 | 12 | def train(train_loader_source, train_loader_source_batch, train_loader_target, train_loader_target_batch, model, learn_cen, learn_cen_2, criterion_cons, optimizer, itern, epoch, new_epoch_flag, src_cs, args): 13 | batch_time = AverageMeter() 14 | data_time = AverageMeter() 15 | top1_source = AverageMeter() 16 | losses = AverageMeter() 17 | 18 | # switch to train mode 19 | model.train() 20 | 21 | lam = 2 / (1 + math.exp(-1 * 10 * epoch / args.epochs)) - 1 # penalty parameter 22 | #lam = 1.0 23 | if args.src_cls: 24 | weight = lam 25 | else: 26 | weight = 1.0 27 | adjust_learning_rate(optimizer, epoch, args) # adjust learning rate 28 | 29 | end = time.time() 30 | # prepare target data 31 | try: 32 | if args.aug_tar_agree and (not args.gray_tar_agree): 33 | (input_target, input_target_dup, target_target, _) = train_loader_target_batch.__next__()[1] 34 | elif args.gray_tar_agree and (not args.aug_tar_agree): 35 | (input_target, input_target_gray, target_target, _) = train_loader_target_batch.__next__()[1] 36 | elif args.aug_tar_agree and args.gray_tar_agree: 37 | (input_target, input_target_dup, input_target_gray, target_target, _) = train_loader_target_batch.__next__()[1] 38 | else: 39 | (input_target, target_target, _) = train_loader_target_batch.__next__()[1] 40 | except StopIteration: 41 | train_loader_target_batch = enumerate(train_loader_target) 42 | if args.aug_tar_agree and (not args.gray_tar_agree): 43 | (input_target, input_target_dup, target_target, _) = train_loader_target_batch.__next__()[1] 44 | elif args.gray_tar_agree and (not args.aug_tar_agree): 45 | (input_target, input_target_gray, target_target, _) = train_loader_target_batch.__next__()[1] 46 | elif args.aug_tar_agree and args.gray_tar_agree: 47 | (input_target, input_target_dup, input_target_gray, target_target, _) = train_loader_target_batch.__next__()[1] 48 | else: 49 | (input_target, target_target, _) = train_loader_target_batch.__next__()[1] 50 | target_target = target_target.cuda(async=True) 51 | input_target_var = Variable(input_target) 52 | target_target_var = Variable(target_target) 53 | if args.aug_tar_agree: 54 | input_target_dup_var = Variable(input_target_dup) 55 | if args.gray_tar_agree: 56 | input_target_gray_var = Variable(input_target_gray) 57 | 58 | # model forward on target 59 | f_t, f_t_2, ca_t = model(input_target_var) 60 | if args.aug_tar_agree: 61 | _, _, ca_t_dup = model(input_target_dup_var) 62 | if args.gray_tar_agree: 63 | _, _, ca_t_gray = model(input_target_gray_var) 64 | 65 | loss = 0 66 | if args.aug_tar_agree and (not args.gray_tar_agree): 67 | loss += weight * criterion_cons(ca_t, ca_t_dup) 68 | elif args.gray_tar_agree and (not args.aug_tar_agree): 69 | loss += weight * criterion_cons(ca_t, ca_t_gray) 70 | elif args.aug_tar_agree and args.gray_tar_agree: 71 | loss += weight * (criterion_cons(ca_t, ca_t_dup) + criterion_cons(ca_t, ca_t_gray)) 72 | 73 | loss += weight * TarDisClusterLoss(args, epoch, ca_t, target_target, em=(args.cluster_method == 'em')) 74 | 75 | if args.learn_embed: 76 | prob_pred = (1 + (f_t.unsqueeze(1) - learn_cen.unsqueeze(0)).pow(2).sum(2) / args.alpha).pow(- (args.alpha + 1) / 2) 77 | loss += weight * TarDisClusterLoss(args, epoch, prob_pred, target_target, softmax=args.embed_softmax) 78 | if not args.no_second_embed: 79 | prob_pred_2 = (1 + (f_t_2.unsqueeze(1) - learn_cen_2.unsqueeze(0)).pow(2).sum(2) / args.alpha).pow(- (args.alpha + 1) / 2) 80 | loss += weight * TarDisClusterLoss(args, epoch, prob_pred_2, target_target, softmax=args.embed_softmax) 81 | 82 | if args.src_cls: 83 | # prepare source data 84 | try: 85 | (input_source, target_source, index) = train_loader_source_batch.__next__()[1] 86 | except StopIteration: 87 | train_loader_source_batch = enumerate(train_loader_source) 88 | (input_source, target_source, index) = train_loader_source_batch.__next__()[1] 89 | target_source = target_source.cuda(async=True) 90 | input_source_var = Variable(input_source) 91 | target_source_var = Variable(target_source) 92 | 93 | # model forward on source 94 | f_s, f_s_2, ca_s = model(input_source_var) 95 | prec1_s = accuracy(ca_s.data, target_source, topk=(1,))[0] 96 | top1_source.update(prec1_s.item(), input_source.size(0)) 97 | 98 | loss += SrcClassifyLoss(args, ca_s, target_source, index, src_cs, lam, fit=args.src_fit) 99 | 100 | if args.learn_embed: 101 | prob_pred = (1 + (f_s.unsqueeze(1) - learn_cen.unsqueeze(0)).pow(2).sum(2) / args.alpha).pow(- (args.alpha + 1) / 2) 102 | loss += weight * SrcClassifyLoss(args, prob_pred, target_source, index, src_cs, lam, softmax=args.embed_softmax, fit=args.src_fit) 103 | if not args.no_second_embed: 104 | prob_pred_2 = (1 + (f_s_2.unsqueeze(1) - learn_cen_2.unsqueeze(0)).pow(2).sum(2) / args.alpha).pow(- (args.alpha + 1) / 2) 105 | loss += weight * SrcClassifyLoss(args, prob_pred_2, target_source, index, src_cs, lam, softmax=args.embed_softmax, fit=args.src_fit) 106 | 107 | losses.update(loss.data.item(), input_target.size(0)) 108 | 109 | # loss backward and network update 110 | model.zero_grad() 111 | loss.backward() 112 | optimizer.step() 113 | 114 | batch_time.update(time.time() - end) 115 | if itern % args.print_freq == 0: 116 | print('Train - epoch [{0}/{1}]\t' 117 | 'BT {batch_time.val:.3f} ({batch_time.avg:.3f})\t' 118 | 'DT {data_time.val:.3f} ({data_time.avg:.3f})\t' 119 | 'S@1 {s_top1.val:.3f} ({s_top1.avg:.3f})\t' 120 | 'Loss {loss.val:.4f} ({loss.avg:.4f})'.format( 121 | epoch, args.epochs, batch_time=batch_time, 122 | data_time=data_time, s_top1=top1_source, loss=losses)) 123 | log = open(os.path.join(args.log, 'log.txt'), 'a') 124 | log.write("\nTrain - epoch: %d, top1_s acc: %3f, loss: %4f" % (epoch, top1_source.avg, losses.avg)) 125 | log.close() 126 | if new_epoch_flag: 127 | print('The penalty weight is %3f' % weight) 128 | 129 | return train_loader_source_batch, train_loader_target_batch 130 | 131 | 132 | def TarDisClusterLoss(args, epoch, output, target, softmax=True, em=False): 133 | if softmax: 134 | prob_p = F.softmax(output, dim=1) 135 | else: 136 | prob_p = output / output.sum(1, keepdim=True) 137 | if em: 138 | prob_q = prob_p 139 | else: 140 | prob_q1 = Variable(torch.cuda.FloatTensor(prob_p.size()).fill_(0)) 141 | prob_q1.scatter_(1, target.unsqueeze(1), torch.ones(prob_p.size(0), 1).cuda()) # assigned pseudo labels 142 | if (epoch == 0) or args.ao: 143 | prob_q = prob_q1 144 | else: 145 | prob_q2 = prob_p / prob_p.sum(0, keepdim=True).pow(0.5) 146 | prob_q2 /= prob_q2.sum(1, keepdim=True) 147 | prob_q = (1 - args.beta) * prob_q1 + args.beta * prob_q2 148 | 149 | if softmax: 150 | loss = - (prob_q * F.log_softmax(output, dim=1)).sum(1).mean() 151 | else: 152 | loss = - (prob_q * prob_p.log()).sum(1).mean() 153 | 154 | return loss 155 | 156 | 157 | def SrcClassifyLoss(args, output, target, index, src_cs, lam, softmax=True, fit=False): 158 | if softmax: 159 | prob_p = F.softmax(output, dim=1) 160 | else: 161 | prob_p = output / output.sum(1, keepdim=True) 162 | prob_q = Variable(torch.cuda.FloatTensor(prob_p.size()).fill_(0)) 163 | prob_q.scatter_(1, target.unsqueeze(1), torch.ones(prob_p.size(0), 1).cuda()) 164 | if fit: 165 | prob_q = (1 - prob_p) * prob_q + prob_p * prob_p 166 | if args.src_mix_weight: 167 | src_weights = lam * src_cs[index] + (1 - lam) * torch.ones(output.size(0)).cuda() 168 | else: 169 | src_weights = src_cs[index] 170 | 171 | if softmax: 172 | loss = - (src_weights * (prob_q * F.log_softmax(output, dim=1)).sum(1)).mean() 173 | else: 174 | loss = - (src_weights * (prob_q * prob_p.log()).sum(1)).mean() 175 | 176 | return loss 177 | 178 | 179 | def validate(val_loader, model, criterion, epoch, args): 180 | batch_time = AverageMeter() 181 | losses = AverageMeter() 182 | top1 = AverageMeter() 183 | top5 = AverageMeter() 184 | 185 | # switch to evaluate mode 186 | model.eval() 187 | 188 | total_vector = torch.FloatTensor(args.num_classes).fill_(0) 189 | correct_vector = torch.FloatTensor(args.num_classes).fill_(0) 190 | 191 | end = time.time() 192 | for i, (input, target, _) in enumerate(val_loader): 193 | target = target.cuda(async=True) 194 | input_var = Variable(input) 195 | target_var = Variable(target) 196 | 197 | # forward 198 | with torch.no_grad(): 199 | _, _, output = model(input_var) 200 | loss = criterion(output, target_var) 201 | 202 | # compute and record loss and accuracy 203 | prec1, prec5 = accuracy(output.data, target, topk=(1, 5)) 204 | total_vector, correct_vector = accuracy_for_each_class(output.data, target, total_vector, correct_vector) # compute class-wise accuracy 205 | losses.update(loss.data.item(), input.size(0)) 206 | top1.update(prec1.item(), input.size(0)) 207 | top5.update(prec5.item(), input.size(0)) 208 | 209 | # measure elapsed time 210 | batch_time.update(time.time() - end) 211 | end = time.time() 212 | 213 | if i % args.print_freq == 0: 214 | print('Test on T test set - [{0}][{1}/{2}]\t' 215 | 'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t' 216 | 'Loss {loss.val:.4f} ({loss.avg:.4f})\t' 217 | 'Prec@1 {top1.val:.3f} ({top1.avg:.3f})\t' 218 | 'Prec@5 {top5.val:.3f} ({top5.avg:.3f})'.format( 219 | epoch, i, len(val_loader), batch_time=batch_time, 220 | loss=losses, top1=top1, top5=top5)) 221 | 222 | acc_for_each_class = 100.0 * correct_vector / total_vector 223 | print(' * Test on T test set - Prec@1 {top1.avg:.3f}, Prec@5 {top5.avg:.3f}'.format(top1=top1, top5=top5)) 224 | log = open(os.path.join(args.log, 'log.txt'), 'a') 225 | log.write("\n Test on T test set - epoch: %d, loss: %4f, Top1 acc: %3f, Top5 acc: %3f" % (epoch, losses.avg, top1.avg, top5.avg)) 226 | if args.src.find('visda') != -1: 227 | log.write("\nAcc for each class: ") 228 | for i in range(args.num_classes): 229 | if i == 0: 230 | log.write("%dst: %3f" % (i+1, acc_for_each_class[i])) 231 | elif i == 1: 232 | log.write(", %dnd: %3f" % (i+1, acc_for_each_class[i])) 233 | elif i == 2: 234 | log.write(", %drd: %3f" % (i+1, acc_for_each_class[i])) 235 | else: 236 | log.write(", %dth: %3f" % (i+1, acc_for_each_class[i])) 237 | log.write("\n Avg. over all classes: %3f" % acc_for_each_class.mean()) 238 | log.close() 239 | return acc_for_each_class.mean() 240 | else: 241 | log.close() 242 | return top1.avg 243 | 244 | 245 | def validate_compute_cen(val_loader_target, val_loader_source, model, criterion, epoch, args, compute_cen=True): 246 | batch_time = AverageMeter() 247 | data_time = AverageMeter() 248 | losses = AverageMeter() 249 | top1 = AverageMeter() 250 | top5 = AverageMeter() 251 | 252 | # switch to evaluate mode 253 | model.eval() 254 | 255 | # compute source class centroids 256 | source_features = torch.cuda.FloatTensor(len(val_loader_source.dataset.imgs), 2048).fill_(0) 257 | source_features_2 = torch.cuda.FloatTensor(len(val_loader_source.dataset.imgs), args.num_neurons*4).fill_(0) 258 | source_targets = torch.cuda.LongTensor(len(val_loader_source.dataset.imgs)).fill_(0) 259 | c_src = torch.cuda.FloatTensor(args.num_classes, 2048).fill_(0) 260 | c_src_2 = torch.cuda.FloatTensor(args.num_classes, args.num_neurons*4).fill_(0) 261 | count_s = torch.cuda.FloatTensor(args.num_classes, 1).fill_(0) 262 | if compute_cen: 263 | for i, (input, target, index) in enumerate(val_loader_source): # the iterarion in the source dataset 264 | input_var = Variable(input) 265 | target = target.cuda(async=True) 266 | with torch.no_grad(): 267 | feature, feature_2, output = model(input_var) 268 | source_features[index.cuda(), :] = feature.data.clone() 269 | source_features_2[index.cuda(), :] = feature_2.data.clone() 270 | source_targets[index.cuda()] = target.clone() 271 | target_ = torch.cuda.FloatTensor(output.size()).fill_(0) 272 | target_.scatter_(1, target.unsqueeze(1), torch.ones(output.size(0), 1).cuda()) 273 | if args.cluster_method == 'spherical_kmeans': 274 | c_src += ((feature / feature.norm(p=2, dim=1, keepdim=True)).unsqueeze(1) * target_.unsqueeze(2)).sum(0) 275 | c_src_2 += ((feature_2 / feature_2.norm(p=2, dim=1, keepdim=True)).unsqueeze(1) * target_.unsqueeze(2)).sum(0) 276 | else: 277 | c_src += (feature.unsqueeze(1) * target_.unsqueeze(2)).sum(0) 278 | c_src_2 += (feature_2.unsqueeze(1) * target_.unsqueeze(2)).sum(0) 279 | count_s += target_.sum(0).unsqueeze(1) 280 | 281 | target_features = torch.cuda.FloatTensor(len(val_loader_target.dataset.imgs), 2048).fill_(0) 282 | target_features_2 = torch.cuda.FloatTensor(len(val_loader_target.dataset.imgs), args.num_neurons*4).fill_(0) 283 | target_targets = torch.cuda.LongTensor(len(val_loader_target.dataset.imgs)).fill_(0) 284 | pseudo_labels = torch.cuda.FloatTensor(len(val_loader_target.dataset.imgs), args.num_classes).fill_(0) 285 | c_tar = torch.cuda.FloatTensor(args.num_classes, 2048).fill_(0) 286 | c_tar_2 = torch.cuda.FloatTensor(args.num_classes, args.num_neurons*4).fill_(0) 287 | count_t = torch.cuda.FloatTensor(args.num_classes, 1).fill_(0) 288 | 289 | total_vector = torch.FloatTensor(args.num_classes).fill_(0) 290 | correct_vector = torch.FloatTensor(args.num_classes).fill_(0) 291 | 292 | end = time.time() 293 | for i, (input, target, index) in enumerate(val_loader_target): # the iterarion in the target dataset 294 | data_time.update(time.time() - end) 295 | target = target.cuda(async=True) 296 | input_var = Variable(input) 297 | target_var = Variable(target) 298 | 299 | with torch.no_grad(): 300 | feature, feature_2, output = model(input_var) 301 | 302 | target_features[index.cuda(), :] = feature.data.clone() # index:a tensor 303 | target_features_2[index.cuda(), :] = feature_2.data.clone() 304 | target_targets[index.cuda()] = target.clone() 305 | pseudo_labels[index.cuda(), :] = output.data.clone() 306 | 307 | if compute_cen: # compute target class centroids 308 | pred = output.data.max(1)[1] 309 | pred_ = torch.cuda.FloatTensor(output.size()).fill_(0) 310 | pred_.scatter_(1, pred.unsqueeze(1), torch.ones(output.size(0), 1).cuda()) 311 | if args.cluster_method == 'spherical_kmeans': 312 | c_tar += ((feature / feature.norm(p=2, dim=1, keepdim=True)).unsqueeze(1) * pred_.unsqueeze(2)).sum(0) 313 | c_tar_2 += ((feature_2 / feature_2.norm(p=2, dim=1, keepdim=True)).unsqueeze(1) * pred_.unsqueeze(2)).sum(0) 314 | else: 315 | c_tar += (feature.unsqueeze(1) * pred_.unsqueeze(2)).sum(0) 316 | c_tar_2 += (feature_2.unsqueeze(1) * pred_.unsqueeze(2)).sum(0) 317 | count_t += pred_.sum(0).unsqueeze(1) 318 | 319 | # compute and record loss and accuracy 320 | loss = criterion(output, target_var) 321 | prec1, prec5 = accuracy(output.data, target, topk=(1, 5)) 322 | total_vector, correct_vector = accuracy_for_each_class(output.data, target, total_vector, correct_vector) # compute class-wise accuracy 323 | losses.update(loss.data.item(), input.size(0)) 324 | top1.update(prec1.item(), input.size(0)) 325 | top5.update(prec5.item(), input.size(0)) 326 | 327 | batch_time.update(time.time() - end) 328 | end = time.time() 329 | if i % args.print_freq == 0: 330 | print('Test on T training set - [{0}][{1}/{2}]\t' 331 | 'T {batch_time.val:.3f} ({batch_time.avg:.3f})\t' 332 | 'D {data_time.val:.3f} ({data_time.avg:.3f})\t' 333 | 'T@1 {tc_top1.val:.3f} ({tc_top1.avg:.3f})\t' 334 | 'T@5 {tc_top5.val:.3f} ({tc_top5.avg:.3f})\t' 335 | 'L {tc_loss.val:.4f} ({tc_loss.avg:.4f})'.format( 336 | epoch, i, len(val_loader_target), batch_time=batch_time, 337 | data_time=data_time, tc_top1=top1, tc_top5=top5, tc_loss=losses)) 338 | 339 | # compute global class centroids 340 | c_srctar = torch.cuda.FloatTensor(args.num_classes, 2048).fill_(0) 341 | c_srctar_2 = torch.cuda.FloatTensor(args.num_classes, args.num_neurons*4).fill_(0) 342 | if (args.cluster_method == 'spherical_kmeans'): 343 | c_srctar = c_src + c_tar 344 | c_srctar_2 = c_src_2 + c_tar_2 345 | else: 346 | c_srctar = (c_src + c_tar) / (count_s + count_t) 347 | c_srctar_2 = (c_src_2 + c_tar_2) / (count_s + count_t) 348 | c_src /= count_s 349 | c_src_2 /= count_s 350 | c_tar /= (count_t + args.eps) 351 | c_tar_2 /= (count_t + args.eps) 352 | 353 | acc_for_each_class = 100.0 * correct_vector / total_vector 354 | 355 | print(' * Test on T training set - Prec@1 {tc_top1.avg:.3f}, Prec@5 {tc_top5.avg:.3f}'.format(tc_top1=top1, tc_top5=top5)) 356 | 357 | log = open(os.path.join(args.log, 'log.txt'), 'a') 358 | log.write("\nTest on T training set - epoch: %d, tc_loss: %4f, tc_Top1 acc: %3f, tc_Top5 acc: %3f" % (epoch, losses.avg, top1.avg, top5.avg)) 359 | 360 | if args.src.find('visda') != -1: 361 | log.write("\nAcc for each class: ") 362 | for i in range(args.num_classes): 363 | if i == 0: 364 | log.write("%dst: %3f" % (i+1, acc_for_each_class[i])) 365 | elif i == 1: 366 | log.write(", %dnd: %3f" % (i+1, acc_for_each_class[i])) 367 | elif i == 2: 368 | log.write(", %drd: %3f" % (i+1, acc_for_each_class[i])) 369 | else: 370 | log.write(", %dth: %3f" % (i+1, acc_for_each_class[i])) 371 | log.write("\n Avg. over all classes: %3f" % acc_for_each_class.mean()) 372 | log.close() 373 | 374 | return acc_for_each_class.mean(), c_src, c_src_2, c_tar, c_tar_2, c_srctar, c_srctar_2, source_features, source_features_2, source_targets, target_features, target_features_2, target_targets, pseudo_labels 375 | else: 376 | log.close() 377 | return top1.avg, c_src, c_src_2, c_tar, c_tar_2, c_srctar, c_srctar_2, source_features, source_features_2, source_targets, target_features, target_features_2, target_targets, pseudo_labels 378 | 379 | 380 | def source_select(source_features, source_targets, target_features, pseudo_labels, train_loader_source, epoch, cen, args): 381 | # compute source weights 382 | source_cos_sim_temp = source_features.unsqueeze(1) * cen.unsqueeze(0) 383 | source_cos_sim = 0.5 * (1 + source_cos_sim_temp.sum(2) / (source_features.norm(2, dim=1, keepdim=True) * cen.norm(2, dim=1, keepdim=True).t() + args.eps)) 384 | src_cs = torch.gather(source_cos_sim, 1, source_targets.unsqueeze(1)).squeeze(1) 385 | 386 | # or hard source sample selection 387 | if args.src_hard_select: 388 | num_select_src_each_class = torch.cuda.LongTensor(args.num_classes).fill_(0) 389 | tao = 1 / (1 + math.exp(- args.tao_param * (epoch + 1))) - 0.01 390 | delta = np.log(args.num_classes) / 10 391 | indexes = torch.arange(0, source_features.size(0)) 392 | 393 | target_kernel_sim = (1 + (target_features.unsqueeze(1) - cen.unsqueeze(0)).pow(2).sum(2) / args.alpha).pow(- (args.alpha + 1) / 2) 394 | if args.embed_softmax: 395 | target_kernel_sim = F.softmax(target_kernel_sim, dim=1) 396 | else: 397 | target_kernel_sim /= target_kernel_sim.sum(1, keepdim=True) 398 | _, pseudo_cat_dist = target_kernel_sim.max(dim=1) 399 | pseudo_labels_softmax = F.softmax(pseudo_labels, dim=1) 400 | _, pseudo_cat_std = pseudo_labels_softmax.max(dim=1) 401 | 402 | selected_indexes = [] 403 | for c in range(args.num_classes): 404 | _, idxes = src_cs[source_targets == c].sort(dim=0, descending=True) 405 | 406 | temp1 = target_kernel_sim[pseudo_cat_dist == c].mean(dim=0) 407 | temp2 = pseudo_labels_softmax[pseudo_cat_std == c].mean(dim=0) 408 | temp1 = - (temp1 * ((temp1 + args.eps).log())).sum(0) # entropy 1 409 | temp2 = - (temp2 * ((temp2 + args.eps).log())).sum(0) # entropy 2 410 | if (temp1 > delta) and (temp2 > delta): 411 | tao -= 0.1 412 | elif (temp1 <= delta) and (temp2 <= delta): 413 | pass 414 | else: 415 | tao -= 0.05 416 | while 1: 417 | num_select_src_each_class[c] = (src_cs[source_targets == c][idxes] >= tao).float().sum() 418 | if num_select_src_each_class[c] > 0: # at least 1 419 | selected_indexes.extend(list(np.array(indexes[source_targets == c][idxes][src_cs[source_targets == c][idxes] >= tao]))) 420 | break 421 | else: 422 | tao -= 0.05 423 | 424 | train_loader_source.dataset.samples = [] 425 | train_loader_source.dataset.tgts = [] 426 | for idx in selected_indexes: 427 | train_loader_source.dataset.samples.append(train_loader_source.dataset.imgs[idx]) 428 | train_loader_source.dataset.tgts.append(train_loader_source.dataset.imgs[idx][1]) 429 | print('%d source instances have been selected at %d epoch' % (len(selected_indexes), epoch)) 430 | print('Number of selected source instances each class: ', num_select_src_each_class) 431 | log = open(os.path.join(args.log, 'log.txt'), 'a') 432 | log.write('\n~~~%d source instances have been selected at %d epoch~~~' % (len(selected_indexes), epoch)) 433 | log.close() 434 | 435 | src_cs = torch.cuda.FloatTensor(len(train_loader_source.dataset.tgts)).fill_(1) 436 | 437 | del source_cos_sim_temp 438 | gc.collect() 439 | torch.cuda.empty_cache() 440 | torch.cuda.empty_cache() 441 | 442 | return src_cs 443 | 444 | 445 | def kernel_k_means(target_features, target_targets, pseudo_labels, train_loader_target, epoch, model, args, best_prec, change_target=True): 446 | # define kernel k-means clustering 447 | kkm = KernelKMeans(n_clusters=args.num_classes, max_iter=args.cluster_iter, random_state=0, kernel=args.cluster_kernel, gamma=args.gamma, verbose=1) 448 | kkm.fit(np.array(target_features.cpu()), initial_label=np.array(pseudo_labels.max(1)[1].long().cpu()), true_label=np.array(target_targets.cpu()), args=args, epoch=epoch) 449 | 450 | idx_sim = torch.from_numpy(kkm.labels_) 451 | c_tar = torch.cuda.FloatTensor(args.num_classes, target_features.size(1)).fill_(0) 452 | count = torch.cuda.FloatTensor(args.num_classes, 1).fill_(0) 453 | for i in range(target_targets.size(0)): 454 | c_tar[idx_sim[i]] += target_features[i] 455 | count[idx_sim[i]] += 1 456 | if change_target: 457 | train_loader_target.dataset.tgts[i] = idx_sim[i].item() 458 | c_tar /= (count + args.eps) 459 | 460 | prec1 = kkm.prec1_ 461 | is_best = prec1 > best_prec 462 | if is_best: 463 | best_prec = prec1 464 | #torch.save(c_tar, os.path.join(args.log, 'c_t_kernel_kmeans_cluster_best.pth.tar')) 465 | #torch.save(model.state_dict(), os.path.join(args.log, 'checkpoint_kernel_kmeans_cluster_best.pth.tar')) 466 | 467 | del target_features 468 | del target_targets 469 | del pseudo_labels 470 | gc.collect() 471 | torch.cuda.empty_cache() 472 | torch.cuda.empty_cache() 473 | 474 | return best_prec, c_tar 475 | 476 | 477 | def k_means(target_features, target_targets, train_loader_target, epoch, model, c, args, best_prec, change_target=True): 478 | batch_time = AverageMeter() 479 | 480 | c_tar = c.data.clone() 481 | end = time.time() 482 | for itr in range(args.cluster_iter): 483 | torch.cuda.empty_cache() 484 | dist_xt_ct_temp = target_features.unsqueeze(1) - c_tar.unsqueeze(0) 485 | dist_xt_ct = dist_xt_ct_temp.pow(2).sum(2) 486 | _, idx_sim = (-1 * dist_xt_ct).data.topk(1, 1, True, True) 487 | prec1 = accuracy(-1 * dist_xt_ct.data, target_targets, topk=(1,))[0].item() 488 | is_best = prec1 > best_prec 489 | if is_best: 490 | best_prec = prec1 491 | #torch.save(c_tar, os.path.join(args.log, 'c_t_kmeans_cluster_best.pth.tar')) 492 | #torch.save(model.state_dict(), os.path.join(args.log, 'checkpoint_kmeans_cluster_best.pth.tar')) 493 | 494 | # measure elapsed time 495 | batch_time.update(time.time() - end) 496 | end = time.time() 497 | print('Epoch %d, K-means clustering %d, Average clustering time %.3f, Prec@1 %.3f' % (epoch, itr, batch_time.avg, prec1)) 498 | log = open(os.path.join(args.log, 'log.txt'), 'a') 499 | log.write('\nEpoch %d, K-means clustering %d, Average clustering time %.3f, Prec@1 %.3f' % (epoch, itr, batch_time.avg, prec1)) 500 | if args.src.find('visda') != -1: 501 | total_vector_dist = torch.FloatTensor(args.num_classes).fill_(0) 502 | correct_vector_dist = torch.FloatTensor(args.num_classes).fill_(0) 503 | total_vector_dist, correct_vector_dist = accuracy_for_each_class(-1 * dist_xt_ct.data, target_targets, total_vector_dist, correct_vector_dist) 504 | acc_for_each_class_dist = 100.0 * correct_vector_dist / (total_vector_dist + args.eps) 505 | log.write("\nAcc_dist for each class: ") 506 | for i in range(args.num_classes): 507 | if i == 0: 508 | log.write("%dst: %3f" % (i+1, acc_for_each_class_dist[i])) 509 | elif i == 1: 510 | log.write(", %dnd: %3f" % (i+1, acc_for_each_class_dist[i])) 511 | elif i == 2: 512 | log.write(", %drd: %3f" % (i+1, acc_for_each_class_dist[i])) 513 | else: 514 | log.write(", %dth: %3f" % (i+1, acc_for_each_class_dist[i])) 515 | log.write("\n Avg_dist. over all classes: %3f" % acc_for_each_class_dist.mean()) 516 | log.close() 517 | 518 | c_tar_temp = torch.cuda.FloatTensor(args.num_classes, c_tar.size(1)).fill_(0) 519 | count = torch.cuda.FloatTensor(args.num_classes, 1).fill_(0) 520 | for k in range(args.num_classes): 521 | c_tar_temp[k] += target_features[idx_sim.squeeze(1) == k].sum(0) 522 | count[k] += (idx_sim.squeeze(1) == k).float().sum() 523 | c_tar_temp /= (count + args.eps) 524 | 525 | if (itr == (args.cluster_iter - 1)) and change_target: 526 | for i in range(target_targets.size(0)): 527 | train_loader_target.dataset.tgts[i] = int(idx_sim[i]) 528 | 529 | c_tar = c_tar_temp.clone() 530 | 531 | del dist_xt_ct_temp 532 | gc.collect() 533 | torch.cuda.empty_cache() 534 | 535 | del target_features 536 | del target_targets 537 | gc.collect() 538 | torch.cuda.empty_cache() 539 | torch.cuda.empty_cache() 540 | 541 | return best_prec, c_tar 542 | 543 | 544 | def spherical_k_means(target_features, target_targets, train_loader_target, epoch, model, c, args, best_prec, change_target=True): 545 | batch_time = AverageMeter() 546 | 547 | c_tar = c.data.clone() 548 | end = time.time() 549 | for itr in range(args.cluster_iter): 550 | torch.cuda.empty_cache() 551 | dist_xt_ct_temp = target_features.unsqueeze(1) * c_tar.unsqueeze(0) 552 | dist_xt_ct = 0.5 * (1 - dist_xt_ct_temp.sum(2) / (target_features.norm(2, dim=1, keepdim=True) * c_tar.norm(2, dim=1, keepdim=True).t() + args.eps)) 553 | _, idx_sim = (-1 * dist_xt_ct).data.topk(1, 1, True, True) 554 | prec1 = accuracy(-1 * dist_xt_ct.data, target_targets, topk=(1,))[0].item() 555 | is_best = prec1 > best_prec 556 | if is_best: 557 | best_prec = prec1 558 | #torch.save(c_tar, os.path.join(args.log, 'c_t_spherical_kmeans_cluster_best.pth.tar')) 559 | #torch.save(model.state_dict(), os.path.join(args.log, 'checkpoint_spherical_kmeans_cluster_best.pth.tar')) 560 | 561 | # measure elapsed time 562 | batch_time.update(time.time() - end) 563 | end = time.time() 564 | print('Epoch %d, Spherical K-means clustering %d, Average clustering time %.3f, Prec@1 %.3f' % (epoch, itr, batch_time.avg, prec1)) 565 | log = open(os.path.join(args.log, 'log.txt'), 'a') 566 | log.write('\nEpoch %d, Spherical K-means clustering %d, Average clustering time %.3f, Prec@1 %.3f' % (epoch, itr, batch_time.avg, prec1)) 567 | if args.src.find('visda') != -1: 568 | total_vector_dist = torch.FloatTensor(args.num_classes).fill_(0) 569 | correct_vector_dist = torch.FloatTensor(args.num_classes).fill_(0) 570 | total_vector_dist, correct_vector_dist = accuracy_for_each_class(-1 * dist_xt_ct.data, target_targets, total_vector_dist, correct_vector_dist) 571 | acc_for_each_class_dist = 100.0 * correct_vector_dist / (total_vector_dist + args.eps) 572 | log.write("\nAcc_dist for each class: ") 573 | for i in range(args.num_classes): 574 | if i == 0: 575 | log.write("%dst: %3f" % (i+1, acc_for_each_class_dist[i])) 576 | elif i == 1: 577 | log.write(", %dnd: %3f" % (i+1, acc_for_each_class_dist[i])) 578 | elif i == 2: 579 | log.write(", %drd: %3f" % (i+1, acc_for_each_class_dist[i])) 580 | else: 581 | log.write(", %dth: %3f" % (i+1, acc_for_each_class_dist[i])) 582 | log.write("\n Avg_dist. over all classes: %3f" % acc_for_each_class_dist.mean()) 583 | log.close() 584 | c_tar_temp = torch.cuda.FloatTensor(args.num_classes, c_tar.size(1)).fill_(0) 585 | for k in range(args.num_classes): 586 | c_tar_temp[k] += (target_features[idx_sim.squeeze(1) == k] / (target_features[idx_sim.squeeze(1) == k].norm(2, dim=1, keepdim=True) + args.eps)).sum(0) 587 | 588 | if (itr == (args.cluster_iter - 1)) and change_target: 589 | for i in range(target_targets.size(0)): 590 | train_loader_target.dataset.tgts[i] = int(idx_sim[i]) 591 | 592 | c_tar = c_tar_temp.clone() 593 | 594 | del dist_xt_ct_temp 595 | gc.collect() 596 | torch.cuda.empty_cache() 597 | 598 | del target_features 599 | del target_targets 600 | gc.collect() 601 | torch.cuda.empty_cache() 602 | torch.cuda.empty_cache() 603 | 604 | return best_prec, c_tar 605 | 606 | 607 | class AverageMeter(object): 608 | """Computes and stores the average and current value""" 609 | def __init__(self): 610 | self.reset() 611 | 612 | def reset(self): 613 | self.val = 0 614 | self.avg = 0 615 | self.sum = 0 616 | self.count = 0 617 | 618 | def update(self, val, n=1): 619 | self.val = val 620 | self.sum += val * n 621 | self.count += n 622 | self.avg = self.sum / self.count 623 | 624 | 625 | def adjust_learning_rate(optimizer, epoch, args): 626 | """Adjust the learning rate according the epoch""" 627 | if args.lr_plan == 'step': 628 | exp = epoch > args.schedule[1] and 2 or epoch > args.schedule[0] and 1 or 0 629 | lr = args.lr * (0.1 ** exp) 630 | elif args.lr_plan == 'dao': 631 | lr = args.lr / math.pow((1 + 10 * epoch / args.epochs), 0.75) 632 | for param_group in optimizer.param_groups: 633 | if param_group['name'] == 'conv': 634 | param_group['lr'] = lr * 0.1 635 | elif param_group['name'] == 'ca_cl': 636 | param_group['lr'] = lr 637 | else: 638 | raise ValueError('The required parameter group does not exist.') 639 | 640 | 641 | def accuracy(output, target, topk=(1,)): 642 | """Computes the precision@k for the specified values of k""" 643 | maxk = max(topk) 644 | batch_size = target.size(0) 645 | _, pred = output.topk(maxk, 1, True, True) 646 | pred = pred.t() 647 | correct = pred.eq(target.view(1, -1).expand_as(pred)) 648 | 649 | res = [] 650 | for k in topk: 651 | correct_k = correct[:k].view(-1).float().sum(0, keepdim=True) 652 | res.append(correct_k.mul_(100.0 / batch_size)) 653 | 654 | return res 655 | 656 | 657 | def accuracy_for_each_class(output, target, total_vector, correct_vector): 658 | """Computes the precision for each class""" 659 | batch_size = target.size(0) 660 | _, pred = output.topk(1, 1, True, True) 661 | pred = pred.t() 662 | correct = pred.eq(target.view(1, -1)).float().cpu().squeeze() 663 | for i in range(batch_size): 664 | total_vector[target[i]] += 1 665 | correct_vector[torch.LongTensor([target[i]])] += correct[i] 666 | 667 | return total_vector, correct_vector 668 | 669 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/utils/__init__.py -------------------------------------------------------------------------------- /utils/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/utils/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /utils/__pycache__/consensus_loss.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/utils/__pycache__/consensus_loss.cpython-36.pyc -------------------------------------------------------------------------------- /utils/__pycache__/folder.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/utils/__pycache__/folder.cpython-36.pyc -------------------------------------------------------------------------------- /utils/__pycache__/kernel_kmeans.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gorilla-Lab-SCUT/SRDC-CVPR2020/519332e29864f10aaf4ff7512339148eac57d528/utils/__pycache__/kernel_kmeans.cpython-36.pyc -------------------------------------------------------------------------------- /utils/consensus_loss.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | 5 | 6 | class ConsensusLoss(nn.Module): 7 | def __init__(self, nClass, div): 8 | super(ConsensusLoss, self).__init__() 9 | self.nClass = nClass 10 | self.div = div 11 | 12 | def forward(self, x, y): 13 | if self.div == 'kl': 14 | x = F.softmax(x, dim=1) 15 | y = F.log_softmax(y, dim=1) 16 | kl_div = F.kl_div(y, x, reduction='batchmean') #x 17 | 18 | return kl_div 19 | elif self.div == 'kl_d': 20 | x = F.softmax(x, dim=1) 21 | y = F.log_softmax(y, dim=1) 22 | x_d = x.detach() 23 | kl_div = F.kl_div(y, x_d, reduction='batchmean') #detached x 24 | 25 | return kl_div 26 | elif self.div == 'l1': 27 | x = F.softmax(x, dim=1) 28 | y = F.softmax(y, dim=1) 29 | l1_div = (x - y).abs().mean(1).mean() #l1 norm 30 | 31 | return l1_div 32 | elif self.div == 'l2': 33 | x = F.softmax(x, dim=1) 34 | y = F.softmax(y, dim=1) 35 | l2_div = (x - y).pow(2).sum(1).sqrt().mean() #l2 norm 36 | 37 | return l2_div 38 | elif self.div == 'neg_cos': 39 | x = F.softmax(x, dim=1) 40 | y = F.softmax(y, dim=1) 41 | 42 | neg_cos_div = 0.5 * (1 - ((x * y).sum(1) / x.norm(2, dim=1) / y.norm(2, dim=1))).mean() 43 | 44 | return neg_cos_div 45 | 46 | 47 | -------------------------------------------------------------------------------- /utils/folder.py: -------------------------------------------------------------------------------- 1 | """ 2 | File modified from: https://github.com/pytorch/vision/blob/master/torchvision/datasets/folder.py 3 | """ 4 | 5 | import torch.utils.data as data 6 | 7 | from PIL import Image 8 | 9 | import os 10 | import os.path 11 | import sys 12 | 13 | 14 | def has_file_allowed_extension(filename, extensions): 15 | """Checks if a file is an allowed extension. 16 | Args: 17 | filename (string): path to a file 18 | extensions (iterable of strings): extensions to consider (lowercase) 19 | Returns: 20 | bool: True if the filename ends with one of given extensions 21 | """ 22 | filename_lower = filename.lower() 23 | return any(filename_lower.endswith(ext) for ext in extensions) 24 | 25 | 26 | def is_image_file(filename): 27 | """Checks if a file is an allowed image extension. 28 | Args: 29 | filename (string): path to a file 30 | Returns: 31 | bool: True if the filename ends with a known image extension 32 | """ 33 | return has_file_allowed_extension(filename, IMG_EXTENSIONS) 34 | 35 | 36 | def make_dataset(dir, class_to_idx, extensions): 37 | images = [] 38 | dir = os.path.expanduser(dir) 39 | for target in sorted(class_to_idx.keys()): 40 | d = os.path.join(dir, target) 41 | if not os.path.isdir(d): 42 | continue 43 | 44 | for root, _, fnames in sorted(os.walk(d)): 45 | for fname in sorted(fnames): 46 | if has_file_allowed_extension(fname, extensions): 47 | path = os.path.join(root, fname) 48 | item = (path, class_to_idx[target]) 49 | images.append(item) 50 | 51 | return images 52 | 53 | 54 | class DatasetFolder(data.Dataset): 55 | """A generic data loader where the samples are arranged in this way: :: 56 | root/class_x/xxx.ext 57 | root/class_x/xxy.ext 58 | root/class_x/xxz.ext 59 | root/class_y/123.ext 60 | root/class_y/nsdf3.ext 61 | root/class_y/asd932_.ext 62 | Args: 63 | root (string): Root directory path. 64 | loader (callable): A function to load a sample given its path. 65 | extensions (list[string]): A list of allowed extensions. 66 | transform (callable, optional): A function/transform that takes in 67 | a sample and returns a transformed version. 68 | E.g, ``transforms.RandomCrop`` for images. 69 | target_transform (callable, optional): A function/transform that takes 70 | in the target and transforms it. 71 | Attributes: 72 | classes (list): List of the class names. 73 | class_to_idx (dict): Dict with items (class_name, class_index). 74 | samples (list): List of (sample path, class_index) tuples 75 | targets (list): The class_index value for each image in the dataset 76 | """ 77 | 78 | def __init__(self, root, loader, extensions, transform=None, transform_aug=None, transform_gray=None): 79 | classes, class_to_idx = self._find_classes(root) 80 | samples = make_dataset(root, class_to_idx, extensions) 81 | if len(samples) == 0: 82 | raise(RuntimeError("Found 0 files in subfolders of: " + root + "\n" 83 | "Supported extensions are: " + ",".join(extensions))) 84 | 85 | self.root = root 86 | self.loader = loader 87 | self.extensions = extensions 88 | 89 | self.classes = classes 90 | self.class_to_idx = class_to_idx 91 | self.samples = samples 92 | self.tgts = [s[1] for s in samples] 93 | 94 | self.transform = transform 95 | self.transform_aug = transform_aug 96 | self.transform_gray = transform_gray 97 | 98 | def _find_classes(self, dir): 99 | """ 100 | Finds the class folders in a dataset. 101 | Args: 102 | dir (string): Root directory path. 103 | Returns: 104 | tuple: (classes, class_to_idx) where classes are relative to (dir), and class_to_idx is a dictionary. 105 | Ensures: 106 | No class is a subdirectory of another. 107 | """ 108 | if sys.version_info >= (3, 5): 109 | # Faster and available in Python 3.5 and above 110 | classes = [d.name for d in os.scandir(dir) if d.is_dir()] 111 | else: 112 | classes = [d for d in os.listdir(dir) if os.path.isdir(os.path.join(dir, d))] 113 | classes.sort() 114 | class_to_idx = {classes[i]: i for i in range(len(classes))} 115 | return classes, class_to_idx 116 | 117 | def __getitem__(self, index): 118 | """ 119 | Args: 120 | index (int): Index 121 | Returns: 122 | tuple: (sample, target) where target is class_index of the target class. 123 | """ 124 | path, _ = self.samples[index] 125 | sample = self.loader(path) 126 | target = self.tgts[index] 127 | 128 | if self.transform_gray is not None: 129 | sample_gray = self.transform_gray(sample) 130 | 131 | if self.transform_aug is not None: 132 | sample_aug = self.transform_aug(sample) 133 | 134 | if self.transform is not None: 135 | sample = self.transform(sample) 136 | 137 | if (self.transform_gray is not None) and (self.transform_aug is not None): 138 | return sample, sample_aug, sample_gray, target, index 139 | elif (self.transform_aug is not None): 140 | return sample, sample_aug, target, index 141 | elif (self.transform_gray is not None): 142 | return sample, sample_gray, target, index 143 | else: 144 | return sample, target, index 145 | 146 | def __len__(self): 147 | return len(self.samples) 148 | 149 | def __repr__(self): 150 | fmt_str = 'Dataset ' + self.__class__.__name__ + '\n' 151 | fmt_str += ' Number of datapoints: {}\n'.format(self.__len__()) 152 | fmt_str += ' Root Location: {}\n'.format(self.root) 153 | tmp = ' Transforms (if any): ' 154 | fmt_str += '{0}{1}\n'.format(tmp, self.transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) 155 | tmp = ' Target Transforms (if any): ' 156 | fmt_str += '{0}{1}'.format(tmp, self.target_transform.__repr__().replace('\n', '\n' + ' ' * len(tmp))) 157 | return fmt_str 158 | 159 | 160 | IMG_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif'] 161 | 162 | 163 | def pil_loader(path): 164 | # open path as file to avoid ResourceWarning (https://github.com/python-pillow/Pillow/issues/835) 165 | with open(path, 'rb') as f: 166 | img = Image.open(f) 167 | return img.convert('RGB') 168 | 169 | 170 | def accimage_loader(path): 171 | import accimage 172 | try: 173 | return accimage.Image(path) 174 | except IOError: 175 | # Potentially a decoding problem, fall back to PIL.Image 176 | return pil_loader(path) 177 | 178 | 179 | def default_loader(path): 180 | from torchvision import get_image_backend 181 | if get_image_backend() == 'accimage': 182 | return accimage_loader(path) 183 | else: 184 | return pil_loader(path) 185 | 186 | 187 | class ImageFolder(DatasetFolder): 188 | """A generic data loader where the images are arranged in this way: :: 189 | root/dog/xxx.png 190 | root/dog/xxy.png 191 | root/dog/xxz.png 192 | root/cat/123.png 193 | root/cat/nsdf3.png 194 | root/cat/asd932_.png 195 | Args: 196 | root (string): Root directory path. 197 | transform (callable, optional): A function/transform that takes in an PIL image 198 | and returns a transformed version. E.g, ``transforms.RandomCrop`` 199 | target_transform (callable, optional): A function/transform that takes in the 200 | target and transforms it. 201 | loader (callable, optional): A function to load an image given its path. 202 | Attributes: 203 | classes (list): List of the class names. 204 | class_to_idx (dict): Dict with items (class_name, class_index). 205 | imgs (list): List of (image path, class_index) tuples 206 | """ 207 | def __init__(self, root, transform=None, transform_aug=None, transform_gray=None, loader=default_loader): 208 | super(ImageFolder, self).__init__(root, loader, IMG_EXTENSIONS, 209 | transform=transform, 210 | transform_aug=transform_aug, 211 | transform_gray=transform_gray) 212 | self.imgs = self.samples 213 | 214 | 215 | -------------------------------------------------------------------------------- /utils/kernel_kmeans.py: -------------------------------------------------------------------------------- 1 | """Kernel K-means""" 2 | 3 | # Author: Mathieu Blondel 4 | # License: BSD 3 clause 5 | 6 | import numpy as np 7 | 8 | from sklearn.base import BaseEstimator, ClusterMixin 9 | from sklearn.metrics.pairwise import pairwise_kernels 10 | from sklearn.utils import check_random_state 11 | 12 | import ipdb 13 | import os 14 | import time 15 | 16 | 17 | class KernelKMeans(BaseEstimator, ClusterMixin): 18 | """ 19 | Kernel K-means 20 | 21 | Reference 22 | --------- 23 | Kernel k-means, Spectral Clustering and Normalized Cuts. 24 | Inderjit S. Dhillon, Yuqiang Guan, Brian Kulis. 25 | KDD 2004. 26 | """ 27 | 28 | def __init__(self, n_clusters=3, max_iter=50, tol=1e-3, random_state=None, 29 | kernel="linear", gamma=None, degree=3, coef0=1, 30 | kernel_params=None, verbose=0): 31 | self.n_clusters = n_clusters 32 | self.max_iter = max_iter 33 | self.tol = tol 34 | self.random_state = random_state 35 | self.kernel = kernel 36 | self.gamma = gamma 37 | self.degree = degree 38 | self.coef0 = coef0 39 | self.kernel_params = kernel_params 40 | self.verbose = verbose 41 | 42 | @property 43 | def _pairwise(self): 44 | return self.kernel == "precomputed" 45 | 46 | def _get_kernel(self, X, Y=None): 47 | if callable(self.kernel): 48 | params = self.kernel_params or {} 49 | else: 50 | params = {"gamma": self.gamma, 51 | "degree": self.degree, 52 | "coef0": self.coef0} 53 | return pairwise_kernels(X, Y, metric=self.kernel, 54 | filter_params=True, **params) 55 | 56 | def fit(self, X, y=None, sample_weight=None, initial_label=None, true_label=None, args=None, epoch=None): 57 | n_samples = X.shape[0] 58 | 59 | K = self._get_kernel(X) 60 | 61 | if args.sample_weight: 62 | sample_weight = K.sum(axis=1) 63 | #K /= np.outer(sample_weight, sample_weight) 64 | sw = sample_weight if sample_weight is not None else np.ones(n_samples) 65 | self.sample_weight_ = sw 66 | 67 | rs = check_random_state(self.random_state) 68 | self.labels_ = initial_label if initial_label is not None else rs.randint(self.n_clusters, size=n_samples) 69 | 70 | dist = np.zeros((n_samples, self.n_clusters)) 71 | self.within_distances_ = np.zeros(self.n_clusters) 72 | 73 | end = time.time() 74 | for it in range(self.max_iter): 75 | dist.fill(0) 76 | self._compute_dist(K, dist, self.within_distances_, 77 | update_within=True) 78 | labels_old = self.labels_ 79 | self.labels_ = dist.argmin(axis=1) 80 | 81 | # Compute the accuracy of clustering 82 | if true_label is not None: 83 | prec1 = 100 * ((self.labels_ == true_label).sum()) / n_samples 84 | self.prec1_ = prec1 85 | cluster_time = time.time() - end 86 | end = time.time() 87 | print('Epoch %d - Kernel K-means clustering %d: Clustering time %.3f, Prec@1 %.3f' % (epoch, it, cluster_time, prec1)) 88 | log = open(os.path.join(args.log, 'log.txt'), 'a') 89 | log.write('\nEpoch %d - Kernel K-means clustering %d: Clustering time %.3f, Prec@1 %.3f' % (epoch, it, cluster_time, prec1)) 90 | log.close() 91 | 92 | # Compute the number of samples whose cluster did not change 93 | # since last iteration. 94 | n_same = np.sum((self.labels_ - labels_old) == 0) 95 | if 1 - float(n_same) / n_samples < self.tol: 96 | if self.verbose: 97 | print("Converged at iteration", it + 1) 98 | #self.labels_ = labels_old 99 | break 100 | 101 | self.X_fit_ = X 102 | 103 | return self 104 | 105 | def _compute_dist(self, K, dist, within_distances, update_within): 106 | """Compute a n_samples x n_clusters distance matrix using the 107 | kernel trick.""" 108 | sw = self.sample_weight_ 109 | 110 | for j in range(self.n_clusters): 111 | mask = self.labels_ == j 112 | 113 | if np.sum(mask) == 0: 114 | #raise ValueError("Empty cluster found, try smaller n_cluster.") 115 | continue 116 | 117 | denom = sw[mask].sum() 118 | denomsq = denom * denom 119 | 120 | if update_within: 121 | KK = K[mask][:, mask] # K[mask, mask] does not work. 122 | dist_j = np.sum(np.outer(sw[mask], sw[mask]) * KK / denomsq) 123 | within_distances[j] = dist_j 124 | dist[:, j] += dist_j 125 | else: 126 | dist[:, j] += within_distances[j] 127 | 128 | dist[:, j] -= 2 * np.sum(sw[mask] * K[:, mask], axis=1) / denom 129 | 130 | def predict(self, X): 131 | K = self._get_kernel(X, self.X_fit_) 132 | n_samples = X.shape[0] 133 | dist = np.zeros((n_samples, self.n_clusters)) 134 | self._compute_dist(K, dist, self.within_distances_, 135 | update_within=False) #why False??? 136 | return dist.argmin(axis=1) 137 | ''' 138 | if __name__ == '__main__': 139 | from sklearn.datasets import make_blobs 140 | X, y = make_blobs(n_samples=1000, centers=5, random_state=0) 141 | 142 | kkm = KernelKMeans(n_clusters=5, max_iter=100, random_state=0, verbose=1) 143 | #ipdb.set_trace() 144 | print(kkm.fit_predict(X)[10:20]) 145 | print(kkm.predict(X[10:20])) 146 | ''' 147 | 148 | 149 | --------------------------------------------------------------------------------