kaiko-eva 0.0.0.dev8__py3-none-any.whl → 0.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kaiko-eva might be problematic. Click here for more details.

Files changed (41) hide show
  1. eva/core/callbacks/__init__.py +2 -1
  2. eva/core/callbacks/config.py +143 -0
  3. eva/core/data/datasets/__init__.py +10 -2
  4. eva/core/data/datasets/embeddings/__init__.py +13 -0
  5. eva/core/data/datasets/{classification/embeddings.py → embeddings/base.py} +41 -43
  6. eva/core/data/datasets/embeddings/classification/__init__.py +10 -0
  7. eva/core/data/datasets/embeddings/classification/embeddings.py +66 -0
  8. eva/core/data/datasets/embeddings/classification/multi_embeddings.py +106 -0
  9. eva/core/data/transforms/__init__.py +3 -1
  10. eva/core/data/transforms/padding/__init__.py +5 -0
  11. eva/core/data/transforms/padding/pad_2d_tensor.py +38 -0
  12. eva/core/data/transforms/sampling/__init__.py +5 -0
  13. eva/core/data/transforms/sampling/sample_from_axis.py +40 -0
  14. eva/core/loggers/__init__.py +7 -0
  15. eva/core/loggers/dummy.py +38 -0
  16. eva/core/loggers/experimental_loggers.py +8 -0
  17. eva/core/loggers/log/__init__.py +5 -0
  18. eva/core/loggers/log/parameters.py +64 -0
  19. eva/core/loggers/log/utils.py +13 -0
  20. eva/core/models/modules/head.py +6 -11
  21. eva/core/models/modules/module.py +25 -1
  22. eva/core/trainers/_recorder.py +69 -7
  23. eva/core/trainers/functional.py +22 -5
  24. eva/core/trainers/trainer.py +20 -6
  25. eva/vision/__init__.py +1 -1
  26. eva/vision/data/datasets/__init__.py +1 -8
  27. eva/vision/data/datasets/_utils.py +3 -3
  28. eva/vision/data/datasets/classification/__init__.py +1 -8
  29. eva/vision/data/datasets/segmentation/base.py +20 -35
  30. eva/vision/data/datasets/segmentation/total_segmentator.py +88 -69
  31. eva/vision/models/.DS_Store +0 -0
  32. eva/vision/models/networks/.DS_Store +0 -0
  33. eva/vision/utils/convert.py +24 -0
  34. eva/vision/utils/io/nifti.py +10 -6
  35. {kaiko_eva-0.0.0.dev8.dist-info → kaiko_eva-0.0.2.dist-info}/METADATA +71 -27
  36. {kaiko_eva-0.0.0.dev8.dist-info → kaiko_eva-0.0.2.dist-info}/RECORD +39 -23
  37. {kaiko_eva-0.0.0.dev8.dist-info → kaiko_eva-0.0.2.dist-info}/WHEEL +1 -1
  38. eva/core/data/datasets/classification/__init__.py +0 -5
  39. eva/vision/data/datasets/classification/total_segmentator.py +0 -213
  40. {kaiko_eva-0.0.0.dev8.dist-info → kaiko_eva-0.0.2.dist-info}/entry_points.txt +0 -0
  41. {kaiko_eva-0.0.0.dev8.dist-info → kaiko_eva-0.0.2.dist-info}/licenses/LICENSE +0 -0
@@ -3,7 +3,8 @@ eva/__init__.py,sha256=bYBwklT7diG8NBIBDbpwjN4RUsvGv0ShWBXPxWgz404,518
3
3
  eva/__main__.py,sha256=kM5tQ0egTuBWixNLLx9QU-PpS2Bbs3zE3nYE6b2vWa0,282
4
4
  eva/__version__.py,sha256=YFR4oOlvPg0sS4Ni7GJ_vU42VTs5WiWp6odK7yH4TBY,611
5
5
  eva/core/__init__.py,sha256=AYlMZcH76B7I1lOa-E67u2o9DxsCwI4JMLCYXLk9oDQ,451
