kaiko-eva 0.0.1__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.
- eva/core/callbacks/__init__.py +3 -2
- eva/core/callbacks/config.py +143 -0
- eva/core/callbacks/writers/__init__.py +6 -3
- eva/core/callbacks/writers/embeddings/__init__.py +6 -0
- eva/core/callbacks/writers/embeddings/_manifest.py +71 -0
- eva/core/callbacks/writers/embeddings/base.py +192 -0
- eva/core/callbacks/writers/embeddings/classification.py +117 -0
- eva/core/callbacks/writers/embeddings/segmentation.py +78 -0
- eva/core/callbacks/writers/embeddings/typings.py +38 -0
- eva/core/data/datasets/__init__.py +10 -2
- eva/core/data/datasets/classification/__init__.py +5 -2
- eva/core/data/datasets/classification/embeddings.py +15 -135
- eva/core/data/datasets/classification/multi_embeddings.py +110 -0
- eva/core/data/datasets/embeddings.py +167 -0
- eva/core/data/splitting/__init__.py +6 -0
- eva/core/data/splitting/random.py +41 -0
- eva/core/data/splitting/stratified.py +56 -0
- eva/core/data/transforms/__init__.py +3 -1
- eva/core/data/transforms/padding/__init__.py +5 -0
- eva/core/data/transforms/padding/pad_2d_tensor.py +38 -0
- eva/core/data/transforms/sampling/__init__.py +5 -0
- eva/core/data/transforms/sampling/sample_from_axis.py +40 -0
- eva/core/loggers/__init__.py +7 -0
- eva/core/loggers/dummy.py +38 -0
- eva/core/loggers/experimental_loggers.py +8 -0
- eva/core/loggers/log/__init__.py +6 -0
- eva/core/loggers/log/image.py +71 -0
- eva/core/loggers/log/parameters.py +74 -0
- eva/core/loggers/log/utils.py +13 -0
- eva/core/loggers/loggers.py +6 -0
- eva/core/metrics/__init__.py +6 -2
- eva/core/metrics/defaults/__init__.py +10 -3
- eva/core/metrics/defaults/classification/__init__.py +1 -1
- eva/core/metrics/defaults/classification/binary.py +0 -9
- eva/core/metrics/defaults/classification/multiclass.py +0 -8
- eva/core/metrics/defaults/segmentation/__init__.py +5 -0
- eva/core/metrics/defaults/segmentation/multiclass.py +43 -0
- eva/core/metrics/generalized_dice.py +59 -0
- eva/core/metrics/mean_iou.py +120 -0
- eva/core/metrics/structs/schemas.py +3 -1
- eva/core/models/__init__.py +3 -1
- eva/core/models/modules/head.py +16 -15
- eva/core/models/modules/module.py +25 -1
- eva/core/models/modules/typings.py +14 -1
- eva/core/models/modules/utils/batch_postprocess.py +37 -5
- eva/core/models/networks/__init__.py +1 -2
- eva/core/models/networks/mlp.py +2 -2
- eva/core/models/transforms/__init__.py +6 -0
- eva/core/models/{networks/transforms → transforms}/extract_cls_features.py +10 -2
- eva/core/models/transforms/extract_patch_features.py +47 -0
- eva/core/models/wrappers/__init__.py +13 -0
- eva/core/models/{networks/wrappers → wrappers}/base.py +3 -2
- eva/core/models/{networks/wrappers → wrappers}/from_function.py +5 -12
- eva/core/models/{networks/wrappers → wrappers}/huggingface.py +15 -11
- eva/core/models/{networks/wrappers → wrappers}/onnx.py +6 -3
- eva/core/trainers/_recorder.py +69 -7
- eva/core/trainers/functional.py +23 -5
- eva/core/trainers/trainer.py +20 -6
- eva/core/utils/__init__.py +6 -0
- eva/core/utils/clone.py +27 -0
- eva/core/utils/memory.py +28 -0
- eva/core/utils/operations.py +26 -0
- eva/core/utils/parser.py +20 -0
- eva/vision/__init__.py +2 -2
- eva/vision/callbacks/__init__.py +5 -0
- eva/vision/callbacks/loggers/__init__.py +5 -0
- eva/vision/callbacks/loggers/batch/__init__.py +5 -0
- eva/vision/callbacks/loggers/batch/base.py +130 -0
- eva/vision/callbacks/loggers/batch/segmentation.py +188 -0
- eva/vision/data/datasets/__init__.py +24 -4
- eva/vision/data/datasets/_utils.py +3 -3
- eva/vision/data/datasets/_validators.py +15 -2
- eva/vision/data/datasets/classification/__init__.py +6 -2
- eva/vision/data/datasets/classification/bach.py +10 -15
- eva/vision/data/datasets/classification/base.py +17 -24
- eva/vision/data/datasets/classification/camelyon16.py +244 -0
- eva/vision/data/datasets/classification/crc.py +10 -15
- eva/vision/data/datasets/classification/mhist.py +10 -15
- eva/vision/data/datasets/classification/panda.py +184 -0
- eva/vision/data/datasets/classification/patch_camelyon.py +13 -16
- eva/vision/data/datasets/classification/wsi.py +105 -0
- eva/vision/data/datasets/segmentation/__init__.py +15 -2
- eva/vision/data/datasets/segmentation/_utils.py +38 -0
- eva/vision/data/datasets/segmentation/base.py +31 -47
- eva/vision/data/datasets/segmentation/bcss.py +236 -0
- eva/vision/data/datasets/segmentation/consep.py +156 -0
- eva/vision/data/datasets/segmentation/embeddings.py +34 -0
- eva/vision/data/datasets/segmentation/lits.py +178 -0
- eva/vision/data/datasets/segmentation/monusac.py +236 -0
- eva/vision/data/datasets/segmentation/total_segmentator_2d.py +325 -0
- eva/vision/data/datasets/wsi.py +187 -0
- eva/vision/data/transforms/__init__.py +3 -2
- eva/vision/data/transforms/common/__init__.py +2 -1
- eva/vision/data/transforms/common/resize_and_clamp.py +51 -0
- eva/vision/data/transforms/common/resize_and_crop.py +6 -7
- eva/vision/data/transforms/normalization/__init__.py +6 -0
- eva/vision/data/transforms/normalization/clamp.py +43 -0
- eva/vision/data/transforms/normalization/functional/__init__.py +5 -0
- eva/vision/data/transforms/normalization/functional/rescale_intensity.py +28 -0
- eva/vision/data/transforms/normalization/rescale_intensity.py +53 -0
- eva/vision/data/wsi/__init__.py +16 -0
- eva/vision/data/wsi/backends/__init__.py +69 -0
- eva/vision/data/wsi/backends/base.py +115 -0
- eva/vision/data/wsi/backends/openslide.py +73 -0
- eva/vision/data/wsi/backends/pil.py +52 -0
- eva/vision/data/wsi/backends/tiffslide.py +42 -0
- eva/vision/data/wsi/patching/__init__.py +6 -0
- eva/vision/data/wsi/patching/coordinates.py +98 -0
- eva/vision/data/wsi/patching/mask.py +123 -0
- eva/vision/data/wsi/patching/samplers/__init__.py +14 -0
- eva/vision/data/wsi/patching/samplers/_utils.py +50 -0
- eva/vision/data/wsi/patching/samplers/base.py +48 -0
- eva/vision/data/wsi/patching/samplers/foreground_grid.py +99 -0
- eva/vision/data/wsi/patching/samplers/grid.py +47 -0
- eva/vision/data/wsi/patching/samplers/random.py +41 -0
- eva/vision/losses/__init__.py +5 -0
- eva/vision/losses/dice.py +40 -0
- eva/vision/models/__init__.py +4 -2
- eva/vision/models/modules/__init__.py +5 -0
- eva/vision/models/modules/semantic_segmentation.py +161 -0
- eva/vision/models/networks/__init__.py +1 -2
- eva/vision/models/networks/backbones/__init__.py +6 -0
- eva/vision/models/networks/backbones/_utils.py +39 -0
- eva/vision/models/networks/backbones/pathology/__init__.py +31 -0
- eva/vision/models/networks/backbones/pathology/bioptimus.py +34 -0
- eva/vision/models/networks/backbones/pathology/gigapath.py +33 -0
- eva/vision/models/networks/backbones/pathology/histai.py +46 -0
- eva/vision/models/networks/backbones/pathology/kaiko.py +123 -0
- eva/vision/models/networks/backbones/pathology/lunit.py +68 -0
- eva/vision/models/networks/backbones/pathology/mahmood.py +62 -0
- eva/vision/models/networks/backbones/pathology/owkin.py +22 -0
- eva/vision/models/networks/backbones/registry.py +47 -0
- eva/vision/models/networks/backbones/timm/__init__.py +5 -0
- eva/vision/models/networks/backbones/timm/backbones.py +54 -0
- eva/vision/models/networks/backbones/universal/__init__.py +8 -0
- eva/vision/models/networks/backbones/universal/vit.py +54 -0
- eva/vision/models/networks/decoders/__init__.py +6 -0
- eva/vision/models/networks/decoders/decoder.py +7 -0
- eva/vision/models/networks/decoders/segmentation/__init__.py +11 -0
- eva/vision/models/networks/decoders/segmentation/common.py +74 -0
- eva/vision/models/networks/decoders/segmentation/conv2d.py +114 -0
- eva/vision/models/networks/decoders/segmentation/linear.py +125 -0
- eva/vision/models/wrappers/__init__.py +6 -0
- eva/vision/models/wrappers/from_registry.py +48 -0
- eva/vision/models/wrappers/from_timm.py +68 -0
- eva/vision/utils/colormap.py +77 -0
- eva/vision/utils/convert.py +67 -0
- eva/vision/utils/io/__init__.py +10 -4
- eva/vision/utils/io/image.py +21 -2
- eva/vision/utils/io/mat.py +36 -0
- eva/vision/utils/io/nifti.py +40 -15
- eva/vision/utils/io/text.py +10 -3
- kaiko_eva-0.1.0.dist-info/METADATA +553 -0
- kaiko_eva-0.1.0.dist-info/RECORD +205 -0
- {kaiko_eva-0.0.1.dist-info → kaiko_eva-0.1.0.dist-info}/WHEEL +1 -1
- {kaiko_eva-0.0.1.dist-info → kaiko_eva-0.1.0.dist-info}/entry_points.txt +2 -0
- eva/core/callbacks/writers/embeddings.py +0 -169
- eva/core/callbacks/writers/typings.py +0 -23
- eva/core/models/networks/transforms/__init__.py +0 -5
- eva/core/models/networks/wrappers/__init__.py +0 -8
- eva/vision/data/datasets/classification/total_segmentator.py +0 -213
- eva/vision/data/datasets/segmentation/total_segmentator.py +0 -212
- eva/vision/models/networks/postprocesses/__init__.py +0 -5
- eva/vision/models/networks/postprocesses/cls.py +0 -25
- kaiko_eva-0.0.1.dist-info/METADATA +0 -405
- kaiko_eva-0.0.1.dist-info/RECORD +0 -110
- /eva/core/models/{networks → wrappers}/_utils.py +0 -0
- {kaiko_eva-0.0.1.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,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,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"]
|
|
@@ -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
|
-
)
|