kaiko-eva 0.0.2__py3-none-any.whl → 0.1.0__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 (159) hide show
  1. eva/core/callbacks/__init__.py +2 -2
  2. eva/core/callbacks/writers/__init__.py +6 -3
  3. eva/core/callbacks/writers/embeddings/__init__.py +6 -0
  4. eva/core/callbacks/writers/embeddings/_manifest.py +71 -0
  5. eva/core/callbacks/writers/embeddings/base.py +192 -0
  6. eva/core/callbacks/writers/embeddings/classification.py +117 -0
  7. eva/core/callbacks/writers/embeddings/segmentation.py +78 -0
  8. eva/core/callbacks/writers/embeddings/typings.py +38 -0
  9. eva/core/data/datasets/__init__.py +2 -2
  10. eva/core/data/datasets/classification/__init__.py +8 -0
  11. eva/core/data/datasets/classification/embeddings.py +34 -0
  12. eva/core/data/datasets/{embeddings/classification → classification}/multi_embeddings.py +13 -9
  13. eva/core/data/datasets/{embeddings/base.py → embeddings.py} +47 -32
  14. eva/core/data/splitting/__init__.py +6 -0
  15. eva/core/data/splitting/random.py +41 -0
  16. eva/core/data/splitting/stratified.py +56 -0
  17. eva/core/loggers/experimental_loggers.py +2 -2
  18. eva/core/loggers/log/__init__.py +3 -2
  19. eva/core/loggers/log/image.py +71 -0
  20. eva/core/loggers/log/parameters.py +10 -0
  21. eva/core/loggers/loggers.py +6 -0
  22. eva/core/metrics/__init__.py +6 -2
  23. eva/core/metrics/defaults/__init__.py +10 -3
  24. eva/core/metrics/defaults/classification/__init__.py +1 -1
  25. eva/core/metrics/defaults/classification/binary.py +0 -9
  26. eva/core/metrics/defaults/classification/multiclass.py +0 -8
  27. eva/core/metrics/defaults/segmentation/__init__.py +5 -0
  28. eva/core/metrics/defaults/segmentation/multiclass.py +43 -0
  29. eva/core/metrics/generalized_dice.py +59 -0
  30. eva/core/metrics/mean_iou.py +120 -0
  31. eva/core/metrics/structs/schemas.py +3 -1
  32. eva/core/models/__init__.py +3 -1
  33. eva/core/models/modules/head.py +10 -4
  34. eva/core/models/modules/typings.py +14 -1
  35. eva/core/models/modules/utils/batch_postprocess.py +37 -5
  36. eva/core/models/networks/__init__.py +1 -2
  37. eva/core/models/networks/mlp.py +2 -2
  38. eva/core/models/transforms/__init__.py +6 -0
  39. eva/core/models/{networks/transforms → transforms}/extract_cls_features.py +10 -2
  40. eva/core/models/transforms/extract_patch_features.py +47 -0
  41. eva/core/models/wrappers/__init__.py +13 -0
  42. eva/core/models/{networks/wrappers → wrappers}/base.py +3 -2
  43. eva/core/models/{networks/wrappers → wrappers}/from_function.py +5 -12
  44. eva/core/models/{networks/wrappers → wrappers}/huggingface.py +15 -11
  45. eva/core/models/{networks/wrappers → wrappers}/onnx.py +6 -3
  46. eva/core/trainers/functional.py +1 -0
  47. eva/core/utils/__init__.py +6 -0
  48. eva/core/utils/clone.py +27 -0
  49. eva/core/utils/memory.py +28 -0
  50. eva/core/utils/operations.py +26 -0
  51. eva/core/utils/parser.py +20 -0
  52. eva/vision/__init__.py +2 -2
  53. eva/vision/callbacks/__init__.py +5 -0
  54. eva/vision/callbacks/loggers/__init__.py +5 -0
  55. eva/vision/callbacks/loggers/batch/__init__.py +5 -0
  56. eva/vision/callbacks/loggers/batch/base.py +130 -0
  57. eva/vision/callbacks/loggers/batch/segmentation.py +188 -0
  58. eva/vision/data/datasets/__init__.py +30 -3
  59. eva/vision/data/datasets/_validators.py +15 -2
  60. eva/vision/data/datasets/classification/__init__.py +12 -1
  61. eva/vision/data/datasets/classification/bach.py +10 -15
  62. eva/vision/data/datasets/classification/base.py +17 -24
  63. eva/vision/data/datasets/classification/camelyon16.py +244 -0
  64. eva/vision/data/datasets/classification/crc.py +10 -15
  65. eva/vision/data/datasets/classification/mhist.py +10 -15
  66. eva/vision/data/datasets/classification/panda.py +184 -0
  67. eva/vision/data/datasets/classification/patch_camelyon.py +13 -16
  68. eva/vision/data/datasets/classification/wsi.py +105 -0
  69. eva/vision/data/datasets/segmentation/__init__.py +15 -2
  70. eva/vision/data/datasets/segmentation/_utils.py +38 -0
  71. eva/vision/data/datasets/segmentation/base.py +16 -17
  72. eva/vision/data/datasets/segmentation/bcss.py +236 -0
  73. eva/vision/data/datasets/segmentation/consep.py +156 -0
  74. eva/vision/data/datasets/segmentation/embeddings.py +34 -0
  75. eva/vision/data/datasets/segmentation/lits.py +178 -0
  76. eva/vision/data/datasets/segmentation/monusac.py +236 -0
  77. eva/vision/data/datasets/segmentation/{total_segmentator.py → total_segmentator_2d.py} +130 -36
  78. eva/vision/data/datasets/wsi.py +187 -0
  79. eva/vision/data/transforms/__init__.py +3 -2
  80. eva/vision/data/transforms/common/__init__.py +2 -1
  81. eva/vision/data/transforms/common/resize_and_clamp.py +51 -0
  82. eva/vision/data/transforms/common/resize_and_crop.py +6 -7
  83. eva/vision/data/transforms/normalization/__init__.py +6 -0
  84. eva/vision/data/transforms/normalization/clamp.py +43 -0
  85. eva/vision/data/transforms/normalization/functional/__init__.py +5 -0
  86. eva/vision/data/transforms/normalization/functional/rescale_intensity.py +28 -0
  87. eva/vision/data/transforms/normalization/rescale_intensity.py +53 -0
  88. eva/vision/data/wsi/__init__.py +16 -0
  89. eva/vision/data/wsi/backends/__init__.py +69 -0
  90. eva/vision/data/wsi/backends/base.py +115 -0
  91. eva/vision/data/wsi/backends/openslide.py +73 -0
  92. eva/vision/data/wsi/backends/pil.py +52 -0
  93. eva/vision/data/wsi/backends/tiffslide.py +42 -0
  94. eva/vision/data/wsi/patching/__init__.py +6 -0
  95. eva/vision/data/wsi/patching/coordinates.py +98 -0
  96. eva/vision/data/wsi/patching/mask.py +123 -0
  97. eva/vision/data/wsi/patching/samplers/__init__.py +14 -0
  98. eva/vision/data/wsi/patching/samplers/_utils.py +50 -0
  99. eva/vision/data/wsi/patching/samplers/base.py +48 -0
  100. eva/vision/data/wsi/patching/samplers/foreground_grid.py +99 -0
  101. eva/vision/data/wsi/patching/samplers/grid.py +47 -0
  102. eva/vision/data/wsi/patching/samplers/random.py +41 -0
  103. eva/vision/losses/__init__.py +5 -0
  104. eva/vision/losses/dice.py +40 -0
  105. eva/vision/models/__init__.py +4 -2
  106. eva/vision/models/modules/__init__.py +5 -0
  107. eva/vision/models/modules/semantic_segmentation.py +161 -0
  108. eva/vision/models/networks/__init__.py +1 -2
  109. eva/vision/models/networks/backbones/__init__.py +6 -0
  110. eva/vision/models/networks/backbones/_utils.py +39 -0
  111. eva/vision/models/networks/backbones/pathology/__init__.py +31 -0
  112. eva/vision/models/networks/backbones/pathology/bioptimus.py +34 -0
  113. eva/vision/models/networks/backbones/pathology/gigapath.py +33 -0
  114. eva/vision/models/networks/backbones/pathology/histai.py +46 -0
  115. eva/vision/models/networks/backbones/pathology/kaiko.py +123 -0
  116. eva/vision/models/networks/backbones/pathology/lunit.py +68 -0
  117. eva/vision/models/networks/backbones/pathology/mahmood.py +62 -0
  118. eva/vision/models/networks/backbones/pathology/owkin.py +22 -0
  119. eva/vision/models/networks/backbones/registry.py +47 -0
  120. eva/vision/models/networks/backbones/timm/__init__.py +5 -0
  121. eva/vision/models/networks/backbones/timm/backbones.py +54 -0
  122. eva/vision/models/networks/backbones/universal/__init__.py +8 -0
  123. eva/vision/models/networks/backbones/universal/vit.py +54 -0
  124. eva/vision/models/networks/decoders/__init__.py +6 -0
  125. eva/vision/models/networks/decoders/decoder.py +7 -0
  126. eva/vision/models/networks/decoders/segmentation/__init__.py +11 -0
  127. eva/vision/models/networks/decoders/segmentation/common.py +74 -0
  128. eva/vision/models/networks/decoders/segmentation/conv2d.py +114 -0
  129. eva/vision/models/networks/decoders/segmentation/linear.py +125 -0
  130. eva/vision/models/wrappers/__init__.py +6 -0
  131. eva/vision/models/wrappers/from_registry.py +48 -0
  132. eva/vision/models/wrappers/from_timm.py +68 -0
  133. eva/vision/utils/colormap.py +77 -0
  134. eva/vision/utils/convert.py +56 -13
  135. eva/vision/utils/io/__init__.py +10 -4
  136. eva/vision/utils/io/image.py +21 -2
  137. eva/vision/utils/io/mat.py +36 -0
  138. eva/vision/utils/io/nifti.py +33 -12
  139. eva/vision/utils/io/text.py +10 -3
  140. kaiko_eva-0.1.0.dist-info/METADATA +553 -0
  141. kaiko_eva-0.1.0.dist-info/RECORD +205 -0
  142. {kaiko_eva-0.0.2.dist-info → kaiko_eva-0.1.0.dist-info}/WHEEL +1 -1
  143. {kaiko_eva-0.0.2.dist-info → kaiko_eva-0.1.0.dist-info}/entry_points.txt +2 -0
  144. eva/.DS_Store +0 -0
  145. eva/core/callbacks/writers/embeddings.py +0 -169
  146. eva/core/callbacks/writers/typings.py +0 -23
  147. eva/core/data/datasets/embeddings/__init__.py +0 -13
  148. eva/core/data/datasets/embeddings/classification/__init__.py +0 -10
  149. eva/core/data/datasets/embeddings/classification/embeddings.py +0 -66
  150. eva/core/models/networks/transforms/__init__.py +0 -5
  151. eva/core/models/networks/wrappers/__init__.py +0 -8
  152. eva/vision/models/.DS_Store +0 -0
  153. eva/vision/models/networks/.DS_Store +0 -0
  154. eva/vision/models/networks/postprocesses/__init__.py +0 -5
  155. eva/vision/models/networks/postprocesses/cls.py +0 -25
  156. kaiko_eva-0.0.2.dist-info/METADATA +0 -431
  157. kaiko_eva-0.0.2.dist-info/RECORD +0 -127
  158. /eva/core/models/{networks → wrappers}/_utils.py +0 -0
  159. {kaiko_eva-0.0.2.dist-info → kaiko_eva-0.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,205 @@
1
+ eva/__init__.py,sha256=bYBwklT7diG8NBIBDbpwjN4RUsvGv0ShWBXPxWgz404,518
2
+ eva/__main__.py,sha256=kM5tQ0egTuBWixNLLx9QU-PpS2Bbs3zE3nYE6b2vWa0,282
3
+ eva/__version__.py,sha256=YFR4oOlvPg0sS4Ni7GJ_vU42VTs5WiWp6odK7yH4TBY,611
4
+ eva/core/__init__.py,sha256=AYlMZcH76B7I1lOa-E67u2o9DxsCwI4JMLCYXLk9oDQ,451
5
+ eva/core/callbacks/__init__.py,sha256=_XsS4QGf4r9frzFwEx-krmzJm3kbLmXQFtwYCfRyjrM,281
6
+ eva/core/callbacks/config.py,sha256=-DRt20a2aF9Z9-7nZvbGBcOZ30qNf3ESf25EPRgRL1w,4267
7
+ eva/core/callbacks/writers/__init__.py,sha256=z8cNVJOanj-yYyIiX-mOkhur1NExuCOKzPjp4mmm3AE,232
8
+ eva/core/callbacks/writers/embeddings/__init__.py,sha256=zMxP4POf1yFFUVSjGcsQgyPYNY6JsZO_F66ngKJZaG8,301
9
+ eva/core/callbacks/writers/embeddings/_manifest.py,sha256=pB9nGv9ofVbnI4HHPrHY4p7jeFiFQTRc09zszto_DTk,2424
10
+ eva/core/callbacks/writers/embeddings/base.py,sha256=rdoCtMuegiO6Gb0vM8a-KGI33Eq0hS0Qnlh-1Y6_96s,7593
11
+ eva/core/callbacks/writers/embeddings/classification.py,sha256=pYU0dD08IXH4_pK-P43LqCMD17X-AP5Ayo9gbovwv6U,4522
12
+ eva/core/callbacks/writers/embeddings/segmentation.py,sha256=6AMGfD9Ur35TyH8ztjPx4ayB1Kbywymmu9LriMGLDoY,3135
13
+ eva/core/callbacks/writers/embeddings/typings.py,sha256=qXZSlasaSKHad6HyJeRTeUv-ZeJVM-R3oIaasD8ZPc8,997
14
+ eva/core/cli/__init__.py,sha256=1lGiomn4JINI0DKy41_D4cEyyH-hN6cfTZfMPxLxTCA,68
15
+ eva/core/cli/cli.py,sha256=AZ4B4OP3D2af9H2RYBd5nxoy5I9DlaClZaadSWpPEPI,422
16
+ eva/core/cli/logo.py,sha256=x6-vGWI0s9gza-xxQrBDi2wneb2wFU_mQGHgpAiq2MQ,786
17
+ eva/core/cli/setup.py,sha256=kR-7l4X5Hu8kSLoQZGYGIeLXtn9S_EU52dauDy6fm0w,2663
18
+ eva/core/data/__init__.py,sha256=yG3BeOWhp1EjVYMFqx8M_TBWFDyfIwwksQGQmMdSPaI,340
19
+ eva/core/data/dataloaders/__init__.py,sha256=fbNClVZ8J3QoGi4qiPq635ig1j9GdI7six3RhfwDbjY,110
20
+ eva/core/data/dataloaders/dataloader.py,sha256=-mWFFLtem1Ijbi8XGveFSv5XzUU7SyKwiT5Ahikzghw,2368
21
+ eva/core/data/datamodules/__init__.py,sha256=qZchYbgxo9lxYnGoqdk0C6MfS2IbF0WItO0kCdP9Mqc,229
22
+ eva/core/data/datamodules/call.py,sha256=jjj9w3UXYuQB-qyCcw1EZpRJW10OC1I3dvgvsuQWLck,940
23
+ eva/core/data/datamodules/datamodule.py,sha256=dclC2YJAXUGEUpV9ZRWQS43-ksFIPgVeFudsyrj9kdc,3878
24
+ eva/core/data/datamodules/schemas.py,sha256=EXnUPNd9Pj3RjnxJIzAcC2qp6TtBSvPDx28fV_ovWAA,1869
25
+ eva/core/data/datasets/__init__.py,sha256=YfbHEVy9AXdvPAobZ8btV-mVEaWAVDr7feK8xydLW2w,391
26
+ eva/core/data/datasets/base.py,sha256=NLZlxznB4SCYNf070OhfNJztaOpqwQWemwpGkFv_CA0,2005
27
+ eva/core/data/datasets/classification/__init__.py,sha256=wJ2jD9YODftt-dMcMf0TbCjJt47qXYBKkD4-XXajvRQ,340
28
+ eva/core/data/datasets/classification/embeddings.py,sha256=bgBVQyGxlxVCvGjmwNB52E360QwzrhGZQ44rPNFR4k8,1110
29
+ eva/core/data/datasets/classification/multi_embeddings.py,sha256=j_o0MH2gwn_y3rNFXEUzNg6WErlG3Rq_vn5Og1Yk7J0,4603
30
+ eva/core/data/datasets/dataset.py,sha256=tA6Wd_7vqOE9GsukSWrgN9zaZKtKCHaE58SqIfWxWdg,124
31
+ eva/core/data/datasets/embeddings.py,sha256=zNEO8KxqiOopcN_lTjwtEAm9xbnYDSjOE8X2-iZQIhU,5545
32
+ eva/core/data/samplers/__init__.py,sha256=WikBo1DemCx6o2vFfNwSwODlmCT2zWUXtCNwiWCVAFE,100
33
+ eva/core/data/samplers/sampler.py,sha256=vrrXERWC67fjmTk_uwD7s9-8-rdhvnx7OlSipHE6sdY,119
34
+ eva/core/data/splitting/__init__.py,sha256=VQJ8lfakbv6y2kAk3VDtITAvh7kcZo3H1JwJBc5jT08,198
35
+ eva/core/data/splitting/random.py,sha256=gmweyGtL4rbWoUaH1q63LjKpT-TCwk2mdB4Vw_jLTQo,1353
36
+ eva/core/data/splitting/stratified.py,sha256=_1Eh6QuupxLexrABpwNXiDxDisoTiK8axsV3nvQXCx0,1915
37
+ eva/core/data/transforms/__init__.py,sha256=n0TczmJSc9EjR6JezAZqlZIN4Gz_X3UBePbyDSC7JkE,308
38
+ eva/core/data/transforms/dtype/__init__.py,sha256=r_LM_hdh_gTsrgh3shDTdMpu-lgQNHJ1yD6wY3omPyg,174
39
+ eva/core/data/transforms/dtype/array.py,sha256=RDSkXlnSHSYyU_gv7vw33OZ7vhEy62PQGoE3htGGaqc,725
40
+ eva/core/data/transforms/padding/__init__.py,sha256=AKSXa2dOhj45dTw81piPoCfDmIL0FPJUIxZ3HlG7KVM,138
41
+ eva/core/data/transforms/padding/pad_2d_tensor.py,sha256=J4maGFmeQf9IHRxt5kU-6eI-Bvk12F_HVk8kR_omrnY,1185
42
+ eva/core/data/transforms/sampling/__init__.py,sha256=BFKbvRjlZrwS0GcNrM54ZSWt6PrQARfFlXM1jJ-wpvo,149
43
+ eva/core/data/transforms/sampling/sample_from_axis.py,sha256=Zbhp94lVa70WQKmSOKMTsOMe2c7wLqNZto7JqWhSdtI,1229
44
+ eva/core/interface/__init__.py,sha256=chdpKXipxe1NP-Fgr_d9r6X1gMna0XiEa38waJ6FzTM,98
45
+ eva/core/interface/interface.py,sha256=GzjneNHhTIEuLbydUG9cSmpHjJ4_IENGM-glN8RaRxY,2741
46
+ eva/core/loggers/__init__.py,sha256=4YMLNlN9LnuKqhBI1R1keh69dmMD-2lcH3HKwwyn380,266
47
+ eva/core/loggers/dummy.py,sha256=Y7ypH0ecSAIkkZ5LzTmNNEzlKkqeaHfUNMCDKVOg6D4,1204
48
+ eva/core/loggers/experimental_loggers.py,sha256=p5uCK_9QCYufRhE-LZQUJWbhGElyobX_zRM78yX4p2o,230
49
+ eva/core/loggers/log/__init__.py,sha256=2nXYmR5_0XW0N8BcC918uvdvNyNgQLN_x1-papMprBk,189
50
+ eva/core/loggers/log/image.py,sha256=iUwntQCdRNLtkSdqu8CvV34l06zPYVo4NAW2gUeiJIM,1490
51
+ eva/core/loggers/log/parameters.py,sha256=7Xi-I5gQvEVv71d58bwdZ-Hb4287NXxaUyMfriq_KDU,1634
52
+ eva/core/loggers/log/utils.py,sha256=k4Q7uKpAQctfDv0EEYPnPv6wt9LnckEeqGvbYSLfKO0,415
53
+ eva/core/loggers/loggers.py,sha256=igHxdxJSotWSg6nEOKnfFuBszzblHgi8T7sBrE00FEs,166
54
+ eva/core/metrics/__init__.py,sha256=CtmUcB2bh-JlI0wOvSwwPFB1OzaqsSM3dPHVQh7hMXY,714
55
+ eva/core/metrics/average_loss.py,sha256=AyFOnCXBD5T62eSYf6eGAAJsqt8x-KaHgc8OLkCHjzE,1267
56
+ eva/core/metrics/binary_balanced_accuracy.py,sha256=MabsXAtVfLqSaSIIpE0HIM6bo8uRszl6obueHI6vJi0,806
57
+ eva/core/metrics/defaults/__init__.py,sha256=uPQzkna6Lb0VnCtC4IEPSB9d5jI1_0SohjUOMSo3o1Q,373
58
+ eva/core/metrics/defaults/classification/__init__.py,sha256=xMzE4yV8NoUdcmk2FCKohEUav1GJcxYn60S1KNgXbJY,316
59
+ eva/core/metrics/defaults/classification/binary.py,sha256=9ll6ZOcNGQdsg7ln9DAQ0u-OzsXSzEbueXe-dVJkJZ8,2322
60
+ eva/core/metrics/defaults/classification/multiclass.py,sha256=8Aesy_rKtp4KxfXJtDCmk6FsGxIFS4Ywu2CH1VIRL7M,2518
61
+ eva/core/metrics/defaults/segmentation/__init__.py,sha256=n6gDc603uRWOByAAPFkmZiPH2rEoZ3lSV9MC4nRMBuc,189
62
+ eva/core/metrics/defaults/segmentation/multiclass.py,sha256=_M7NtvwIrfzLLXtAYflFjIle6UeHYU9TwWo3IHl0wlw,1715
63
+ eva/core/metrics/generalized_dice.py,sha256=28vTdmh6QyLfSGtT5oARXp2Hd58EBNg5G0dSBfctvcY,2271
64
+ eva/core/metrics/mean_iou.py,sha256=eAvAe1BiYEXjOtWHUZD_5hBGuRmNhHVYuyGls8YC-1g,4619
65
+ eva/core/metrics/structs/__init__.py,sha256=cvn7E4k5vJmpwJj_zezmtZa_Nl_RddDM1G-MO8TP0po,422
66
+ eva/core/metrics/structs/collection.py,sha256=bNfCekHN8pzD49-YTqVxrmxFtiQfNxnv-RwkxCL6rbc,149
67
+ eva/core/metrics/structs/metric.py,sha256=zdnE0ZVTSYAMl7rW_OL6e1XiZDvLTirYqV0lgJCleXY,109
68
+ eva/core/metrics/structs/module.py,sha256=qAyk9uSGTFdvSg6ukl2c-OC-FdaCCsUf3Lh8UbUD-r8,3619
69
+ eva/core/metrics/structs/schemas.py,sha256=ZaSrx0j_NfIwT7joMUD1LyrKdAXTLaeSzWYTHDsc6h0,1641
70
+ eva/core/metrics/structs/typings.py,sha256=qJd-FiD2IhJgBeo8FyP0vpVUIH4RKb1k6zYvHtjUA04,388
71
+ eva/core/models/__init__.py,sha256=bQSpfQJKuDMWosjcMhP7t5jdOSV6OyxdxTOIW9w1woE,369
72
+ eva/core/models/modules/__init__.py,sha256=QJWJ42BceXZBzDGgk5FHBcCaRrB9egTFKVF6gDsBYfM,255
73
+ eva/core/models/modules/head.py,sha256=iHrEOjYfshFI6OdXxJJTZyfCoUs2fimitINNcB6ENsc,4321
74
+ eva/core/models/modules/inference.py,sha256=ih-0Rr2oNf2N6maiXPOW7XH5KVwUT1_MOxnJKOhJ1uQ,978
75
+ eva/core/models/modules/module.py,sha256=7mCzyvBNOWhvN8sNa91yB79iSBlJlYh9sypL37Nwdes,6836
76
+ eva/core/models/modules/typings.py,sha256=yFMJCE4Nrfd8VEXU1zk8p6Sz5M7UslwitYPVC2OPLSY,776
77
+ eva/core/models/modules/utils/__init__.py,sha256=pnbxlEhT87JimWNr-NSNCv7VNR-IyDi_A9qRWmvlzwQ,227
78
+ eva/core/models/modules/utils/batch_postprocess.py,sha256=RwnDcjJy3uvVirpgx_80Q2CUYKfJKipVwjyX7AF2CKw,3088
79
+ eva/core/models/modules/utils/grad.py,sha256=bl8qb8g4Nhg1KAGfbEV_9HTKkoT0azRwfs9KGX9swGs,706
80
+ eva/core/models/networks/__init__.py,sha256=yqx6UmG1Eg3vb1O_tnK_axnJWabEl9ULkDWiPN440Xc,85
81
+ eva/core/models/networks/mlp.py,sha256=thk-x4pviE3fCaMW9k3I2Oe5_DxfC-CqUrtolvVdXug,2418
82
+ eva/core/models/transforms/__init__.py,sha256=oYL3gNUUKZFViTu6GT1jVE2Kv1xFYPuyiYp-sErtVVg,257
83
+ eva/core/models/transforms/extract_cls_features.py,sha256=odtqawFoDZZCvCg0bp8G8PlUY8KrPAQBZsNOcTZv02E,1081
84
+ eva/core/models/transforms/extract_patch_features.py,sha256=41zCkX-ls-rvqB4B4kE5_lWMNhec65yatdDNa0yjRf0,1751
85
+ eva/core/models/wrappers/__init__.py,sha256=P-ipr4NtKqPU6ubAjKLGxFf1Qt2yDSNtgS2Xz5sBahQ,364
86
+ eva/core/models/wrappers/_utils.py,sha256=HXUyGcILaa8GK31ViIHCKRU4f9kbjAPYQmhvN2N7jSc,957
87
+ eva/core/models/wrappers/base.py,sha256=xKMUSXk93wI67p_wmh7jujK-bxvIefO1noYaAJN_5Ak,1359
88
+ eva/core/models/wrappers/from_function.py,sha256=_vKBwtfilCNCnOaJTofE6l5bM2K3qJ8GyBT-0CM5FXY,1831
89
+ eva/core/models/wrappers/huggingface.py,sha256=5CoNieivdjwvoawo7dZtWfYZkW-Mey1j0EjazuxDaqU,1302
90
+ eva/core/models/wrappers/onnx.py,sha256=-iV-IlczTvTTEQuJycZeSVWdSl2kVJXc1eeRLgQQZ7Q,1834
91
+ eva/core/trainers/__init__.py,sha256=jhsKJF7HAae7EOiG3gKIAHH_h3dZlTE2JRcCHJmOzJc,208
92
+ eva/core/trainers/_logging.py,sha256=gi4FqPy2GuVmh0WZY6mYwF7zMPvnoFA050B0XdCP6PU,2571
93
+ eva/core/trainers/_recorder.py,sha256=y6i5hfXftWjeV3eQHmMjUOkWumnZ2QNv_u275LLmvPA,7702
94
+ eva/core/trainers/_utils.py,sha256=M3h8lVhUmkeSiEXpX9hRdMvThGFCnTP15gv-hd1CZkc,321
95
+ eva/core/trainers/functional.py,sha256=NPxFCtU5KgquVowjeXAf_xj4-Thj7ZxN9F3sHRDrDUA,4388
96
+ eva/core/trainers/trainer.py,sha256=Vw_KhTyh-3YV5qo_XHxz9oy-v2PxrgoOWMeYi8-41R0,3949
97
+ eva/core/utils/__init__.py,sha256=cndVBvtYxEW7hykH39GCNVI86zkXNn8Lw2A0sUJHS04,237
98
+ eva/core/utils/clone.py,sha256=qcThZOuAs1cs0uV3BL5eKeM2VIBjuRPBe1t-NiUFM5Y,569
99
+ eva/core/utils/io/__init__.py,sha256=SAME0kuSvDE1DKFJwMBmnCkpDAy4ujXuRTSJsHNhwUI,112
100
+ eva/core/utils/io/dataframe.py,sha256=CIHFowljH17waDkJ9YJVEVXAIcxMwoLjUgoBttiNk8w,509
101
+ eva/core/utils/memory.py,sha256=ZvcbS1eUPXdHIoL8ctFU56_-cyUniObBmIctUbvso48,636
102
+ eva/core/utils/multiprocessing.py,sha256=PxUxMyvI62lghyWF46O5RNL-J7DUR2IrXSwdkbhC0ic,1383
103
+ eva/core/utils/operations.py,sha256=eoC_ScuHUMDCuk08j1bosiQZdPrgiIODqqheR9MtJHQ,641
104
+ eva/core/utils/parser.py,sha256=2czmwEGJJ6PtmaD86s9I14P-_sek4DmDCkEatRGT5sI,725
105
+ eva/core/utils/workers.py,sha256=hfx63M82qNg0Dwhre2tl53MnhtRsV7APaDONM9nhVB8,634
106
+ eva/vision/__init__.py,sha256=oUZXFYjwtkWzi8An0uS5Xc84pLKintlXe2iti8zW6BQ,480
107
+ eva/vision/callbacks/__init__.py,sha256=su1V73L0dDVYWSyvV_lnWbszDi2KikRraF7OsgeaKl4,139
108
+ eva/vision/callbacks/loggers/__init__.py,sha256=td1JRJbE08nsGIZdO64_yLC3FUuMDp0kma0HjpUdXT4,161
109
+ eva/vision/callbacks/loggers/batch/__init__.py,sha256=DVYP7Aonbi4wg_ERHRj_8kb87Ee_75wRZzdduJ_icQk,173
110
+ eva/vision/callbacks/loggers/batch/base.py,sha256=hcAd5iiHvjZ0DIf4Qt4ENT54D6ky_1OO4rKQZqeo-1k,3628
111
+ eva/vision/callbacks/loggers/batch/segmentation.py,sha256=PbgBVp6TGgko7Um8gN0fHyCs2sE42Uqe3M4grxSBykE,6749
112
+ eva/vision/data/__init__.py,sha256=aoKPmX8P2Q2k2W3nlq8vFU41FV6Sze-0SDuWtU-ETh4,111
113
+ eva/vision/data/datasets/__init__.py,sha256=t0pZhs3z-QFHERY5N8FVMQex8TDVG5kfcpGODdUxk8Y,836
114
+ eva/vision/data/datasets/_utils.py,sha256=epPcaYE4w2_LtUKLLQJh6qQxUNVBe22JA06k4WUerYQ,1430
115
+ eva/vision/data/datasets/_validators.py,sha256=77WZj8ewsuxUjW5WegJ-7zDuR6WdF5JbaOYdywhKIK4,2594
116
+ eva/vision/data/datasets/classification/__init__.py,sha256=ht5UPPgP736dt_L1Hb5rJtQnzKJHIhpBnqm3b4BMCZE,663
117
+ eva/vision/data/datasets/classification/bach.py,sha256=kZba1dQlJWZAmA03akJ4fVUU-y9W8ezOwlgs2zL-QrE,5432
118
+ eva/vision/data/datasets/classification/base.py,sha256=Ci0HoOhOuHwICTi1TUGA1PwZe642RywolTVfMhKrFHk,2772
119
+ eva/vision/data/datasets/classification/camelyon16.py,sha256=sToajukdw-_V_YO6lbcZToMSLKEjeKxJfjZ8iSdzn-M,8136
120
+ eva/vision/data/datasets/classification/crc.py,sha256=8qjz9OklLg1gAr46RKZdlClmlO9awwfp0dkTs8v5jTE,5670
121
+ eva/vision/data/datasets/classification/mhist.py,sha256=xzShPncSfAV6Q5ojfimeq748MfA0n77fGWa9EpdRzYU,3055
122
+ eva/vision/data/datasets/classification/panda.py,sha256=6VpCsotdksAZSfdD9zcM96Ihr6FshnIgZPZkkt0oSLI,6853
123
+ eva/vision/data/datasets/classification/patch_camelyon.py,sha256=fElKteZKx4M6AjylnhhgNH1jewHegWc1K8h4FFKp0gE,7171
124
+ eva/vision/data/datasets/classification/wsi.py,sha256=Y8yaPM5qVi13YyRKIcYrRaxmV_yRW8Dl9rj_1kRJ33I,3948
125
+ eva/vision/data/datasets/segmentation/__init__.py,sha256=_E1K8Ld829jVlZ0VcjUy0HP-8aHu4v9rEbTFt3R8O9M,694
126
+ eva/vision/data/datasets/segmentation/_utils.py,sha256=ps1qpuEkPgvwUw6H-KKaLaYqDBGmN7dNGk3bnS1l6sI,1261
127
+ eva/vision/data/datasets/segmentation/base.py,sha256=11IMODMB7KJ8Bs5p7MyOsBXCyPFJXfYcDLAIMitUwEk,3023
128
+ eva/vision/data/datasets/segmentation/bcss.py,sha256=NHjHd1tgIfIw6TxsZTGb63iMEwXFbWX_JAwRT5WVsj4,8274
129
+ eva/vision/data/datasets/segmentation/consep.py,sha256=mUUGqS1HkUkL1u45LY0rEjcAK0Dawc8abUmFgYEZ_ag,5871
130
+ eva/vision/data/datasets/segmentation/embeddings.py,sha256=0KaadzPxN6OrKNnFu3YsGBFkG6XqqvkOZYUhERPwL4A,1220
131
+ eva/vision/data/datasets/segmentation/lits.py,sha256=_9qdjKnYe5YsJ6_UAIrPwMeqoKHyHYmB7q-6uvXqdLQ,6246
132
+ eva/vision/data/datasets/segmentation/monusac.py,sha256=vbXo-T3Rdu_zGja81ZbOimjZMlx2CnRZsC5nH-Dqkyg,8368
133
+ eva/vision/data/datasets/segmentation/total_segmentator_2d.py,sha256=h2daCbFZPm48GjuOAOy0-Cd-WKFkFvus1ZWuoJZY9D4,13070
134
+ eva/vision/data/datasets/structs.py,sha256=RaTDW-B36PumcR5gymhCiX-r8GiKqIFcjqoEEjjFyUE,389
135
+ eva/vision/data/datasets/vision.py,sha256=hKKFMb65UJQzOyYm8FTGkOGBOinMRu7R8sOFMbCmQX4,1100
136
+ eva/vision/data/datasets/wsi.py,sha256=JauEeQEC3niyivLa4FcI4X5GKvDRVpwY6BknzN-vKAQ,6611
137
+ eva/vision/data/transforms/__init__.py,sha256=WeFii6JwB0CiOOGLR3tkgAoKgRdmOf2lm0Dadixn8OI,260
138
+ eva/vision/data/transforms/common/__init__.py,sha256=6tvxUgb8wfhgvqejMVulwqssHTJLF7f4_vpf44kxgxY,234
139
+ eva/vision/data/transforms/common/resize_and_clamp.py,sha256=f9-YIX0S9GMAXHP7TWlyRlGfZIVvHgoBHqQ8PzaKbKs,1736
140
+ eva/vision/data/transforms/common/resize_and_crop.py,sha256=GI1HTkbJ9qg4p8c6vk_XkXO0Qi6mBeUeiZIA0jVtmAw,1360
141
+ eva/vision/data/transforms/normalization/__init__.py,sha256=0MZ1KphOr6LxBCOBn7LZ8H8M6-0CuFqvynTON5pedxg,240
142
+ eva/vision/data/transforms/normalization/clamp.py,sha256=B-QyMCFEJPiJagpPr7JhrzOJMVuUB-D_qrmjvthJTyE,1412
143
+ eva/vision/data/transforms/normalization/functional/__init__.py,sha256=ICg611_heHCiNxTNoteFX2MTav59fv7vLkTM8c4eS3w,194
144
+ eva/vision/data/transforms/normalization/functional/rescale_intensity.py,sha256=ihJdDRogrJbvFpb8LcPdRzCFWdlMcBTpWD5RY2MOPbE,844
145
+ eva/vision/data/transforms/normalization/rescale_intensity.py,sha256=BNzDeyzT0GG_FBtlZauCL-K4E_KVWH9SzTSN1SsFNJw,1756
146
+ eva/vision/data/wsi/__init__.py,sha256=vfSfyogsj4OS1sGKfsYWyj2O5ZMT9iqkc1lvcuZJVGI,422
147
+ eva/vision/data/wsi/backends/__init__.py,sha256=wX7cjeT7ktX8sH6lRDEEU5cgRKLH6RhPyey16aJthJ4,2251
148
+ eva/vision/data/wsi/backends/base.py,sha256=0oFzMc3zklLyqyD_kzDKekydeFyDReqjBBj1qJLdM9Y,4094
149
+ eva/vision/data/wsi/backends/openslide.py,sha256=VPVJDb6iAe0ZIdYbyFfPLDzHvku8PZXBWcGhNBV5BbI,2437
150
+ eva/vision/data/wsi/backends/pil.py,sha256=CqCWP1ViwpQyVKGLUoEtc4tCHXSAdQpMn6ZX2lNBMns,1403
151
+ eva/vision/data/wsi/backends/tiffslide.py,sha256=f1xOiD4kpL0oRe3xFNT7BM2zYTWBduqL99skk-ZFRwE,1217
152
+ eva/vision/data/wsi/patching/__init__.py,sha256=vSGyui2TkaJpw_wQJldP0Llnym5X9XgK17nuz7S5Hh8,189
153
+ eva/vision/data/wsi/patching/coordinates.py,sha256=IzuF4i63bJYqdJH7eWQYR2q5QHw-80iV6QLibac6CWg,3475
154
+ eva/vision/data/wsi/patching/mask.py,sha256=o_S4YRdbfaxKCG1_T2skswDirmlzHzVC5exaDJucvD0,4986
155
+ eva/vision/data/wsi/patching/samplers/__init__.py,sha256=QkBbjnZf7IcEPm-ON9SeZP0I3DXUA3pY87dKXXdelz4,458
156
+ eva/vision/data/wsi/patching/samplers/_utils.py,sha256=aJI3mSJjfsMm4eNCAqIwMuXX0mGHl0WUa1vbC0DbbmY,1431
157
+ eva/vision/data/wsi/patching/samplers/base.py,sha256=KWLJMfaPk7-IZ-P2isYBvFAa5SuJPUhtD63hkKRFrgg,1287
158
+ eva/vision/data/wsi/patching/samplers/foreground_grid.py,sha256=EhXkr5EFz2-RXEisWtjDa4CUTnrW4fiamQjEgALB2aI,3093
159
+ eva/vision/data/wsi/patching/samplers/grid.py,sha256=dImrMSyCL3E_j5KRqpVJUWTe-mrJpfttg1Z9rbm3j0k,1363
160
+ eva/vision/data/wsi/patching/samplers/random.py,sha256=qx5vExkmLgMFZgEwaXMmYFxoS-ewBhX-1Bpb1GGYkuI,1151
161
+ eva/vision/losses/__init__.py,sha256=ZfUHa7siD3bBjiG4f39Eh4A0auaz0ctIKK0M9qfI-gY,95
162
+ eva/vision/losses/dice.py,sha256=_D8Cj_m9AbOUhJS-GfsBbhfC-R9J58ao8UmuV_6OMhI,1424
163
+ eva/vision/models/__init__.py,sha256=a-P6JL73A3miHQnqgqUz07XtVmQB_o4DqPImk5rEATo,275
164
+ eva/vision/models/modules/__init__.py,sha256=vaM_V6OF2s0lYjralP8dzv8mAtv_xIMZItfXgz0NZg8,156
165
+ eva/vision/models/modules/semantic_segmentation.py,sha256=poBss37CM-bGLrtAl08WTcJtQgzwEP1MJgjeEbxexk0,6255
166
+ eva/vision/models/networks/__init__.py,sha256=j43IurizNlAyKPH2jwDHaeq49L2QvwbHWqUaptA1mG4,100
167
+ eva/vision/models/networks/abmil.py,sha256=N1eH4fn1nXmgXurSQyQIxxonv7nsqeeuPWaQSHeltfs,6796
168
+ eva/vision/models/networks/backbones/__init__.py,sha256=LsMx92eEoCQ5aNVFp7mHjrD-9ZeNawMiK6zZSYzl_PU,296
169
+ eva/vision/models/networks/backbones/_utils.py,sha256=I8YrBsIVtCsp13xs1ln_OrhKBRu2gOmJdopL9hx_MBk,1277
170
+ eva/vision/models/networks/backbones/pathology/__init__.py,sha256=-kn7JCC7fs8-VvjGQURQsdQejKYOwhPJch37Cf1crDM,1005
171
+ eva/vision/models/networks/backbones/pathology/bioptimus.py,sha256=wUSKjYgxcRV3FRHGaPwF1uRAQcGO0rHNHGmK1QDJXk4,991
172
+ eva/vision/models/networks/backbones/pathology/gigapath.py,sha256=mfGXtKhY7XLpKQQAFNVZYsM-aeHCEbOVUrxpAEOr-l8,955
173
+ eva/vision/models/networks/backbones/pathology/histai.py,sha256=C05W_75bINtTnet25M0axiVt00TMmcCx2U5Fcr7n-_I,1570
174
+ eva/vision/models/networks/backbones/pathology/kaiko.py,sha256=GSdBG4WXrs1PWB2hr-sy_dFe2riwpPKwHx71esDoVfE,3952
175
+ eva/vision/models/networks/backbones/pathology/lunit.py,sha256=ku4lr9pWeeHatHN4x4OVgwlve9sVqiRqIbgI0PXLiqg,2160
176
+ eva/vision/models/networks/backbones/pathology/mahmood.py,sha256=3iIGKD7AvPDTritNkT2NGd6Nb5iJQxBKPmymI5YpOzo,2042
177
+ eva/vision/models/networks/backbones/pathology/owkin.py,sha256=EdP4d1ndIR4URZHuSVfn01AdSe5n77KB5Sq4XEFmYwo,713
178
+ eva/vision/models/networks/backbones/registry.py,sha256=anjILtEHHB6Ltwiw22h1bsgWtIjh_l5_fkPh87K7-d0,1631
179
+ eva/vision/models/networks/backbones/timm/__init__.py,sha256=cZH3av9gIZcvEVD0rwKsI-MEq7zPqaW4dQ0E05CksvQ,128
180
+ eva/vision/models/networks/backbones/timm/backbones.py,sha256=fCTiwqU6NhQ-ccAMzmpPDddXkFzRAB3mw4lcQ9um_PU,1646
181
+ eva/vision/models/networks/backbones/universal/__init__.py,sha256=MAlkALSJ2_w6spSbB7NmKlL0Jsk1YKEycatdI0xO0_I,252
182
+ eva/vision/models/networks/backbones/universal/vit.py,sha256=kpUCoXpefR34hRNlQDFK9lGr4oqS8Mn5vTLKWZ-gaOs,1820
183
+ eva/vision/models/networks/decoders/__init__.py,sha256=kW79anaDHRm0Tkxt7ZIpYpaMggx8RGK2mogs77n-c6k,190
184
+ eva/vision/models/networks/decoders/decoder.py,sha256=0tEx-eWEbNA53oafUbJkTb3j0watPpdntXMrQ66azsU,150
185
+ eva/vision/models/networks/decoders/segmentation/__init__.py,sha256=bdGL_R44cyutqNXEMYMwA_RtqbdTL5xt2TVdS5BjGps,439
186
+ eva/vision/models/networks/decoders/segmentation/common.py,sha256=4gxTimvc-JRzbIlD4yfGWXIjcEJSP_iY79h-mheDryc,2525
187
+ eva/vision/models/networks/decoders/segmentation/conv2d.py,sha256=fv-0tF7_Ey4EH5iW08enPoaRrziiqbCfjrl1i50ZgfI,4092
188
+ eva/vision/models/networks/decoders/segmentation/linear.py,sha256=89kDvs-e7Y3Bs3TQvmt2K7_cQYkv0T65A_nBh_anqFQ,4736
189
+ eva/vision/models/wrappers/__init__.py,sha256=8MT8qFM4nUXGpK1_i3rp70ODkOjn2KhhRo2I17qZCPM,210
190
+ eva/vision/models/wrappers/from_registry.py,sha256=gdnxyg9drqlxfTNuS3aLbWGbZIwX1VNl0uudfjzVsXM,1614
191
+ eva/vision/models/wrappers/from_timm.py,sha256=Z38Nb1i6OPKkgvFZOvGx-O3AZQuscf1zRVyrEBXQdJg,2320
192
+ eva/vision/utils/__init__.py,sha256=vaUovprE743SmyFH8l6uk4pYSWpI4zxn7lN0EwePTJI,96
193
+ eva/vision/utils/colormap.py,sha256=P904auPzaxGESTjFcbv550fc49DeXklSHkuhXWFXCEo,2384
194
+ eva/vision/utils/convert.py,sha256=fqGmKrg5-JJLrTkTXB4YDcWTudXPrO1gGjsckVRUesU,1881
195
+ eva/vision/utils/io/__init__.py,sha256=B9z6YiPUTI2aNDvN7t90_WugPE-L1d_1017aNeOkuZo,517
196
+ eva/vision/utils/io/_utils.py,sha256=JzOt7Frj6ScF_aNjFtfHBn4ROnl6NhUZucmQhLc4Cww,768
197
+ eva/vision/utils/io/image.py,sha256=IdOkr5MYqhYHz8U9drZ7wULTM3YHwCWSjZlu_Qdl4GQ,2053
198
+ eva/vision/utils/io/mat.py,sha256=qpGifyjmpE0Xhv567Si7-zxKrgkgE0sywP70cHiLFGU,808
199
+ eva/vision/utils/io/nifti.py,sha256=O_5x3A7RySfZYkF8KG5nmLQf1FcbhnJBVNVf71m3Lo4,2189
200
+ eva/vision/utils/io/text.py,sha256=qYgfo_ZaDZWfG02NkVVYzo5QFySqdCCz5uLA9d-zXtI,701
201
+ kaiko_eva-0.1.0.dist-info/METADATA,sha256=abBwr5ckrDbZSvgkD0l4SPO1ZqIQjFuiuKrbY2C72ZA,26806
202
+ kaiko_eva-0.1.0.dist-info/WHEEL,sha256=Vza3XR51HW1KmFP0iIMUVYIvz0uQuKJpIXKYOBGQyFQ,90
203
+ kaiko_eva-0.1.0.dist-info/entry_points.txt,sha256=6CSLu9bmQYJSXEg8gbOzRhxH0AGs75BB-vPm3VvfcNE,88
204
+ kaiko_eva-0.1.0.dist-info/licenses/LICENSE,sha256=e6AEzr7j_R-PYr2qLO-JwLn8y70jbVD3U2mxbRmwcI4,11338
205
+ kaiko_eva-0.1.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.3.0)
2
+ Generator: pdm-backend (2.4.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -2,3 +2,5 @@
2
2
  eva = eva.__main__:main
3
3
  kaiko-eva = eva.__main__:main
4
4
 
5
+ [gui_scripts]
6
+
eva/.DS_Store DELETED
Binary file
@@ -1,169 +0,0 @@
1
- """Embeddings writer."""
2
-
3
- import csv
4
- import io
5
- import os
6
- from typing import Any, Dict, Sequence
7
-
8
- import lightning.pytorch as pl
9
- import torch
10
- from lightning.pytorch import callbacks
11
- from loguru import logger
12
- from torch import multiprocessing, nn
13
- from typing_extensions import override
14
-
15
- from eva.core.callbacks.writers.typings import QUEUE_ITEM
16
- from eva.core.models.modules.typings import INPUT_BATCH
17
- from eva.core.utils import multiprocessing as eva_multiprocessing
18
-
19
-
20
- class EmbeddingsWriter(callbacks.BasePredictionWriter):
21
- """Callback for writing generated embeddings to disk."""
22
-
23
- def __init__(
24
- self,
25
- output_dir: str,
26
- backbone: nn.Module | None = None,
27
- dataloader_idx_map: Dict[int, str] | None = None,
28
- group_key: str | None = None,
29
- overwrite: bool = True,
30
- ) -> None:
31
- """Initializes a new EmbeddingsWriter instance.
32
-
33
- This callback writes the embedding files in a separate process to avoid blocking the
34
- main process where the model forward pass is executed.
35
-
36
- Args:
37
- output_dir: The directory where the embeddings will be saved.
38
- backbone: A model to be used as feature extractor. If `None`,
39
- it will be expected that the input batch returns the features directly.
40
- dataloader_idx_map: A dictionary mapping dataloader indices to their respective
41
- names (e.g. train, val, test).
42
- group_key: The metadata key to group the embeddings by. If specified, the
43
- embedding files will be saved in subdirectories named after the group_key.
44
- If specified, the key must be present in the metadata of the input batch.
45
- overwrite: Whether to overwrite the output directory. Defaults to True.
46
- """
47
- super().__init__(write_interval="batch")
48
-
49
- self._output_dir = output_dir
50
- self._backbone = backbone
51
- self._dataloader_idx_map = dataloader_idx_map or {}
52
- self._group_key = group_key
53
- self._overwrite = overwrite
54
-
55
- self._write_queue: multiprocessing.Queue
56
- self._write_process: eva_multiprocessing.Process
57
-
58
- @override
59
- def on_predict_start(self, trainer: pl.Trainer, pl_module: pl.LightningModule) -> None:
60
- os.makedirs(self._output_dir, exist_ok=self._overwrite)
61
- self._initialize_write_process()
62
- self._write_process.start()
63
-
64
- if self._backbone is not None:
65
- self._backbone = self._backbone.to(pl_module.device)
66
- self._backbone.eval()
67
-
68
- @override
69
- def write_on_batch_end(
70
- self,
71
- trainer: pl.Trainer,
72
- pl_module: pl.LightningModule,
73
- prediction: Any,
74
- batch_indices: Sequence[int],
75
- batch: INPUT_BATCH,
76
- batch_idx: int,
77
- dataloader_idx: int,
78
- ) -> None:
79
- dataset = trainer.predict_dataloaders[dataloader_idx].dataset # type: ignore
80
- _, targets, metadata = INPUT_BATCH(*batch)
81
- split = self._dataloader_idx_map.get(dataloader_idx)
82
-
83
- embeddings = self._get_embeddings(prediction)
84
- for local_idx, global_idx in enumerate(batch_indices[: len(embeddings)]):
85
- input_name, save_name = self._construct_save_name(
86
- dataset.filename(global_idx), metadata, local_idx
87
- )
88
- embeddings_buffer, target_buffer = io.BytesIO(), io.BytesIO()
89
- torch.save(embeddings[local_idx].clone(), embeddings_buffer)
90
- torch.save(targets[local_idx], target_buffer) # type: ignore
91
- item = QUEUE_ITEM(embeddings_buffer, target_buffer, input_name, save_name, split)
92
- self._write_queue.put(item)
93
-
94
- self._write_process.check_exceptions()
95
-
96
- @override
97
- def on_predict_end(self, trainer: pl.Trainer, pl_module: pl.LightningModule) -> None:
98
- self._write_queue.put(None)
99
- self._write_process.join()
100
- logger.info(f"Predictions and manifest saved to {self._output_dir}")
101
-
102
- def _initialize_write_process(self) -> None:
103
- self._write_queue = multiprocessing.Queue()
104
- self._write_process = eva_multiprocessing.Process(
105
- target=_process_write_queue, args=(self._write_queue, self._output_dir, self._overwrite)
106
- )
107
-
108
- def _get_embeddings(self, prediction: torch.Tensor) -> torch.Tensor:
109
- """Returns the embeddings from predictions."""
110
- if self._backbone is None:
111
- return prediction
112
-
113
- with torch.no_grad():
114
- return self._backbone(prediction)
115
-
116
- def _construct_save_name(self, input_name, metadata, local_idx):
117
- group_name = metadata[self._group_key][local_idx] if self._group_key else None
118
- save_name = os.path.splitext(input_name)[0] + ".pt"
119
- if group_name:
120
- save_name = os.path.join(group_name, save_name)
121
- return input_name, save_name
122
-
123
-
124
- def _process_write_queue(
125
- write_queue: multiprocessing.Queue, output_dir: str, overwrite: bool = False
126
- ) -> None:
127
- manifest_file, manifest_writer = _init_manifest(output_dir, overwrite)
128
- while True:
129
- item = write_queue.get()
130
- if item is None:
131
- break
132
-
133
- prediction_buffer, target_buffer, input_name, save_name, split = QUEUE_ITEM(*item)
134
- _save_prediction(prediction_buffer, save_name, output_dir)
135
- _update_manifest(target_buffer, input_name, save_name, split, manifest_writer)
136
-
137
- manifest_file.close()
138
-
139
-
140
- def _save_prediction(prediction_buffer: io.BytesIO, save_name: str, output_dir: str) -> None:
141
- save_path = os.path.join(output_dir, save_name)
142
- prediction = torch.load(io.BytesIO(prediction_buffer.getbuffer()), map_location="cpu")
143
- os.makedirs(os.path.dirname(save_path), exist_ok=True)
144
- torch.save(prediction, save_path)
145
-
146
-
147
- def _init_manifest(output_dir: str, overwrite: bool = False) -> tuple[io.TextIOWrapper, Any]:
148
- manifest_path = os.path.join(output_dir, "manifest.csv")
149
- if os.path.exists(manifest_path) and not overwrite:
150
- raise FileExistsError(
151
- f"Manifest file already exists at {manifest_path}. This likely means that the "
152
- "embeddings have been computed before. Consider using `eva fit` instead "
153
- "of `eva predict_fit` or `eva predict`."
154
- )
155
- manifest_file = open(manifest_path, "w", newline="")
156
- manifest_writer = csv.writer(manifest_file)
157
- manifest_writer.writerow(["origin", "embeddings", "target", "split"])
158
- return manifest_file, manifest_writer
159
-
160
-
161
- def _update_manifest(
162
- target_buffer: io.BytesIO,
163
- input_name: str,
164
- save_name: str,
165
- split: str | None,
166
- manifest_writer,
167
- ) -> None:
168
- target = torch.load(io.BytesIO(target_buffer.getbuffer()), map_location="cpu")
169
- manifest_writer.writerow([input_name, save_name, target.item(), split])
@@ -1,23 +0,0 @@
1
- """Typing definitions for the writer callback functions."""
2
-
3
- import io
4
- from typing import NamedTuple
5
-
6
-
7
- class QUEUE_ITEM(NamedTuple):
8
- """The default input batch data scheme."""
9
-
10
- prediction_buffer: io.BytesIO
11
- """IO buffer containing the prediction tensor"""
12
-
13
- target_buffer: io.BytesIO
14
- """IO buffer containing the target tensor"""
15
-
16
- input_name: str
17
- """Name of the original input file that was used to generate the embedding."""
18
-
19
- save_name: str
20
- """Name to store the generated embedding"""
21
-
22
- split: str | None
23
- """The dataset split the item belongs to (e.g. train, val, test)."""
@@ -1,13 +0,0 @@
1
- """Datasets API."""
2
-
3
- from eva.core.data.datasets.embeddings.base import EmbeddingsDataset
4
- from eva.core.data.datasets.embeddings.classification import (
5
- EmbeddingsClassificationDataset,
6
- MultiEmbeddingsClassificationDataset,
7
- )
8
-
9
- __all__ = [
10
- "EmbeddingsDataset",
11
- "EmbeddingsClassificationDataset",
12
- "MultiEmbeddingsClassificationDataset",
13
- ]
@@ -1,10 +0,0 @@
1
- """Embedding cllassification datasets API."""
2
-
3
- from eva.core.data.datasets.embeddings.classification.embeddings import (
4
- EmbeddingsClassificationDataset,
5
- )
6
- from eva.core.data.datasets.embeddings.classification.multi_embeddings import (
7
- MultiEmbeddingsClassificationDataset,
8
- )
9
-
10
- __all__ = ["EmbeddingsClassificationDataset", "MultiEmbeddingsClassificationDataset"]
@@ -1,66 +0,0 @@
1
- """Embeddings classification dataset."""
2
-
3
- import os
4
- from typing import Callable, Dict, Literal
5
-
6
- import numpy as np
7
- import torch
8
- from typing_extensions import override
9
-
10
- from eva.core.data.datasets.embeddings import base
11
-
12
-
13
- class EmbeddingsClassificationDataset(base.EmbeddingsDataset):
14
- """Embeddings dataset class for classification tasks."""
15
-
16
- def __init__(
17
- self,
18
- root: str,
19
- manifest_file: str,
20
- split: Literal["train", "val", "test"] | None = None,
21
- column_mapping: Dict[str, str] = base.default_column_mapping,
22
- embeddings_transforms: Callable | None = None,
23
- target_transforms: Callable | None = None,
24
- ) -> None:
25
- """Initialize dataset.
26
-
27
- Expects a manifest file listing the paths of .pt files that contain
28
- tensor embeddings of shape [embedding_dim] or [1, embedding_dim].
29
-
30
- Args:
31
- root: Root directory of the dataset.
32
- manifest_file: The path to the manifest file, which is relative to
33
- the `root` argument.
34
- split: The dataset split to use. The `split` column of the manifest
35
- file will be splitted based on this value.
36
- column_mapping: Defines the map between the variables and the manifest
37
- columns. It will overwrite the `default_column_mapping` with
38
- the provided values, so that `column_mapping` can contain only the
39
- values which are altered or missing.
40
- embeddings_transforms: A function/transform that transforms the embedding.
41
- target_transforms: A function/transform that transforms the target.
42
- """
43
- super().__init__(
44
- root=root,
45
- manifest_file=manifest_file,
46
- split=split,
47
- column_mapping=column_mapping,
48
- embeddings_transforms=embeddings_transforms,
49
- target_transforms=target_transforms,
50
- )
51
-
52
- @override
53
- def _load_embeddings(self, index: int) -> torch.Tensor:
54
- filename = self.filename(index)
55
- embeddings_path = os.path.join(self._root, filename)
56
- tensor = torch.load(embeddings_path, map_location="cpu")
57
- return tensor.squeeze(0)
58
-
59
- @override
60
- def _load_target(self, index: int) -> np.ndarray:
61
- target = self._data.at[index, self._column_mapping["target"]]
62
- return np.asarray(target, dtype=np.int64)
63
-
64
- @override
65
- def __len__(self) -> int:
66
- return len(self._data)
@@ -1,5 +0,0 @@
1
- """Model outputs transforms API."""
2
-
3
- from eva.core.models.networks.transforms.extract_cls_features import ExtractCLSFeatures
4
-
5
- __all__ = ["ExtractCLSFeatures"]
@@ -1,8 +0,0 @@
1
- """Model Wrappers API."""
2
-
3
- from eva.core.models.networks.wrappers.base import BaseModel
4
- from eva.core.models.networks.wrappers.from_function import ModelFromFunction
5
- from eva.core.models.networks.wrappers.huggingface import HuggingFaceModel
6
- from eva.core.models.networks.wrappers.onnx import ONNXModel
7
-
8
- __all__ = ["BaseModel", "ModelFromFunction", "HuggingFaceModel", "ONNXModel"]
Binary file
Binary file
@@ -1,5 +0,0 @@
1
- """Model post-process transforms."""
2
-
3
- from eva.vision.models.networks.postprocesses.cls import ExtractCLSFeatures
4
-
5
- __all__ = ["ExtractCLSFeatures"]
@@ -1,25 +0,0 @@
1
- """Transforms for extracting the CLS output from a model output."""
2
-
3
- import torch
4
- from transformers import modeling_outputs
5
-
6
-
7
- class ExtractCLSFeatures:
8
- """Extracts the CLS token from a ViT model output."""
9
-
10
- def __call__(
11
- self, tensor: torch.Tensor | modeling_outputs.BaseModelOutputWithPooling
12
- ) -> torch.Tensor:
13
- """Call method for the transformation.
14
-
15
- Args:
16
- tensor: The tensor representing the model output.
17
- """
18
- if isinstance(tensor, torch.Tensor):
19
- transformed_tensor = tensor[:, 0, :]
20
- elif isinstance(tensor, modeling_outputs.BaseModelOutputWithPooling):
21
- transformed_tensor = tensor.last_hidden_state[:, 0, :]
22
- else:
23
- raise ValueError(f"Unsupported type {type(tensor)}")
24
-
25
- return transformed_tensor