6
- eva/core/callbacks/__init__.py,sha256=tglEHfVB0NSaXenNLQAlyb2ufXiamxfR0o15W9a9t0k,110
6
+ eva/core/callbacks/__init__.py,sha256=tHC6HJkLMKI5ThuSOuk3XLMvym4v2EtlDqrT91aAdmg,191
7
+ eva/core/callbacks/config.py,sha256=-DRt20a2aF9Z9-7nZvbGBcOZ30qNf3ESf25EPRgRL1w,4267
7
8
  eva/core/callbacks/writers/__init__.py,sha256=GG8UXkbgNmpN1u_YIw-QysBGTSFm6C-P2XRtfnvVBrY,121
8
9
  eva/core/callbacks/writers/embeddings.py,sha256=q8Gd2_aDhhD7-QT5xAJbm8ikNjmHq_2DJosJ6WS5BOo,6752
9
10
  eva/core/callbacks/writers/typings.py,sha256=5AVIRAftqPTlLQ8s4ArEcMgLCyPnCZ9FFNk2yFppA1g,616
@@ -18,18 +19,31 @@ eva/core/data/datamodules/__init__.py,sha256=qZchYbgxo9lxYnGoqdk0C6MfS2IbF0WItO0
18
19
  eva/core/data/datamodules/call.py,sha256=jjj9w3UXYuQB-qyCcw1EZpRJW10OC1I3dvgvsuQWLck,940
19
20
  eva/core/data/datamodules/datamodule.py,sha256=dclC2YJAXUGEUpV9ZRWQS43-ksFIPgVeFudsyrj9kdc,3878
20
21
  eva/core/data/datamodules/schemas.py,sha256=EXnUPNd9Pj3RjnxJIzAcC2qp6TtBSvPDx28fV_ovWAA,1869
21
- eva/core/data/datasets/__init__.py,sha256=pMU-w6aQoRFgSwPB9GLXNilnsbwd6HqLlgw49e4rlj0,281
22
+ eva/core/data/datasets/__init__.py,sha256=Y_18JE9sDtwEFdgPiKHf_ZqMj_1SUQtRZeiI2n7t1uA,387
22
23
  eva/core/data/datasets/base.py,sha256=NLZlxznB4SCYNf070OhfNJztaOpqwQWemwpGkFv_CA0,2005
23
- eva/core/data/datasets/classification/__init__.py,sha256=nhgeoK0chIvX9kzrp9yz40xha_g78o-R4AV7HbyfQOU,176
24
- eva/core/data/datasets/classification/embeddings.py,sha256=E2vYX5q0wDueIZwfB252aM4l9i8XNuf2BQ1lOJR32P4,5215
25
24
  eva/core/data/datasets/dataset.py,sha256=tA6Wd_7vqOE9GsukSWrgN9zaZKtKCHaE58SqIfWxWdg,124
25
+ eva/core/data/datasets/embeddings/__init__.py,sha256=kxJtohGI6oP2lJiDVb61w7NMXuVD3np2B5wbuMIu6K4,357
26
+ eva/core/data/datasets/embeddings/base.py,sha256=EXGa4qsXMA1LkdcZEdjnQq-ooSdw2VitjvpZLcTB8ug,4979
27
+ eva/core/data/datasets/embeddings/classification/__init__.py,sha256=E2zyht5De7RnTVF-MRbteCzdUt4_Of2zJx3jolPpCdM,371
28
+ eva/core/data/datasets/embeddings/classification/embeddings.py,sha256=d5s9f58oQKuRyzWGAg2RXFG41NjLWqu56O3_CI77S_8,2467
29
+ eva/core/data/datasets/embeddings/classification/multi_embeddings.py,sha256=737KakBBui3zvMWKqoXWIG_qa5yaxhgtGP_iBCKnnPY,4343
26
30
  eva/core/data/samplers/__init__.py,sha256=WikBo1DemCx6o2vFfNwSwODlmCT2zWUXtCNwiWCVAFE,100
27
31
  eva/core/data/samplers/sampler.py,sha256=vrrXERWC67fjmTk_uwD7s9-8-rdhvnx7OlSipHE6sdY,119
28
- eva/core/data/transforms/__init__.py,sha256=ZdqOER1VMLu5nI1As0IuBPTS8ISw0EO4zeMZoio3G-c,157
32
+ eva/core/data/transforms/__init__.py,sha256=n0TczmJSc9EjR6JezAZqlZIN4Gz_X3UBePbyDSC7JkE,308
29
33
  eva/core/data/transforms/dtype/__init__.py,sha256=r_LM_hdh_gTsrgh3shDTdMpu-lgQNHJ1yD6wY3omPyg,174
