melage 0.0.68__py3-none-any.whl → 1.0.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.
- assets/copyright.png +0 -0
- assets/resource/color/FreeSurferColorLUT.txt +2006 -0
- assets/resource/color/LUT_30.txt +31 -0
- assets/resource/color/SynthSeg.txt +34 -0
- resource/color/Simple.txt → assets/resource/color/lut_prostate.txt +20 -18
- assets/resource/horizontalview.png +0 -0
- assets/resource/theme/create_ticks.py +85 -0
- assets/resource/theme/rc/checkbox_checked.png +0 -0
- assets/resource/theme/rc/checkbox_checked@2x.png +0 -0
- assets/resource/theme/rc/checkbox_checked_disabled.png +0 -0
- assets/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
- assets/resource/theme/rc/checkbox_checked_focus.png +0 -0
- assets/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
- assets/resource/theme/rc/checkbox_checked_pressed.png +0 -0
- assets/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
- assets/resource/verticalview.png +0 -0
- assets/resource/zoom_in.png +0 -0
- assets/resource/zoom_neutral (copy).png +0 -0
- assets/resource/zoom_neutral.png +0 -0
- assets/resource/zoom_out.png +0 -0
- data/MNI/mni_icbm152_t1_tal_nlin_sym_09a.nii +0 -0
- data/MNI/mni_icbm152_t1_tal_nlin_sym_09a_masked.nii.gz +0 -0
- data/MNI/mni_icbm152_t1_tal_nlin_sym_09a_seg.nii.gz +0 -0
- melage/__init__.py +1 -1
- melage/config/__init__.py +100 -0
- melage/core/Registration/registration.py +54 -0
- melage/{utils/readData.py → core/io.py} +12 -4
- melage/{widgets/melageAbout.py → dialogs/AboutDialog.py} +1 -1
- melage/dialogs/MaskOperationsDialog.py +146 -0
- melage/dialogs/MaskingDialog.py +139 -0
- melage/dialogs/RegistrationDialog.py +311 -0
- melage/{widgets/ImageThresholding.py → dialogs/ThresholdingDialog.py} +2 -2
- melage/dialogs/TransformationDialog.py +275 -0
- melage/dialogs/__init__.py +9 -0
- melage/dialogs/dynamic_gui.py +327 -0
- melage/{widgets/fileDialog_widget.py → dialogs/helpers/FileDialog.py} +226 -1
- melage/dialogs/helpers/__init__.py +5 -0
- melage/main.py +13 -13
- melage/{widgets/mainwindow_widget.py → mainwindow_widget.py} +1434 -1408
- melage/plugins/N4_bias/N4.py +115 -0
- melage/plugins/N4_bias/N4_schema.py +40 -0
- melage/plugins/N4_bias/main/utils.py +46 -0
- melage/plugins/__init__.py +2 -0
- melage/plugins/bet/bet.py +176 -0
- melage/plugins/bet/bet_schema.py +73 -0
- melage/{widgets/brain_extraction.py → plugins/bet/main/BET.py} +51 -316
- melage/plugins/change_coord/change_coord.py +197 -0
- melage/plugins/change_coord/change_coord_schema.py +31 -0
- melage/plugins/change_coord/main/utils.py +15 -0
- melage/{widgets/Segmentation → plugins/esfcm/main}/FCM.py +3 -5
- melage/plugins/esfcm/main/test.py +57 -0
- melage/{widgets/Segmentation → plugins/esfcm/main}/utils.py +20 -0
- melage/plugins/esfcm/tissue_segmentation.py +124 -0
- melage/plugins/esfcm/tissue_segmentation_schema.py +33 -0
- melage/plugins/masking_operation/mo.py +115 -0
- melage/plugins/masking_operation/mo_schema.py +33 -0
- melage/plugins/mga_net/MGA_Net.py +145 -0
- melage/plugins/mga_net/MGA_Net_schema.py +29 -0
- melage/plugins/mga_net/main/figures/Network.txt +1 -0
- melage/{widgets/DeepLModels/new_unet.py → plugins/mga_net/main/model/mga_net.py} +3 -3
- melage/plugins/mga_net/main/model/utils.py +258 -0
- melage/plugins/mga_net/main/test_mgaNet.py +134 -0
- melage/plugins/resize/resize.py +136 -0
- melage/plugins/resize/resize_schema.py +41 -0
- melage/plugins/ui_helpers.py +144 -0
- melage/plugins/warpseg/WarpSeg.py +195 -0
- melage/plugins/warpseg/WarpSeg_schema.py +41 -0
- melage/plugins/warpseg/__init__.py +2 -0
- melage/plugins/warpseg/warpseg_main/data_reader/DDSet.py +303 -0
- melage/plugins/warpseg/warpseg_main/data_reader/DDSetSeg.py +279 -0
- melage/plugins/warpseg/warpseg_main/data_reader/__init__.py +60 -0
- melage/plugins/warpseg/warpseg_main/data_reader/baseData.py +18 -0
- melage/plugins/warpseg/warpseg_main/data_reader/utils.py +267 -0
- melage/plugins/warpseg/warpseg_main/dist_utils.py +18 -0
- melage/plugins/warpseg/warpseg_main/requirements.txt +10 -0
- melage/plugins/warpseg/warpseg_main/test.py +272 -0
- melage/plugins/warpseg/warpseg_main/train.py +432 -0
- melage/plugins/warpseg/warpseg_main/train_reg.py +373 -0
- melage/plugins/warpseg/warpseg_main/verify_post_process.py +73 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/__init__.py +45 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/py/__init__.py +1 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/py/utils.py +99 -0
- melage/{widgets/Synthstrip.py → plugins/warpseg/warpseg_main/voxelmorph/torch/Unet.py} +71 -51
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/__init__.py +4 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/layers.py +97 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/losses.py +462 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/modelio.py +77 -0
- melage/{widgets/DeepLModels/InfantSegment/Unet.py → plugins/warpseg/warpseg_main/voxelmorph/torch/multi_stage_net.py} +76 -52
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/networks.py +308 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/utils.py +470 -0
- melage/{utils/DispalyIm.py → rendering/DisplayIm.py} +67 -79
- melage/{utils → rendering}/glScientific.py +1 -1
- melage/utils/__init__.py +1 -0
- melage/utils/utils.py +343 -196
- melage/widgets/{dockWidgets.py → DockWidgets.py} +123 -55
- melage/widgets/SettingsWidget.py +98 -0
- melage/widgets/__init__.py +49 -0
- melage/widgets/openglWidgets.py +344 -156
- melage/widgets/openglWidgets_bu.py +645 -0
- melage/widgets/plugin_manager.py +62 -0
- melage-1.0.0.dist-info/METADATA +953 -0
- melage-1.0.0.dist-info/RECORD +571 -0
- melage-1.0.0.dist-info/entry_points.txt +2 -0
- melage-1.0.0.dist-info/top_level.txt +4 -0
- melage/requirements22.txt +0 -25
- melage/requirements_old.txt +0 -28
- melage/resource/theme/rc/checkbox_checked.png +0 -0
- melage/resource/theme/rc/checkbox_checked@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_checked@2x000.png.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked@2x00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled@2x00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus@2x00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed@2x00.png +0 -0
- melage/some_notes.txt +0 -3
- melage/utils/GMM.py +0 -720
- melage/utils/Shaders_bu.py +0 -314
- melage/utils/__init__0.py +0 -7
- melage/utils/glScientific_bc.py +0 -1585
- melage/utils/registration.py +0 -512
- melage/utils/source_folder.py +0 -18
- melage/version.txt +0 -1
- melage/widgets/ApplyMask.py +0 -212
- melage/widgets/ChangeSystem.py +0 -152
- melage/widgets/DeepLModels/NPP/dataset/mri_dataset_affine.py +0 -149
- melage/widgets/DeepLModels/NPP/models/checkpoints/npp_v1.pth.py +0 -0
- melage/widgets/DeepLModels/NPP/models/losses.py +0 -146
- melage/widgets/DeepLModels/NPP/models/model.py +0 -272
- melage/widgets/DeepLModels/NPP/models/utils.py +0 -303
- melage/widgets/DeepLModels/NPP/npp.py +0 -116
- melage/widgets/DeepLModels/NPP/requirements.txt +0 -8
- melage/widgets/DeepLModels/NPP/train/train.py +0 -116
- melage/widgets/DeepLModels/Unet3DAtt.py +0 -657
- melage/widgets/DeepLModels/Unet3D_basic.py +0 -648
- melage/widgets/DeepLModels/new_unet_old.py +0 -639
- melage/widgets/DeepLModels/new_unet_old2.py +0 -658
- melage/widgets/MaskOperations.py +0 -147
- melage/widgets/N4Dialog.py +0 -241
- melage/widgets/Segmentation/__init__.py +0 -588
- melage/widgets/SemiAutoSeg.py +0 -666
- melage/widgets/__init__0.py +0 -5
- melage/widgets/about.py +0 -246
- melage/widgets/activator.py +0 -147
- melage/widgets/be_dl.py +0 -409
- melage/widgets/be_dl_unet3d.py +0 -441
- melage/widgets/brain_extraction_dl.py +0 -887
- melage/widgets/brain_extraction_dl_bu.py +0 -869
- melage/widgets/registrationWidget.py +0 -342
- melage/widgets/settings_widget.py +0 -77
- melage/widgets/tranformationWidget.py +0 -275
- melage-0.0.68.dist-info/METADATA +0 -740
- melage-0.0.68.dist-info/RECORD +0 -916
- melage-0.0.68.dist-info/entry_points.txt +0 -2
- melage-0.0.68.dist-info/top_level.txt +0 -2
- resource/0circle.png +0 -0
- resource/0circle_faded.png +0 -0
- resource/3d.png +0 -0
- resource/3d.psd +0 -0
- resource/3dFaded.png +0 -0
- resource/Eraser.png +0 -0
- resource/EraserFaded.png +0 -0
- resource/EraserX.png +0 -0
- resource/EraserXFaded.png +0 -0
- resource/Eraser_icon.svg +0 -79
- resource/Hand.png +0 -0
- resource/HandIcons_0.png +0 -0
- resource/Hand_IX.png +0 -0
- resource/Hand_IXFaded.png +0 -0
- resource/Handsqueezed.png +0 -0
- resource/Handwriting (copy).png +0 -0
- resource/Handwriting.png +0 -0
- resource/HandwritingMinus.png +0 -0
- resource/HandwritingMinusX.png +0 -0
- resource/HandwritingPlus.png +0 -0
- resource/HandwritingPlusX.png +0 -0
- resource/Move_icon.svg +0 -8
- resource/PngItem_2422924.png +0 -0
- resource/about.png +0 -0
- resource/about_logo.png +0 -0
- resource/about_logo0.png +0 -0
- resource/action_check.png +0 -0
- resource/action_check_OFF.png +0 -0
- resource/arrow).png +0 -0
- resource/arrow.png +0 -0
- resource/arrowFaded.png +0 -0
- resource/arrow_org.png +0 -0
- resource/arrow_org.png.png +0 -0
- resource/arrows.png +0 -0
- resource/authors.mp4 +0 -0
- resource/box.png +0 -0
- resource/check-image-icon-0.jpg +0 -0
- resource/circle.png +0 -0
- resource/circle_faded.png +0 -0
- resource/circle_or.png +0 -0
- resource/close.png +0 -0
- resource/close_bg.png +0 -0
- resource/color/Tissue.txt +0 -24
- resource/color/Tissue12.txt +0 -27
- resource/color/albert_LUT.txt +0 -102
- resource/color/mcrib_LUT.txt +0 -102
- resource/color/pediatric1.txt +0 -29
- resource/color/pediatric1_old.txt +0 -27
- resource/color/pediatric2.txt +0 -87
- resource/color/pediatric3.txt +0 -29
- resource/color/pediatrics (copy).csv +0 -103
- resource/color/tissue_seg.txt +0 -4
- resource/contour.png +0 -0
- resource/contour.svg +0 -2
- resource/contourFaded.png +0 -0
- resource/contourX.png +0 -0
- resource/contourXFaded.png +0 -0
- resource/dti.png +0 -0
- resource/dti0.png +0 -0
- resource/dti222.png +0 -0
- resource/dti_or.png +0 -0
- resource/eco.png +0 -0
- resource/eco22.png +0 -0
- resource/eco_old.png +0 -0
- resource/eco_or.png +0 -0
- resource/eco_or2.png +0 -0
- resource/eco_seg.png +0 -0
- resource/eco_seg_old.png +0 -0
- resource/export.png +0 -0
- resource/hand-grab-icon-10.jpg +0 -0
- resource/hand-grab-icon-25.jpg +0 -0
- resource/info.png +0 -0
- resource/line.png +0 -0
- resource/linefaded.png +0 -0
- resource/load.png +0 -0
- resource/melage_top.ico +0 -0
- resource/melage_top.png +0 -0
- resource/melage_top0.png +0 -0
- resource/melage_top1.png +0 -0
- resource/melage_top4.png +0 -0
- resource/mri (copy).png +0 -0
- resource/mri.png +0 -0
- resource/mri0.png +0 -0
- resource/mri000.png +0 -0
- resource/mri22.png +0 -0
- resource/mri_big.png +0 -0
- resource/mri_old.png +0 -0
- resource/mri_seg.png +0 -0
- resource/mri_seg_old.png +0 -0
- resource/new.png +0 -0
- resource/open.png +0 -0
- resource/open2.png +0 -0
- resource/pan.png +0 -0
- resource/pencil.png +0 -0
- resource/pencilFaded.png +0 -0
- resource/points.png +0 -0
- resource/pointsFaded.png +0 -0
- resource/rotate.png +0 -0
- resource/ruler.png +0 -0
- resource/rulerFaded.png +0 -0
- resource/s.png +0 -0
- resource/s.psd +0 -0
- resource/save.png +0 -0
- resource/saveas.png +0 -0
- resource/seg_mri.png +0 -0
- resource/seg_mri2.png +0 -0
- resource/settings.png +0 -0
- resource/synch.png +0 -0
- resource/synchFaded.png +0 -0
- resource/theme/rc/.keep +0 -1
- resource/theme/rc/arrow_down.png +0 -0
- resource/theme/rc/arrow_down@2x.png +0 -0
- resource/theme/rc/arrow_down_disabled.png +0 -0
- resource/theme/rc/arrow_down_disabled@2x.png +0 -0
- resource/theme/rc/arrow_down_focus.png +0 -0
- resource/theme/rc/arrow_down_focus@2x.png +0 -0
- resource/theme/rc/arrow_down_pressed.png +0 -0
- resource/theme/rc/arrow_down_pressed@2x.png +0 -0
- resource/theme/rc/arrow_left.png +0 -0
- resource/theme/rc/arrow_left@2x.png +0 -0
- resource/theme/rc/arrow_left_disabled.png +0 -0
- resource/theme/rc/arrow_left_disabled@2x.png +0 -0
- resource/theme/rc/arrow_left_focus.png +0 -0
- resource/theme/rc/arrow_left_focus@2x.png +0 -0
- resource/theme/rc/arrow_left_pressed.png +0 -0
- resource/theme/rc/arrow_left_pressed@2x.png +0 -0
- resource/theme/rc/arrow_right.png +0 -0
- resource/theme/rc/arrow_right@2x.png +0 -0
- resource/theme/rc/arrow_right_disabled.png +0 -0
- resource/theme/rc/arrow_right_disabled@2x.png +0 -0
- resource/theme/rc/arrow_right_focus.png +0 -0
- resource/theme/rc/arrow_right_focus@2x.png +0 -0
- resource/theme/rc/arrow_right_pressed.png +0 -0
- resource/theme/rc/arrow_right_pressed@2x.png +0 -0
- resource/theme/rc/arrow_up.png +0 -0
- resource/theme/rc/arrow_up@2x.png +0 -0
- resource/theme/rc/arrow_up_disabled.png +0 -0
- resource/theme/rc/arrow_up_disabled@2x.png +0 -0
- resource/theme/rc/arrow_up_focus.png +0 -0
- resource/theme/rc/arrow_up_focus@2x.png +0 -0
- resource/theme/rc/arrow_up_pressed.png +0 -0
- resource/theme/rc/arrow_up_pressed@2x.png +0 -0
- resource/theme/rc/base_icon.png +0 -0
- resource/theme/rc/base_icon@2x.png +0 -0
- resource/theme/rc/base_icon_disabled.png +0 -0
- resource/theme/rc/base_icon_disabled@2x.png +0 -0
- resource/theme/rc/base_icon_focus.png +0 -0
- resource/theme/rc/base_icon_focus@2x.png +0 -0
- resource/theme/rc/base_icon_pressed.png +0 -0
- resource/theme/rc/base_icon_pressed@2x.png +0 -0
- resource/theme/rc/branch_closed.png +0 -0
- resource/theme/rc/branch_closed@2x.png +0 -0
- resource/theme/rc/branch_closed_disabled.png +0 -0
- resource/theme/rc/branch_closed_disabled@2x.png +0 -0
- resource/theme/rc/branch_closed_focus.png +0 -0
- resource/theme/rc/branch_closed_focus@2x.png +0 -0
- resource/theme/rc/branch_closed_pressed.png +0 -0
- resource/theme/rc/branch_closed_pressed@2x.png +0 -0
- resource/theme/rc/branch_end.png +0 -0
- resource/theme/rc/branch_end@2x.png +0 -0
- resource/theme/rc/branch_end_disabled.png +0 -0
- resource/theme/rc/branch_end_disabled@2x.png +0 -0
- resource/theme/rc/branch_end_focus.png +0 -0
- resource/theme/rc/branch_end_focus@2x.png +0 -0
- resource/theme/rc/branch_end_pressed.png +0 -0
- resource/theme/rc/branch_end_pressed@2x.png +0 -0
- resource/theme/rc/branch_line.png +0 -0
- resource/theme/rc/branch_line@2x.png +0 -0
- resource/theme/rc/branch_line_disabled.png +0 -0
- resource/theme/rc/branch_line_disabled@2x.png +0 -0
- resource/theme/rc/branch_line_focus.png +0 -0
- resource/theme/rc/branch_line_focus@2x.png +0 -0
- resource/theme/rc/branch_line_pressed.png +0 -0
- resource/theme/rc/branch_line_pressed@2x.png +0 -0
- resource/theme/rc/branch_more.png +0 -0
- resource/theme/rc/branch_more@2x.png +0 -0
- resource/theme/rc/branch_more_disabled.png +0 -0
- resource/theme/rc/branch_more_disabled@2x.png +0 -0
- resource/theme/rc/branch_more_focus.png +0 -0
- resource/theme/rc/branch_more_focus@2x.png +0 -0
- resource/theme/rc/branch_more_pressed.png +0 -0
- resource/theme/rc/branch_more_pressed@2x.png +0 -0
- resource/theme/rc/branch_open.png +0 -0
- resource/theme/rc/branch_open@2x.png +0 -0
- resource/theme/rc/branch_open_disabled.png +0 -0
- resource/theme/rc/branch_open_disabled@2x.png +0 -0
- resource/theme/rc/branch_open_focus.png +0 -0
- resource/theme/rc/branch_open_focus@2x.png +0 -0
- resource/theme/rc/branch_open_pressed.png +0 -0
- resource/theme/rc/branch_open_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_checked.png +0 -0
- resource/theme/rc/checkbox_checked0.png +0 -0
- resource/theme/rc/checkbox_checked@2x.png +0 -0
- resource/theme/rc/checkbox_checked@2x0.png +0 -0
- resource/theme/rc/checkbox_checked@2x000.png.png +0 -0
- resource/theme/rc/checkbox_checked_disabled.png +0 -0
- resource/theme/rc/checkbox_checked_disabled0.png +0 -0
- resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
- resource/theme/rc/checkbox_checked_disabled@2x0.png +0 -0
- resource/theme/rc/checkbox_checked_focus.png +0 -0
- resource/theme/rc/checkbox_checked_focus0.png +0 -0
- resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
- resource/theme/rc/checkbox_checked_focus@2x0.png +0 -0
- resource/theme/rc/checkbox_checked_pressed.png +0 -0
- resource/theme/rc/checkbox_checked_pressed0.png +0 -0
- resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_checked_pressed@2x0.png +0 -0
- resource/theme/rc/checkbox_indeterminate.png +0 -0
- resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
- resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
- resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
- resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
- resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
- resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
- resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked.png +0 -0
- resource/theme/rc/checkbox_unchecked0.png +0 -0
- resource/theme/rc/checkbox_unchecked00.png +0 -0
- resource/theme/rc/checkbox_unchecked@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked@2x00.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled0.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled00.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled@2x00.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus0.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus00.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus@2x00.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed0.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed00.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed@2x00.png +0 -0
- resource/theme/rc/line_horizontal.png +0 -0
- resource/theme/rc/line_horizontal@2x.png +0 -0
- resource/theme/rc/line_horizontal_disabled.png +0 -0
- resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
- resource/theme/rc/line_horizontal_focus.png +0 -0
- resource/theme/rc/line_horizontal_focus@2x.png +0 -0
- resource/theme/rc/line_horizontal_pressed.png +0 -0
- resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
- resource/theme/rc/line_vertical.png +0 -0
- resource/theme/rc/line_vertical@2x.png +0 -0
- resource/theme/rc/line_vertical_disabled.png +0 -0
- resource/theme/rc/line_vertical_disabled@2x.png +0 -0
- resource/theme/rc/line_vertical_focus.png +0 -0
- resource/theme/rc/line_vertical_focus@2x.png +0 -0
- resource/theme/rc/line_vertical_pressed.png +0 -0
- resource/theme/rc/line_vertical_pressed@2x.png +0 -0
- resource/theme/rc/radio_checked.png +0 -0
- resource/theme/rc/radio_checked@2x.png +0 -0
- resource/theme/rc/radio_checked_disabled.png +0 -0
- resource/theme/rc/radio_checked_disabled@2x.png +0 -0
- resource/theme/rc/radio_checked_focus.png +0 -0
- resource/theme/rc/radio_checked_focus@2x.png +0 -0
- resource/theme/rc/radio_checked_pressed.png +0 -0
- resource/theme/rc/radio_checked_pressed@2x.png +0 -0
- resource/theme/rc/radio_unchecked.png +0 -0
- resource/theme/rc/radio_unchecked@2x.png +0 -0
- resource/theme/rc/radio_unchecked_disabled.png +0 -0
- resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
- resource/theme/rc/radio_unchecked_focus.png +0 -0
- resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
- resource/theme/rc/radio_unchecked_pressed.png +0 -0
- resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal.png +0 -0
- resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical.png +0 -0
- resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
- resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
- resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
- resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical.png +0 -0
- resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
- resource/theme/rc/transparent.png +0 -0
- resource/theme/rc/transparent@2x.png +0 -0
- resource/theme/rc/transparent_disabled.png +0 -0
- resource/theme/rc/transparent_disabled@2x.png +0 -0
- resource/theme/rc/transparent_focus.png +0 -0
- resource/theme/rc/transparent_focus@2x.png +0 -0
- resource/theme/rc/transparent_pressed.png +0 -0
- resource/theme/rc/transparent_pressed@2x.png +0 -0
- resource/theme/rc/window_close.png +0 -0
- resource/theme/rc/window_close@2x.png +0 -0
- resource/theme/rc/window_close_disabled.png +0 -0
- resource/theme/rc/window_close_disabled@2x.png +0 -0
- resource/theme/rc/window_close_focus.png +0 -0
- resource/theme/rc/window_close_focus@2x.png +0 -0
- resource/theme/rc/window_close_pressed.png +0 -0
- resource/theme/rc/window_close_pressed@2x.png +0 -0
- resource/theme/rc/window_grip.png +0 -0
- resource/theme/rc/window_grip@2x.png +0 -0
- resource/theme/rc/window_grip_disabled.png +0 -0
- resource/theme/rc/window_grip_disabled@2x.png +0 -0
- resource/theme/rc/window_grip_focus.png +0 -0
- resource/theme/rc/window_grip_focus@2x.png +0 -0
- resource/theme/rc/window_grip_pressed.png +0 -0
- resource/theme/rc/window_grip_pressed@2x.png +0 -0
- resource/theme/rc/window_minimize.png +0 -0
- resource/theme/rc/window_minimize@2x.png +0 -0
- resource/theme/rc/window_minimize_disabled.png +0 -0
- resource/theme/rc/window_minimize_disabled@2x.png +0 -0
- resource/theme/rc/window_minimize_focus.png +0 -0
- resource/theme/rc/window_minimize_focus@2x.png +0 -0
- resource/theme/rc/window_minimize_pressed.png +0 -0
- resource/theme/rc/window_minimize_pressed@2x.png +0 -0
- resource/theme/rc/window_undock.png +0 -0
- resource/theme/rc/window_undock@2x.png +0 -0
- resource/theme/rc/window_undock_disabled.png +0 -0
- resource/theme/rc/window_undock_disabled@2x.png +0 -0
- resource/theme/rc/window_undock_focus.png +0 -0
- resource/theme/rc/window_undock_focus@2x.png +0 -0
- resource/theme/rc/window_undock_pressed.png +0 -0
- resource/theme/rc/window_undock_pressed@2x.png +0 -0
- resource/theme/style.qss +0 -2223
- resource/tract.png +0 -0
- resource/view1.png +0 -0
- resource/view1_eco.png +0 -0
- resource/view1_mri.png +0 -0
- resource/view1_seg.png +0 -0
- resource/view2.png +0 -0
- resource/view2_seg.png +0 -0
- resource/w.png +0 -0
- resource/zoom_in.png +0 -0
- resource/zoom_inFaded.png +0 -0
- resource/zoom_out.png +0 -0
- resource/zoom_outFaded.png +0 -0
- {melage/resource → assets}/main.ico +0 -0
- {melage → assets}/resource/0circle.png +0 -0
- {melage → assets}/resource/0circle_faded.png +0 -0
- {melage → assets}/resource/3d.png +0 -0
- {melage → assets}/resource/3d.psd +0 -0
- {melage → assets}/resource/3dFaded.png +0 -0
- {melage → assets}/resource/Eraser.png +0 -0
- {melage → assets}/resource/EraserFaded.png +0 -0
- {melage → assets}/resource/EraserX.png +0 -0
- {melage → assets}/resource/EraserXFaded.png +0 -0
- {melage → assets}/resource/Eraser_icon.svg +0 -0
- {melage → assets}/resource/Hand.png +0 -0
- {melage → assets}/resource/HandIcons_0.png +0 -0
- {melage → assets}/resource/Hand_IX.png +0 -0
- {melage → assets}/resource/Hand_IXFaded.png +0 -0
- {melage → assets}/resource/Handsqueezed.png +0 -0
- {melage → assets}/resource/Handwriting (copy).png +0 -0
- {melage → assets}/resource/Handwriting.png +0 -0
- {melage → assets}/resource/HandwritingMinus.png +0 -0
- {melage → assets}/resource/HandwritingMinusX.png +0 -0
- {melage → assets}/resource/HandwritingPlus.png +0 -0
- {melage → assets}/resource/HandwritingPlusX.png +0 -0
- {melage → assets}/resource/Move_icon.svg +0 -0
- {melage → assets}/resource/PngItem_2422924.png +0 -0
- {melage → assets}/resource/about.png +0 -0
- {melage → assets}/resource/about_logo.png +0 -0
- {melage → assets}/resource/about_logo0.png +0 -0
- {melage → assets}/resource/action_check.png +0 -0
- {melage → assets}/resource/action_check_OFF.png +0 -0
- {melage → assets}/resource/arrow).png +0 -0
- {melage → assets}/resource/arrow.png +0 -0
- {melage → assets}/resource/arrowFaded.png +0 -0
- {melage → assets}/resource/arrow_org.png +0 -0
- {melage → assets}/resource/arrow_org.png.png +0 -0
- {melage → assets}/resource/arrows.png +0 -0
- {melage → assets}/resource/authors.mp4 +0 -0
- {melage → assets}/resource/box.png +0 -0
- {melage → assets}/resource/check-image-icon-0.jpg +0 -0
- {melage → assets}/resource/circle.png +0 -0
- {melage → assets}/resource/circle_faded.png +0 -0
- {melage → assets}/resource/circle_or.png +0 -0
- {melage → assets}/resource/close.png +0 -0
- {melage → assets}/resource/close_bg.png +0 -0
- {melage → assets}/resource/color/Simple.txt +0 -0
- {melage → assets}/resource/color/Tissue.txt +0 -0
- {melage → assets}/resource/color/Tissue12.txt +0 -0
- {melage → assets}/resource/color/albert_LUT.txt +0 -0
- {melage → assets}/resource/color/mcrib_LUT.txt +0 -0
- {melage → assets}/resource/color/pediatric1.txt +0 -0
- {melage → assets}/resource/color/pediatric1_old.txt +0 -0
- {melage → assets}/resource/color/pediatric2.txt +0 -0
- {melage → assets}/resource/color/pediatric3.txt +0 -0
- {melage → assets}/resource/color/pediatrics (copy).csv +0 -0
- {melage → assets}/resource/color/tissue_seg.txt +0 -0
- {melage → assets}/resource/contour.png +0 -0
- {melage → assets}/resource/contour.svg +0 -0
- {melage → assets}/resource/contourFaded.png +0 -0
- {melage → assets}/resource/contourX.png +0 -0
- {melage → assets}/resource/contourXFaded.png +0 -0
- {melage → assets}/resource/dti.png +0 -0
- {melage → assets}/resource/dti0.png +0 -0
- {melage → assets}/resource/dti222.png +0 -0
- {melage → assets}/resource/dti_or.png +0 -0
- {melage → assets}/resource/eco.png +0 -0
- {melage → assets}/resource/eco22.png +0 -0
- {melage → assets}/resource/eco_old.png +0 -0
- {melage → assets}/resource/eco_or.png +0 -0
- {melage → assets}/resource/eco_or2.png +0 -0
- {melage → assets}/resource/eco_seg.png +0 -0
- {melage → assets}/resource/eco_seg_old.png +0 -0
- {melage → assets}/resource/export.png +0 -0
- {melage → assets}/resource/hand-grab-icon-10.jpg +0 -0
- {melage → assets}/resource/hand-grab-icon-25.jpg +0 -0
- {melage → assets}/resource/info.png +0 -0
- {melage → assets}/resource/line.png +0 -0
- {melage → assets}/resource/linefaded.png +0 -0
- {melage → assets}/resource/load.png +0 -0
- {resource → assets/resource}/main.ico +0 -0
- {melage → assets}/resource/manual_images/3D_rightc.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_goto.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_draw1.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_draw2.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render2.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render3.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render4.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render5.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render6.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_seg.png +0 -0
- {melage → assets}/resource/manual_images/exit_toolbar.png +0 -0
- {melage → assets}/resource/manual_images/load_image_file.png +0 -0
- {melage → assets}/resource/manual_images/load_image_file_openp.png +0 -0
- {melage → assets}/resource/manual_images/main_page.png +0 -0
- {melage → assets}/resource/manual_images/menu_file.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_export.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_import.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_settings.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_ss.png +0 -0
- {melage → assets}/resource/manual_images/open_save_load.png +0 -0
- {melage → assets}/resource/manual_images/panning_toolbar.png +0 -0
- {melage → assets}/resource/manual_images/segmentation_toolbar.png +0 -0
- {melage → assets}/resource/manual_images/tab_mri.png +0 -0
- {melage → assets}/resource/manual_images/tab_us.png +0 -0
- {melage → assets}/resource/manual_images/tabs.png +0 -0
- {melage → assets}/resource/manual_images/toolbar_tools.png +0 -0
- {melage → assets}/resource/manual_images/tools_basic.png +0 -0
- {melage → assets}/resource/manual_images/tools_bet.png +0 -0
- {melage → assets}/resource/manual_images/tools_cs.png +0 -0
- {melage → assets}/resource/manual_images/tools_deepbet.png +0 -0
- {melage → assets}/resource/manual_images/tools_imageinfo.png +0 -0
- {melage → assets}/resource/manual_images/tools_maskO.png +0 -0
- {melage → assets}/resource/manual_images/tools_masking.png +0 -0
- {melage → assets}/resource/manual_images/tools_n4b.png +0 -0
- {melage → assets}/resource/manual_images/tools_resize.png +0 -0
- {melage → assets}/resource/manual_images/tools_ruler.png +0 -0
- {melage → assets}/resource/manual_images/tools_seg.png +0 -0
- {melage → assets}/resource/manual_images/tools_threshold.png +0 -0
- {melage → assets}/resource/manual_images/tools_tools.png +0 -0
- {melage → assets}/resource/manual_images/widget_color.png +0 -0
- {melage → assets}/resource/manual_images/widget_color_add.png +0 -0
- {melage → assets}/resource/manual_images/widget_color_add2.png +0 -0
- {melage → assets}/resource/manual_images/widget_color_additional.png +0 -0
- {melage → assets}/resource/manual_images/widget_images.png +0 -0
- {melage → assets}/resource/manual_images/widget_images2.png +0 -0
- {melage → assets}/resource/manual_images/widget_images3.png +0 -0
- {melage → assets}/resource/manual_images/widget_marker.png +0 -0
- {melage → assets}/resource/manual_images/widget_mri.png +0 -0
- {melage → assets}/resource/manual_images/widget_mri2.png +0 -0
- {melage → assets}/resource/manual_images/widget_segintensity.png +0 -0
- {melage → assets}/resource/manual_images/widget_tab_mutualview.png +0 -0
- {melage → assets}/resource/manual_images/widget_tab_mutualview2.png +0 -0
- {melage → assets}/resource/manual_images/widget_table.png +0 -0
- {melage → assets}/resource/manual_images/widget_table2.png +0 -0
- {melage → assets}/resource/manual_images/widget_us.png +0 -0
- {melage → assets}/resource/melage_top.ico +0 -0
- {melage → assets}/resource/melage_top.png +0 -0
- {melage → assets}/resource/melage_top0.png +0 -0
- {melage → assets}/resource/melage_top1.png +0 -0
- {melage → assets}/resource/melage_top4.png +0 -0
- {melage → assets}/resource/mri (copy).png +0 -0
- {melage → assets}/resource/mri.png +0 -0
- {melage → assets}/resource/mri0.png +0 -0
- {melage → assets}/resource/mri000.png +0 -0
- {melage → assets}/resource/mri22.png +0 -0
- {melage → assets}/resource/mri_big.png +0 -0
- {melage → assets}/resource/mri_old.png +0 -0
- {melage → assets}/resource/mri_seg.png +0 -0
- {melage → assets}/resource/mri_seg_old.png +0 -0
- {melage → assets}/resource/new.png +0 -0
- {melage → assets}/resource/open.png +0 -0
- {melage → assets}/resource/open2.png +0 -0
- {melage → assets}/resource/pan.png +0 -0
- {melage → assets}/resource/pencil.png +0 -0
- {melage → assets}/resource/pencilFaded.png +0 -0
- {melage → assets}/resource/points.png +0 -0
- {melage → assets}/resource/pointsFaded.png +0 -0
- {melage → assets}/resource/rotate.png +0 -0
- {melage → assets}/resource/ruler.png +0 -0
- {melage → assets}/resource/rulerFaded.png +0 -0
- {melage → assets}/resource/s.png +0 -0
- {melage → assets}/resource/s.psd +0 -0
- {melage → assets}/resource/save.png +0 -0
- {melage → assets}/resource/saveas.png +0 -0
- {melage → assets}/resource/seg_mri.png +0 -0
- {melage → assets}/resource/seg_mri2.png +0 -0
- {melage → assets}/resource/settings.png +0 -0
- {melage → assets}/resource/synch.png +0 -0
- {melage → assets}/resource/synchFaded.png +0 -0
- {melage → assets}/resource/theme/rc/.keep +0 -0
- {melage → assets}/resource/theme/rc/arrow_down.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_focus.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/checkbox_checked0.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_focus.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_focus.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_focus.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_focus.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent.png +0 -0
- {melage → assets}/resource/theme/rc/transparent@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_focus.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close.png +0 -0
- {melage → assets}/resource/theme/rc/window_close@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/style.qss +0 -0
- {melage → assets}/resource/tract.png +0 -0
- {melage → assets}/resource/view1.png +0 -0
- {melage → assets}/resource/view1_eco.png +0 -0
- {melage → assets}/resource/view1_mri.png +0 -0
- {melage → assets}/resource/view1_seg.png +0 -0
- {melage → assets}/resource/view2.png +0 -0
- {melage → assets}/resource/view2_seg.png +0 -0
- {melage → assets}/resource/w.png +0 -0
- {melage → assets}/resource/zoom_inFaded.png +0 -0
- /melage/resource/zoom_in.png → /assets/resource/zoom_in_old.png +0 -0
- {melage → assets}/resource/zoom_outFaded.png +0 -0
- /melage/resource/zoom_out.png → /assets/resource/zoom_out_old.png +0 -0
- {resource → docs}/manual_images/3D_rightc.png +0 -0
- {resource → docs}/manual_images/3D_rightc_goto.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_draw1.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_draw2.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render2.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render3.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render4.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render5.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render6.png +0 -0
- {resource → docs}/manual_images/3D_rightc_seg.png +0 -0
- {resource → docs}/manual_images/exit_toolbar.png +0 -0
- {resource → docs}/manual_images/load_image_file.png +0 -0
- {resource → docs}/manual_images/load_image_file_openp.png +0 -0
- {resource → docs}/manual_images/main_page.png +0 -0
- {resource → docs}/manual_images/menu_file.png +0 -0
- {resource → docs}/manual_images/menu_file_export.png +0 -0
- {resource → docs}/manual_images/menu_file_import.png +0 -0
- {resource → docs}/manual_images/menu_file_settings.png +0 -0
- {resource → docs}/manual_images/menu_file_ss.png +0 -0
- {resource → docs}/manual_images/open_save_load.png +0 -0
- {resource → docs}/manual_images/panning_toolbar.png +0 -0
- {resource → docs}/manual_images/segmentation_toolbar.png +0 -0
- {resource → docs}/manual_images/tab_mri.png +0 -0
- {resource → docs}/manual_images/tab_us.png +0 -0
- {resource → docs}/manual_images/tabs.png +0 -0
- {resource → docs}/manual_images/toolbar_tools.png +0 -0
- {resource → docs}/manual_images/tools_basic.png +0 -0
- {resource → docs}/manual_images/tools_bet.png +0 -0
- {resource → docs}/manual_images/tools_cs.png +0 -0
- {resource → docs}/manual_images/tools_deepbet.png +0 -0
- {resource → docs}/manual_images/tools_imageinfo.png +0 -0
- {resource → docs}/manual_images/tools_maskO.png +0 -0
- {resource → docs}/manual_images/tools_masking.png +0 -0
- {resource → docs}/manual_images/tools_n4b.png +0 -0
- {resource → docs}/manual_images/tools_resize.png +0 -0
- {resource → docs}/manual_images/tools_ruler.png +0 -0
- {resource → docs}/manual_images/tools_seg.png +0 -0
- {resource → docs}/manual_images/tools_threshold.png +0 -0
- {resource → docs}/manual_images/tools_tools.png +0 -0
- {resource → docs}/manual_images/widget_color.png +0 -0
- {resource → docs}/manual_images/widget_color_add.png +0 -0
- {resource → docs}/manual_images/widget_color_add2.png +0 -0
- {resource → docs}/manual_images/widget_color_additional.png +0 -0
- {resource → docs}/manual_images/widget_images.png +0 -0
- {resource → docs}/manual_images/widget_images2.png +0 -0
- {resource → docs}/manual_images/widget_images3.png +0 -0
- {resource → docs}/manual_images/widget_marker.png +0 -0
- {resource → docs}/manual_images/widget_mri.png +0 -0
- {resource → docs}/manual_images/widget_mri2.png +0 -0
- {resource → docs}/manual_images/widget_segintensity.png +0 -0
- {resource → docs}/manual_images/widget_tab_mutualview.png +0 -0
- {resource → docs}/manual_images/widget_tab_mutualview2.png +0 -0
- {resource → docs}/manual_images/widget_table.png +0 -0
- {resource → docs}/manual_images/widget_table2.png +0 -0
- {resource → docs}/manual_images/widget_us.png +0 -0
- /melage/{widgets/activation.py → dialogs/ActivationDialog.py} +0 -0
- /melage/{widgets/HistImage.py → dialogs/HistogramDialog.py} +0 -0
- /melage/{widgets/iminfo.py → dialogs/ImInfoDialog.py} +0 -0
- /melage/{widgets/colorwidget.py → dialogs/helpers/ColorDialog.py} +0 -0
- /melage/{utils/custom_QScrollBar.py → dialogs/helpers/CustomScrollbar.py} +0 -0
- /melage/{widgets/repeat_widget.py → dialogs/helpers/RepeatDialog.py} +0 -0
- /melage/{widgets/screenshot_widget.py → dialogs/helpers/ScreenshotDialog.py} +0 -0
- /melage/{cli.py → melage.py} +0 -0
- /melage/{utils/brain_extraction_helper.py → plugins/bet/main/utils.py} +0 -0
- /melage/{graphics → rendering}/GLGraphicsItem.py +0 -0
- /melage/{graphics → rendering}/GLViewWidget.py +0 -0
- /melage/{graphics → rendering}/Transform3D.py +0 -0
- /melage/{graphics → rendering}/__init__.py +0 -0
- /melage/{graphics → rendering}/functions.py +0 -0
- /melage/{utils → rendering/helpers}/Shaders_120.py +0 -0
- /melage/{utils → rendering/helpers}/Shaders_330.py +0 -0
- /melage/{graphics → rendering}/items/GLAxisItem.py +0 -0
- /melage/{graphics → rendering}/items/GLGridItem.py +0 -0
- /melage/{graphics → rendering}/items/GLPolygonItem.py +0 -0
- /melage/{graphics → rendering}/items/GLScatterPlotItem.py +0 -0
- /melage/{graphics → rendering}/items/GLVolumeItem.py +0 -0
- /melage/{graphics → rendering}/items/GLVolumeItem_b.py +0 -0
- /melage/{graphics → rendering}/items/__init__.py +0 -0
- /melage/{graphics → rendering}/shaders.py +0 -0
- /melage/widgets/{enhanceImWidget.py → EnhanceImageWidget.py} +0 -0
- {melage-0.0.68.dist-info → melage-1.0.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import math
|
|
2
|
+
from torch.autograd import Variable
|
|
3
|
+
from math import exp
|
|
4
|
+
import SimpleITK as sitk
|
|
5
|
+
import numpy as np
|
|
6
|
+
import torch
|
|
7
|
+
import torch.nn as nn
|
|
8
|
+
import torch.nn.functional as F
|
|
9
|
+
|
|
10
|
+
class MultiScaleMSE(nn.Module):
|
|
11
|
+
"""Multi-scale Mean Squared Error loss using average pooling."""
|
|
12
|
+
def __init__(self, scales=[1, 2, 4]):
|
|
13
|
+
super(MultiScaleMSE, self).__init__()
|
|
14
|
+
self.scales = scales
|
|
15
|
+
self.mse = nn.MSELoss()
|
|
16
|
+
|
|
17
|
+
def forward(self, I, J):
|
|
18
|
+
total_loss = 0.0
|
|
19
|
+
for scale in self.scales:
|
|
20
|
+
if scale > 1:
|
|
21
|
+
I_scaled = F.avg_pool3d(I, kernel_size=scale, stride=scale, padding=0)
|
|
22
|
+
J_scaled = F.avg_pool3d(J, kernel_size=scale, stride=scale, padding=0)
|
|
23
|
+
else:
|
|
24
|
+
I_scaled = I
|
|
25
|
+
J_scaled = J
|
|
26
|
+
|
|
27
|
+
total_loss += self.mse(I_scaled, J_scaled)
|
|
28
|
+
|
|
29
|
+
return total_loss / len(self.scales)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def calculate_jacobian_determinant_3d(flow):
|
|
34
|
+
"""
|
|
35
|
+
Calculates the Jacobian determinant of a 3D deformation field.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
flow (torch.Tensor): The deformation field, shape (B, 3, D, H, W).
|
|
39
|
+
Displacements are in (x, y, z) order.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
torch.Tensor: The Jacobian determinant map, shape (B, 1, D, H, W).
|
|
43
|
+
"""
|
|
44
|
+
# Get spatial dimensions
|
|
45
|
+
B, _, D, H, W = flow.shape
|
|
46
|
+
|
|
47
|
+
# Create an identity grid
|
|
48
|
+
grid_z, grid_y, grid_x = torch.meshgrid(torch.arange(D, device=flow.device),
|
|
49
|
+
torch.arange(H, device=flow.device),
|
|
50
|
+
torch.arange(W, device=flow.device),
|
|
51
|
+
indexing='ij')
|
|
52
|
+
grid = torch.stack((grid_x, grid_y, grid_z), dim=0).float()
|
|
53
|
+
grid = grid.unsqueeze(0).repeat(B, 1, 1, 1, 1) # Shape: (B, 3, D, H, W)
|
|
54
|
+
|
|
55
|
+
# Full transformation map
|
|
56
|
+
transform_map = grid + flow
|
|
57
|
+
|
|
58
|
+
# Calculate spatial gradients (central differences)
|
|
59
|
+
# Gradient along x (W dimension)
|
|
60
|
+
diff_x = transform_map[..., 1:] - transform_map[..., :-1]
|
|
61
|
+
grad_x = torch.cat([diff_x, diff_x[..., -1:]], dim=-1)
|
|
62
|
+
|
|
63
|
+
# Gradient along y (H dimension)
|
|
64
|
+
diff_y = transform_map[..., 1:, :] - transform_map[..., :-1, :]
|
|
65
|
+
grad_y = torch.cat([diff_y, diff_y[..., -1:, :]], dim=-2)
|
|
66
|
+
|
|
67
|
+
# Gradient along z (D dimension)
|
|
68
|
+
diff_z = transform_map[:, :, 1:, :, :] - transform_map[:, :, :-1, :, :]
|
|
69
|
+
grad_z = torch.cat([diff_z, diff_z[:, :, -1:, :, :]], dim=-3)
|
|
70
|
+
# Unpack gradients
|
|
71
|
+
J_xx, J_yx, J_zx = grad_x[:, 0, ...], grad_x[:, 1, ...], grad_x[:, 2, ...]
|
|
72
|
+
J_xy, J_yy, J_zy = grad_y[:, 0, ...], grad_y[:, 1, ...], grad_y[:, 2, ...]
|
|
73
|
+
J_xz, J_yz, J_zz = grad_z[:, 0, ...], grad_z[:, 1, ...], grad_z[:, 2, ...]
|
|
74
|
+
|
|
75
|
+
# Compute the 3x3 determinant
|
|
76
|
+
determinant = (J_xx * (J_yy * J_zz - J_zy * J_yz) -
|
|
77
|
+
J_xy * (J_yx * J_zz - J_zx * J_yz) +
|
|
78
|
+
J_xz * (J_yx * J_zy - J_zx * J_yy))
|
|
79
|
+
|
|
80
|
+
return determinant.unsqueeze(1)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def compute_jacobian_determinant(disp):
|
|
85
|
+
"""
|
|
86
|
+
Compute the Jacobian determinant of a 3D displacement field.
|
|
87
|
+
Args:
|
|
88
|
+
disp (torch.Tensor): Displacement field of shape (B, 3, D, H, W)
|
|
89
|
+
Returns:
|
|
90
|
+
jac_det (torch.Tensor): Jacobian determinant of shape (B, D, H, W)
|
|
91
|
+
"""
|
|
92
|
+
B, C, D, H, W = disp.shape
|
|
93
|
+
grad = torch.gradient(disp, dim=(2, 3, 4)) # Gradient along each spatial axis
|
|
94
|
+
|
|
95
|
+
# Construct Jacobian matrix components
|
|
96
|
+
dx = grad[0] # (B, 3, D, H, W)
|
|
97
|
+
dy = grad[1] # (B, 3, D, H, W)
|
|
98
|
+
dz = grad[2] # (B, 3, D, H, W)
|
|
99
|
+
|
|
100
|
+
# Assemble the Jacobian matrix
|
|
101
|
+
jacobian = torch.zeros((B, D, H, W, 3, 3), device=disp.device)
|
|
102
|
+
jacobian[..., 0, 0] = dx[:, 0] + 1 # ∂φx/∂x + identity
|
|
103
|
+
jacobian[..., 0, 1] = dy[:, 0]
|
|
104
|
+
jacobian[..., 0, 2] = dz[:, 0]
|
|
105
|
+
jacobian[..., 1, 0] = dx[:, 1]
|
|
106
|
+
jacobian[..., 1, 1] = dy[:, 1] + 1 # ∂φy/∂y + identity
|
|
107
|
+
jacobian[..., 1, 2] = dz[:, 1]
|
|
108
|
+
jacobian[..., 2, 0] = dx[:, 2]
|
|
109
|
+
jacobian[..., 2, 1] = dy[:, 2]
|
|
110
|
+
jacobian[..., 2, 2] = dz[:, 2] + 1 # ∂φz/∂z + identity
|
|
111
|
+
|
|
112
|
+
# Compute the determinant of the Jacobian matrix
|
|
113
|
+
jac_det = torch.det(jacobian)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
return jac_det
|
|
118
|
+
|
|
119
|
+
def gaussian(window_size, sigma):
|
|
120
|
+
gauss = torch.Tensor([exp(-(x - window_size // 2) ** 2 / float(2 * sigma ** 2))/(np.sqrt(2*np.pi)*sigma) for x in range(window_size)])
|
|
121
|
+
return gauss / gauss.sum()
|
|
122
|
+
|
|
123
|
+
def create_window_3D(window_size, channel):
|
|
124
|
+
_1D_window = gaussian(window_size, 1.5).unsqueeze(1)
|
|
125
|
+
_2D_window = _1D_window.mm(_1D_window.t())
|
|
126
|
+
_3D_window = _1D_window.mm(_2D_window.reshape(1, -1)).reshape(window_size, window_size,
|
|
127
|
+
window_size).float().unsqueeze(0).unsqueeze(0)
|
|
128
|
+
window = Variable(_3D_window.expand(channel, 1, window_size, window_size, window_size).contiguous())
|
|
129
|
+
return window
|
|
130
|
+
|
|
131
|
+
def _ssim3D(img1, img2, window, window_size, channel, L=1):
|
|
132
|
+
|
|
133
|
+
mux = F.conv3d(img1, window, padding=window_size // 2, groups=channel) #Overall Mean Luminance im1
|
|
134
|
+
muy = F.conv3d(img2, window, padding=window_size // 2, groups=channel)#Overall Mean Luminance im2
|
|
135
|
+
mux_sq = mux.pow(2)
|
|
136
|
+
muy_sq = muy.pow(2)
|
|
137
|
+
# Constants for SSIM calculation
|
|
138
|
+
C1 = (0.01 * L) ** 2
|
|
139
|
+
C2 = (0.03 * L) ** 2
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
mux_muy = mux * muy
|
|
143
|
+
|
|
144
|
+
sigmax_sq = F.conv3d(img1 * img1, window, padding=window_size // 2, groups=channel) - mux_sq
|
|
145
|
+
sigmay_sq = F.conv3d(img2 * img2, window, padding=window_size // 2, groups=channel) - muy_sq
|
|
146
|
+
sigmaxy = F.conv3d(img1 * img2, window, padding=window_size // 2, groups=channel) - mux_muy
|
|
147
|
+
|
|
148
|
+
ssim_map = ((2 * mux_muy + C1) * (2 * sigmaxy + C2)) / ((mux_sq + muy_sq + C1) * (sigmax_sq + sigmay_sq + C2))
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
return ssim_map
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def _ssim3D_new(img1, img2, window, window_size, channel, L=1):
|
|
156
|
+
device = img1.device
|
|
157
|
+
window = window.to(device)
|
|
158
|
+
mux = F.conv3d(img1, window, padding=window_size // 2, groups=channel) #Overall Mean Luminance im1
|
|
159
|
+
#device = img2.device
|
|
160
|
+
img2 = img2.to(device)
|
|
161
|
+
|
|
162
|
+
muy = F.conv3d(img2, window, padding=window_size // 2, groups=channel)#Overall Mean Luminance im2
|
|
163
|
+
mux_sq = mux.pow(2)
|
|
164
|
+
muy_sq = muy.pow(2)
|
|
165
|
+
# Constants for SSIM calculation
|
|
166
|
+
C1 = (0.01 * L) ** 2
|
|
167
|
+
C2 = (0.03 * L) ** 2
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
mux_muy = mux * muy
|
|
171
|
+
|
|
172
|
+
sigmax_sq = F.conv3d(img1 * img1, window, padding=window_size // 2, groups=channel) - mux_sq
|
|
173
|
+
sigmay_sq = F.conv3d(img2 * img2, window, padding=window_size // 2, groups=channel) - muy_sq
|
|
174
|
+
sigmaxy = F.conv3d(img1 * img2, window, padding=window_size // 2, groups=channel) - mux_muy
|
|
175
|
+
#
|
|
176
|
+
#
|
|
177
|
+
#ssim_map = ((2 * mux_muy + C1) * (2 * sigmaxy + C2)) / ((mux_sq + muy_sq + C1) * (sigmax_sq + sigmay_sq + C2))
|
|
178
|
+
# Compute texture and structure maps
|
|
179
|
+
structure_map= (2 * sigmaxy+C2) / (sigmax_sq + sigmay_sq + C2)
|
|
180
|
+
texture_map= (2 * mux_muy + C1) / (mux_sq + muy_sq + C1)
|
|
181
|
+
return texture_map, structure_map
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def match_intensity(template, base):
|
|
185
|
+
base = sitk.GetImageFromArray(base)
|
|
186
|
+
tm = sitk.GetImageFromArray(template)
|
|
187
|
+
matched_atlas = sitk.HistogramMatching(tm, base)
|
|
188
|
+
matched_atlas = sitk.GetArrayFromImage(matched_atlas)
|
|
189
|
+
|
|
190
|
+
return matched_atlas
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class SSIM3D_DIST(torch.nn.Module):
|
|
194
|
+
def __init__(self, window_size=11, size_average=True, device='cpu'):
|
|
195
|
+
super(SSIM3D_DIST, self).__init__()
|
|
196
|
+
self.window_size = window_size
|
|
197
|
+
self.device = device
|
|
198
|
+
self.size_average = size_average
|
|
199
|
+
self.channel = 1
|
|
200
|
+
self.window = create_window_3D(window_size, self.channel)
|
|
201
|
+
#self.alpha = nn.Parameter(torch.ones(1))
|
|
202
|
+
#self.beta = nn.Parameter(torch.ones(1))
|
|
203
|
+
#self.gamma = nn.Parameter(torch.ones(1))
|
|
204
|
+
self.eps = 1e-7
|
|
205
|
+
self.weight_raw = torch.nn.Parameter(torch.ones(0))
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def forward(self, gt, pred, uncertain_score=None, map=False):
|
|
210
|
+
(batch_size, channel, _, _, _) = gt.size()
|
|
211
|
+
|
|
212
|
+
if channel == self.channel and self.window.data.type() == gt.data.type():
|
|
213
|
+
window = self.window
|
|
214
|
+
else:
|
|
215
|
+
window = create_window_3D(self.window_size, channel)
|
|
216
|
+
|
|
217
|
+
if gt.is_cuda:
|
|
218
|
+
window = window.cuda(gt.get_device())
|
|
219
|
+
window = window.type_as(gt)
|
|
220
|
+
|
|
221
|
+
self.window = window
|
|
222
|
+
self.channel = channel
|
|
223
|
+
|
|
224
|
+
#texture_map, structure_map = _ssim3D_new(gt, pred, window, self.window_size, channel)
|
|
225
|
+
ssim_map = _ssim3D(gt, pred, window, self.window_size, channel)
|
|
226
|
+
#ssim_map = 0.8*texture_map+0.2*structure_map
|
|
227
|
+
|
|
228
|
+
if map:
|
|
229
|
+
loss_ssim = (1-ssim_map)
|
|
230
|
+
else:
|
|
231
|
+
loss_ssim = (1-ssim_map).mean()
|
|
232
|
+
return loss_ssim
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
#weight = torch.abs(gt - pred).mean(dim=(1, 2, 3, 4), keepdim=True) # Adaptive weight
|
|
236
|
+
#weight = (weight - weight.min()) / (weight.max() - weight.min() + self.eps) # Normalize
|
|
237
|
+
weight=0.5
|
|
238
|
+
loss_ssim = 0
|
|
239
|
+
for i in range(batch_size):
|
|
240
|
+
#a1 = gt.detach().squeeze().cpu().numpy()[i, ...]
|
|
241
|
+
#b1 = pred.detach().squeeze().cpu().numpy()[i, ...]
|
|
242
|
+
|
|
243
|
+
#c = match_intensity(a1, b1)
|
|
244
|
+
#weight = abs(c - a1)
|
|
245
|
+
#weight = (weight - weight.min()) / ((weight.max() - weight.min()) + self.eps)
|
|
246
|
+
#weight = torch.from_numpy(weight).to(self.device)
|
|
247
|
+
#weight = 0.5
|
|
248
|
+
|
|
249
|
+
ssim_map = (weight[i,...]) * (texture_map[i, ...]) + (1 - weight) * (structure_map[i, ...])
|
|
250
|
+
# ssim_map = (weight) * ((Lumin_ssim*Contrast_ssim)[i,...]) + (1-weight) * (structure_ssim[i,...])
|
|
251
|
+
# ssim_map = (weight)*(Lumin_ssim*Contrast_ssim) + (1-weight)*structure_ssim
|
|
252
|
+
if uncertain_score is not None:
|
|
253
|
+
|
|
254
|
+
loss_ssim += ((1-ssim_map)*uncertain_score[i].unsqueeze(0)).mean()
|
|
255
|
+
#loss_ssim += 1- ssim_map
|
|
256
|
+
# ssim_map = (texture_map) + (structure_map)
|
|
257
|
+
# texture_map, structure_map = _ssim3D(im1, im2, window, self.window_size, channel, L=1)
|
|
258
|
+
# loss_ssim += (1-ssim_map.mean([1,2,3,4])).mean()
|
|
259
|
+
|
|
260
|
+
return loss_ssim / batch_size
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def forward_old(self, gt, pred):
|
|
264
|
+
(batch_size, channel, _, _, _) = gt.size()
|
|
265
|
+
|
|
266
|
+
if channel == self.channel and self.window.data.type() == gt.data.type():
|
|
267
|
+
window = self.window
|
|
268
|
+
else:
|
|
269
|
+
window = create_window_3D(self.window_size, channel)
|
|
270
|
+
|
|
271
|
+
if gt.is_cuda:
|
|
272
|
+
window = window.cuda(gt.get_device())
|
|
273
|
+
window = window.type_as(gt)
|
|
274
|
+
|
|
275
|
+
self.window = window
|
|
276
|
+
self.channel = channel
|
|
277
|
+
|
|
278
|
+
# Apply softmax and scale to ensure alpha + beta = 1
|
|
279
|
+
#alpha_beta = torch.cat((self.alpha, self.beta), dim=0)
|
|
280
|
+
#weight = self.weight_raw.exp()
|
|
281
|
+
#weight = weight / weight.sum(0, keepdim=True).clamp(min=self.eps)
|
|
282
|
+
weight = [0.5, 0.5]
|
|
283
|
+
#alpha_beta_softmax = F.softmax(alpha_beta, dim=0)
|
|
284
|
+
#self.alpha.data = alpha_beta_softmax[0]
|
|
285
|
+
#self.beta.data = alpha_beta_softmax[1]
|
|
286
|
+
# https://arxiv.org/pdf/2004.07728
|
|
287
|
+
|
|
288
|
+
#Lumin_ssim, Contrast_ssim, structure_ssim = _Localssim3D(gt, pred, window, self.window_size, channel)
|
|
289
|
+
#ssim_map = _ssim3D(gt, pred, window, self.window_size, channel)
|
|
290
|
+
#return (1-ssim_map.mean([1,2,3,4])).sum()
|
|
291
|
+
|
|
292
|
+
texture_map, structure_map = _ssim3D_new(gt, pred, window, self.window_size, channel)
|
|
293
|
+
loss_ssim = 0
|
|
294
|
+
for i in range(batch_size):
|
|
295
|
+
a1 = gt.detach().squeeze().cpu().numpy()[i, ...]
|
|
296
|
+
b1 = pred.detach().squeeze().cpu().numpy()[i, ...]
|
|
297
|
+
|
|
298
|
+
c = match_intensity(a1, b1)
|
|
299
|
+
weight = abs(c - a1)
|
|
300
|
+
weight = (weight - weight.min()) / ((weight.max() - weight.min()) + self.eps)
|
|
301
|
+
weight = torch.from_numpy(weight).to(self.device)
|
|
302
|
+
|
|
303
|
+
ssim_map = (weight) * (texture_map[i, ...]) + (1 - weight) * (structure_map[i, ...])
|
|
304
|
+
# ssim_map = (weight) * ((Lumin_ssim*Contrast_ssim)[i,...]) + (1-weight) * (structure_ssim[i,...])
|
|
305
|
+
# ssim_map = (weight)*(Lumin_ssim*Contrast_ssim) + (1-weight)*structure_ssim
|
|
306
|
+
loss_ssim += (1 - ssim_map.mean())
|
|
307
|
+
#loss_ssim += 1- ssim_map
|
|
308
|
+
# ssim_map = (texture_map) + (structure_map)
|
|
309
|
+
# texture_map, structure_map = _ssim3D(im1, im2, window, self.window_size, channel, L=1)
|
|
310
|
+
# loss_ssim += (1-ssim_map.mean([1,2,3,4])).mean()
|
|
311
|
+
|
|
312
|
+
return loss_ssim / batch_size
|
|
313
|
+
|
|
314
|
+
class NCC:
|
|
315
|
+
"""
|
|
316
|
+
Local (over window) normalized cross correlation loss.
|
|
317
|
+
"""
|
|
318
|
+
|
|
319
|
+
def __init__(self, win=None):
|
|
320
|
+
self.win = win
|
|
321
|
+
|
|
322
|
+
def loss(self, y_true, y_pred, uncertain_score=None):
|
|
323
|
+
|
|
324
|
+
Ii = y_true
|
|
325
|
+
Ji = y_pred
|
|
326
|
+
|
|
327
|
+
# get dimension of volume
|
|
328
|
+
# assumes Ii, Ji are sized [batch_size, *vol_shape, nb_feats]
|
|
329
|
+
ndims = len(list(Ii.size())) - 2
|
|
330
|
+
assert ndims in [1, 2, 3], "volumes should be 1 to 3 dimensions. found: %d" % ndims
|
|
331
|
+
|
|
332
|
+
# set window size
|
|
333
|
+
win = [9] * ndims if self.win is None else self.win
|
|
334
|
+
b,c,h,w,d = Ii.shape
|
|
335
|
+
# compute filters
|
|
336
|
+
sum_filt = torch.ones([c,1, *win]).to(y_true.device)
|
|
337
|
+
|
|
338
|
+
pad_no = math.floor(win[0] / 2)
|
|
339
|
+
|
|
340
|
+
if ndims == 1:
|
|
341
|
+
stride = (1)
|
|
342
|
+
padding = (pad_no)
|
|
343
|
+
elif ndims == 2:
|
|
344
|
+
stride = (1, 1)
|
|
345
|
+
padding = (pad_no, pad_no)
|
|
346
|
+
else:
|
|
347
|
+
stride = (1, 1, 1)
|
|
348
|
+
padding = (pad_no, pad_no, pad_no)
|
|
349
|
+
|
|
350
|
+
# get convolution function
|
|
351
|
+
conv_fn = getattr(F, 'conv%dd' % ndims)
|
|
352
|
+
|
|
353
|
+
# compute CC squares
|
|
354
|
+
I2 = Ii * Ii
|
|
355
|
+
J2 = Ji * Ji
|
|
356
|
+
IJ = Ii * Ji
|
|
357
|
+
|
|
358
|
+
I_sum = conv_fn(Ii, sum_filt, stride=stride, padding=padding, groups=c)
|
|
359
|
+
J_sum = conv_fn(Ji, sum_filt, stride=stride, padding=padding, groups=c)
|
|
360
|
+
I2_sum = conv_fn(I2, sum_filt, stride=stride, padding=padding, groups=c)
|
|
361
|
+
J2_sum = conv_fn(J2, sum_filt, stride=stride, padding=padding, groups=c)
|
|
362
|
+
IJ_sum = conv_fn(IJ, sum_filt, stride=stride, padding=padding, groups=c)
|
|
363
|
+
|
|
364
|
+
win_size = np.prod(win)
|
|
365
|
+
u_I = I_sum / win_size
|
|
366
|
+
u_J = J_sum / win_size
|
|
367
|
+
|
|
368
|
+
cross = IJ_sum - u_J * I_sum - u_I * J_sum + u_I * u_J * win_size
|
|
369
|
+
I_var = I2_sum - 2 * u_I * I_sum + u_I * u_I * win_size
|
|
370
|
+
J_var = J2_sum - 2 * u_J * J_sum + u_J * u_J * win_size
|
|
371
|
+
|
|
372
|
+
# Clamp variances to be non-negative
|
|
373
|
+
I_var = torch.clamp(I_var, min=1e-5)
|
|
374
|
+
J_var = torch.clamp(J_var, min=1e-5)
|
|
375
|
+
|
|
376
|
+
cc = cross * cross / (I_var * J_var + 1e-5)
|
|
377
|
+
|
|
378
|
+
# Avoid NaN by replacing any NaN values with zero (optional)
|
|
379
|
+
cc = torch.nan_to_num(cc, nan=0.0)
|
|
380
|
+
if uncertain_score is not None:
|
|
381
|
+
return -(0.1*(cc*uncertain_score).sum(1).mean()+(cc).sum(1).mean()) #sum over channel
|
|
382
|
+
else:
|
|
383
|
+
return -cc.sum(1).mean() #sum over channel
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
class MSE:
|
|
387
|
+
"""
|
|
388
|
+
Mean squared error loss.
|
|
389
|
+
"""
|
|
390
|
+
|
|
391
|
+
def loss(self, y_true, y_pred):
|
|
392
|
+
return torch.mean((y_true - y_pred) ** 2)
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
class Dice:
|
|
396
|
+
"""
|
|
397
|
+
N-D dice for segmentation
|
|
398
|
+
"""
|
|
399
|
+
|
|
400
|
+
def loss(self, y_true, y_pred):
|
|
401
|
+
ndims = len(list(y_pred.size())) - 2
|
|
402
|
+
vol_axes = list(range(2, ndims + 2))
|
|
403
|
+
top = 2 * (y_true * y_pred).sum(dim=vol_axes)
|
|
404
|
+
bottom = torch.clamp((y_true + y_pred).sum(dim=vol_axes), min=1e-5)
|
|
405
|
+
dice = torch.mean(top / bottom)
|
|
406
|
+
return -dice
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def total_variation(prob_pred):
|
|
413
|
+
|
|
414
|
+
tv_d = torch.pow(prob_pred[:, :, 1:, :, :] - prob_pred[:, :, :-1, :, :],2).mean()
|
|
415
|
+
tv_h = torch.pow(prob_pred[:, :, :, 1:, :] - prob_pred[:, :, :, :-1, :],2).mean()
|
|
416
|
+
tv_w = torch.pow(prob_pred[:, :, :, :, 1:] - prob_pred[:, :, :, :, :-1],2).mean()
|
|
417
|
+
return tv_d + tv_h + tv_w
|
|
418
|
+
|
|
419
|
+
class Grad:
|
|
420
|
+
"""
|
|
421
|
+
N-D gradient loss.
|
|
422
|
+
"""
|
|
423
|
+
|
|
424
|
+
def __init__(self, penalty='l1', loss_mult=None):
|
|
425
|
+
self.penalty = penalty
|
|
426
|
+
self.loss_mult = loss_mult
|
|
427
|
+
|
|
428
|
+
def _diffs(self, y):
|
|
429
|
+
vol_shape = [n for n in y.shape][2:]
|
|
430
|
+
ndims = len(vol_shape)
|
|
431
|
+
|
|
432
|
+
df = [None] * ndims
|
|
433
|
+
for i in range(ndims):
|
|
434
|
+
d = i + 2
|
|
435
|
+
# permute dimensions
|
|
436
|
+
r = [d, *range(0, d), *range(d + 1, ndims + 2)]
|
|
437
|
+
y = y.permute(r)
|
|
438
|
+
dfi = y[1:, ...] - y[:-1, ...]
|
|
439
|
+
|
|
440
|
+
# permute back
|
|
441
|
+
# note: this might not be necessary for this loss specifically,
|
|
442
|
+
# since the results are just summed over anyway.
|
|
443
|
+
r = [*range(d - 1, d + 1), *reversed(range(1, d - 1)), 0, *range(d + 1, ndims + 2)]
|
|
444
|
+
df[i] = dfi.permute(r)
|
|
445
|
+
|
|
446
|
+
return df
|
|
447
|
+
|
|
448
|
+
def loss(self, _, y_pred):
|
|
449
|
+
if self.penalty == 'l1':
|
|
450
|
+
dif = [torch.abs(f) for f in self._diffs(y_pred)]
|
|
451
|
+
else:
|
|
452
|
+
assert self.penalty == 'l2', 'penalty can only be l1 or l2. Got: %s' % self.penalty
|
|
453
|
+
dif = [f * f for f in self._diffs(y_pred)]
|
|
454
|
+
|
|
455
|
+
df = [torch.mean(torch.flatten(f, start_dim=1), dim=-1) for f in dif]
|
|
456
|
+
grad = sum(df) / len(df)
|
|
457
|
+
|
|
458
|
+
if self.loss_mult is not None:
|
|
459
|
+
grad *= self.loss_mult
|
|
460
|
+
|
|
461
|
+
return grad.mean()
|
|
462
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
import torch.nn as nn
|
|
3
|
+
import inspect
|
|
4
|
+
import functools
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def store_config_args(func):
|
|
8
|
+
"""
|
|
9
|
+
Class-method decorator that saves every argument provided to the
|
|
10
|
+
function as a dictionary in 'self.config'. This is used to assist
|
|
11
|
+
model loading - see LoadableModel.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
argspec = inspect.getfullargspec(func)
|
|
15
|
+
|
|
16
|
+
@functools.wraps(func)
|
|
17
|
+
def wrapper(self, *args, **kwargs):
|
|
18
|
+
self.config = {}
|
|
19
|
+
|
|
20
|
+
# first save the default values
|
|
21
|
+
if argspec.defaults:
|
|
22
|
+
for attr, val in zip(reversed(argspec.args), reversed(argspec.defaults)):
|
|
23
|
+
self.config[attr] = val
|
|
24
|
+
|
|
25
|
+
# next handle positional args
|
|
26
|
+
for attr, val in zip(argspec.args[1:], args):
|
|
27
|
+
self.config[attr] = val
|
|
28
|
+
|
|
29
|
+
# lastly handle keyword args
|
|
30
|
+
if kwargs:
|
|
31
|
+
for attr, val in kwargs.items():
|
|
32
|
+
self.config[attr] = val
|
|
33
|
+
|
|
34
|
+
return func(self, *args, **kwargs)
|
|
35
|
+
return wrapper
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class LoadableModel(nn.Module):
|
|
39
|
+
"""
|
|
40
|
+
Base class for easy pytorch model loading without having to manually
|
|
41
|
+
specify the architecture configuration at load time.
|
|
42
|
+
|
|
43
|
+
We can cache the arguments used to the construct the initial network, so that
|
|
44
|
+
we can construct the exact same network when loading from file. The arguments
|
|
45
|
+
provided to __init__ are automatically saved into the object (in self.config)
|
|
46
|
+
if the __init__ method is decorated with the @store_config_args utility.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
# this constructor just functions as a check to make sure that every
|
|
50
|
+
# LoadableModel subclass has provided an internal config parameter
|
|
51
|
+
# either manually or via store_config_args
|
|
52
|
+
def __init__(self, *args, **kwargs):
|
|
53
|
+
if not hasattr(self, 'config'):
|
|
54
|
+
raise RuntimeError('models that inherit from LoadableModel must decorate the '
|
|
55
|
+
'constructor with @store_config_args')
|
|
56
|
+
super().__init__(*args, **kwargs)
|
|
57
|
+
|
|
58
|
+
def save(self, path):
|
|
59
|
+
"""
|
|
60
|
+
Saves the model configuration and weights to a pytorch file.
|
|
61
|
+
"""
|
|
62
|
+
# don't save the transformer_grid buffers - see SpatialTransformer doc for more info
|
|
63
|
+
sd = self.state_dict().copy()
|
|
64
|
+
grid_buffers = [key for key in sd.keys() if key.endswith('.grid')]
|
|
65
|
+
for key in grid_buffers:
|
|
66
|
+
sd.pop(key)
|
|
67
|
+
torch.save({'config': self.config, 'model_state': sd}, path)
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def load(cls, path, device):
|
|
71
|
+
"""
|
|
72
|
+
Load a python model configuration and weights.
|
|
73
|
+
"""
|
|
74
|
+
checkpoint = torch.load(path, map_location=torch.device(device))
|
|
75
|
+
model = cls(**checkpoint['config'])
|
|
76
|
+
model.load_state_dict(checkpoint['model_state'], strict=False)
|
|
77
|
+
return model
|