├── README.md ├── datasets └── dataset_synapse.py ├── lists └── lists_Synapse │ ├── all.lst │ ├── test_vol.txt │ └── train.txt └── networks └── ScaleFormer.py /README.md: -------------------------------------------------------------------------------- 1 | # ScaleFormer 2 | Code for IJCAI 2022 paper '[*ScaleFormer: Revisiting the Transformer-based Backbones from a Scale-wise Perspective for Medical Image Segmentation*](https://www.ijcai.org/proceedings/2022/0135.pdf)' 3 | 4 | ## 1.Dataset 5 | - **Synapse:** 6 | The dataset we used is provided by TransUnet's authors. Please go to [link](https://github.com/Beckschen/TransUNet) for details, or please send an Email to jienengchen01 AT gmail.com to request the preprocessed data. If you would like to use the preprocessed data, please use it for research purposes and do not redistribute it (following the TransUnet's License). 7 | 8 | - **Monuseg:** 9 | The dataset we used is provided by UCTransNet's authors. Please go to [link](https://github.com/McGregorWwww/UCTransNet) for details. 10 | - **ACDC:** 11 | We will upload the dataset later. 12 | 13 | ## 2.Enviorments 14 | - python 3.7 15 | - pytorch 1.9.0 16 | - torchvision 0.10.0 17 | test.py 18 | 19 | ## 3.Reference 20 | - [TransUnet](https://github.com/Beckschen/TransUNet) 21 | - [SwinUnet](https://github.com/HuCaoFighting/Swin-Unet) 22 | - [UcTransNet](https://github.com/McGregorWwww/UCTransNet) 23 | -------------------------------------------------------------------------------- /datasets/dataset_synapse.py: -------------------------------------------------------------------------------- 1 | import os 2 | import random 3 | import h5py 4 | import numpy as np 5 | import torch 6 | from scipy import ndimage 7 | from scipy.ndimage.interpolation import zoom 8 | from torch.utils.data import Dataset 9 | 10 | 11 | def random_rot_flip(image, label): 12 | k = np.random.randint(0, 4) 13 | image = np.rot90(image, k) 14 | label = np.rot90(label, k) 15 | axis = np.random.randint(0, 2) 16 | image = np.flip(image, axis=axis).copy() 17 | label = np.flip(label, axis=axis).copy() 18 | return image, label 19 | 20 | 21 | def random_rotate(image, label): 22 | angle = np.random.randint(-20, 20) 23 | image = ndimage.rotate(image, angle, order=0, reshape=False) 24 | label = ndimage.rotate(label, angle, order=0, reshape=False) 25 | return image, label 26 | 27 | 28 | class RandomGenerator(object): 29 | def __init__(self, output_size): 30 | self.output_size = output_size 31 | 32 | def __call__(self, sample): 33 | image, label = sample['image'], sample['label'] 34 | 35 | if random.random() > 0.5: 36 | image, label = random_rot_flip(image, label) 37 | elif random.random() > 0.5: 38 | image, label = random_rotate(image, label) 39 | x, y = image.shape 40 | if x != self.output_size[0] or y != self.output_size[1]: 41 | image = zoom(image, (self.output_size[0] / x, self.output_size[1] / y), order=3) # why not 3? 42 | label = zoom(label, (self.output_size[0] / x, self.output_size[1] / y), order=0) 43 | image = torch.from_numpy(image.astype(np.float32)).unsqueeze(0) 44 | label = torch.from_numpy(label.astype(np.float32)) 45 | sample = {'image': image, 'label': label.long()} 46 | return sample 47 | 48 | 49 | class Synapse_dataset(Dataset): 50 | def __init__(self, base_dir, list_dir, split, transform=None): 51 | self.transform = transform # using transform in torch! 52 | self.split = split 53 | self.sample_list = open(os.path.join(list_dir, self.split+'.txt')).readlines() 54 | self.data_dir = base_dir 55 | 56 | def __len__(self): 57 | return len(self.sample_list) 58 | 59 | def __getitem__(self, idx): 60 | if self.split == "train": 61 | slice_name = self.sample_list[idx].strip('\n') 62 | data_path = os.path.join(self.data_dir, slice_name+'.npz') 63 | data = np.load(data_path) 64 | image, label = data['image'], data['label'] 65 | else: 66 | vol_name = self.sample_list[idx].strip('\n') 67 | filepath = self.data_dir + "/{}.npy.h5".format(vol_name) 68 | data = h5py.File(filepath) 69 | image, label = data['image'][:], data['label'][:] 70 | 71 | sample = {'image': image, 'label': label} 72 | if self.transform: 73 | sample = self.transform(sample) 74 | sample['case_name'] = self.sample_list[idx].strip('\n') 75 | return sample 76 | -------------------------------------------------------------------------------- /lists/lists_Synapse/all.lst: -------------------------------------------------------------------------------- 1 | case0031.npy.h5 2 | case0007.npy.h5 3 | case0009.npy.h5 4 | case0005.npy.h5 5 | case0026.npy.h5 6 | case0039.npy.h5 7 | case0024.npy.h5 8 | case0034.npy.h5 9 | case0033.npy.h5 10 | case0030.npy.h5 11 | case0023.npy.h5 12 | case0040.npy.h5 13 | case0010.npy.h5 14 | case0021.npy.h5 15 | case0006.npy.h5 16 | case0027.npy.h5 17 | case0028.npy.h5 18 | case0037.npy.h5 19 | case0008.npy.h5 20 | case0022.npy.h5 21 | case0038.npy.h5 22 | case0036.npy.h5 23 | case0032.npy.h5 24 | case0002.npy.h5 25 | case0029.npy.h5 26 | case0003.npy.h5 27 | case0001.npy.h5 28 | case0004.npy.h5 29 | case0025.npy.h5 30 | case0035.npy.h5 31 | -------------------------------------------------------------------------------- /lists/lists_Synapse/test_vol.txt: -------------------------------------------------------------------------------- 1 | case0008 2 | case0022 3 | case0038 4 | case0036 5 | case0032 6 | case0002 7 | case0029 8 | case0003 9 | case0001 10 | case0004 11 | case0025 12 | case0035 13 | -------------------------------------------------------------------------------- /lists/lists_Synapse/train.txt: -------------------------------------------------------------------------------- 1 | case0031_slice000 2 | case0031_slice001 3 | case0031_slice002 4 | case0031_slice003 5 | case0031_slice004 6 | case0031_slice005 7 | case0031_slice006 8 | case0031_slice007 9 | case0031_slice008 10 | case0031_slice009 11 | case0031_slice010 12 | case0031_slice011 13 | case0031_slice012 14 | case0031_slice013 15 | case0031_slice014 16 | case0031_slice015 17 | case0031_slice016 18 | case0031_slice017 19 | case0031_slice018 20 | case0031_slice019 21 | case0031_slice020 22 | case0031_slice021 23 | case0031_slice022 24 | case0031_slice023 25 | case0031_slice024 26 | case0031_slice025 27 | case0031_slice026 28 | case0031_slice027 29 | case0031_slice028 30 | case0031_slice029 31 | case0031_slice030 32 | case0031_slice031 33 | case0031_slice032 34 | case0031_slice033 35 | case0031_slice034 36 | case0031_slice035 37 | case0031_slice036 38 | case0031_slice037 39 | case0031_slice038 40 | case0031_slice039 41 | case0031_slice040 42 | case0031_slice041 43 | case0031_slice042 44 | case0031_slice043 45 | case0031_slice044 46 | case0031_slice045 47 | case0031_slice046 48 | case0031_slice047 49 | case0031_slice048 50 | case0031_slice049 51 | case0031_slice050 52 | case0031_slice051 53 | case0031_slice052 54 | case0031_slice053 55 | case0031_slice054 56 | case0031_slice055 57 | case0031_slice056 58 | case0031_slice057 59 | case0031_slice058 60 | case0031_slice059 61 | case0031_slice060 62 | case0031_slice061 63 | case0031_slice062 64 | case0031_slice063 65 | case0031_slice064 66 | case0031_slice065 67 | case0031_slice066 68 | case0031_slice067 69 | case0031_slice068 70 | case0031_slice069 71 | case0031_slice070 72 | case0031_slice071 73 | case0031_slice072 74 | case0031_slice073 75 | case0031_slice074 76 | case0031_slice075 77 | case0031_slice076 78 | case0031_slice077 79 | case0031_slice078 80 | case0031_slice079 81 | case0031_slice080 82 | case0031_slice081 83 | case0031_slice082 84 | case0031_slice083 85 | case0031_slice084 86 | case0031_slice085 87 | case0031_slice086 88 | case0031_slice087 89 | case0031_slice088 90 | case0031_slice089 91 | case0031_slice090 92 | case0031_slice091 93 | case0031_slice092 94 | case0007_slice000 95 | case0007_slice001 96 | case0007_slice002 97 | case0007_slice003 98 | case0007_slice004 99 | case0007_slice005 100 | case0007_slice006 101 | case0007_slice007 102 | case0007_slice008 103 | case0007_slice009 104 | case0007_slice010 105 | case0007_slice011 106 | case0007_slice012 107 | case0007_slice013 108 | case0007_slice014 109 | case0007_slice015 110 | case0007_slice016 111 | case0007_slice017 112 | case0007_slice018 113 | case0007_slice019 114 | case0007_slice020 115 | case0007_slice021 116 | case0007_slice022 117 | case0007_slice023 118 | case0007_slice024 119 | case0007_slice025 120 | case0007_slice026 121 | case0007_slice027 122 | case0007_slice028 123 | case0007_slice029 124 | case0007_slice030 125 | case0007_slice031 126 | case0007_slice032 127 | case0007_slice033 128 | case0007_slice034 129 | case0007_slice035 130 | case0007_slice036 131 | case0007_slice037 132 | case0007_slice038 133 | case0007_slice039 134 | case0007_slice040 135 | case0007_slice041 136 | case0007_slice042 137 | case0007_slice043 138 | case0007_slice044 139 | case0007_slice045 140 | case0007_slice046 141 | case0007_slice047 142 | case0007_slice048 143 | case0007_slice049 144 | case0007_slice050 145 | case0007_slice051 146 | case0007_slice052 147 | case0007_slice053 148 | case0007_slice054 149 | case0007_slice055 150 | case0007_slice056 151 | case0007_slice057 152 | case0007_slice058 153 | case0007_slice059 154 | case0007_slice060 155 | case0007_slice061 156 | case0007_slice062 157 | case0007_slice063 158 | case0007_slice064 159 | case0007_slice065 160 | case0007_slice066 161 | case0007_slice067 162 | case0007_slice068 163 | case0007_slice069 164 | case0007_slice070 165 | case0007_slice071 166 | case0007_slice072 167 | case0007_slice073 168 | case0007_slice074 169 | case0007_slice075 170 | case0007_slice076 171 | case0007_slice077 172 | case0007_slice078 173 | case0007_slice079 174 | case0007_slice080 175 | case0007_slice081 176 | case0007_slice082 177 | case0007_slice083 178 | case0007_slice084 179 | case0007_slice085 180 | case0007_slice086 181 | case0007_slice087 182 | case0007_slice088 183 | case0007_slice089 184 | case0007_slice090 185 | case0007_slice091 186 | case0007_slice092 187 | case0007_slice093 188 | case0007_slice094 189 | case0007_slice095 190 | case0007_slice096 191 | case0007_slice097 192 | case0007_slice098 193 | case0007_slice099 194 | case0007_slice100 195 | case0007_slice101 196 | case0007_slice102 197 | case0007_slice103 198 | case0007_slice104 199 | case0007_slice105 200 | case0007_slice106 201 | case0007_slice107 202 | case0007_slice108 203 | case0007_slice109 204 | case0007_slice110 205 | case0007_slice111 206 | case0007_slice112 207 | case0007_slice113 208 | case0007_slice114 209 | case0007_slice115 210 | case0007_slice116 211 | case0007_slice117 212 | case0007_slice118 213 | case0007_slice119 214 | case0007_slice120 215 | case0007_slice121 216 | case0007_slice122 217 | case0007_slice123 218 | case0007_slice124 219 | case0007_slice125 220 | case0007_slice126 221 | case0007_slice127 222 | case0007_slice128 223 | case0007_slice129 224 | case0007_slice130 225 | case0007_slice131 226 | case0007_slice132 227 | case0007_slice133 228 | case0007_slice134 229 | case0007_slice135 230 | case0007_slice136 231 | case0007_slice137 232 | case0007_slice138 233 | case0007_slice139 234 | case0007_slice140 235 | case0007_slice141 236 | case0007_slice142 237 | case0007_slice143 238 | case0007_slice144 239 | case0007_slice145 240 | case0007_slice146 241 | case0007_slice147 242 | case0007_slice148 243 | case0007_slice149 244 | case0007_slice150 245 | case0007_slice151 246 | case0007_slice152 247 | case0007_slice153 248 | case0007_slice154 249 | case0007_slice155 250 | case0007_slice156 251 | case0007_slice157 252 | case0007_slice158 253 | case0007_slice159 254 | case0007_slice160 255 | case0007_slice161 256 | case0007_slice162 257 | case0009_slice000 258 | case0009_slice001 259 | case0009_slice002 260 | case0009_slice003 261 | case0009_slice004 262 | case0009_slice005 263 | case0009_slice006 264 | case0009_slice007 265 | case0009_slice008 266 | case0009_slice009 267 | case0009_slice010 268 | case0009_slice011 269 | case0009_slice012 270 | case0009_slice013 271 | case0009_slice014 272 | case0009_slice015 273 | case0009_slice016 274 | case0009_slice017 275 | case0009_slice018 276 | case0009_slice019 277 | case0009_slice020 278 | case0009_slice021 279 | case0009_slice022 280 | case0009_slice023 281 | case0009_slice024 282 | case0009_slice025 283 | case0009_slice026 284 | case0009_slice027 285 | case0009_slice028 286 | case0009_slice029 287 | case0009_slice030 288 | case0009_slice031 289 | case0009_slice032 290 | case0009_slice033 291 | case0009_slice034 292 | case0009_slice035 293 | case0009_slice036 294 | case0009_slice037 295 | case0009_slice038 296 | case0009_slice039 297 | case0009_slice040 298 | case0009_slice041 299 | case0009_slice042 300 | case0009_slice043 301 | case0009_slice044 302 | case0009_slice045 303 | case0009_slice046 304 | case0009_slice047 305 | case0009_slice048 306 | case0009_slice049 307 | case0009_slice050 308 | case0009_slice051 309 | case0009_slice052 310 | case0009_slice053 311 | case0009_slice054 312 | case0009_slice055 313 | case0009_slice056 314 | case0009_slice057 315 | case0009_slice058 316 | case0009_slice059 317 | case0009_slice060 318 | case0009_slice061 319 | case0009_slice062 320 | case0009_slice063 321 | case0009_slice064 322 | case0009_slice065 323 | case0009_slice066 324 | case0009_slice067 325 | case0009_slice068 326 | case0009_slice069 327 | case0009_slice070 328 | case0009_slice071 329 | case0009_slice072 330 | case0009_slice073 331 | case0009_slice074 332 | case0009_slice075 333 | case0009_slice076 334 | case0009_slice077 335 | case0009_slice078 336 | case0009_slice079 337 | case0009_slice080 338 | case0009_slice081 339 | case0009_slice082 340 | case0009_slice083 341 | case0009_slice084 342 | case0009_slice085 343 | case0009_slice086 344 | case0009_slice087 345 | case0009_slice088 346 | case0009_slice089 347 | case0009_slice090 348 | case0009_slice091 349 | case0009_slice092 350 | case0009_slice093 351 | case0009_slice094 352 | case0009_slice095 353 | case0009_slice096 354 | case0009_slice097 355 | case0009_slice098 356 | case0009_slice099 357 | case0009_slice100 358 | case0009_slice101 359 | case0009_slice102 360 | case0009_slice103 361 | case0009_slice104 362 | case0009_slice105 363 | case0009_slice106 364 | case0009_slice107 365 | case0009_slice108 366 | case0009_slice109 367 | case0009_slice110 368 | case0009_slice111 369 | case0009_slice112 370 | case0009_slice113 371 | case0009_slice114 372 | case0009_slice115 373 | case0009_slice116 374 | case0009_slice117 375 | case0009_slice118 376 | case0009_slice119 377 | case0009_slice120 378 | case0009_slice121 379 | case0009_slice122 380 | case0009_slice123 381 | case0009_slice124 382 | case0009_slice125 383 | case0009_slice126 384 | case0009_slice127 385 | case0009_slice128 386 | case0009_slice129 387 | case0009_slice130 388 | case0009_slice131 389 | case0009_slice132 390 | case0009_slice133 391 | case0009_slice134 392 | case0009_slice135 393 | case0009_slice136 394 | case0009_slice137 395 | case0009_slice138 396 | case0009_slice139 397 | case0009_slice140 398 | case0009_slice141 399 | case0009_slice142 400 | case0009_slice143 401 | case0009_slice144 402 | case0009_slice145 403 | case0009_slice146 404 | case0009_slice147 405 | case0009_slice148 406 | case0005_slice000 407 | case0005_slice001 408 | case0005_slice002 409 | case0005_slice003 410 | case0005_slice004 411 | case0005_slice005 412 | case0005_slice006 413 | case0005_slice007 414 | case0005_slice008 415 | case0005_slice009 416 | case0005_slice010 417 | case0005_slice011 418 | case0005_slice012 419 | case0005_slice013 420 | case0005_slice014 421 | case0005_slice015 422 | case0005_slice016 423 | case0005_slice017 424 | case0005_slice018 425 | case0005_slice019 426 | case0005_slice020 427 | case0005_slice021 428 | case0005_slice022 429 | case0005_slice023 430 | case0005_slice024 431 | case0005_slice025 432 | case0005_slice026 433 | case0005_slice027 434 | case0005_slice028 435 | case0005_slice029 436 | case0005_slice030 437 | case0005_slice031 438 | case0005_slice032 439 | case0005_slice033 440 | case0005_slice034 441 | case0005_slice035 442 | case0005_slice036 443 | case0005_slice037 444 | case0005_slice038 445 | case0005_slice039 446 | case0005_slice040 447 | case0005_slice041 448 | case0005_slice042 449 | case0005_slice043 450 | case0005_slice044 451 | case0005_slice045 452 | case0005_slice046 453 | case0005_slice047 454 | case0005_slice048 455 | case0005_slice049 456 | case0005_slice050 457 | case0005_slice051 458 | case0005_slice052 459 | case0005_slice053 460 | case0005_slice054 461 | case0005_slice055 462 | case0005_slice056 463 | case0005_slice057 464 | case0005_slice058 465 | case0005_slice059 466 | case0005_slice060 467 | case0005_slice061 468 | case0005_slice062 469 | case0005_slice063 470 | case0005_slice064 471 | case0005_slice065 472 | case0005_slice066 473 | case0005_slice067 474 | case0005_slice068 475 | case0005_slice069 476 | case0005_slice070 477 | case0005_slice071 478 | case0005_slice072 479 | case0005_slice073 480 | case0005_slice074 481 | case0005_slice075 482 | case0005_slice076 483 | case0005_slice077 484 | case0005_slice078 485 | case0005_slice079 486 | case0005_slice080 487 | case0005_slice081 488 | case0005_slice082 489 | case0005_slice083 490 | case0005_slice084 491 | case0005_slice085 492 | case0005_slice086 493 | case0005_slice087 494 | case0005_slice088 495 | case0005_slice089 496 | case0005_slice090 497 | case0005_slice091 498 | case0005_slice092 499 | case0005_slice093 500 | case0005_slice094 501 | case0005_slice095 502 | case0005_slice096 503 | case0005_slice097 504 | case0005_slice098 505 | case0005_slice099 506 | case0005_slice100 507 | case0005_slice101 508 | case0005_slice102 509 | case0005_slice103 510 | case0005_slice104 511 | case0005_slice105 512 | case0005_slice106 513 | case0005_slice107 514 | case0005_slice108 515 | case0005_slice109 516 | case0005_slice110 517 | case0005_slice111 518 | case0005_slice112 519 | case0005_slice113 520 | case0005_slice114 521 | case0005_slice115 522 | case0005_slice116 523 | case0026_slice000 524 | case0026_slice001 525 | case0026_slice002 526 | case0026_slice003 527 | case0026_slice004 528 | case0026_slice005 529 | case0026_slice006 530 | case0026_slice007 531 | case0026_slice008 532 | case0026_slice009 533 | case0026_slice010 534 | case0026_slice011 535 | case0026_slice012 536 | case0026_slice013 537 | case0026_slice014 538 | case0026_slice015 539 | case0026_slice016 540 | case0026_slice017 541 | case0026_slice018 542 | case0026_slice019 543 | case0026_slice020 544 | case0026_slice021 545 | case0026_slice022 546 | case0026_slice023 547 | case0026_slice024 548 | case0026_slice025 549 | case0026_slice026 550 | case0026_slice027 551 | case0026_slice028 552 | case0026_slice029 553 | case0026_slice030 554 | case0026_slice031 555 | case0026_slice032 556 | case0026_slice033 557 | case0026_slice034 558 | case0026_slice035 559 | case0026_slice036 560 | case0026_slice037 561 | case0026_slice038 562 | case0026_slice039 563 | case0026_slice040 564 | case0026_slice041 565 | case0026_slice042 566 | case0026_slice043 567 | case0026_slice044 568 | case0026_slice045 569 | case0026_slice046 570 | case0026_slice047 571 | case0026_slice048 572 | case0026_slice049 573 | case0026_slice050 574 | case0026_slice051 575 | case0026_slice052 576 | case0026_slice053 577 | case0026_slice054 578 | case0026_slice055 579 | case0026_slice056 580 | case0026_slice057 581 | case0026_slice058 582 | case0026_slice059 583 | case0026_slice060 584 | case0026_slice061 585 | case0026_slice062 586 | case0026_slice063 587 | case0026_slice064 588 | case0026_slice065 589 | case0026_slice066 590 | case0026_slice067 591 | case0026_slice068 592 | case0026_slice069 593 | case0026_slice070 594 | case0026_slice071 595 | case0026_slice072 596 | case0026_slice073 597 | case0026_slice074 598 | case0026_slice075 599 | case0026_slice076 600 | case0026_slice077 601 | case0026_slice078 602 | case0026_slice079 603 | case0026_slice080 604 | case0026_slice081 605 | case0026_slice082 606 | case0026_slice083 607 | case0026_slice084 608 | case0026_slice085 609 | case0026_slice086 610 | case0026_slice087 611 | case0026_slice088 612 | case0026_slice089 613 | case0026_slice090 614 | case0026_slice091 615 | case0026_slice092 616 | case0026_slice093 617 | case0026_slice094 618 | case0026_slice095 619 | case0026_slice096 620 | case0026_slice097 621 | case0026_slice098 622 | case0026_slice099 623 | case0026_slice100 624 | case0026_slice101 625 | case0026_slice102 626 | case0026_slice103 627 | case0026_slice104 628 | case0026_slice105 629 | case0026_slice106 630 | case0026_slice107 631 | case0026_slice108 632 | case0026_slice109 633 | case0026_slice110 634 | case0026_slice111 635 | case0026_slice112 636 | case0026_slice113 637 | case0026_slice114 638 | case0026_slice115 639 | case0026_slice116 640 | case0026_slice117 641 | case0026_slice118 642 | case0026_slice119 643 | case0026_slice120 644 | case0026_slice121 645 | case0026_slice122 646 | case0026_slice123 647 | case0026_slice124 648 | case0026_slice125 649 | case0026_slice126 650 | case0026_slice127 651 | case0026_slice128 652 | case0026_slice129 653 | case0026_slice130 654 | case0039_slice000 655 | case0039_slice001 656 | case0039_slice002 657 | case0039_slice003 658 | case0039_slice004 659 | case0039_slice005 660 | case0039_slice006 661 | case0039_slice007 662 | case0039_slice008 663 | case0039_slice009 664 | case0039_slice010 665 | case0039_slice011 666 | case0039_slice012 667 | case0039_slice013 668 | case0039_slice014 669 | case0039_slice015 670 | case0039_slice016 671 | case0039_slice017 672 | case0039_slice018 673 | case0039_slice019 674 | case0039_slice020 675 | case0039_slice021 676 | case0039_slice022 677 | case0039_slice023 678 | case0039_slice024 679 | case0039_slice025 680 | case0039_slice026 681 | case0039_slice027 682 | case0039_slice028 683 | case0039_slice029 684 | case0039_slice030 685 | case0039_slice031 686 | case0039_slice032 687 | case0039_slice033 688 | case0039_slice034 689 | case0039_slice035 690 | case0039_slice036 691 | case0039_slice037 692 | case0039_slice038 693 | case0039_slice039 694 | case0039_slice040 695 | case0039_slice041 696 | case0039_slice042 697 | case0039_slice043 698 | case0039_slice044 699 | case0039_slice045 700 | case0039_slice046 701 | case0039_slice047 702 | case0039_slice048 703 | case0039_slice049 704 | case0039_slice050 705 | case0039_slice051 706 | case0039_slice052 707 | case0039_slice053 708 | case0039_slice054 709 | case0039_slice055 710 | case0039_slice056 711 | case0039_slice057 712 | case0039_slice058 713 | case0039_slice059 714 | case0039_slice060 715 | case0039_slice061 716 | case0039_slice062 717 | case0039_slice063 718 | case0039_slice064 719 | case0039_slice065 720 | case0039_slice066 721 | case0039_slice067 722 | case0039_slice068 723 | case0039_slice069 724 | case0039_slice070 725 | case0039_slice071 726 | case0039_slice072 727 | case0039_slice073 728 | case0039_slice074 729 | case0039_slice075 730 | case0039_slice076 731 | case0039_slice077 732 | case0039_slice078 733 | case0039_slice079 734 | case0039_slice080 735 | case0039_slice081 736 | case0039_slice082 737 | case0039_slice083 738 | case0039_slice084 739 | case0039_slice085 740 | case0039_slice086 741 | case0039_slice087 742 | case0039_slice088 743 | case0039_slice089 744 | case0024_slice000 745 | case0024_slice001 746 | case0024_slice002 747 | case0024_slice003 748 | case0024_slice004 749 | case0024_slice005 750 | case0024_slice006 751 | case0024_slice007 752 | case0024_slice008 753 | case0024_slice009 754 | case0024_slice010 755 | case0024_slice011 756 | case0024_slice012 757 | case0024_slice013 758 | case0024_slice014 759 | case0024_slice015 760 | case0024_slice016 761 | case0024_slice017 762 | case0024_slice018 763 | case0024_slice019 764 | case0024_slice020 765 | case0024_slice021 766 | case0024_slice022 767 | case0024_slice023 768 | case0024_slice024 769 | case0024_slice025 770 | case0024_slice026 771 | case0024_slice027 772 | case0024_slice028 773 | case0024_slice029 774 | case0024_slice030 775 | case0024_slice031 776 | case0024_slice032 777 | case0024_slice033 778 | case0024_slice034 779 | case0024_slice035 780 | case0024_slice036 781 | case0024_slice037 782 | case0024_slice038 783 | case0024_slice039 784 | case0024_slice040 785 | case0024_slice041 786 | case0024_slice042 787 | case0024_slice043 788 | case0024_slice044 789 | case0024_slice045 790 | case0024_slice046 791 | case0024_slice047 792 | case0024_slice048 793 | case0024_slice049 794 | case0024_slice050 795 | case0024_slice051 796 | case0024_slice052 797 | case0024_slice053 798 | case0024_slice054 799 | case0024_slice055 800 | case0024_slice056 801 | case0024_slice057 802 | case0024_slice058 803 | case0024_slice059 804 | case0024_slice060 805 | case0024_slice061 806 | case0024_slice062 807 | case0024_slice063 808 | case0024_slice064 809 | case0024_slice065 810 | case0024_slice066 811 | case0024_slice067 812 | case0024_slice068 813 | case0024_slice069 814 | case0024_slice070 815 | case0024_slice071 816 | case0024_slice072 817 | case0024_slice073 818 | case0024_slice074 819 | case0024_slice075 820 | case0024_slice076 821 | case0024_slice077 822 | case0024_slice078 823 | case0024_slice079 824 | case0024_slice080 825 | case0024_slice081 826 | case0024_slice082 827 | case0024_slice083 828 | case0024_slice084 829 | case0024_slice085 830 | case0024_slice086 831 | case0024_slice087 832 | case0024_slice088 833 | case0024_slice089 834 | case0024_slice090 835 | case0024_slice091 836 | case0024_slice092 837 | case0024_slice093 838 | case0024_slice094 839 | case0024_slice095 840 | case0024_slice096 841 | case0024_slice097 842 | case0024_slice098 843 | case0024_slice099 844 | case0024_slice100 845 | case0024_slice101 846 | case0024_slice102 847 | case0024_slice103 848 | case0024_slice104 849 | case0024_slice105 850 | case0024_slice106 851 | case0024_slice107 852 | case0024_slice108 853 | case0024_slice109 854 | case0024_slice110 855 | case0024_slice111 856 | case0024_slice112 857 | case0024_slice113 858 | case0024_slice114 859 | case0024_slice115 860 | case0024_slice116 861 | case0024_slice117 862 | case0024_slice118 863 | case0024_slice119 864 | case0024_slice120 865 | case0024_slice121 866 | case0024_slice122 867 | case0024_slice123 868 | case0034_slice000 869 | case0034_slice001 870 | case0034_slice002 871 | case0034_slice003 872 | case0034_slice004 873 | case0034_slice005 874 | case0034_slice006 875 | case0034_slice007 876 | case0034_slice008 877 | case0034_slice009 878 | case0034_slice010 879 | case0034_slice011 880 | case0034_slice012 881 | case0034_slice013 882 | case0034_slice014 883 | case0034_slice015 884 | case0034_slice016 885 | case0034_slice017 886 | case0034_slice018 887 | case0034_slice019 888 | case0034_slice020 889 | case0034_slice021 890 | case0034_slice022 891 | case0034_slice023 892 | case0034_slice024 893 | case0034_slice025 894 | case0034_slice026 895 | case0034_slice027 896 | case0034_slice028 897 | case0034_slice029 898 | case0034_slice030 899 | case0034_slice031 900 | case0034_slice032 901 | case0034_slice033 902 | case0034_slice034 903 | case0034_slice035 904 | case0034_slice036 905 | case0034_slice037 906 | case0034_slice038 907 | case0034_slice039 908 | case0034_slice040 909 | case0034_slice041 910 | case0034_slice042 911 | case0034_slice043 912 | case0034_slice044 913 | case0034_slice045 914 | case0034_slice046 915 | case0034_slice047 916 | case0034_slice048 917 | case0034_slice049 918 | case0034_slice050 919 | case0034_slice051 920 | case0034_slice052 921 | case0034_slice053 922 | case0034_slice054 923 | case0034_slice055 924 | case0034_slice056 925 | case0034_slice057 926 | case0034_slice058 927 | case0034_slice059 928 | case0034_slice060 929 | case0034_slice061 930 | case0034_slice062 931 | case0034_slice063 932 | case0034_slice064 933 | case0034_slice065 934 | case0034_slice066 935 | case0034_slice067 936 | case0034_slice068 937 | case0034_slice069 938 | case0034_slice070 939 | case0034_slice071 940 | case0034_slice072 941 | case0034_slice073 942 | case0034_slice074 943 | case0034_slice075 944 | case0034_slice076 945 | case0034_slice077 946 | case0034_slice078 947 | case0034_slice079 948 | case0034_slice080 949 | case0034_slice081 950 | case0034_slice082 951 | case0034_slice083 952 | case0034_slice084 953 | case0034_slice085 954 | case0034_slice086 955 | case0034_slice087 956 | case0034_slice088 957 | case0034_slice089 958 | case0034_slice090 959 | case0034_slice091 960 | case0034_slice092 961 | case0034_slice093 962 | case0034_slice094 963 | case0034_slice095 964 | case0034_slice096 965 | case0034_slice097 966 | case0033_slice000 967 | case0033_slice001 968 | case0033_slice002 969 | case0033_slice003 970 | case0033_slice004 971 | case0033_slice005 972 | case0033_slice006 973 | case0033_slice007 974 | case0033_slice008 975 | case0033_slice009 976 | case0033_slice010 977 | case0033_slice011 978 | case0033_slice012 979 | case0033_slice013 980 | case0033_slice014 981 | case0033_slice015 982 | case0033_slice016 983 | case0033_slice017 984 | case0033_slice018 985 | case0033_slice019 986 | case0033_slice020 987 | case0033_slice021 988 | case0033_slice022 989 | case0033_slice023 990 | case0033_slice024 991 | case0033_slice025 992 | case0033_slice026 993 | case0033_slice027 994 | case0033_slice028 995 | case0033_slice029 996 | case0033_slice030 997 | case0033_slice031 998 | case0033_slice032 999 | case0033_slice033 1000 | case0033_slice034 1001 | case0033_slice035 1002 | case0033_slice036 1003 | case0033_slice037 1004 | case0033_slice038 1005 | case0033_slice039 1006 | case0033_slice040 1007 | case0033_slice041 1008 | case0033_slice042 1009 | case0033_slice043 1010 | case0033_slice044 1011 | case0033_slice045 1012 | case0033_slice046 1013 | case0033_slice047 1014 | case0033_slice048 1015 | case0033_slice049 1016 | case0033_slice050 1017 | case0033_slice051 1018 | case0033_slice052 1019 | case0033_slice053 1020 | case0033_slice054 1021 | case0033_slice055 1022 | case0033_slice056 1023 | case0033_slice057 1024 | case0033_slice058 1025 | case0033_slice059 1026 | case0033_slice060 1027 | case0033_slice061 1028 | case0033_slice062 1029 | case0033_slice063 1030 | case0033_slice064 1031 | case0033_slice065 1032 | case0033_slice066 1033 | case0033_slice067 1034 | case0033_slice068 1035 | case0033_slice069 1036 | case0033_slice070 1037 | case0033_slice071 1038 | case0033_slice072 1039 | case0033_slice073 1040 | case0033_slice074 1041 | case0033_slice075 1042 | case0033_slice076 1043 | case0033_slice077 1044 | case0033_slice078 1045 | case0033_slice079 1046 | case0033_slice080 1047 | case0033_slice081 1048 | case0033_slice082 1049 | case0033_slice083 1050 | case0033_slice084 1051 | case0033_slice085 1052 | case0033_slice086 1053 | case0033_slice087 1054 | case0033_slice088 1055 | case0033_slice089 1056 | case0033_slice090 1057 | case0033_slice091 1058 | case0033_slice092 1059 | case0033_slice093 1060 | case0033_slice094 1061 | case0033_slice095 1062 | case0033_slice096 1063 | case0033_slice097 1064 | case0033_slice098 1065 | case0033_slice099 1066 | case0033_slice100 1067 | case0033_slice101 1068 | case0033_slice102 1069 | case0033_slice103 1070 | case0030_slice000 1071 | case0030_slice001 1072 | case0030_slice002 1073 | case0030_slice003 1074 | case0030_slice004 1075 | case0030_slice005 1076 | case0030_slice006 1077 | case0030_slice007 1078 | case0030_slice008 1079 | case0030_slice009 1080 | case0030_slice010 1081 | case0030_slice011 1082 | case0030_slice012 1083 | case0030_slice013 1084 | case0030_slice014 1085 | case0030_slice015 1086 | case0030_slice016 1087 | case0030_slice017 1088 | case0030_slice018 1089 | case0030_slice019 1090 | case0030_slice020 1091 | case0030_slice021 1092 | case0030_slice022 1093 | case0030_slice023 1094 | case0030_slice024 1095 | case0030_slice025 1096 | case0030_slice026 1097 | case0030_slice027 1098 | case0030_slice028 1099 | case0030_slice029 1100 | case0030_slice030 1101 | case0030_slice031 1102 | case0030_slice032 1103 | case0030_slice033 1104 | case0030_slice034 1105 | case0030_slice035 1106 | case0030_slice036 1107 | case0030_slice037 1108 | case0030_slice038 1109 | case0030_slice039 1110 | case0030_slice040 1111 | case0030_slice041 1112 | case0030_slice042 1113 | case0030_slice043 1114 | case0030_slice044 1115 | case0030_slice045 1116 | case0030_slice046 1117 | case0030_slice047 1118 | case0030_slice048 1119 | case0030_slice049 1120 | case0030_slice050 1121 | case0030_slice051 1122 | case0030_slice052 1123 | case0030_slice053 1124 | case0030_slice054 1125 | case0030_slice055 1126 | case0030_slice056 1127 | case0030_slice057 1128 | case0030_slice058 1129 | case0030_slice059 1130 | case0030_slice060 1131 | case0030_slice061 1132 | case0030_slice062 1133 | case0030_slice063 1134 | case0030_slice064 1135 | case0030_slice065 1136 | case0030_slice066 1137 | case0030_slice067 1138 | case0030_slice068 1139 | case0030_slice069 1140 | case0030_slice070 1141 | case0030_slice071 1142 | case0030_slice072 1143 | case0030_slice073 1144 | case0030_slice074 1145 | case0030_slice075 1146 | case0030_slice076 1147 | case0030_slice077 1148 | case0030_slice078 1149 | case0030_slice079 1150 | case0030_slice080 1151 | case0030_slice081 1152 | case0030_slice082 1153 | case0030_slice083 1154 | case0030_slice084 1155 | case0030_slice085 1156 | case0030_slice086 1157 | case0030_slice087 1158 | case0030_slice088 1159 | case0030_slice089 1160 | case0030_slice090 1161 | case0030_slice091 1162 | case0030_slice092 1163 | case0030_slice093 1164 | case0030_slice094 1165 | case0030_slice095 1166 | case0030_slice096 1167 | case0030_slice097 1168 | case0030_slice098 1169 | case0030_slice099 1170 | case0030_slice100 1171 | case0030_slice101 1172 | case0030_slice102 1173 | case0030_slice103 1174 | case0030_slice104 1175 | case0030_slice105 1176 | case0030_slice106 1177 | case0030_slice107 1178 | case0030_slice108 1179 | case0030_slice109 1180 | case0030_slice110 1181 | case0030_slice111 1182 | case0030_slice112 1183 | case0030_slice113 1184 | case0030_slice114 1185 | case0030_slice115 1186 | case0030_slice116 1187 | case0030_slice117 1188 | case0030_slice118 1189 | case0030_slice119 1190 | case0030_slice120 1191 | case0030_slice121 1192 | case0030_slice122 1193 | case0030_slice123 1194 | case0030_slice124 1195 | case0030_slice125 1196 | case0030_slice126 1197 | case0030_slice127 1198 | case0030_slice128 1199 | case0030_slice129 1200 | case0030_slice130 1201 | case0030_slice131 1202 | case0030_slice132 1203 | case0030_slice133 1204 | case0030_slice134 1205 | case0030_slice135 1206 | case0030_slice136 1207 | case0030_slice137 1208 | case0030_slice138 1209 | case0030_slice139 1210 | case0030_slice140 1211 | case0030_slice141 1212 | case0030_slice142 1213 | case0030_slice143 1214 | case0030_slice144 1215 | case0030_slice145 1216 | case0030_slice146 1217 | case0030_slice147 1218 | case0030_slice148 1219 | case0030_slice149 1220 | case0030_slice150 1221 | case0030_slice151 1222 | case0030_slice152 1223 | case0023_slice000 1224 | case0023_slice001 1225 | case0023_slice002 1226 | case0023_slice003 1227 | case0023_slice004 1228 | case0023_slice005 1229 | case0023_slice006 1230 | case0023_slice007 1231 | case0023_slice008 1232 | case0023_slice009 1233 | case0023_slice010 1234 | case0023_slice011 1235 | case0023_slice012 1236 | case0023_slice013 1237 | case0023_slice014 1238 | case0023_slice015 1239 | case0023_slice016 1240 | case0023_slice017 1241 | case0023_slice018 1242 | case0023_slice019 1243 | case0023_slice020 1244 | case0023_slice021 1245 | case0023_slice022 1246 | case0023_slice023 1247 | case0023_slice024 1248 | case0023_slice025 1249 | case0023_slice026 1250 | case0023_slice027 1251 | case0023_slice028 1252 | case0023_slice029 1253 | case0023_slice030 1254 | case0023_slice031 1255 | case0023_slice032 1256 | case0023_slice033 1257 | case0023_slice034 1258 | case0023_slice035 1259 | case0023_slice036 1260 | case0023_slice037 1261 | case0023_slice038 1262 | case0023_slice039 1263 | case0023_slice040 1264 | case0023_slice041 1265 | case0023_slice042 1266 | case0023_slice043 1267 | case0023_slice044 1268 | case0023_slice045 1269 | case0023_slice046 1270 | case0023_slice047 1271 | case0023_slice048 1272 | case0023_slice049 1273 | case0023_slice050 1274 | case0023_slice051 1275 | case0023_slice052 1276 | case0023_slice053 1277 | case0023_slice054 1278 | case0023_slice055 1279 | case0023_slice056 1280 | case0023_slice057 1281 | case0023_slice058 1282 | case0023_slice059 1283 | case0023_slice060 1284 | case0023_slice061 1285 | case0023_slice062 1286 | case0023_slice063 1287 | case0023_slice064 1288 | case0023_slice065 1289 | case0023_slice066 1290 | case0023_slice067 1291 | case0023_slice068 1292 | case0023_slice069 1293 | case0023_slice070 1294 | case0023_slice071 1295 | case0023_slice072 1296 | case0023_slice073 1297 | case0023_slice074 1298 | case0023_slice075 1299 | case0023_slice076 1300 | case0023_slice077 1301 | case0023_slice078 1302 | case0023_slice079 1303 | case0023_slice080 1304 | case0023_slice081 1305 | case0023_slice082 1306 | case0023_slice083 1307 | case0023_slice084 1308 | case0023_slice085 1309 | case0023_slice086 1310 | case0023_slice087 1311 | case0023_slice088 1312 | case0023_slice089 1313 | case0023_slice090 1314 | case0023_slice091 1315 | case0023_slice092 1316 | case0023_slice093 1317 | case0023_slice094 1318 | case0023_slice095 1319 | case0040_slice000 1320 | case0040_slice001 1321 | case0040_slice002 1322 | case0040_slice003 1323 | case0040_slice004 1324 | case0040_slice005 1325 | case0040_slice006 1326 | case0040_slice007 1327 | case0040_slice008 1328 | case0040_slice009 1329 | case0040_slice010 1330 | case0040_slice011 1331 | case0040_slice012 1332 | case0040_slice013 1333 | case0040_slice014 1334 | case0040_slice015 1335 | case0040_slice016 1336 | case0040_slice017 1337 | case0040_slice018 1338 | case0040_slice019 1339 | case0040_slice020 1340 | case0040_slice021 1341 | case0040_slice022 1342 | case0040_slice023 1343 | case0040_slice024 1344 | case0040_slice025 1345 | case0040_slice026 1346 | case0040_slice027 1347 | case0040_slice028 1348 | case0040_slice029 1349 | case0040_slice030 1350 | case0040_slice031 1351 | case0040_slice032 1352 | case0040_slice033 1353 | case0040_slice034 1354 | case0040_slice035 1355 | case0040_slice036 1356 | case0040_slice037 1357 | case0040_slice038 1358 | case0040_slice039 1359 | case0040_slice040 1360 | case0040_slice041 1361 | case0040_slice042 1362 | case0040_slice043 1363 | case0040_slice044 1364 | case0040_slice045 1365 | case0040_slice046 1366 | case0040_slice047 1367 | case0040_slice048 1368 | case0040_slice049 1369 | case0040_slice050 1370 | case0040_slice051 1371 | case0040_slice052 1372 | case0040_slice053 1373 | case0040_slice054 1374 | case0040_slice055 1375 | case0040_slice056 1376 | case0040_slice057 1377 | case0040_slice058 1378 | case0040_slice059 1379 | case0040_slice060 1380 | case0040_slice061 1381 | case0040_slice062 1382 | case0040_slice063 1383 | case0040_slice064 1384 | case0040_slice065 1385 | case0040_slice066 1386 | case0040_slice067 1387 | case0040_slice068 1388 | case0040_slice069 1389 | case0040_slice070 1390 | case0040_slice071 1391 | case0040_slice072 1392 | case0040_slice073 1393 | case0040_slice074 1394 | case0040_slice075 1395 | case0040_slice076 1396 | case0040_slice077 1397 | case0040_slice078 1398 | case0040_slice079 1399 | case0040_slice080 1400 | case0040_slice081 1401 | case0040_slice082 1402 | case0040_slice083 1403 | case0040_slice084 1404 | case0040_slice085 1405 | case0040_slice086 1406 | case0040_slice087 1407 | case0040_slice088 1408 | case0040_slice089 1409 | case0040_slice090 1410 | case0040_slice091 1411 | case0040_slice092 1412 | case0040_slice093 1413 | case0040_slice094 1414 | case0040_slice095 1415 | case0040_slice096 1416 | case0040_slice097 1417 | case0040_slice098 1418 | case0040_slice099 1419 | case0040_slice100 1420 | case0040_slice101 1421 | case0040_slice102 1422 | case0040_slice103 1423 | case0040_slice104 1424 | case0040_slice105 1425 | case0040_slice106 1426 | case0040_slice107 1427 | case0040_slice108 1428 | case0040_slice109 1429 | case0040_slice110 1430 | case0040_slice111 1431 | case0040_slice112 1432 | case0040_slice113 1433 | case0040_slice114 1434 | case0040_slice115 1435 | case0040_slice116 1436 | case0040_slice117 1437 | case0040_slice118 1438 | case0040_slice119 1439 | case0040_slice120 1440 | case0040_slice121 1441 | case0040_slice122 1442 | case0040_slice123 1443 | case0040_slice124 1444 | case0040_slice125 1445 | case0040_slice126 1446 | case0040_slice127 1447 | case0040_slice128 1448 | case0040_slice129 1449 | case0040_slice130 1450 | case0040_slice131 1451 | case0040_slice132 1452 | case0040_slice133 1453 | case0040_slice134 1454 | case0040_slice135 1455 | case0040_slice136 1456 | case0040_slice137 1457 | case0040_slice138 1458 | case0040_slice139 1459 | case0040_slice140 1460 | case0040_slice141 1461 | case0040_slice142 1462 | case0040_slice143 1463 | case0040_slice144 1464 | case0040_slice145 1465 | case0040_slice146 1466 | case0040_slice147 1467 | case0040_slice148 1468 | case0040_slice149 1469 | case0040_slice150 1470 | case0040_slice151 1471 | case0040_slice152 1472 | case0040_slice153 1473 | case0040_slice154 1474 | case0040_slice155 1475 | case0040_slice156 1476 | case0040_slice157 1477 | case0040_slice158 1478 | case0040_slice159 1479 | case0040_slice160 1480 | case0040_slice161 1481 | case0040_slice162 1482 | case0040_slice163 1483 | case0040_slice164 1484 | case0040_slice165 1485 | case0040_slice166 1486 | case0040_slice167 1487 | case0040_slice168 1488 | case0040_slice169 1489 | case0040_slice170 1490 | case0040_slice171 1491 | case0040_slice172 1492 | case0040_slice173 1493 | case0040_slice174 1494 | case0040_slice175 1495 | case0040_slice176 1496 | case0040_slice177 1497 | case0040_slice178 1498 | case0040_slice179 1499 | case0040_slice180 1500 | case0040_slice181 1501 | case0040_slice182 1502 | case0040_slice183 1503 | case0040_slice184 1504 | case0040_slice185 1505 | case0040_slice186 1506 | case0040_slice187 1507 | case0040_slice188 1508 | case0040_slice189 1509 | case0040_slice190 1510 | case0040_slice191 1511 | case0040_slice192 1512 | case0040_slice193 1513 | case0040_slice194 1514 | case0010_slice000 1515 | case0010_slice001 1516 | case0010_slice002 1517 | case0010_slice003 1518 | case0010_slice004 1519 | case0010_slice005 1520 | case0010_slice006 1521 | case0010_slice007 1522 | case0010_slice008 1523 | case0010_slice009 1524 | case0010_slice010 1525 | case0010_slice011 1526 | case0010_slice012 1527 | case0010_slice013 1528 | case0010_slice014 1529 | case0010_slice015 1530 | case0010_slice016 1531 | case0010_slice017 1532 | case0010_slice018 1533 | case0010_slice019 1534 | case0010_slice020 1535 | case0010_slice021 1536 | case0010_slice022 1537 | case0010_slice023 1538 | case0010_slice024 1539 | case0010_slice025 1540 | case0010_slice026 1541 | case0010_slice027 1542 | case0010_slice028 1543 | case0010_slice029 1544 | case0010_slice030 1545 | case0010_slice031 1546 | case0010_slice032 1547 | case0010_slice033 1548 | case0010_slice034 1549 | case0010_slice035 1550 | case0010_slice036 1551 | case0010_slice037 1552 | case0010_slice038 1553 | case0010_slice039 1554 | case0010_slice040 1555 | case0010_slice041 1556 | case0010_slice042 1557 | case0010_slice043 1558 | case0010_slice044 1559 | case0010_slice045 1560 | case0010_slice046 1561 | case0010_slice047 1562 | case0010_slice048 1563 | case0010_slice049 1564 | case0010_slice050 1565 | case0010_slice051 1566 | case0010_slice052 1567 | case0010_slice053 1568 | case0010_slice054 1569 | case0010_slice055 1570 | case0010_slice056 1571 | case0010_slice057 1572 | case0010_slice058 1573 | case0010_slice059 1574 | case0010_slice060 1575 | case0010_slice061 1576 | case0010_slice062 1577 | case0010_slice063 1578 | case0010_slice064 1579 | case0010_slice065 1580 | case0010_slice066 1581 | case0010_slice067 1582 | case0010_slice068 1583 | case0010_slice069 1584 | case0010_slice070 1585 | case0010_slice071 1586 | case0010_slice072 1587 | case0010_slice073 1588 | case0010_slice074 1589 | case0010_slice075 1590 | case0010_slice076 1591 | case0010_slice077 1592 | case0010_slice078 1593 | case0010_slice079 1594 | case0010_slice080 1595 | case0010_slice081 1596 | case0010_slice082 1597 | case0010_slice083 1598 | case0010_slice084 1599 | case0010_slice085 1600 | case0010_slice086 1601 | case0010_slice087 1602 | case0010_slice088 1603 | case0010_slice089 1604 | case0010_slice090 1605 | case0010_slice091 1606 | case0010_slice092 1607 | case0010_slice093 1608 | case0010_slice094 1609 | case0010_slice095 1610 | case0010_slice096 1611 | case0010_slice097 1612 | case0010_slice098 1613 | case0010_slice099 1614 | case0010_slice100 1615 | case0010_slice101 1616 | case0010_slice102 1617 | case0010_slice103 1618 | case0010_slice104 1619 | case0010_slice105 1620 | case0010_slice106 1621 | case0010_slice107 1622 | case0010_slice108 1623 | case0010_slice109 1624 | case0010_slice110 1625 | case0010_slice111 1626 | case0010_slice112 1627 | case0010_slice113 1628 | case0010_slice114 1629 | case0010_slice115 1630 | case0010_slice116 1631 | case0010_slice117 1632 | case0010_slice118 1633 | case0010_slice119 1634 | case0010_slice120 1635 | case0010_slice121 1636 | case0010_slice122 1637 | case0010_slice123 1638 | case0010_slice124 1639 | case0010_slice125 1640 | case0010_slice126 1641 | case0010_slice127 1642 | case0010_slice128 1643 | case0010_slice129 1644 | case0010_slice130 1645 | case0010_slice131 1646 | case0010_slice132 1647 | case0010_slice133 1648 | case0010_slice134 1649 | case0010_slice135 1650 | case0010_slice136 1651 | case0010_slice137 1652 | case0010_slice138 1653 | case0010_slice139 1654 | case0010_slice140 1655 | case0010_slice141 1656 | case0010_slice142 1657 | case0010_slice143 1658 | case0010_slice144 1659 | case0010_slice145 1660 | case0010_slice146 1661 | case0010_slice147 1662 | case0021_slice000 1663 | case0021_slice001 1664 | case0021_slice002 1665 | case0021_slice003 1666 | case0021_slice004 1667 | case0021_slice005 1668 | case0021_slice006 1669 | case0021_slice007 1670 | case0021_slice008 1671 | case0021_slice009 1672 | case0021_slice010 1673 | case0021_slice011 1674 | case0021_slice012 1675 | case0021_slice013 1676 | case0021_slice014 1677 | case0021_slice015 1678 | case0021_slice016 1679 | case0021_slice017 1680 | case0021_slice018 1681 | case0021_slice019 1682 | case0021_slice020 1683 | case0021_slice021 1684 | case0021_slice022 1685 | case0021_slice023 1686 | case0021_slice024 1687 | case0021_slice025 1688 | case0021_slice026 1689 | case0021_slice027 1690 | case0021_slice028 1691 | case0021_slice029 1692 | case0021_slice030 1693 | case0021_slice031 1694 | case0021_slice032 1695 | case0021_slice033 1696 | case0021_slice034 1697 | case0021_slice035 1698 | case0021_slice036 1699 | case0021_slice037 1700 | case0021_slice038 1701 | case0021_slice039 1702 | case0021_slice040 1703 | case0021_slice041 1704 | case0021_slice042 1705 | case0021_slice043 1706 | case0021_slice044 1707 | case0021_slice045 1708 | case0021_slice046 1709 | case0021_slice047 1710 | case0021_slice048 1711 | case0021_slice049 1712 | case0021_slice050 1713 | case0021_slice051 1714 | case0021_slice052 1715 | case0021_slice053 1716 | case0021_slice054 1717 | case0021_slice055 1718 | case0021_slice056 1719 | case0021_slice057 1720 | case0021_slice058 1721 | case0021_slice059 1722 | case0021_slice060 1723 | case0021_slice061 1724 | case0021_slice062 1725 | case0021_slice063 1726 | case0021_slice064 1727 | case0021_slice065 1728 | case0021_slice066 1729 | case0021_slice067 1730 | case0021_slice068 1731 | case0021_slice069 1732 | case0021_slice070 1733 | case0021_slice071 1734 | case0021_slice072 1735 | case0021_slice073 1736 | case0021_slice074 1737 | case0021_slice075 1738 | case0021_slice076 1739 | case0021_slice077 1740 | case0021_slice078 1741 | case0021_slice079 1742 | case0021_slice080 1743 | case0021_slice081 1744 | case0021_slice082 1745 | case0021_slice083 1746 | case0021_slice084 1747 | case0021_slice085 1748 | case0021_slice086 1749 | case0021_slice087 1750 | case0021_slice088 1751 | case0021_slice089 1752 | case0021_slice090 1753 | case0021_slice091 1754 | case0021_slice092 1755 | case0021_slice093 1756 | case0021_slice094 1757 | case0021_slice095 1758 | case0021_slice096 1759 | case0021_slice097 1760 | case0021_slice098 1761 | case0021_slice099 1762 | case0021_slice100 1763 | case0021_slice101 1764 | case0021_slice102 1765 | case0021_slice103 1766 | case0021_slice104 1767 | case0021_slice105 1768 | case0021_slice106 1769 | case0021_slice107 1770 | case0021_slice108 1771 | case0021_slice109 1772 | case0021_slice110 1773 | case0021_slice111 1774 | case0021_slice112 1775 | case0021_slice113 1776 | case0021_slice114 1777 | case0021_slice115 1778 | case0021_slice116 1779 | case0021_slice117 1780 | case0021_slice118 1781 | case0021_slice119 1782 | case0021_slice120 1783 | case0021_slice121 1784 | case0021_slice122 1785 | case0021_slice123 1786 | case0021_slice124 1787 | case0021_slice125 1788 | case0021_slice126 1789 | case0021_slice127 1790 | case0021_slice128 1791 | case0021_slice129 1792 | case0021_slice130 1793 | case0021_slice131 1794 | case0021_slice132 1795 | case0021_slice133 1796 | case0021_slice134 1797 | case0021_slice135 1798 | case0021_slice136 1799 | case0021_slice137 1800 | case0021_slice138 1801 | case0021_slice139 1802 | case0021_slice140 1803 | case0021_slice141 1804 | case0021_slice142 1805 | case0006_slice000 1806 | case0006_slice001 1807 | case0006_slice002 1808 | case0006_slice003 1809 | case0006_slice004 1810 | case0006_slice005 1811 | case0006_slice006 1812 | case0006_slice007 1813 | case0006_slice008 1814 | case0006_slice009 1815 | case0006_slice010 1816 | case0006_slice011 1817 | case0006_slice012 1818 | case0006_slice013 1819 | case0006_slice014 1820 | case0006_slice015 1821 | case0006_slice016 1822 | case0006_slice017 1823 | case0006_slice018 1824 | case0006_slice019 1825 | case0006_slice020 1826 | case0006_slice021 1827 | case0006_slice022 1828 | case0006_slice023 1829 | case0006_slice024 1830 | case0006_slice025 1831 | case0006_slice026 1832 | case0006_slice027 1833 | case0006_slice028 1834 | case0006_slice029 1835 | case0006_slice030 1836 | case0006_slice031 1837 | case0006_slice032 1838 | case0006_slice033 1839 | case0006_slice034 1840 | case0006_slice035 1841 | case0006_slice036 1842 | case0006_slice037 1843 | case0006_slice038 1844 | case0006_slice039 1845 | case0006_slice040 1846 | case0006_slice041 1847 | case0006_slice042 1848 | case0006_slice043 1849 | case0006_slice044 1850 | case0006_slice045 1851 | case0006_slice046 1852 | case0006_slice047 1853 | case0006_slice048 1854 | case0006_slice049 1855 | case0006_slice050 1856 | case0006_slice051 1857 | case0006_slice052 1858 | case0006_slice053 1859 | case0006_slice054 1860 | case0006_slice055 1861 | case0006_slice056 1862 | case0006_slice057 1863 | case0006_slice058 1864 | case0006_slice059 1865 | case0006_slice060 1866 | case0006_slice061 1867 | case0006_slice062 1868 | case0006_slice063 1869 | case0006_slice064 1870 | case0006_slice065 1871 | case0006_slice066 1872 | case0006_slice067 1873 | case0006_slice068 1874 | case0006_slice069 1875 | case0006_slice070 1876 | case0006_slice071 1877 | case0006_slice072 1878 | case0006_slice073 1879 | case0006_slice074 1880 | case0006_slice075 1881 | case0006_slice076 1882 | case0006_slice077 1883 | case0006_slice078 1884 | case0006_slice079 1885 | case0006_slice080 1886 | case0006_slice081 1887 | case0006_slice082 1888 | case0006_slice083 1889 | case0006_slice084 1890 | case0006_slice085 1891 | case0006_slice086 1892 | case0006_slice087 1893 | case0006_slice088 1894 | case0006_slice089 1895 | case0006_slice090 1896 | case0006_slice091 1897 | case0006_slice092 1898 | case0006_slice093 1899 | case0006_slice094 1900 | case0006_slice095 1901 | case0006_slice096 1902 | case0006_slice097 1903 | case0006_slice098 1904 | case0006_slice099 1905 | case0006_slice100 1906 | case0006_slice101 1907 | case0006_slice102 1908 | case0006_slice103 1909 | case0006_slice104 1910 | case0006_slice105 1911 | case0006_slice106 1912 | case0006_slice107 1913 | case0006_slice108 1914 | case0006_slice109 1915 | case0006_slice110 1916 | case0006_slice111 1917 | case0006_slice112 1918 | case0006_slice113 1919 | case0006_slice114 1920 | case0006_slice115 1921 | case0006_slice116 1922 | case0006_slice117 1923 | case0006_slice118 1924 | case0006_slice119 1925 | case0006_slice120 1926 | case0006_slice121 1927 | case0006_slice122 1928 | case0006_slice123 1929 | case0006_slice124 1930 | case0006_slice125 1931 | case0006_slice126 1932 | case0006_slice127 1933 | case0006_slice128 1934 | case0006_slice129 1935 | case0006_slice130 1936 | case0027_slice000 1937 | case0027_slice001 1938 | case0027_slice002 1939 | case0027_slice003 1940 | case0027_slice004 1941 | case0027_slice005 1942 | case0027_slice006 1943 | case0027_slice007 1944 | case0027_slice008 1945 | case0027_slice009 1946 | case0027_slice010 1947 | case0027_slice011 1948 | case0027_slice012 1949 | case0027_slice013 1950 | case0027_slice014 1951 | case0027_slice015 1952 | case0027_slice016 1953 | case0027_slice017 1954 | case0027_slice018 1955 | case0027_slice019 1956 | case0027_slice020 1957 | case0027_slice021 1958 | case0027_slice022 1959 | case0027_slice023 1960 | case0027_slice024 1961 | case0027_slice025 1962 | case0027_slice026 1963 | case0027_slice027 1964 | case0027_slice028 1965 | case0027_slice029 1966 | case0027_slice030 1967 | case0027_slice031 1968 | case0027_slice032 1969 | case0027_slice033 1970 | case0027_slice034 1971 | case0027_slice035 1972 | case0027_slice036 1973 | case0027_slice037 1974 | case0027_slice038 1975 | case0027_slice039 1976 | case0027_slice040 1977 | case0027_slice041 1978 | case0027_slice042 1979 | case0027_slice043 1980 | case0027_slice044 1981 | case0027_slice045 1982 | case0027_slice046 1983 | case0027_slice047 1984 | case0027_slice048 1985 | case0027_slice049 1986 | case0027_slice050 1987 | case0027_slice051 1988 | case0027_slice052 1989 | case0027_slice053 1990 | case0027_slice054 1991 | case0027_slice055 1992 | case0027_slice056 1993 | case0027_slice057 1994 | case0027_slice058 1995 | case0027_slice059 1996 | case0027_slice060 1997 | case0027_slice061 1998 | case0027_slice062 1999 | case0027_slice063 2000 | case0027_slice064 2001 | case0027_slice065 2002 | case0027_slice066 2003 | case0027_slice067 2004 | case0027_slice068 2005 | case0027_slice069 2006 | case0027_slice070 2007 | case0027_slice071 2008 | case0027_slice072 2009 | case0027_slice073 2010 | case0027_slice074 2011 | case0027_slice075 2012 | case0027_slice076 2013 | case0027_slice077 2014 | case0027_slice078 2015 | case0027_slice079 2016 | case0027_slice080 2017 | case0027_slice081 2018 | case0027_slice082 2019 | case0027_slice083 2020 | case0027_slice084 2021 | case0027_slice085 2022 | case0027_slice086 2023 | case0027_slice087 2024 | case0028_slice000 2025 | case0028_slice001 2026 | case0028_slice002 2027 | case0028_slice003 2028 | case0028_slice004 2029 | case0028_slice005 2030 | case0028_slice006 2031 | case0028_slice007 2032 | case0028_slice008 2033 | case0028_slice009 2034 | case0028_slice010 2035 | case0028_slice011 2036 | case0028_slice012 2037 | case0028_slice013 2038 | case0028_slice014 2039 | case0028_slice015 2040 | case0028_slice016 2041 | case0028_slice017 2042 | case0028_slice018 2043 | case0028_slice019 2044 | case0028_slice020 2045 | case0028_slice021 2046 | case0028_slice022 2047 | case0028_slice023 2048 | case0028_slice024 2049 | case0028_slice025 2050 | case0028_slice026 2051 | case0028_slice027 2052 | case0028_slice028 2053 | case0028_slice029 2054 | case0028_slice030 2055 | case0028_slice031 2056 | case0028_slice032 2057 | case0028_slice033 2058 | case0028_slice034 2059 | case0028_slice035 2060 | case0028_slice036 2061 | case0028_slice037 2062 | case0028_slice038 2063 | case0028_slice039 2064 | case0028_slice040 2065 | case0028_slice041 2066 | case0028_slice042 2067 | case0028_slice043 2068 | case0028_slice044 2069 | case0028_slice045 2070 | case0028_slice046 2071 | case0028_slice047 2072 | case0028_slice048 2073 | case0028_slice049 2074 | case0028_slice050 2075 | case0028_slice051 2076 | case0028_slice052 2077 | case0028_slice053 2078 | case0028_slice054 2079 | case0028_slice055 2080 | case0028_slice056 2081 | case0028_slice057 2082 | case0028_slice058 2083 | case0028_slice059 2084 | case0028_slice060 2085 | case0028_slice061 2086 | case0028_slice062 2087 | case0028_slice063 2088 | case0028_slice064 2089 | case0028_slice065 2090 | case0028_slice066 2091 | case0028_slice067 2092 | case0028_slice068 2093 | case0028_slice069 2094 | case0028_slice070 2095 | case0028_slice071 2096 | case0028_slice072 2097 | case0028_slice073 2098 | case0028_slice074 2099 | case0028_slice075 2100 | case0028_slice076 2101 | case0028_slice077 2102 | case0028_slice078 2103 | case0028_slice079 2104 | case0028_slice080 2105 | case0028_slice081 2106 | case0028_slice082 2107 | case0028_slice083 2108 | case0028_slice084 2109 | case0028_slice085 2110 | case0028_slice086 2111 | case0028_slice087 2112 | case0028_slice088 2113 | case0037_slice000 2114 | case0037_slice001 2115 | case0037_slice002 2116 | case0037_slice003 2117 | case0037_slice004 2118 | case0037_slice005 2119 | case0037_slice006 2120 | case0037_slice007 2121 | case0037_slice008 2122 | case0037_slice009 2123 | case0037_slice010 2124 | case0037_slice011 2125 | case0037_slice012 2126 | case0037_slice013 2127 | case0037_slice014 2128 | case0037_slice015 2129 | case0037_slice016 2130 | case0037_slice017 2131 | case0037_slice018 2132 | case0037_slice019 2133 | case0037_slice020 2134 | case0037_slice021 2135 | case0037_slice022 2136 | case0037_slice023 2137 | case0037_slice024 2138 | case0037_slice025 2139 | case0037_slice026 2140 | case0037_slice027 2141 | case0037_slice028 2142 | case0037_slice029 2143 | case0037_slice030 2144 | case0037_slice031 2145 | case0037_slice032 2146 | case0037_slice033 2147 | case0037_slice034 2148 | case0037_slice035 2149 | case0037_slice036 2150 | case0037_slice037 2151 | case0037_slice038 2152 | case0037_slice039 2153 | case0037_slice040 2154 | case0037_slice041 2155 | case0037_slice042 2156 | case0037_slice043 2157 | case0037_slice044 2158 | case0037_slice045 2159 | case0037_slice046 2160 | case0037_slice047 2161 | case0037_slice048 2162 | case0037_slice049 2163 | case0037_slice050 2164 | case0037_slice051 2165 | case0037_slice052 2166 | case0037_slice053 2167 | case0037_slice054 2168 | case0037_slice055 2169 | case0037_slice056 2170 | case0037_slice057 2171 | case0037_slice058 2172 | case0037_slice059 2173 | case0037_slice060 2174 | case0037_slice061 2175 | case0037_slice062 2176 | case0037_slice063 2177 | case0037_slice064 2178 | case0037_slice065 2179 | case0037_slice066 2180 | case0037_slice067 2181 | case0037_slice068 2182 | case0037_slice069 2183 | case0037_slice070 2184 | case0037_slice071 2185 | case0037_slice072 2186 | case0037_slice073 2187 | case0037_slice074 2188 | case0037_slice075 2189 | case0037_slice076 2190 | case0037_slice077 2191 | case0037_slice078 2192 | case0037_slice079 2193 | case0037_slice080 2194 | case0037_slice081 2195 | case0037_slice082 2196 | case0037_slice083 2197 | case0037_slice084 2198 | case0037_slice085 2199 | case0037_slice086 2200 | case0037_slice087 2201 | case0037_slice088 2202 | case0037_slice089 2203 | case0037_slice090 2204 | case0037_slice091 2205 | case0037_slice092 2206 | case0037_slice093 2207 | case0037_slice094 2208 | case0037_slice095 2209 | case0037_slice096 2210 | case0037_slice097 2211 | case0037_slice098 2212 | -------------------------------------------------------------------------------- /networks/ScaleFormer.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import numpy as np 4 | 5 | 6 | class Conv2dReLU(nn.Sequential): 7 | def __init__( 8 | self, 9 | in_channels, 10 | out_channels, 11 | kernel_size, 12 | padding=0, 13 | stride=1, 14 | use_batchnorm=True, 15 | ): 16 | conv = nn.Conv2d( 17 | in_channels, 18 | out_channels, 19 | kernel_size, 20 | stride=stride, 21 | padding=padding, 22 | bias=not (use_batchnorm), 23 | ) 24 | relu = nn.ReLU(inplace=True) 25 | 26 | bn = nn.BatchNorm2d(out_channels) 27 | 28 | super(Conv2dReLU, self).__init__(conv, bn, relu) 29 | 30 | 31 | class ConvBNReLU(nn.Module): 32 | def __init__(self, c_in, c_out, kernel_size, stride=1, padding=1, activation=True): 33 | super(ConvBNReLU, self).__init__() 34 | self.conv = nn.Conv2d( 35 | c_in, c_out, kernel_size=kernel_size, stride=stride, padding=padding, bias=False 36 | ) 37 | self.bn = nn.BatchNorm2d(c_out) 38 | self.relu = nn.ReLU() 39 | self.activation = activation 40 | 41 | def forward(self, x): 42 | x = self.conv(x) 43 | x = self.bn(x) 44 | if self.activation: 45 | x = self.relu(x) 46 | return x 47 | 48 | 49 | class DoubleConv(nn.Module): 50 | 51 | def __init__(self, cin, cout): 52 | super(DoubleConv, self).__init__() 53 | self.conv = nn.Sequential( 54 | ConvBNReLU(cin, cout, 3, 1, padding=1), 55 | ConvBNReLU(cout, cout, 3, stride=1, padding=1, activation=False) 56 | ) 57 | self.conv1 = nn.Conv2d(cout, cout, 1) 58 | self.relu = nn.ReLU() 59 | self.bn = nn.BatchNorm2d(cout) 60 | 61 | def forward(self, x): 62 | x = self.conv(x) 63 | h = x 64 | x = self.conv1(x) 65 | x = self.bn(x) 66 | x = h + x 67 | x = self.relu(x) 68 | return x 69 | 70 | 71 | class DWCONV(nn.Module): 72 | """ 73 | Depthwise Convolution 74 | """ 75 | def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1, groups=None): 76 | super(DWCONV, self).__init__() 77 | if groups == None: 78 | groups = in_channels 79 | self.depthwise = nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, 80 | stride=stride, padding=padding, groups=groups, bias=True 81 | ) 82 | 83 | def forward(self, x): 84 | result = self.depthwise(x) 85 | return result 86 | 87 | 88 | class UEncoder(nn.Module): 89 | 90 | def __init__(self): 91 | super(UEncoder, self).__init__() 92 | self.res1 = DoubleConv(3, 64) 93 | self.pool1 = nn.MaxPool2d(2) 94 | self.res2 = DoubleConv(64, 128) 95 | self.pool2 = nn.MaxPool2d(2) 96 | self.res3 = DoubleConv(128, 256) 97 | self.pool3 = nn.MaxPool2d(2) 98 | self.res4 = DoubleConv(256, 512) 99 | self.pool4 = nn.MaxPool2d(2) 100 | self.res5 = DoubleConv(512, 1024) 101 | self.pool5 = nn.MaxPool2d(2) 102 | 103 | def forward(self, x): 104 | features = [] 105 | x = self.res1(x) 106 | features.append(x) # (224, 224, 64) 107 | x = self.pool1(x) # (112, 112, 64) 108 | 109 | x = self.res2(x) 110 | features.append(x) # (112, 112, 128) 111 | x = self.pool2(x) # (56, 56, 128) 112 | 113 | x = self.res3(x) 114 | features.append(x) # (56, 56, 256) 115 | x = self.pool3(x) # (28, 28, 256) 116 | 117 | x = self.res4(x) 118 | features.append(x) # (28, 28, 512) 119 | x = self.pool4(x) # (14, 14, 512) 120 | 121 | x = self.res5(x) 122 | features.append(x) # (14, 14, 1024) 123 | x = self.pool5(x) # (7, 7, 1024) 124 | features.append(x) 125 | return features 126 | 127 | 128 | class Dual_axis(nn.Module): 129 | 130 | def __init__(self, input_size, channels, d_h, d_v, d_w, heads, dropout): 131 | super(Dual_axis, self).__init__() 132 | self.dwconv_qh = DWCONV(channels, channels) 133 | self.dwconv_kh = DWCONV(channels, channels) 134 | self.pool_qh = nn.AdaptiveAvgPool2d((None, 1)) 135 | self.pool_kh = nn.AdaptiveAvgPool2d((None, 1)) 136 | self.fc_qh = nn.Linear(channels, heads * d_h) 137 | self.fc_kh = nn.Linear(channels, heads * d_h) 138 | 139 | self.dwconv_v = DWCONV(channels, channels) 140 | self.fc_v = nn.Linear(channels, heads * d_v) 141 | 142 | self.dwconv_qw = DWCONV(channels, channels) 143 | self.dwconv_kw = DWCONV(channels, channels) 144 | self.pool_qw = nn.AdaptiveAvgPool2d((1, None)) 145 | self.pool_kw = nn.AdaptiveAvgPool2d((1, None)) 146 | self.fc_qw = nn.Linear(channels, heads * d_w) 147 | self.fc_kw = nn.Linear(channels, heads * d_w) 148 | 149 | self.fc_o = nn.Linear(heads * d_v, channels) 150 | 151 | self.channels = channels 152 | self.d_h = d_h 153 | self.d_v = d_v 154 | self.d_w = d_w 155 | self.heads = heads 156 | self.dropout = dropout 157 | self.scaled_factor_h = self.d_h ** -0.5 158 | self.scaled_factor_w = self.d_w ** -0.5 159 | self.Bh = nn.Parameter(torch.Tensor(1, self.heads, input_size, input_size), requires_grad = True) 160 | self.Bw = nn.Parameter(torch.Tensor(1, self.heads, input_size, input_size), requires_grad=True) 161 | 162 | def forward(self, x): 163 | b, c, h, w = x.shape 164 | 165 | # Get qh, kh, v, qw, kw 166 | qh = self.dwconv_qh(x) # [b, c, h, w] 167 | # qh = x 168 | qh = self.pool_qh(qh).squeeze(-1).permute(0, 2, 1) # [b, h, c] 169 | qh = self.fc_qh(qh) # [b, h, heads*d_h] 170 | qh = qh.view(b, h, self.heads, self.d_h).permute(0, 2, 1, 3).contiguous() # [b, heads, h, d_h] -> [3, 2, 112, 23] 171 | 172 | kh = self.dwconv_kh(x) # [b, c, h, w] 173 | # kh = x 174 | kh = self.pool_kh(kh).squeeze(-1).permute(0, 2, 1) # [b, h, c] 175 | kh = self.fc_kh(kh) # [b, heads*d_h, h] 176 | kh = kh.view(b, h, self.heads, self.d_h).permute(0, 2, 1, 3).contiguous() # [b, heads, h, d_h] -> [3, 2, 112, 23] 177 | 178 | attn_h = torch.einsum('... i d, ... j d -> ... i j', qh, kh) * self.scaled_factor_h 179 | attn_h = attn_h + self.Bh 180 | attn_h = torch.softmax(attn_h, dim=-1) # [b, heads, h, h] -> [3, 2, 112, 112] 181 | 182 | v = self.dwconv_v(x) 183 | # v = x 184 | v_b, v_c, v_h, v_w = v.shape 185 | v = v.view(v_b, v_c, v_h * v_w).permute(0, 2, 1).contiguous() 186 | v = self.fc_v(v) 187 | v = v.view(v_b, v_h , v_w, self.heads, self.d_v).permute(0, 3, 1, 2, 4).contiguous() 188 | v = v.view(v_b, self.heads, v_h, v_w *self.d_v).contiguous() # [b, heads, h, w*d_v] -> [3, 2, 112, 1288] 189 | 190 | qw = self.dwconv_qw(x) # [b, c, h, w] 191 | # qw = x 192 | qw = self.pool_qw(qw).squeeze(-2).permute(0, 2, 1) # [b, w, c] 193 | qw = self.fc_qw(qw) # [b, heads*d_w, w] 194 | qw = qw.view(b, w, self.heads, self.d_w).permute(0, 2, 1, 3).contiguous() # [b, heads, w, d_w] -> [3, 2, 56, 23] 195 | 196 | kw = self.dwconv_kw(x) # [b, c, h, w] 197 | # kw = x 198 | kw = self.pool_kw(kw).squeeze(-2).permute(0, 2, 1) # [b, w, c] 199 | kw = self.fc_kw(kw) # [b, heads*d_w, w] 200 | kw = kw.view(b, w, self.heads, self.d_w).permute(0, 2, 1, 3).contiguous() # [b, heads, w, d_w] -> [3, 2, 56, 23] 201 | 202 | attn_w = torch.einsum('... i d, ... j d -> ... i j', qw, kw) * self.scaled_factor_w 203 | attn_w = attn_w + self.Bw 204 | attn_w = torch.softmax(attn_w, dim=-1) # [b, heads, w, w] -> [3, 2, 56, 56] 205 | 206 | # Attention 207 | result = torch.matmul(attn_h, v) # [b, heads, h, w*d_v] -> [3, 2, 112, 1288] 208 | result = result.view(b, self.heads, h, w, self.d_v).permute(0, 1, 2, 4, 3).contiguous() 209 | result = result.view(b, self.heads, h * self.d_v, w).contiguous() # [b, heads, h*d_v, w] 210 | result = torch.matmul(result, attn_w) # [b, heads, h*d_v, w] -> [3, 2, 2576, 56] 211 | result = result.view(b, self.heads, h, self.d_v, w).permute(0, 2, 4, 1, 3).contiguous() 212 | result = result.view(b, h * w, self.heads * self.d_v).contiguous() # [b, h*w, heads*w] -> [3, 2, 2576, 56] 213 | result = self.fc_o(result).view(b, self.channels, h, w) # [b, channels, h, w] 214 | 215 | return result 216 | 217 | 218 | class FFN_MultiLN(nn.Module): 219 | def __init__(self, in_channels, img_size, R, drop=0.): 220 | super(FFN_MultiLN, self).__init__() 221 | exp_channels = in_channels * R 222 | self.h = img_size 223 | self.w = img_size 224 | self.fc1 = nn.Linear(in_channels, exp_channels) 225 | self.dwconv = nn.Sequential( 226 | DWCONV(exp_channels, exp_channels) 227 | ) 228 | self.ln1 = nn.LayerNorm(exp_channels, eps=1e-6) 229 | self.ln2 = nn.LayerNorm(exp_channels, eps=1e-6) 230 | self.ln3 = nn.LayerNorm(exp_channels, eps=1e-6) 231 | self.act1 = nn.GELU() 232 | self.fc2 = nn.Linear(exp_channels, in_channels) 233 | 234 | def forward(self, x): 235 | x = self.fc1(x) 236 | b, n, c = x.shape # [b, hw, c] 237 | h = x 238 | 239 | x = x.view(b, self.h, self.w, c).permute(0, 3, 1, 2) # [b, c, h, w] 240 | x = self.dwconv(x).view(b, c, self.h * self.w).permute(0, 2, 1) 241 | x = self.ln1(x + h) 242 | x = self.ln2(x + h) 243 | x = self.ln3(x + h) 244 | x = self.act1(x) 245 | 246 | x = self.fc2(x) 247 | return x 248 | 249 | 250 | class IntraTransBlock(nn.Module): 251 | def __init__(self, img_size, stride, d_h, d_v, d_w, num_heads, R = 4, in_channels = 46): 252 | super(IntraTransBlock, self).__init__() 253 | # Lightweight MHSA 254 | self.SlayerNorm = nn.LayerNorm(in_channels, eps=1e-6) 255 | self.ElayerNorm = nn.LayerNorm(in_channels, eps=1e-6) 256 | self.lmhsa = Dual_axis(img_size, in_channels, d_h, d_v, d_w, num_heads, 0.0) 257 | # Inverted Residual FFN 258 | self.irffn = FFN_MultiLN(in_channels, img_size, R) 259 | 260 | def forward(self, x): 261 | x_pre = x # (B, N, H) 262 | b, c, h, w = x.shape 263 | x = x.view(b, c, h * w).permute(0, 2, 1).contiguous() 264 | x = self.SlayerNorm(x) 265 | x = x.view(b, h, w, c).permute(0, 3, 1, 2).contiguous() 266 | x = self.lmhsa(x) 267 | x = x_pre + x 268 | 269 | x_pre = x 270 | x = x.view(b, c, h * w).permute(0, 2, 1).contiguous() 271 | x = self.ElayerNorm(x) 272 | x = self.irffn(x) 273 | x = x.view(b, h, w, c).permute(0, 3, 1, 2).contiguous() 274 | x = x_pre + x 275 | 276 | return x 277 | 278 | 279 | class DecoderBlock(nn.Module): 280 | def __init__( 281 | self, 282 | in_channels, 283 | out_channels, 284 | use_batchnorm=True, 285 | ): 286 | super().__init__() 287 | self.conv1 = Conv2dReLU( 288 | in_channels, 289 | out_channels, 290 | kernel_size=3, 291 | padding=1, 292 | use_batchnorm=use_batchnorm, 293 | ) 294 | self.conv2 = Conv2dReLU( 295 | out_channels, 296 | out_channels, 297 | kernel_size=3, 298 | padding=1, 299 | use_batchnorm=use_batchnorm, 300 | ) 301 | self.up = nn.UpsamplingBilinear2d(scale_factor=2) 302 | 303 | def forward(self, x, skip=None): 304 | x = self.up(x) 305 | 306 | if skip is not None: 307 | x = torch.cat([x, skip], dim=1) 308 | x = self.conv1(x) 309 | x = self.conv2(x) 310 | return x 311 | 312 | 313 | class SegmentationHead(nn.Sequential): 314 | 315 | def __init__(self, in_channels, out_channels, kernel_size=3, upsampling=1): 316 | conv2d = nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, padding=kernel_size // 2) 317 | upsampling = nn.UpsamplingBilinear2d(scale_factor=upsampling) if upsampling > 1 else nn.Identity() 318 | super().__init__(conv2d, upsampling) 319 | 320 | 321 | class MLP(nn.Module): 322 | 323 | def __init__(self, dim): 324 | super(MLP, self).__init__() 325 | self.fc1 = nn.Linear(dim, dim*4) 326 | self.fc2 = nn.Linear(dim*4, dim) 327 | self.act = nn.functional.gelu 328 | self.dropout = nn.Dropout(0.1) 329 | 330 | def forward(self, x): 331 | x = self.fc1(x) 332 | x = self.act(x) 333 | x = self.dropout(x) 334 | x = self.fc2(x) 335 | x = self.dropout(x) 336 | return x 337 | 338 | 339 | class MultiScaleAtten(nn.Module): 340 | def __init__(self, dim): 341 | super(MultiScaleAtten, self).__init__() 342 | self.qkv_linear = nn.Linear(dim, dim * 3) 343 | self.softmax = nn.Softmax(dim=-1) 344 | self.proj = nn.Linear(dim, dim) 345 | self.num_head = 8 346 | self.scale = (dim // self.num_head)**0.5 347 | 348 | def forward(self, x): 349 | B, num_blocks, _, _, C = x.shape # (B, num_blocks, num_blocks, N, C) 350 | qkv = self.qkv_linear(x).reshape(B, num_blocks, num_blocks, -1, 3, self.num_head, C // self.num_head).permute(4, 0, 1, 2, 5, 3, 6).contiguous() # (3, B, num_block, num_block, head, N, C) 351 | q, k, v = qkv[0], qkv[1], qkv[2] 352 | atten = q @ k.transpose(-1, -2).contiguous() 353 | atten = self.softmax(atten) 354 | atten_value = (atten @ v).transpose(-2, -3).contiguous().reshape(B, num_blocks, num_blocks, -1, C) 355 | atten_value = self.proj(atten_value) # (B, num_block, num_block, N, C) 356 | return atten_value 357 | 358 | 359 | class InterTransBlock(nn.Module): 360 | def __init__(self, dim): 361 | super(InterTransBlock, self).__init__() 362 | self.SlayerNorm_1 = nn.LayerNorm(dim, eps=1e-6) 363 | self.SlayerNorm_2 = nn.LayerNorm(dim, eps=1e-6) 364 | self.Attention = MultiScaleAtten(dim) 365 | self.FFN = MLP(dim) 366 | 367 | def forward(self, x): 368 | h = x # (B, N, H) 369 | x = self.SlayerNorm_1(x) 370 | 371 | x = self.Attention(x) # padding 到right_size 372 | x = h + x 373 | 374 | h = x 375 | x = self.SlayerNorm_2(x) 376 | 377 | x = self.FFN(x) 378 | x = h + x 379 | 380 | return x 381 | 382 | 383 | class SpatialAwareTrans(nn.Module): 384 | def __init__(self, dim=256, num=1): # (224*64, 112*128, 56*256, 28*256, 14*512) dim = 256 385 | super(SpatialAwareTrans, self).__init__() 386 | self.ini_win_size = 2 387 | self.channels = [256, 512, 1024, 1024] 388 | self.dim = dim 389 | self.depth = 4 390 | self.fc_module = nn.ModuleList() 391 | self.fc_rever_module = nn.ModuleList() 392 | self.num = num 393 | for i in range(self.depth): 394 | self.fc_module.append(nn.Linear(self.channels[i], self.dim)) 395 | 396 | for i in range(self.depth): 397 | self.fc_rever_module.append(nn.Linear(self.dim, self.channels[i])) 398 | 399 | self.group_attention = [] 400 | for i in range(self.num): 401 | self.group_attention.append(InterTransBlock(dim)) 402 | self.group_attention = nn.Sequential(*self.group_attention) 403 | self.split_list = [8 * 8, 4 * 4, 2 * 2, 1 * 1] 404 | 405 | def forward(self, x): 406 | # project channel dimension to 256 407 | x = [self.fc_module[i](item.permute(0, 2, 3, 1)) for i, item in enumerate(x)] # [(B, H, W, C)] 408 | # Patch Matching 409 | for j, item in enumerate(x): 410 | B, H, W, C = item.shape 411 | win_size = self.ini_win_size ** (self.depth - j - 1) 412 | item = item.reshape(B, H // win_size, win_size, W // win_size, win_size, C).permute(0, 1, 3, 2, 4, 5).contiguous() 413 | item = item.reshape(B, H // win_size, W // win_size, win_size * win_size, C).contiguous() 414 | x[j] = item 415 | x = tuple(x) 416 | x = torch.cat(x, dim=-2) # (B, H // win, W // win, N, C) 417 | # Scale fusion 418 | for i in range(self.num): 419 | x = self.group_attention[i](x) # (B, H // win_size, W // win_size, win_size*win_size, C) 420 | 421 | x = torch.split(x, self.split_list, dim=-2) 422 | x = list(x) 423 | # patch reversion 424 | for j, item in enumerate(x): 425 | B, num_blocks, _, N, C = item.shape 426 | win_size = self.ini_win_size ** (self.depth - j - 1) 427 | item = item.reshape(B, num_blocks, num_blocks, win_size, win_size, C).permute(0, 1, 3, 2, 4, 5).contiguous().reshape(B, num_blocks*win_size, num_blocks*win_size, C) 428 | item = self.fc_rever_module[j](item).permute(0, 3, 1, 2).contiguous() 429 | x[j] = item 430 | return x 431 | 432 | 433 | class ParallEncoder(nn.Module): 434 | def __init__(self): 435 | super(ParallEncoder, self).__init__() 436 | self.Encoder1 = UEncoder() 437 | self.Encoder2 = TransEncoder() 438 | self.fusion_module = nn.ModuleList() 439 | self.num_module = 4 440 | self.channel_list = [128, 256, 512, 1024] 441 | self.fusion_list = [256, 512, 1024, 1024] 442 | self.inter_trans = SpatialAwareTrans(dim=256) 443 | 444 | self.squeelayers = nn.ModuleList() 445 | for i in range(self.num_module): 446 | self.squeelayers.append( 447 | nn.Conv2d(self.fusion_list[i]*2, self.fusion_list[i], 1, 1) 448 | ) 449 | 450 | def forward(self, x): 451 | skips = [] 452 | features = self.Encoder1(x) 453 | feature_trans = self.Encoder2(features) 454 | feature_trans = self.inter_trans(feature_trans) 455 | 456 | skips.extend(features[:2]) 457 | for i in range(self.num_module): 458 | skip = self.squeelayers[i](torch.cat((feature_trans[i], features[i + 2]), dim=1)) 459 | skips.append(skip) 460 | return skips 461 | 462 | 463 | class TransEncoder(nn.Module): 464 | def __init__(self): 465 | super(TransEncoder, self).__init__() 466 | self.block_layer = [2, 2, 2, 1] 467 | self.size = [56, 28, 14, 7] 468 | self.channels = [256, 512, 1024, 1024] 469 | self.R = 4 470 | stage1 = [] 471 | for _ in range(self.block_layer[0]): 472 | stage1.append( 473 | IntraTransBlock( 474 | img_size=self.size[0], 475 | in_channels=self.channels[0], 476 | stride=2, 477 | d_h=self.channels[0] // 8, 478 | d_v=self.channels[0] // 8, 479 | d_w=self.channels[0] // 8, 480 | num_heads=8, 481 | ) 482 | ) 483 | self.stage1 = nn.Sequential(*stage1) 484 | stage2 = [] 485 | for _ in range(self.block_layer[1]): 486 | stage2.append( 487 | IntraTransBlock( 488 | img_size=self.size[1], 489 | in_channels=self.channels[1], 490 | stride=2, 491 | d_h=self.channels[1] // 8, 492 | d_v=self.channels[1] // 8, 493 | d_w=self.channels[1] // 8, 494 | num_heads=8, 495 | ) 496 | ) 497 | self.stage2 = nn.Sequential(*stage2) 498 | stage3 = [] 499 | for _ in range(self.block_layer[2]): 500 | stage3.append( 501 | IntraTransBlock( 502 | img_size=self.size[2], 503 | in_channels=self.channels[2], 504 | stride=2, 505 | d_h=self.channels[2] // 8, 506 | d_v=self.channels[2] // 8, 507 | d_w=self.channels[2] // 8, 508 | num_heads=8, 509 | ) 510 | ) 511 | self.stage3 = nn.Sequential(*stage3) 512 | stage4 = [] 513 | for _ in range(self.block_layer[3]): 514 | stage4.append( 515 | IntraTransBlock( 516 | img_size=self.size[3], 517 | in_channels=self.channels[3], 518 | stride=1, 519 | d_h=self.channels[3] // 8, 520 | d_v=self.channels[3] // 8, 521 | d_w=self.channels[3] // 8, 522 | num_heads=8, 523 | ) 524 | ) 525 | self.stage4 = nn.Sequential(*stage4) 526 | self.downlayers = nn.ModuleList() 527 | for i in range(len(self.block_layer)-1): 528 | self.downlayers.append( 529 | ConvBNReLU(self.channels[i], self.channels[i]*2, 2, 2, padding=0) 530 | ) 531 | 532 | self.squeelayers = nn.ModuleList() 533 | 534 | for i in range(len(self.block_layer)-2): 535 | self.squeelayers.append( 536 | nn.Conv2d(self.channels[i]*4, self.channels[i]*2, 1, 1) 537 | ) 538 | self.squeeze_final = nn.Conv2d(self.channels[-1]*3, self.channels[-1], 1, 1) 539 | 540 | def forward(self, x): 541 | _, _, feature0, feature1, feature2, feature3 = x 542 | feature0_trans = self.stage1(feature0) # (56, 56, 256) 543 | feature0_trans_down = self.downlayers[0](feature0_trans) # (28, 28, 512) 544 | 545 | feature1_in = torch.cat((feature1, feature0_trans_down), dim=1) 546 | feature1_in = self.squeelayers[0](feature1_in) 547 | feature1_trans = self.stage2(feature1_in) 548 | feature1_trans_down = self.downlayers[1](feature1_trans) 549 | 550 | feature2_in = torch.cat((feature2, feature1_trans_down), dim=1) 551 | feature2_in = self.squeelayers[1](feature2_in) 552 | feature2_trans = self.stage3(feature2_in) 553 | feature2_trans_down = self.downlayers[2](feature2_trans) 554 | 555 | feature3_in = torch.cat((feature3, feature2_trans_down), dim=1) 556 | feature3_in = self.squeeze_final(feature3_in) 557 | feature3_trans = self.stage4(feature3_in) 558 | 559 | return [feature0_trans, feature1_trans, feature2_trans, feature3_trans] 560 | 561 | 562 | class ScaleFormer(nn.Module): 563 | def __init__(self, n_classes): 564 | super(ScaleFormer, self).__init__() 565 | self.p_encoder = ParallEncoder() 566 | self.encoder_channels = [1024, 512, 256, 128, 64] 567 | self.decoder1 =DecoderBlock(self.encoder_channels[0]+self.encoder_channels[0], self.encoder_channels[1]) 568 | self.decoder2 =DecoderBlock(self.encoder_channels[1]+self.encoder_channels[1], self.encoder_channels[2]) 569 | self.decoder3 =DecoderBlock(self.encoder_channels[2]+self.encoder_channels[2], self.encoder_channels[3]) 570 | self.decoder4 = DecoderBlock(self.encoder_channels[3]+self.encoder_channels[3], self.encoder_channels[4]) 571 | self.segmentation_head = SegmentationHead( 572 | in_channels=64, 573 | out_channels=n_classes, 574 | kernel_size=3, 575 | ) 576 | self.decoder_final = DecoderBlock(in_channels=64, out_channels=64) 577 | 578 | def forward(self, x): 579 | if x.size()[1] == 1: 580 | x = x.repeat(1, 3, 1, 1) 581 | encoder_skips = self.p_encoder(x) 582 | 583 | x1_up = self.decoder1(encoder_skips[-1], encoder_skips[-2]) 584 | x2_up = self.decoder2(x1_up, encoder_skips[-3]) 585 | x3_up = self.decoder3(x2_up, encoder_skips[-4]) 586 | x4_up = self.decoder4(x3_up, encoder_skips[-5]) 587 | x_final = self.decoder_final(x4_up, None) 588 | logits = self.segmentation_head(x_final) 589 | return logits 590 | 591 | # model = ScaleFormer(n_classes=9) 592 | # inout = torch.ones((1, 1, 224, 224)) 593 | # out = model(inout) 594 | # print(out) 595 | # print('# generator parameters:', 1.0 * sum(param.numel() for param in model.parameters())/1000000) 596 | --------------------------------------------------------------------------------