30
34
  eva/core/data/transforms/dtype/array.py,sha256=RDSkXlnSHSYyU_gv7vw33OZ7vhEy62PQGoE3htGGaqc,725
35
+ eva/core/data/transforms/padding/__init__.py,sha256=AKSXa2dOhj45dTw81piPoCfDmIL0FPJUIxZ3HlG7KVM,138
36
+ eva/core/data/transforms/padding/pad_2d_tensor.py,sha256=J4maGFmeQf9IHRxt5kU-6eI-Bvk12F_HVk8kR_omrnY,1185
37
+ eva/core/data/transforms/sampling/__init__.py,sha256=BFKbvRjlZrwS0GcNrM54ZSWt6PrQARfFlXM1jJ-wpvo,149
38
+ eva/core/data/transforms/sampling/sample_from_axis.py,sha256=Zbhp94lVa70WQKmSOKMTsOMe2c7wLqNZto7JqWhSdtI,1229
31
39
  eva/core/interface/__init__.py,sha256=chdpKXipxe1NP-Fgr_d9r6X1gMna0XiEa38waJ6FzTM,98
32
40
  eva/core/interface/interface.py,sha256=GzjneNHhTIEuLbydUG9cSmpHjJ4_IENGM-glN8RaRxY,2741
41
+ eva/core/loggers/__init__.py,sha256=4YMLNlN9LnuKqhBI1R1keh69dmMD-2lcH3HKwwyn380,266
42
+ eva/core/loggers/dummy.py,sha256=Y7ypH0ecSAIkkZ5LzTmNNEzlKkqeaHfUNMCDKVOg6D4,1204
43
+ eva/core/loggers/experimental_loggers.py,sha256=JjW_SAABnNZyhJEy6kcPkPKDPyvuAj4sQTdn-tewm8U,204
44
+ eva/core/loggers/log/__init__.py,sha256=cPqLKqIUhiTeDNG5ZUUOExDr76y4LBe4yXUvCxIQh0o,124
45
+ eva/core/loggers/log/parameters.py,sha256=7qxa-ndtYb2_UkPZ4AlcHaGeUvEw2_9phCdco_OZ9Oo,1413
46
+ eva/core/loggers/log/utils.py,sha256=k4Q7uKpAQctfDv0EEYPnPv6wt9LnckEeqGvbYSLfKO0,415
33
47
  eva/core/metrics/__init__.py,sha256=sTpNUbvgpKTd1IifzPVWmXVZ17PSJjcfEAlY_3fZP5U,558
34
48
  eva/core/metrics/average_loss.py,sha256=AyFOnCXBD5T62eSYf6eGAAJsqt8x-KaHgc8OLkCHjzE,1267
35
49
  eva/core/metrics/binary_balanced_accuracy.py,sha256=MabsXAtVfLqSaSIIpE0HIM6bo8uRszl6obueHI6vJi0,806
@@ -45,9 +59,9 @@ eva/core/metrics/structs/schemas.py,sha256=S6dTbz6YjxkNUIqWVd52KgpVx5JqNFqM4Xs7z
45
59
  eva/core/metrics/structs/typings.py,sha256=qJd-FiD2IhJgBeo8FyP0vpVUIH4RKb1k6zYvHtjUA04,388
46
60
  eva/core/models/__init__.py,sha256=yRLRKYuShhgQBWzV6sjzjThOqqNb9HRS48bMmAxEy-8,305
47
61
  eva/core/models/modules/__init__.py,sha256=QJWJ42BceXZBzDGgk5FHBcCaRrB9egTFKVF6gDsBYfM,255
48
- eva/core/models/modules/head.py,sha256=Rn9bJmSRWqNPnRl-YpvPZgtjbr6UNU83oHXQ1gEpAJE,4138
62
+ eva/core/models/modules/head.py,sha256=sJ2RTNmOsqpCczajwgp6nHZ5qELhjEs8BhO36KyDG-g,3992
49
63
  eva/core/models/modules/inference.py,sha256=ih-0Rr2oNf2N6maiXPOW7XH5KVwUT1_MOxnJKOhJ1uQ,978
