You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Define python level abstraction for a Bundle #5821
Is your feature request related to a problem? Please describe.
Currently, we developed many bundles in the model-zoo repo and developed the ConfigParser to load configs.
But actually we don't have a clear definition about what a Bundle is in the python level.
It would be nice to define the Bundle class to represent a bundle and enable users to follow & define their customized bundle structure, and provide the APIs for other applications to easily load and handle a bundle, like MONAI Label, MONAI FL, etc.
Several draft steps to do:
Develop BundleWorkflow interface and implement config-based subclass, so bundle can be implemented with JSON/YAML config or python code, just need to follow the interface.
How to expose the CLI entry and args for customized BYOCBundleWorkflow in bundle/scripts/.
Hi @Nic-Ma
Thanks for starting this post. As I mentioned that we need to think of usability of bundles from 2 different angles
Ease of use from an end-user perspective
Ease of building a MONAI Bundle
From an end-user perspective, if the monai model weights should be available from the python script (as they are for pytorch and keras) without explicitly downloading the model. For example
import torchvision
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.models.detection.mask_rcnn import MaskRCNNPredictor
or for keras
base_model = keras.applications.Xception(
weights="imagenet", # Load weights pre-trained on ImageNet.
input_shape=(150, 150, 3),
include_top=False,
) # Do not include the ImageNet classifier at the top.
# Freeze the base_model
base_model.trainable = False
It will be nice to have similar interface for MONAI models. As far as I understand and used, we can create a model architecture in the similar way in MONAI, but they are not populated with model weights. We looked at loading torchvision models and fine-tuning their model weights in this pull request last year with @wyli.
So maybe if we can reach a place where we can load the model weights as follows
from monai.model_zoo import brats_tumor_segmentation_model
model = brats_tumor_segmentation_model.load_weights(dataset="Brats_challenge_2020")
At this point, the user might want to query the model I/O for the purposes of fine-tuning. A user should be able to call something like
Model Info
Model Name: Brats Tumor Segmentation Model
Dataset model is trained on: Brats Challenge 20
Last updated date: 3 July 2021
Author: xxxx xxxx
Model I/O Config
Input Shape: [3, 256, 256, 256]
Intensity Range for input: [0, 1]
Output Labels: [4, 256, 256, 256]
Produces Binary label for each class.
The user should be able to peel the last layer and attach a different layer for fine-tuning purposes.
E.g:
from monai.networks.nets import densenet121
model = densenet121(pretrained="pathology_nuclei_classification") # pretrained / weights
Where the model now loads pre-trained weights from the pathology_nuclei_classification bundle.
Hi @surajpaib, given your comment above, we were able to support getting instantiated nets directly from a bundle in the 1.3 release, which can be used directly in the existing pipeline.
from monai.bundle import load
model = load("pathology_nuclei_classification", bundle_dir="/workspace/", return_state_dict=False)
Activity
Nic-Ma commentedon Jan 6, 2023
CC @wyli @SachidanandAlle for more discussion.
Thanks.
5821 Enhance bundle CLI entry for different bundle workflows (#6181)
5821 6303 Optimize MonaiAlgo FL based on BundleWorkflow (#6158)
vikashg commentedon Jul 7, 2023
Hi @Nic-Ma
Thanks for starting this post. As I mentioned that we need to think of usability of bundles from 2 different angles
From an end-user perspective, if the monai model weights should be available from the python script (as they are for pytorch and keras) without explicitly downloading the model. For example
or for keras
It will be nice to have similar interface for MONAI models. As far as I understand and used, we can create a model architecture in the similar way in MONAI, but they are not populated with model weights. We looked at loading torchvision models and fine-tuning their model weights in this pull request last year with @wyli.
So maybe if we can reach a place where we can load the model weights as follows
At this point, the user might want to query the model I/O for the purposes of fine-tuning. A user should be able to call something like
which should produce an output
The user should be able to peel the last layer and attach a different layer for fine-tuning purposes.
1 remaining item
surajpaib commentedon Aug 7, 2023
Hi @wyli, do you think something like the above would be of interest?
wyli commentedon Aug 8, 2023
yes, that's a good point, thanks for the comments @surajpaib, @KumoLiu is designing a new pythonic user experience https://docs.google.com/presentation/d/1z3rVJWX7LMcyTrCH-K9dFehBuEksFj0f8bobmJ-DJPA will let you know when a prototype is ready
surajpaib commentedon Aug 8, 2023
Thank you very much for sharing this @wyli
This looks very promising @KumoLiu. Let me know if you would like any help with testing
KumoLiu commentedon Oct 20, 2023
Hi @surajpaib, given your comment above, we were able to support getting instantiated nets directly from a bundle in the 1.3 release, which can be used directly in the existing pipeline.
Feel free to share the feedback.
wyli commentedon Oct 25, 2023
fyi: feature requests for bundle that are not addressed by monai v1.3:
bundle.ConfigWorkflowandengines.WorkflowAPIs and clarify the usage #67485821 Add interface for bundle workflows (Project-MONAI#5822)
ericspod commentedon Jun 27, 2025
Hi all, is this still being worked on? It currently is marked as such in our project but we should keep track of anything falling behind.