kaiko-eva 0.0.2__py3-none-any.whl → 0.1.1__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 +2 -2
- 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 +2 -2
- eva/core/data/datasets/classification/__init__.py +8 -0
- eva/core/data/datasets/classification/embeddings.py +34 -0
- eva/core/data/datasets/{embeddings/classification → classification}/multi_embeddings.py +13 -9
- eva/core/data/datasets/{embeddings/base.py → embeddings.py} +47 -32
- 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/loggers/experimental_loggers.py +2 -2
- eva/core/loggers/log/__init__.py +3 -2
- eva/core/loggers/log/image.py +71 -0
- eva/core/loggers/log/parameters.py +10 -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 +10 -4
- 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/functional.py +1 -0
- 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 +30 -3
- eva/vision/data/datasets/_validators.py +15 -2
- eva/vision/data/datasets/classification/__init__.py +12 -1
- 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 +16 -17
- 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.py → total_segmentator_2d.py} +130 -36
- 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 +56 -13
- 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 +33 -12
- eva/vision/utils/io/text.py +10 -3
- kaiko_eva-0.1.1.dist-info/METADATA +553 -0
- kaiko_eva-0.1.1.dist-info/RECORD +205 -0
- {kaiko_eva-0.0.2.dist-info → kaiko_eva-0.1.1.dist-info}/WHEEL +1 -1
- {kaiko_eva-0.0.2.dist-info → kaiko_eva-0.1.1.dist-info}/entry_points.txt +2 -0
- eva/.DS_Store +0 -0
- eva/core/callbacks/writers/embeddings.py +0 -169
- eva/core/callbacks/writers/typings.py +0 -23
- eva/core/data/datasets/embeddings/__init__.py +0 -13
- eva/core/data/datasets/embeddings/classification/__init__.py +0 -10
- eva/core/data/datasets/embeddings/classification/embeddings.py +0 -66
- eva/core/models/networks/transforms/__init__.py +0 -5
- eva/core/models/networks/wrappers/__init__.py +0 -8
- eva/vision/models/.DS_Store +0 -0
- eva/vision/models/networks/.DS_Store +0 -0
- eva/vision/models/networks/postprocesses/__init__.py +0 -5
- eva/vision/models/networks/postprocesses/cls.py +0 -25
- kaiko_eva-0.0.2.dist-info/METADATA +0 -431
- kaiko_eva-0.0.2.dist-info/RECORD +0 -127
- /eva/core/models/{networks → wrappers}/_utils.py +0 -0
- {kaiko_eva-0.0.2.dist-info → kaiko_eva-0.1.1.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.1.dist-info/METADATA,sha256=Hk2Di7kFekY8Pneo4H7oE0lSsUBkI05hIQM_1Tby0qE,26806
|
|
202
|
+
kaiko_eva-0.1.1.dist-info/WHEEL,sha256=Vza3XR51HW1KmFP0iIMUVYIvz0uQuKJpIXKYOBGQyFQ,90
|
|
203
|
+
kaiko_eva-0.1.1.dist-info/entry_points.txt,sha256=6CSLu9bmQYJSXEg8gbOzRhxH0AGs75BB-vPm3VvfcNE,88
|
|
204
|
+
kaiko_eva-0.1.1.dist-info/licenses/LICENSE,sha256=e6AEzr7j_R-PYr2qLO-JwLn8y70jbVD3U2mxbRmwcI4,11338
|
|
205
|
+
kaiko_eva-0.1.1.dist-info/RECORD,,
|
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,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"]
|
eva/vision/models/.DS_Store
DELETED
|
Binary file
|
|
Binary file
|
|
@@ -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
|