50
- eva/core/models/modules/module.py,sha256=0KquNWeblYg49S8AoV-Dpc65_ZIWl56ht5R7bKKXj7o,5918
64
+ eva/core/models/modules/module.py,sha256=7mCzyvBNOWhvN8sNa91yB79iSBlJlYh9sypL37Nwdes,6836
51
65
  eva/core/models/modules/typings.py,sha256=fNoGsC_q1d9c2KauUC-f1psKrCFmfoeC8JJ_US_pOW0,521
52
66
  eva/core/models/modules/utils/__init__.py,sha256=pnbxlEhT87JimWNr-NSNCv7VNR-IyDi_A9qRWmvlzwQ,227
53
67
  eva/core/models/modules/utils/batch_postprocess.py,sha256=q1kC3pwSS7RyI76qunuvFP7RpUhEpUsR6xzjahJkQKQ,1915
@@ -64,48 +78,50 @@ eva/core/models/networks/wrappers/huggingface.py,sha256=81j0pcEx3DW6gR-81Fz6tZkJ
64
78
  eva/core/models/networks/wrappers/onnx.py,sha256=LZEGOpg1VYrB3wXMAA5IMfiKNTkOXQ50agHjTvYnnsU,1718
65
79
  eva/core/trainers/__init__.py,sha256=jhsKJF7HAae7EOiG3gKIAHH_h3dZlTE2JRcCHJmOzJc,208
66
80
  eva/core/trainers/_logging.py,sha256=gi4FqPy2GuVmh0WZY6mYwF7zMPvnoFA050B0XdCP6PU,2571
67
- eva/core/trainers/_recorder.py,sha256=_Vfp7Njh_9qP-SWbBGYp8solnfFgIUi2Z9pGLXt52WY,5652
81
+ eva/core/trainers/_recorder.py,sha256=y6i5hfXftWjeV3eQHmMjUOkWumnZ2QNv_u275LLmvPA,7702
68
82
  eva/core/trainers/_utils.py,sha256=M3h8lVhUmkeSiEXpX9hRdMvThGFCnTP15gv-hd1CZkc,321
69
- eva/core/trainers/functional.py,sha256=pIeGXoO63Wh6n1mOYlBo5ACCteGuNV9pZhqxfN4RLSs,3775
70
- eva/core/trainers/trainer.py,sha256=j4rYWiG9COxBbZ6WIlpRPBE153XqlYK7eAWlRsZgljU,3261
83
+ eva/core/trainers/functional.py,sha256=Ju0Eh98oxsj_7QBwxu3GddCD7FROEdQgpp9fdGS9sp4,4360
84
+ eva/core/trainers/trainer.py,sha256=Vw_KhTyh-3YV5qo_XHxz9oy-v2PxrgoOWMeYi8-41R0,3949
71
85
  eva/core/utils/__init__.py,sha256=F1C69M9y7W8qh1J2k-X4frRHa7r1mPXewscC94fFYtk,58
72
86
  eva/core/utils/io/__init__.py,sha256=SAME0kuSvDE1DKFJwMBmnCkpDAy4ujXuRTSJsHNhwUI,112
73
87
  eva/core/utils/io/dataframe.py,sha256=CIHFowljH17waDkJ9YJVEVXAIcxMwoLjUgoBttiNk8w,509
74
88
  eva/core/utils/multiprocessing.py,sha256=PxUxMyvI62lghyWF46O5RNL-J7DUR2IrXSwdkbhC0ic,1383
75
89
  eva/core/utils/workers.py,sha256=hfx63M82qNg0Dwhre2tl53MnhtRsV7APaDONM9nhVB8,634
76
- eva/vision/__init__.py,sha256=Pp9FZomuqfbZdKSOmgSGfNYk8ISpXf7tLVBZfoFcybk,432
90
+ eva/vision/__init__.py,sha256=Z9AuPmTO-i73pUtq3IkZzwRlY1E5xCE8IZiyl5S71TM,438
77
91
  eva/vision/data/__init__.py,sha256=aoKPmX8P2Q2k2W3nlq8vFU41FV6Sze-0SDuWtU-ETh4,111
