deepliif 1.1.13__tar.gz → 1.1.15__tar.gz

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.
Files changed (217) hide show
  1. deepliif-1.1.15/.gitignore +147 -0
  2. deepliif-1.1.15/Datasets/Sample_Dataset/test/22_2.png +0 -0
  3. deepliif-1.1.15/Datasets/Sample_Dataset/test/34_3.png +0 -0
  4. deepliif-1.1.15/Datasets/Sample_Dataset/test/6_2.png +0 -0
  5. deepliif-1.1.15/Datasets/Sample_Dataset/test/799_2.png +0 -0
  6. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/22_2_fake_B_1.png +0 -0
  7. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/22_2_fake_B_2.png +0 -0
  8. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/22_2_fake_B_3.png +0 -0
  9. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/22_2_fake_B_4.png +0 -0
  10. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/22_2_fake_B_5.png +0 -0
  11. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/22_2_real_A.png +0 -0
  12. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/34_3_fake_B_1.png +0 -0
  13. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/34_3_fake_B_2.png +0 -0
  14. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/34_3_fake_B_3.png +0 -0
  15. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/34_3_fake_B_4.png +0 -0
  16. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/34_3_fake_B_5.png +0 -0
  17. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/34_3_real_A.png +0 -0
  18. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/6_2_fake_B_1.png +0 -0
  19. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/6_2_fake_B_2.png +0 -0
  20. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/6_2_fake_B_3.png +0 -0
  21. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/6_2_fake_B_4.png +0 -0
  22. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/6_2_fake_B_5.png +0 -0
  23. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/6_2_real_A.png +0 -0
  24. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/799_2_fake_B_1.png +0 -0
  25. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/799_2_fake_B_2.png +0 -0
  26. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/799_2_fake_B_3.png +0 -0
  27. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/799_2_fake_B_4.png +0 -0
  28. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/799_2_fake_B_5.png +0 -0
  29. deepliif-1.1.15/Datasets/Sample_Dataset/test_DeepLIIF_results/799_2_real_A.png +0 -0
  30. deepliif-1.1.15/Datasets/Sample_Dataset/test_cli/22_2.png +0 -0
  31. deepliif-1.1.15/Datasets/Sample_Dataset/test_cli/34_3.png +0 -0
  32. deepliif-1.1.15/Datasets/Sample_Dataset/test_cli/6_2.png +0 -0
  33. deepliif-1.1.15/Datasets/Sample_Dataset/test_cli/799_2.png +0 -0
  34. deepliif-1.1.15/Datasets/Sample_Dataset/test_groundtruth/22_2.png +0 -0
  35. deepliif-1.1.15/Datasets/Sample_Dataset/test_groundtruth/34_3.png +0 -0
  36. deepliif-1.1.15/Datasets/Sample_Dataset/test_groundtruth/6_2.png +0 -0
  37. deepliif-1.1.15/Datasets/Sample_Dataset/test_groundtruth/799_2.png +0 -0
  38. deepliif-1.1.15/Datasets/Sample_Dataset/train/Bladder1.png +0 -0
  39. deepliif-1.1.15/Datasets/Sample_Dataset/train/Lung1.png +0 -0
  40. deepliif-1.1.15/Datasets/Sample_Dataset/val/Bladder1.json +10 -0
  41. deepliif-1.1.15/Datasets/Sample_Dataset/val/Bladder1.png +0 -0
  42. deepliif-1.1.15/Datasets/Sample_Dataset/val/Lung1.json +10 -0
  43. deepliif-1.1.15/Datasets/Sample_Dataset/val/Lung1.png +0 -0
  44. deepliif-1.1.15/Datasets/Sample_Dataset/val/metrics.json +22 -0
  45. deepliif-1.1.15/DeepLIIF_Statistics/ComputeStatistics.py +236 -0
  46. deepliif-1.1.15/DeepLIIF_Statistics/Create_Loss_Diagram.py +81 -0
  47. deepliif-1.1.15/DeepLIIF_Statistics/HelperFunctions.py +667 -0
  48. deepliif-1.1.15/DeepLIIF_Statistics/PostProcessSegmentationMask.py +171 -0
  49. deepliif-1.1.15/DeepLIIF_Statistics/README.md +42 -0
  50. deepliif-1.1.15/DeepLIIF_Statistics/Segmentation_Metrics.py +233 -0
  51. deepliif-1.1.15/DeepLIIF_Statistics/environment.yml +69 -0
  52. deepliif-1.1.15/DeepLIIF_Statistics/fid.py +334 -0
  53. deepliif-1.1.15/DeepLIIF_Statistics/fid_official_tf.py +370 -0
  54. deepliif-1.1.15/DeepLIIF_Statistics/inception_score.py +100 -0
  55. deepliif-1.1.15/DeepLIIF_Statistics/swd.py +158 -0
  56. deepliif-1.1.15/Dockerfile +19 -0
  57. deepliif-1.1.15/ImageJ_Plugin/.gitignore +2 -0
  58. deepliif-1.1.15/ImageJ_Plugin/README.md +104 -0
  59. deepliif-1.1.15/ImageJ_Plugin/images/roi_step01.png +0 -0
  60. deepliif-1.1.15/ImageJ_Plugin/images/roi_step02.png +0 -0
  61. deepliif-1.1.15/ImageJ_Plugin/images/roi_step03.png +0 -0
  62. deepliif-1.1.15/ImageJ_Plugin/images/roi_step04.png +0 -0
  63. deepliif-1.1.15/ImageJ_Plugin/images/roi_step05.png +0 -0
  64. deepliif-1.1.15/ImageJ_Plugin/images/roi_step06.png +0 -0
  65. deepliif-1.1.15/ImageJ_Plugin/images/roi_step07.png +0 -0
  66. deepliif-1.1.15/ImageJ_Plugin/images/roi_step08.png +0 -0
  67. deepliif-1.1.15/ImageJ_Plugin/images/roi_step09.png +0 -0
  68. deepliif-1.1.15/ImageJ_Plugin/images/roi_step10.png +0 -0
  69. deepliif-1.1.15/ImageJ_Plugin/images/step01.png +0 -0
  70. deepliif-1.1.15/ImageJ_Plugin/images/step02.png +0 -0
  71. deepliif-1.1.15/ImageJ_Plugin/images/step03.png +0 -0
  72. deepliif-1.1.15/ImageJ_Plugin/images/step04.png +0 -0
  73. deepliif-1.1.15/ImageJ_Plugin/images/step05.png +0 -0
  74. deepliif-1.1.15/ImageJ_Plugin/images/step06.png +0 -0
  75. deepliif-1.1.15/ImageJ_Plugin/images/step07.png +0 -0
  76. deepliif-1.1.15/ImageJ_Plugin/images/step08.png +0 -0
  77. deepliif-1.1.15/ImageJ_Plugin/images/step10.png +0 -0
  78. deepliif-1.1.15/ImageJ_Plugin/pom.xml +106 -0
  79. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/DeepliifClient.java +181 -0
  80. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/DeepliifException.java +9 -0
  81. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/FileHelper.java +81 -0
  82. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/InferencePlugin.java +152 -0
  83. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/InteractionPlugin.java +228 -0
  84. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/MutableHTMLDialog.java +161 -0
  85. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/OverlayCreator.java +137 -0
  86. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/ResultHandler.java +140 -0
  87. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/RoisInferencePlugin.java +259 -0
  88. deepliif-1.1.15/ImageJ_Plugin/src/main/java/org/nadeemlab/deepliif/UIHelper.java +30 -0
  89. deepliif-1.1.15/ImageJ_Plugin/src/main/resources/plugins.config +3 -0
  90. deepliif-1.1.15/Image_Processing/Augmentation.py +84 -0
  91. deepliif-1.1.15/Image_Processing/Image_Processing_Helper_Functions.py +567 -0
  92. deepliif-1.1.15/Multi-GPU Training.md +156 -0
  93. {deepliif-1.1.13/deepliif.egg-info → deepliif-1.1.15}/PKG-INFO +6 -2
  94. deepliif-1.1.15/PostProcessSegmentationMask.py +61 -0
  95. {deepliif-1.1.13 → deepliif-1.1.15}/README.md +1 -1
  96. deepliif-1.1.15/Registration/README.md +42 -0
  97. deepliif-1.1.15/Registration/Registration_App.py +281 -0
  98. deepliif-1.1.15/Sample_Large_Tissues/ROI_1.png +0 -0
  99. deepliif-1.1.15/Sample_Large_Tissues/ROI_127.png +0 -0
  100. deepliif-1.1.15/Sample_Large_Tissues/ROI_153.png +0 -0
  101. deepliif-1.1.15/Sample_Large_Tissues/ROI_46.png +0 -0
  102. deepliif-1.1.15/Sample_Large_Tissues/ROI_7.png +0 -0
  103. deepliif-1.1.15/Scripts/download_pre_trained_model.sh +12 -0
  104. deepliif-1.1.15/Scripts/download_training_sets.sh +41 -0
  105. deepliif-1.1.15/assets/.METADATA/.version.json +1 -0
  106. deepliif-1.1.15/assettypes/.gitkeep +0 -0
  107. {deepliif-1.1.13 → deepliif-1.1.15}/cli.py +15 -22
  108. deepliif-1.1.15/conftest.py +65 -0
  109. deepliif-1.1.15/deepliif/__init__.py +0 -0
  110. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/aligned_dataset.py +2 -2
  111. deepliif-1.1.15/deepliif/models/DeepLIIFKD_model.py +409 -0
  112. deepliif-1.1.15/deepliif/models/__init__ - multiprocessing (failure).py +980 -0
  113. deepliif-1.1.13/deepliif/models/__init__.py → deepliif-1.1.15/deepliif/models/__init__ - weights, empty, zarr, tile count.py +37 -5
  114. deepliif-1.1.15/deepliif/models/__init__.py +820 -0
  115. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/base_model.py +1 -1
  116. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/networks.py +7 -5
  117. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/postprocessing.py +55 -24
  118. deepliif-1.1.15/deepliif/scripts/train.py +513 -0
  119. deepliif-1.1.15/deepliif/stat/__init__.py +83 -0
  120. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/util/__init__.py +103 -16
  121. deepliif-1.1.15/deepliif/util/checks.py +17 -0
  122. deepliif-1.1.15/deepliif/util/util - modified tensor_to_pil.py +255 -0
  123. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/util/util.py +42 -0
  124. {deepliif-1.1.13 → deepliif-1.1.15/deepliif.egg-info}/PKG-INFO +6 -2
  125. deepliif-1.1.15/deepliif.egg-info/SOURCES.txt +215 -0
  126. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif.egg-info/requires.txt +2 -0
  127. deepliif-1.1.15/docs/ImageJ/README.md +104 -0
  128. deepliif-1.1.15/docs/ImageJ/images/roi_step01.png +0 -0
  129. deepliif-1.1.15/docs/ImageJ/images/roi_step02.png +0 -0
  130. deepliif-1.1.15/docs/ImageJ/images/roi_step03.png +0 -0
  131. deepliif-1.1.15/docs/ImageJ/images/roi_step04.png +0 -0
  132. deepliif-1.1.15/docs/ImageJ/images/roi_step05.png +0 -0
  133. deepliif-1.1.15/docs/ImageJ/images/roi_step06.png +0 -0
  134. deepliif-1.1.15/docs/ImageJ/images/roi_step07.png +0 -0
  135. deepliif-1.1.15/docs/ImageJ/images/roi_step08.png +0 -0
  136. deepliif-1.1.15/docs/ImageJ/images/roi_step09.png +0 -0
  137. deepliif-1.1.15/docs/ImageJ/images/roi_step10.png +0 -0
  138. deepliif-1.1.15/docs/ImageJ/images/step01.png +0 -0
  139. deepliif-1.1.15/docs/ImageJ/images/step02.png +0 -0
  140. deepliif-1.1.15/docs/ImageJ/images/step03.png +0 -0
  141. deepliif-1.1.15/docs/ImageJ/images/step04.png +0 -0
  142. deepliif-1.1.15/docs/ImageJ/images/step05.png +0 -0
  143. deepliif-1.1.15/docs/ImageJ/images/step06.png +0 -0
  144. deepliif-1.1.15/docs/ImageJ/images/step07.png +0 -0
  145. deepliif-1.1.15/docs/ImageJ/images/step08.png +0 -0
  146. deepliif-1.1.15/docs/ImageJ/images/step10.png +0 -0
  147. deepliif-1.1.15/docs/README.md +42 -0
  148. deepliif-1.1.15/docs/cloud/README.md +72 -0
  149. deepliif-1.1.15/docs/deployment/README.md +171 -0
  150. deepliif-1.1.15/docs/deployment/images/deepliif_torchserve_workflow.png +0 -0
  151. deepliif-1.1.15/docs/images/DeepLIIF_logo.png +0 -0
  152. deepliif-1.1.15/docs/images/overview.png +0 -0
  153. deepliif-1.1.15/docs/installation/README.md +35 -0
  154. deepliif-1.1.15/docs/testing/README.md +29 -0
  155. deepliif-1.1.15/docs/training/README.md +250 -0
  156. deepliif-1.1.15/docs/training/images/IHC_Gen.jpg +0 -0
  157. deepliif-1.1.15/environment.yml +145 -0
  158. deepliif-1.1.15/images/DeepLIIF_logo.png +0 -0
  159. deepliif-1.1.15/images/IHC_Gen3.png +0 -0
  160. deepliif-1.1.15/images/deepliif-imagej-demo.gif +0 -0
  161. deepliif-1.1.15/images/deepliif-imagej-roi-demo.gif +0 -0
  162. deepliif-1.1.15/images/deepliif-stitch-demo-01.gif +0 -0
  163. deepliif-1.1.15/images/deepliif-website-demo-04.gif +0 -0
  164. deepliif-1.1.15/images/deepliif_torchserve_workflow.png +0 -0
  165. deepliif-1.1.15/images/overview.png +0 -0
  166. deepliif-1.1.15/images/target.png +0 -0
  167. deepliif-1.1.15/mkdocs.yml +29 -0
  168. deepliif-1.1.15/model-server/config.properties +12 -0
  169. deepliif-1.1.15/model-server/deepliif_workflow.yaml +42 -0
  170. deepliif-1.1.15/model-server/deepliif_workflow_handler.py +41 -0
  171. deepliif-1.1.15/model-server/model_requirements.txt +1 -0
  172. deepliif-1.1.15/model-server/net_handler.py +16 -0
  173. deepliif-1.1.15/model-server/resnet.py +14 -0
  174. deepliif-1.1.15/model-server/unet.py +13 -0
  175. deepliif-1.1.15/notes_for_code_testing.md +39 -0
  176. {deepliif-1.1.13 → deepliif-1.1.15}/setup.cfg +1 -1
  177. {deepliif-1.1.13 → deepliif-1.1.15}/setup.py +3 -1
  178. deepliif-1.1.15/test.py +129 -0
  179. deepliif-1.1.15/tests/util.py +50 -0
  180. deepliif-1.1.15/train.py +517 -0
  181. deepliif-1.1.13/deepliif.egg-info/SOURCES.txt +0 -50
  182. {deepliif-1.1.13 → deepliif-1.1.15}/LICENSE.md +0 -0
  183. /deepliif-1.1.13/deepliif/__init__.py → /deepliif-1.1.15/assets/.METADATA/.gitkeep +0 -0
  184. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/__init__.py +0 -0
  185. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/base_dataset.py +0 -0
  186. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/colorization_dataset.py +0 -0
  187. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/image_folder.py +0 -0
  188. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/single_dataset.py +0 -0
  189. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/template_dataset.py +0 -0
  190. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/data/unaligned_dataset.py +0 -0
  191. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/CycleGAN_model.py +0 -0
  192. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/DeepLIIFExt_model.py +0 -0
  193. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/DeepLIIF_model.py +0 -0
  194. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/SDG_model.py +0 -0
  195. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/__init__ - different weighted.py +0 -0
  196. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/__init__ - run_dask_multi dev.py +0 -0
  197. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/__init__ - time gens.py +0 -0
  198. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/__init__ - timings.py +0 -0
  199. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/models/att_unet.py +0 -0
  200. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/options/__init__.py +0 -0
  201. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/options/base_options.py +0 -0
  202. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/options/processing_options.py +0 -0
  203. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/options/test_options.py +0 -0
  204. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/options/train_options.py +0 -0
  205. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/postprocessing__OLD__DELETE.py +0 -0
  206. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/util/get_data.py +0 -0
  207. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/util/html.py +0 -0
  208. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/util/image_pool.py +0 -0
  209. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif/util/visualizer.py +0 -0
  210. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif.egg-info/dependency_links.txt +0 -0
  211. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif.egg-info/entry_points.txt +0 -0
  212. {deepliif-1.1.13 → deepliif-1.1.15}/deepliif.egg-info/top_level.txt +0 -0
  213. {deepliif-1.1.13 → deepliif-1.1.15}/tests/test_args.py +0 -0
  214. {deepliif-1.1.13 → deepliif-1.1.15}/tests/test_cli_inference.py +0 -0
  215. {deepliif-1.1.13 → deepliif-1.1.15}/tests/test_cli_serialize.py +0 -0
  216. {deepliif-1.1.13 → deepliif-1.1.15}/tests/test_cli_train.py +0 -0
  217. {deepliif-1.1.13 → deepliif-1.1.15}/tests/test_cli_trainlaunch.py +0 -0
