Endoscopic Tool Segmentation from MONAI Model Zoo¶
Authors: Jin Li (NVIDIA)
Supported platforms: x86_64, aarch64
Last modified: March 18, 2025
Language: Python
Latest version: 1.1
Minimum Holoscan SDK version: 0.6.0
Tested Holoscan SDK versions: 0.6.0
Contribution metric: Level 2 - Trusted
This endoscopy tool segmentation application runs the MONAI Endoscopic Tool Segmentation from MONAI Model Zoo.
This HoloHub application has been verified on the GI Genius sandbox and is currently deployable to GI Genius Intelligent Endoscopy Modules. GI Genius is Cosmo Intelligent Medical Devices’ AI-powered endoscopy system. This implementation by Cosmo Intelligent Medical Devices showcases the fast and seamless deployment of HoloHub applications on products/platforms running on NVIDIA Holoscan.
Model¶
We will be deploying the endoscopic tool segmentation model from MONAI Model Zoo.
Note that you could also use the MONAI model zoo repo for training your own semantic segmentation model with your own data, but here we are directly deploying the downloaded MONAI model checkpoint into Holoscan.
Model conversion to ONNX¶
Before deploying the MONAI Model Zoo's trained model checkpoint in Holoscan SDK, we convert the model checkpoint into ONNX.
You can choose to
- download the MONAI Endoscopic Tool Segmentation Model on NGC directly and skip the rest of this Model section, or
- go through the following conversion steps yourself.
- Download the PyTorch model checkpoint linked in the README of endoscopic tool segmentation. We will assume its name to be
model.pt
. -
Clone the MONAI Model Zoo repo.
and place the downloaded PyTorch model intocd [your-workspace] git clone https://github.com/Project-MONAI/model-zoo.git
model-zoo/models/endoscopic_tool_segmentation/
. -
Pull and run the docker image for MONAI. We will use this docker image for converting the PyTorch model to ONNX.
docker pull projectmonai/monai docker run -it --rm --gpus all -v [your-workspace]/model-zoo:/workspace/model-zoo -w /workspace/model-zoo/models/endoscopic_tool_segmentation/ projectmonai/monai
- Install onnxruntime within the container
pip install onnxruntime onnx-graphsurgeon
- Convert model
We will first export the model.pt file to ONNX by using the export_to_onnx.py file. Modify the backbone in line 122 to be efficientnet-b2:
model = load_model_and_export(modelname, outname, out_channels, height, width, multigpu, backbone="efficientnet-b2")
python scripts/export_to_onnx.py --model model.pt --outpath model_endoscopic_tool_seg.onnx --width 736 --height 480 --out_channels 2
polygraphy surgeon sanitize --fold-constants model_endoscopic_tool_seg.onnx -o model_endoscopic_tool_seg_sanitized.onnx
python scripts/graph_surgeon_tool_seg.py --orig_model model_endoscopic_tool_seg_sanitized.onnx --new_model model_endoscopic_tool_seg_sanitized_nhwc_in_nchw_out.onnx
Data¶
For this application we will use the same Endoscopy Sample Data as the Holoscan SDK reference applications.
Requirements¶
The only requirement is to make sure the model and data are accessible by the application. At runtime we will need to specify via the --data
arg, assuming the directory specified contains two subdirectories endoscopy/
(endoscopy video data directory) and monai_tool_seg_model/
(model directory).
Running the application¶
To run this application, you'll need to configure your PYTHONPATH environment variable to locate the necessary python libraries based on your Holoscan SDK installation type.
You should refer to the glossary for the terms defining specific locations within HoloHub.
If your Holoscan SDK installation type is:
- python wheels:
export PYTHONPATH=$PYTHONPATH:<HOLOHUB_BUILD_DIR>/python/lib
- otherwise:
export PYTHONPATH=$PYTHONPATH:<HOLOSCAN_INSTALL_DIR>/python/lib:<HOLOHUB_BUILD_DIR>/python/lib
endoscopy/
and monai_tool_seg_model/
.:
python3 tool_segmentation.py --data <DATA_DIR>
replayer
config in the yaml file to realtime: true
.