78
- eva/vision/data/datasets/__init__.py,sha256=aV4qPqtlt0PnaGoxUW_xEwAr8b8ddkl_YE4_fAdavds,497
79
- eva/vision/data/datasets/_utils.py,sha256=5GAZEHn-VezxTXaW1jVZO5zvdVl1Vz8_5gV2qkoMu4s,1414
92
+ eva/vision/data/datasets/__init__.py,sha256=0pGqI6m4zUEwHPFHcE_7z2MsDS7hG9xL8mnXvSPklOo,402
93
+ eva/vision/data/datasets/_utils.py,sha256=epPcaYE4w2_LtUKLLQJh6qQxUNVBe22JA06k4WUerYQ,1430
80
94
  eva/vision/data/datasets/_validators.py,sha256=uPbbUNnftb8mYzsKVrF-ZX_xinB2zQkuQLFYMprVjhY,2099
81
- eva/vision/data/datasets/classification/__init__.py,sha256=I9vTkETzGnTNNvyRB96ut1YHx9ARmZVO0-0l3ZLWEAs,520
95
+ eva/vision/data/datasets/classification/__init__.py,sha256=DZq9__B4D2x1fbQsG-SwcOR_KF8ZFgCtwTzhC16p63c,362
82
96
  eva/vision/data/datasets/classification/bach.py,sha256=_xuA4evV9jCI76bUKbzom4ECLKShCsd95S8PtvhRAH4,5637
83
97
  eva/vision/data/datasets/classification/base.py,sha256=zBqn8rQP59j1DEChf3rDXgyMtB_sbug8kPvgFCqZyl4,3060
84
98
  eva/vision/data/datasets/classification/crc.py,sha256=7RR0PJWnhLMa3AUB_F2XMYawF5gnCNbGMv25ejOEeNA,5875
85
99
  eva/vision/data/datasets/classification/mhist.py,sha256=yoDHZ2vqa26YKVvJ9t6aidOVGazGIwUD6F3o0zNsxjM,3257
86
100
  eva/vision/data/datasets/classification/patch_camelyon.py,sha256=CH9sveoMppNWPQHm4qPTONRSGqX3O8P3OYwMB6mO678,7253
87
- eva/vision/data/datasets/classification/total_segmentator.py,sha256=OkbqS41ykdUX0wGf6jSja5WzeeRmevUnH5alfcEQhwg,8069
88
101
  eva/vision/data/datasets/segmentation/__init__.py,sha256=byQCBHicM6mQkljHPllUqRvoFaJxHtPMKcyjPmK6dUM,249
89
- eva/vision/data/datasets/segmentation/base.py,sha256=JogXJ3KiOaUybAcyvoqjR4yjlBfVTt2Rt8OOAz32Jrc,3630
90
- eva/vision/data/datasets/segmentation/total_segmentator.py,sha256=NUh-NlrsTcUsbe3qLd_d481mok970bNF7zIdpAS7eks,8075
102
+ eva/vision/data/datasets/segmentation/base.py,sha256=XSD-hl7UtqshzF9ulImlL7v11lT2rWhhro7K3dF0Ucs,2937
103
+ eva/vision/data/datasets/segmentation/total_segmentator.py,sha256=xKGQN03ybOXQE1EtO9WRnAZ_8B40uXtaz2WliNFJ4Uc,8705
91
104
  eva/vision/data/datasets/structs.py,sha256=RaTDW-B36PumcR5gymhCiX-r8GiKqIFcjqoEEjjFyUE,389
92
105
  eva/vision/data/datasets/vision.py,sha256=hKKFMb65UJQzOyYm8FTGkOGBOinMRu7R8sOFMbCmQX4,1100
93
106
  eva/vision/data/transforms/__init__.py,sha256=cHnLwyx6biAjqstD4IDspVtM-_dv7GBrQG6x_0SM8MM,120
94
107
  eva/vision/data/transforms/common/__init__.py,sha256=ZHzpdr-THc9CgFFbAVMWUiZrUNUiHnCDM8GYhM7tMfU,138
95
108
  eva/vision/data/transforms/common/resize_and_crop.py,sha256=IkAeTOe5TxK_cHzFvS7yW8YUh27C-KjXqekL7pfcT9A,1485
109
+ eva/vision/models/.DS_Store,sha256=CKEtWIsQcwe9BwZ8pyCnXleWpY_4ilCps_OuRG9ZGaM,8196
96
110
  eva/vision/models/__init__.py,sha256=v9JhyLdy38XUkA0JmNMzSxNYmKi7nWBrp_XYgM7dmTU,89