@@ -0,0 +1,147 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ .idea/*
7
+
8
+ # C extensions
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ pip-wheel-metadata/
26
+ share/python-wheels/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+ MANIFEST
31
+
32
+ # PyInstaller
33
+ # Usually these files are written by a python script from a template
34
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
35
+ *.manifest
36
+ *.spec
37
+
38
+ # Installer logs
39
+ pip-log.txt
40
+ pip-delete-this-directory.txt
41
+
42
+ # Unit test / coverage reports
43
+ htmlcov/
44
+ .tox/
45
+ .nox/
46
+ .coverage
47
+ .coverage.*
48
+ .cache
49
+ nosetests.xml
50
+ coverage.xml
51
+ *.cover
52
+ *.py,cover
53
+ .hypothesis/
54
+ .pytest_cache/
55
+
56
+ # Translations
57
+ *.mo
58
+ *.pot
59
+
60
+ # Django stuff:
61
+ *.log
62
+ *.out
63
+ local_settings.py
64
+ db.sqlite3
65
+ db.sqlite3-journal
66
+
67
+ # Flask stuff:
68
+ instance/
69
+ .webassets-cache
70
+
71
+ # Scrapy stuff:
72
+ .scrapy
73
+
74
+ # Sphinx documentation
75
+ docs/_build/
76
+
77
+ # PyBuilder
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # mkdocs documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+
134
+
135
+ # Checkpoints and results
136
+ /checkpoints/
137
+ /model-server/
138
+ /results/*
139
+
140
+ **/.ipynb_checkpoints/*
141
+ **/.virtual_documents/*
142
+ assets/.METADATA/job_run.*
143
+ assets/job_run
144
+ cover/
145
+ .pybuilder/
146
+ .pytype/
147
+ cython_debug/
@@ -0,0 +1,10 @@
1
+ {
2
+ "num_total": 183,
3
+ "num_pos": 15,
4
+ "num_neg": 168,
5
+ "percent_pos": 8.2,
6
+ "prob_thresh": 150,
7
+ "size_thresh": 30,
8
+ "size_thresh_upper": null,
9
+ "marker_thresh": null
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "num_total": 60,
3
+ "num_pos": 11,
4
+ "num_neg": 49,
5
+ "percent_pos": 18.3,
6
+ "prob_thresh": 150,
7
+ "size_thresh": 78,
8
+ "size_thresh_upper": null,
9
+ "marker_thresh": null
10
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "Lung1": {
3
+ "num_total": 60,
4
+ "num_pos": 11,
5
+ "num_neg": 49,
6
+ "percent_pos": 18.3,
7
+ "prob_thresh": 150,
8
+ "size_thresh": 78,
9
+ "size_thresh_upper": null,
10
+ "marker_thresh": null
11
+ },
12
+ "Bladder1": {
13
+ "num_total": 183,
14
+ "num_pos": 15,
15
+ "num_neg": 168,
16
+ "percent_pos": 8.2,
17
+ "prob_thresh": 150,
18
+ "size_thresh": 30,
19
+ "size_thresh_upper": null,
20
+ "marker_thresh": null
21
+ }
22
+ }
@@ -0,0 +1,236 @@
1
+ from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
2
+ import os
3
+ import cv2
4
+ import numpy as np
5
+ import csv
6
+ from numba import cuda
7
+
8
+ from Segmentation_Metrics import compute_segmentation_metrics
9
+ #from fid_official_tf import calculate_fid_given_paths
10
+ from fid import calculate_fid_given_paths
11
+ from inception_score import calculate_inception_score
12
+
13
+ from skimage.metrics import structural_similarity as ssim
14
+ from skimage.metrics import mean_squared_error
15
+ from skimage import img_as_float, io, measure
16
+ from skimage.color import rgb2gray
17
+ import collections
18
+ from swd import compute_swd
19
+
20
+ parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
21
+ parser.add_argument('--gt_path', type=str, required=True)
22
+ parser.add_argument('--model_path', type=str, required=True)
23
+ parser.add_argument('--output_path', type=str, required=True)
24
+ parser.add_argument('--model_name', type=str, required=False, default='DeepLIIF')
25
+ parser.add_argument('--mode', type=str, default='Segmentation',
26
+ help='Mode of the statistics computation including Segmentation, ImageSynthesis, All')
27
+ parser.add_argument('--raw_segmentation', action='store_true')
28
+ parser.add_argument('--device', type=str, default='cuda', help='Device to use. Like cuda, cuda:0 or cpu')
29
+ parser.add_argument('--batch_size', type=int, default=50,
30
+ help='Batch size to use')
31
+ parser.add_argument('--num_workers', type=int, default=8,
32
+ help='Number of processes to use for data loading')
33
+ parser.add_argument('--image_types', type=str, default='Hema,DAPI,Lap2,Marker')
34
+
35
+
36
+ class Statistics:
37
+ def __init__(self, args):
38
+ self.gt_path = args.gt_path
39
+ self.model_path = args.model_path
40
+ self.output_path = args.output_path
41
+ self.model_name = args.model_name
42
+ self.mode = args.mode
43
+ self.raw_segmentation = args.raw_segmentation
44
+ self.batch_size = args.batch_size
45
+ self.num_workers = args.num_workers
46
+ self.device = args.device
47
+ self.image_types = args.image_types.replace(' ', '').split(',')
48
+
49
+ # Image Similarity Metrics
50
+ self.inception_avg = collections.defaultdict(float)
51
+ self.inception_std = collections.defaultdict(float)
52
+
53
+ self.mse_avg = collections.defaultdict(float)
54
+ self.mse_std = collections.defaultdict(float)
55
+
56
+ self.ssim_avg = collections.defaultdict(float)
57
+ self.ssim_std = collections.defaultdict(float)
58
+
59
+ self.fid_value = collections.defaultdict(float)
60
+ self.swd_value = collections.defaultdict(float)
61
+
62
+ self.all_info = {}
63
+ self.all_info['Model'] = self.model_name
64
+
65
+ # Segmentation Metrics
66
+ self.segmentation_metrics = collections.defaultdict(float)
67
+ self.segmentation_info = None
68
+
69
+ if not os.path.exists(self.output_path):
70
+ os.makedirs(self.output_path)
71
+
72
+ def compute_mse_ssim_scores(self):
73
+ for img_type in self.image_types:
74
+ images = os.listdir(self.model_path)
75
+ mse_arr = []
76
+ ssim_arr = []
77
+ # mse_info = []
78
+ for img_name in images:
79
+ if img_type in img_name:
80
+ orig_img = img_as_float(rgb2gray(io.imread(os.path.join(self.gt_path, img_name))))
81
+ mask_img = img_as_float(rgb2gray(io.imread(os.path.join(self.model_path, img_name))))
82
+
83
+ mse_mask = mean_squared_error(orig_img, mask_img)
84
+ ssim_mask = ssim(orig_img, mask_img, multichannel=True, gaussian_weights=True, sigma=1.5, use_sample_covariance=False, data_range=255)
85
+
86
+ mse_arr.append(mse_mask)
87
+ ssim_arr.append(ssim_mask)
88
+ # mse_info.append({'image_name': img_name, 'image_type':img_type, 'mse': mse_mask, 'ssim': ssim_mask})
89
+ # self.write_list_to_csv(mse_info, mse_info[0].keys(),
90
+ # filename='inference_info_' + img_type + '_' + self.model_name + '.csv')
91
+ self.mse_avg[img_type], self.mse_std[img_type] = np.mean(mse_arr), np.std(mse_arr)
92
+ self.ssim_avg[img_type], self.ssim_std[img_type] = np.mean(ssim_arr), np.std(ssim_arr)
93
+
94
+ def compute_inception_score(self):
95
+ for img_type in self.image_types:
96
+ images = os.listdir(self.model_path)
97
+ real_images_array = []
98
+ for img in images:
99
+ if img_type in img:
100
+ image = cv2.imread(os.path.join(self.model_path, img))
101
+ image = cv2.resize(image, (299, 299))
102
+ real_images_array.append(image)
103
+ real_images_array = np.array(real_images_array)
104
+ self.inception_avg[img_type], self.inception_std[img_type] = calculate_inception_score(real_images_array)
105
+
106
+ def compute_fid_score(self):
107
+ for img_type in self.image_types:
108
+ os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu
109
+ self.fid_value[img_type] = calculate_fid_given_paths([self.gt_path, self.model_path], None, low_profile=False)
110
+ print("FID: ", self.fid_value[img_type])
111
+ # self.fid_value[img_type] = calculate_fid_given_paths(paths=[self.gt_path, self.model_path], batch_size=self.batch_size, dims=self.fid_dims, num_workers=self.num_workers, mod_type='_' + img_type)
112
+
113
+ device = cuda.get_current_device()
114
+ device.reset()
115
+
116
+ def compute_swd(self):
117
+ for img_type in self.image_types:
118
+ orig_images = []
119
+ mask_images = []
120
+ images = os.listdir(self.model_path)
121
+ for img_name in images:
122
+ if img_type in img_name:
123
+ orig_img = cv2.cvtColor(cv2.imread(os.path.join(self.gt_path, img_name)), cv2.COLOR_BGR2RGB)
124
+ mask_img = cv2.cvtColor(cv2.imread(os.path.join(self.model_path, img_name)), cv2.COLOR_BGR2RGB)
125
+ orig_images.append(orig_img)
126
+ mask_images.append(mask_img)
127
+
128
+ self.swd_value[img_type] = compute_swd(np.array(orig_images), np.array(mask_images), self.device)
129
+
130
+ def compute_image_similarity_metrics(self):
131
+ self.compute_mse_ssim_scores()
132
+ print('SSIM Computed')
133
+ self.compute_inception_score()
134
+ print('inception Computed')
135
+ self.compute_fid_score()
136
+ print('fid Computed')
137
+ self.compute_swd()
138
+ print('swd Computed')
139
+
140
+ for key in self.mse_avg:
141
+ self.all_info[key + '_' + 'MSE_avg'] = self.mse_avg[key]
142
+ self.all_info[key + '_' + 'MSE_std'] = self.mse_std[key]
143
+ self.all_info[key + '_' + 'ssim_avg'] = self.ssim_avg[key]
144
+ self.all_info[key + '_' + 'ssim_std'] = self.ssim_std[key]
145
+ self.all_info[key + '_' + 'inception_avg'] = self.inception_avg[key]
146
+ self.all_info[key + '_' + 'inception_std'] = self.inception_std[key]
147
+ self.all_info[key + '_' + 'fid_value'] = self.fid_value[key]
148
+ self.all_info[key + '_' + 'swd_value'] = self.swd_value[key]
149
+
150
+ def compute_IHC_scoring(self):
151
+ images = os.listdir(self.gt_path)
152
+ IHC_info = []
153
+ metric_diff_ihc_score = 0
154
+ for img in images:
155
+ gt_image = cv2.cvtColor(cv2.imread(os.path.join(self.gt_path, img)), cv2.COLOR_BGR2RGB)
156
+ if 'DeepLIIF' in self.model_name:
157
+ mask_image = cv2.cvtColor(cv2.imread(os.path.join(self.model_path, img.replace('.png', '_SegRefined.png'))), cv2.COLOR_BGR2RGB)
158
+ else:
159
+ mask_image = cv2.cvtColor(cv2.imread(os.path.join(self.model_path, img)), cv2.COLOR_BGR2RGB)
160
+ gt_image[gt_image < 10] = 0
161
+ label_image_red_gt = measure.label(gt_image[:, :, 0], background=0)
162
+ label_image_blue_gt = measure.label(gt_image[:, :, 2], background=0)
163
+ number_of_positive_cells_gt = (len(np.unique(label_image_red_gt)) - 1)
164
+ number_of_negative_cells_gt = (len(np.unique(label_image_blue_gt)) - 1)
165
+ number_of_all_cells_gt = number_of_positive_cells_gt + number_of_negative_cells_gt
166
+ gt_IHC_score = number_of_positive_cells_gt / number_of_all_cells_gt if number_of_all_cells_gt > 0 else 0
167
+
168
+ mask_image[mask_image < 10] = 0
169
+ label_image_red_mask = measure.label(mask_image[:, :, 0], background=0)
170
+ label_image_blue_mask = measure.label(mask_image[:, :, 2], background=0)
171
+ number_of_positive_cells_mask = (len(np.unique(label_image_red_mask)) - 1)
172
+ number_of_negative_cells_mask = (len(np.unique(label_image_blue_mask)) - 1)
173
+ number_of_all_cells_mask = number_of_positive_cells_mask + number_of_negative_cells_mask
174
+ mask_IHC_score = number_of_positive_cells_mask / number_of_all_cells_mask if number_of_all_cells_mask > 0 else 0
175
+ diff = abs(gt_IHC_score * 100 - mask_IHC_score * 100)
176
+ IHC_info.append({'Model': self.model_name, 'Sample': img, 'Diff_IHC_Score': diff})
177
+ metric_diff_ihc_score += diff
178
+ self.write_list_to_csv(IHC_info, IHC_info[0].keys(),
179
+ filename='IHC_Scoring_info_' + self.mode + '_' + self.model_name + '.csv')
180
+ metric_diff_ihc_score /= len(images)
181
+ print('Diff_IHC_Score:', metric_diff_ihc_score)
182
+ print('-------------------------------------------------------')
183
+
184
+ def compute_segmentation_metrics(self):
185
+ # max_dice = [0, 0, 0]
186
+ # max_AJI = [0, 0, 0]
187
+ # for thresh in range(60, 150, 10):
188
+ # for noise_size in range(10, 80, 20):
189
+ thresh = 100
190
+ boundary_thresh = 100
191
+ noise_size = 50
192
+ print(thresh, noise_size)
193
+ self.segmentation_info, self.segmentation_metrics = compute_segmentation_metrics(self.gt_path, self.model_path, self.model_name, image_size=512, thresh=thresh, boundary_thresh=boundary_thresh, small_object_size=noise_size, raw_segmentation=self.raw_segmentation)
194
+ self.write_list_to_csv(self.segmentation_info, self.segmentation_info[0].keys(),
195
+ filename='segmentation_info_' + self.mode + '_' + self.model_name + '_' + str(thresh) + '_' + str(noise_size) + '.csv')
196
+ for key in self.segmentation_metrics:
197
+ self.all_info[key] = self.segmentation_metrics[key]
198
+ print(key, self.all_info[key])
199
+ print('-------------------------------------------------------')
200
+
201
+ def create_all_info(self):
202
+ self.write_dict_to_csv(self.all_info, list(self.all_info.keys()), filename='metrics_' + self.mode + '_' + self.model_name + '.csv')
203
+
204
+ def compute_statistics(self):
205
+ self.compute_image_similarity_metrics()
206
+ self.compute_segmentation_metrics()
207
+ self.create_all_info()
208
+
209
+ def write_dict_to_csv(self, info_dict, csv_columns, filename='info.csv'):
210
+ print('Writing in csv')
211
+ info_csv = open(os.path.join(self.output_path, filename), 'w')
212
+ writer = csv.DictWriter(info_csv, fieldnames=csv_columns)
213
+ writer.writeheader()
214
+ writer.writerow(info_dict)
215
+
216
+ def write_list_to_csv(self, info_dict, csv_columns, filename='info.csv'):
217
+ print('Writing in csv')
218
+ info_csv = open(os.path.join(self.output_path, filename), 'w')
219
+ writer = csv.DictWriter(info_csv, fieldnames=csv_columns)
220
+ writer.writeheader()
221
+ for data in info_dict:
222
+ writer.writerow(data)
223
+
224
+
225
+ if __name__ == '__main__':
226
+ args = parser.parse_args()
227
+ stat = Statistics(args)
228
+ print(stat.mode)
229
+ if stat.mode == 'All':
230
+ stat.compute_statistics()
231
+ stat.compute_IHC_scoring()
232
+ elif stat.mode == 'Segmentation':
233
+ stat.compute_segmentation_metrics()
234
+ stat.compute_IHC_scoring()
235
+ elif stat.mode == 'ImageSynthesis':
236
+ stat.compute_image_similarity_metrics()
@@ -0,0 +1,81 @@
1
+ import collections
2
+ import numpy as np
3
+ import matplotlib.pyplot as plt
4
+
5
+ def isfloat(num):
6
+ try:
7
+ float(num)
8
+ return True
9
+ except ValueError:
10
+ return False
11
+
12
+
13
+ def read_losses(file_name):
14
+ losses = {}
15
+ with open(file_name) as f:
16
+ lines = f.readlines()
17
+ for line in lines:
18
+ if line.startswith('(epoch'):
19
+ line = line.replace(',', '').replace('(', '').replace(')', '').replace(':', '').strip()
20
+ values = line.split(' ')
21
+ current_losses = {}
22
+ epoch_number = -1
23
+ for i in range(len(values)):
24
+ if values[i] == 'epoch':
25
+ epoch_number = int(values[i + 1])
26
+ else:
27
+ if not isfloat(values[i]) and values[i] != 'time' and values[i] != 'iters' and values[i] != 'data':
28
+ print(values[i], values[i + 1])
29
+ current_losses[values[i]] = float(values[i + 1])
30
+
31
+ losses[epoch_number] = current_losses
32
+ loss_values = collections.defaultdict(list)
33
+ for key in losses:
34
+ loss_values['epoch'].append(key)
35
+ for k in losses[key].keys():
36
+ loss_values[k].append(losses[key][k])
37
+
38
+ return loss_values
39
+
40
+
41
+ def create_loss_diagram(file_name):
42
+ loss_values = read_losses(file_name)
43
+ x = loss_values['epoch']
44
+ plt.figure(figsize=(12, 4))
45
+ for i in range(1, 6):
46
+ plt.plot(x, loss_values['G_GAN_' + str(i)], label='G_GAN_' + str(i))
47
+ # plt.legend()
48
+ # plt.show()
49
+
50
+ # plt.figure()
51
+ for i in range(1, 6):
52
+ plt.plot(x, loss_values['G_L1_' + str(i)], label='G_L1_' + str(i))
53
+ # plt.legend()
54
+ # plt.show()
55
+
56
+ # plt.figure()
57
+ for i in range(1, 6):
58
+ plt.plot(x, loss_values['D_real_' + str(i)], label='D_real_' + str(i))
59
+ # plt.legend()
60
+ # plt.show()
61
+
62
+ # plt.figure()
63
+ for i in range(1, 6):
64
+ plt.plot(x, loss_values['D_fake_' + str(i)], label='D_fake_' + str(i))
65
+ # plt.legend()
66
+ # plt.gca().legend(loc='center left', bbox_to_anchor=(1, 0.5), ncol=5)
67
+ plt.legend(ncol=5)
68
+ plt.show()
69
+ # plt.scatter(x, y)
70
+ # plt.plot(x, y)
71
+ # plt.title("Connected Scatterplot points with line")
72
+ # plt.xlabel("epoch")
73
+ # plt.ylabel("G_GAN_1")
74
+ # plt.show()
75
+ # figure.tight_layout()
76
+ # print(loss_values)
77
+
78
+
79
+ # create_loss_diagram('D://DeepLIIF//checkpoints//DeepLIIF_Empty_500_Model//loss_log.txt')
80
+ # create_loss_diagram('C://Users//localadmin//Desktop//loss_log_SpectralNorm_SYN.txt')
81
+ create_loss_diagram('C://Users//localadmin//Desktop//loss_log_DeepLIIF.txt')