111
+ eva/vision/models/networks/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
97
112
  eva/vision/models/networks/__init__.py,sha256=IDpFsocWtyfe28vR9yMmXPYzV9X2NSDrTx7ewH8u-XU,170
98
113
  eva/vision/models/networks/abmil.py,sha256=N1eH4fn1nXmgXurSQyQIxxonv7nsqeeuPWaQSHeltfs,6796
99
114
  eva/vision/models/networks/postprocesses/__init__.py,sha256=nWBuROKE77W9xfyAxmS6L9IgOaXjcB5Qpaw1ihHG64E,148
100
115
  eva/vision/models/networks/postprocesses/cls.py,sha256=AFRrCjSmKy0n14toKa-G-QVx3dh-H4zSx5myi_P2OFA,822
101
116
  eva/vision/utils/__init__.py,sha256=vaUovprE743SmyFH8l6uk4pYSWpI4zxn7lN0EwePTJI,96
117
+ eva/vision/utils/convert.py,sha256=tP0ps_IK2BXkuUsmI0UXVrSbmDAbjfLtQt3AiFtT2j4,679
102
118
  eva/vision/utils/io/__init__.py,sha256=Aw2UxGO3nbUidroMlS-MMJUALjQVvfsOZ1ZhcENDwRo,310
103
119
  eva/vision/utils/io/_utils.py,sha256=JzOt7Frj6ScF_aNjFtfHBn4ROnl6NhUZucmQhLc4Cww,768
104
120
  eva/vision/utils/io/image.py,sha256=2jzeVFMvIRhuTkIrQeLyu0y8GttLp6rWRjO9I2uw-I8,1489
105
- eva/vision/utils/io/nifti.py,sha256=ph9w8dNNSsJG2wI3NJNPTLyWdz2S0i9jD068nHXVVJs,1510
121
+ eva/vision/utils/io/nifti.py,sha256=Rfbz49IakkAMimN8VnHJxDgxqTVwxGfxWFrTMXLrbJc,1659
106
122
  eva/vision/utils/io/text.py,sha256=uECChKjeKi4KQ-NqdO7ywAFS_TOEp2DQ5QQcuG8cb-4,472
107
- kaiko_eva-0.0.0.dev8.dist-info/METADATA,sha256=M4MrBZhhW_RFJcR3J8kjSgRN7lauwINudUoEO1y6AO8,21567
108
- kaiko_eva-0.0.0.dev8.dist-info/WHEEL,sha256=N2J68yzZqJh3mI_Wg92rwhw0rtJDFpZj9bwQIMJgaVg,90
109
- kaiko_eva-0.0.0.dev8.dist-info/entry_points.txt,sha256=oqtS2Yt5EBY4saLyCBC3Zev3huCORKTKWyPovX7QR8g,73
110
- kaiko_eva-0.0.0.dev8.dist-info/licenses/LICENSE,sha256=e6AEzr7j_R-PYr2qLO-JwLn8y70jbVD3U2mxbRmwcI4,11338
111
- kaiko_eva-0.0.0.dev8.dist-info/RECORD,,
123
+ kaiko_eva-0.0.2.dist-info/METADATA,sha256=R4SakGonLZsdyj2yEgkkOa1Z96INt2AfP6Gvak8eN68,23562
124
+ kaiko_eva-0.0.2.dist-info/WHEEL,sha256=vnE8JVcI2Wz7GRKorsPArnBdnW2SWKWGow5gu5tHlRU,90
125
+ kaiko_eva-0.0.2.dist-info/entry_points.txt,sha256=oqtS2Yt5EBY4saLyCBC3Zev3huCORKTKWyPovX7QR8g,73
126
+ kaiko_eva-0.0.2.dist-info/licenses/LICENSE,sha256=e6AEzr7j_R-PYr2qLO-JwLn8y70jbVD3U2mxbRmwcI4,11338
127
+ kaiko_eva-0.0.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.1.8)
2
+ Generator: pdm-backend (2.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,5 +0,0 @@
1
- """Classification datasets API."""
2
-
3
- from eva.core.data.datasets.classification.embeddings import EmbeddingsClassificationDataset
4
-
5
- __all__ = ["EmbeddingsClassificationDataset"]
@@ -1,213 +0,0 @@
1
- """TotalSegmentator 2D segmentation dataset class."""
2
-
3
- import functools
4
- import os
5
- from glob import glob
6
- from typing import Callable, Dict, List, Literal, Tuple
7
-
8
- import numpy as np
9
- from torchvision.datasets import utils
10
- from typing_extensions import override
11
-
12
- from eva.vision.data.datasets import _utils, _validators, structs
13
- from eva.vision.data.datasets.classification import base
14
- from eva.vision.utils import io
15
-
16
-
17
- class TotalSegmentatorClassification(base.ImageClassification):
18
- """TotalSegmentator multi-label classification dataset."""
19
-
20
- _train_index_ranges: List[Tuple[int, int]] = [(0, 83)]
21
- """Train range indices."""
22
-
23
- _val_index_ranges: List[Tuple[int, int]] = [(83, 103)]
24
- """Validation range indices."""
25
-
26
- _n_slices_per_image: int = 20
27
- """The amount of slices to sample per 3D CT scan image."""
28
-
29
- _resources_full: List[structs.DownloadResource] = [
30
- structs.DownloadResource(
31
- filename="Totalsegmentator_dataset_v201.zip",
32
- url="https://zenodo.org/records/10047292/files/Totalsegmentator_dataset_v201.zip",
33
- md5="fe250e5718e0a3b5df4c4ea9d58a62fe",
34
- ),
35
- ]
36
- """Resources for the full dataset version."""
37
-
38
- _resources_small: List[structs.DownloadResource] = [
39
- structs.DownloadResource(
40
- filename="Totalsegmentator_dataset_small_v201.zip",
41
- url="https://zenodo.org/records/10047263/files/Totalsegmentator_dataset_small_v201.zip",
42
- md5="6b5524af4b15e6ba06ef2d700c0c73e0",
43
- ),
44
- ]
45
- """Resources for the small dataset version."""
46
-
47
- def __init__(
48
- self,
49
- root: str,
50
- split: Literal["train", "val"] | None,
51
- version: Literal["small", "full"] = "small",
52
- download: bool = False,
53
- image_transforms: Callable | None = None,
54
- target_transforms: Callable | None = None,
55
- ) -> None:
56
- """Initialize dataset.
57
-
58
- Args:
59
- root: Path to the root directory of the dataset. The dataset will
60
- be downloaded and extracted here, if it does not already exist.
61
- split: Dataset split to use. If None, the entire dataset is used.
62
- version: The version of the dataset to initialize.
63
- download: Whether to download the data for the specified split.
64
- Note that the download will be executed only by additionally
65
- calling the :meth:`prepare_data` method and if the data does not
66
- exist yet on disk.
67
- image_transforms: A function/transform that takes in an image
68
- and returns a transformed version.
69
- target_transforms: A function/transform that takes in the target
70
- and transforms it.
71
- """
72
- super().__init__(
73
- image_transforms=image_transforms,
74
- target_transforms=target_transforms,
75
- )
76
-
77
- self._root = root
78
- self._split = split
79
- self._version = version
80
- self._download = download
81
-
82
- self._samples_dirs: List[str] = []
83
- self._indices: List[int] = []
84
-
85
- @functools.cached_property
86
- @override
87
- def classes(self) -> List[str]:
88
- def get_filename(path: str) -> str:
89
- """Returns the filename from the full path."""
90
- return os.path.basename(path).split(".")[0]
91
-
92
- first_sample_labels = os.path.join(
93
- self._root, self._samples_dirs[0], "segmentations", "*.nii.gz"
94
- )
95
- return sorted(map(get_filename, glob(first_sample_labels)))
96
-
97
- @property
98
- @override
99
- def class_to_idx(self) -> Dict[str, int]:
100
- return {label: index for index, label in enumerate(self.classes)}
101
-
102
- @override
103
- def filename(self, index: int) -> str:
104
- sample_dir = self._samples_dirs[self._indices[index]]
105
- return os.path.join(sample_dir, "ct.nii.gz")
106
-
107
- @override
108
- def prepare_data(self) -> None:
109
- if self._download:
110
- self._download_dataset()
111
- _validators.check_dataset_exists(self._root, True)
112
-
113
- @override
114
- def configure(self) -> None:
115
- self._samples_dirs = self._fetch_samples_dirs()
116
- self._indices = self._create_indices()
117
-
118
- @override
119
- def validate(self) -> None:
120
- _validators.check_dataset_integrity(
121
- self,
122
- length=1660 if self._split == "train" else 400,
123
- n_classes=117,
124
- first_and_last_labels=("adrenal_gland_left", "vertebrae_T9"),
125
- )
126
-
127
- @override
128
- def __len__(self) -> int:
129
- return len(self._indices) * self._n_slices_per_image
130
-
131
- @override
132
- def load_image(self, index: int) -> np.ndarray:
133
- image_path = self._get_image_path(index)
134
- slice_index = self._get_sample_slice_index(index)
135
- image_array = io.read_nifti_slice(image_path, slice_index)
136
- return image_array.repeat(3, axis=2)
137
-
138
- @override
139
- def load_target(self, index: int) -> np.ndarray:
140
- masks = self._load_masks(index)
141
- targets = [1 in masks[..., mask_index] for mask_index in range(masks.shape[-1])]
142
- return np.asarray(targets, dtype=np.int64)
143
-
144
- def _load_masks(self, index: int) -> np.ndarray:
145
- """Returns the `index`'th target mask sample."""
146
- masks_dir = self._get_masks_dir(index)
147
- slice_index = self._get_sample_slice_index(index)
148
- mask_paths = (os.path.join(masks_dir, label + ".nii.gz") for label in self.classes)
149
- masks = [io.read_nifti_slice(path, slice_index) for path in mask_paths]
150
- return np.concatenate(masks, axis=-1)
151
-
152
- def _get_masks_dir(self, index: int) -> str:
153
- """Returns the directory of the corresponding masks."""
154
- sample_dir = self._get_sample_dir(index)
155
- return os.path.join(self._root, sample_dir, "segmentations")
156
-
157
- def _get_image_path(self, index: int) -> str:
158
- """Returns the corresponding image path."""
159
- sample_dir = self._get_sample_dir(index)
160
- return os.path.join(self._root, sample_dir, "ct.nii.gz")
161
-
162
- def _get_sample_dir(self, index: int) -> str:
163
- """Returns the corresponding sample directory."""
164
- sample_index = self._indices[index // self._n_slices_per_image]
165
- return self._samples_dirs[sample_index]
166
-
167
- def _get_sample_slice_index(self, index: int) -> int:
168
- """Returns the corresponding slice index."""
169
- image_path = self._get_image_path(index)
170
- total_slices = io.fetch_total_nifti_slices(image_path)
171
- slice_indices = np.linspace(0, total_slices - 1, num=self._n_slices_per_image, dtype=int)
172
- return slice_indices[index % self._n_slices_per_image]
173
-
174
- def _fetch_samples_dirs(self) -> List[str]:
175
- """Returns the name of all the samples of all the splits of the dataset."""
176
- sample_filenames = [
177
- filename
178
- for filename in os.listdir(self._root)
179
- if os.path.isdir(os.path.join(self._root, filename))
180
- ]
181
- return sorted(sample_filenames)
182
-
183
- def _create_indices(self) -> List[int]:
184
- """Builds the dataset indices for the specified split."""
185
- split_index_ranges = {
186
- "train": self._train_index_ranges,
187
- "val": self._val_index_ranges,
188
- None: [(0, 103)],
189
- }
190
- index_ranges = split_index_ranges.get(self._split)
191
- if index_ranges is None:
192
- raise ValueError("Invalid data split. Use 'train', 'val' or `None`.")
193
-
194
- return _utils.ranges_to_indices(index_ranges)
195
-
196
- def _download_dataset(self) -> None:
197
- """Downloads the dataset."""
198
- dataset_resources = {
199
- "small": self._resources_small,
200
- "full": self._resources_full,
201
- None: (0, 103),
202
- }
203
- resources = dataset_resources.get(self._version)
204
- if resources is None:
205
- raise ValueError("Invalid data version. Use 'small' or 'full'.")
206
-
207
- for resource in resources:
208
- utils.download_and_extract_archive(
209
- resource.url,
210
- download_root=self._root,
211
- filename=resource.filename,
212
- remove_finished=True,
213
- )