| # Description | |
| A pre-trained model for the endoscopic inbody classification task. | |
| # Model Overview | |
| This model is trained using the SEResNet50 structure, whose details can be found in [1]. All datasets are from private samples of [Activ Surgical](https://www.activsurgical.com/). Samples in training and validation dataset are from the same 4 videos, while test samples are from different two videos. | |
| The [pytorch model](https://drive.google.com/file/d/14CS-s1uv2q6WedYQGeFbZeEWIkoyNa-x/view?usp=sharing) and [torchscript model](https://drive.google.com/file/d/1fOoJ4n5DWKHrt9QXTZ2sXwr9C-YvVGCM/view?usp=sharing) are shared in google drive. Modify the "bundle_root" parameter specified in configs/train.json and configs/inference.json to reflect where models are downloaded. Expected directory path to place downloaded models is "models/" under "bundle_root". | |
| ## Data | |
| Datasets used in this work were provided by [Activ Surgical](https://www.activsurgical.com/). Here is a [link](https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/inbody_outbody_samples.zip) of 20 samples (10 in-body and 10 out-body) to show what this dataset looks like. Modify the "dataset_dir" parameter specified in configs/train.json and configs/inference.json to reflect where the data is. | |
| The input label json should be a list made up by dicts which includes "image" and "label" keys. An example format is shown below. | |
| ``` | |
| [ | |
| { | |
| "image":"/path/to/image/image_name0.jpg", | |
| "label": 0 | |
| }, | |
| { | |
| "image":"/path/to/image/image_name1.jpg", | |
| "label": 0 | |
| }, | |
| { | |
| "image":"/path/to/image/image_name2.jpg", | |
| "label": 1 | |
| }, | |
| .... | |
| { | |
| "image":"/path/to/image/image_namek.jpg", | |
| "label": 0 | |
| }, | |
| ] | |
| ``` | |
| ## Training configuration | |
| The training was performed with an at least 12GB-memory GPU. | |
| Actual Model Input: 256 x 256 x 3 | |
| ## Input and output formats | |
| Input: 3 channel video frames | |
| Output: probability vector whose length equals to 2: Label 0: in body; Label 1: out body | |
| ## Scores | |
| This model achieves the following accuracy score on the test dataset: | |
| Accuracy = 0.98 | |
| ## commands example | |
| Execute training: | |
| ``` | |
| python -m monai.bundle run training \ | |
| --meta_file configs/metadata.json \ | |
| --config_file configs/train.json \ | |
| --logging_file configs/logging.conf | |
| ``` | |
| Override the `train` config to execute multi-GPU training: | |
| ``` | |
| torchrun --standalone --nnodes=1 --nproc_per_node=2 -m monai.bundle run training \ | |
| --meta_file configs/metadata.json \ | |
| --config_file "['configs/train.json','configs/multi_gpu_train.json']" \ | |
| --logging_file configs/logging.conf | |
| ``` | |
| Please note that the distributed training related options depend on the actual running environment, thus you may need to remove `--standalone`, modify `--nnodes` or do some other necessary changes according to the machine you used. | |
| Please refer to [pytorch's official tutorial](https://pytorch.org/tutorials/intermediate/ddp_tutorial.html) for more details. | |
| Override the `train` config to execute evaluation with the trained model: | |
| ``` | |
| python -m monai.bundle run evaluating \ | |
| --meta_file configs/metadata.json \ | |
| --config_file "['configs/train.json','configs/evaluate.json']" \ | |
| --logging_file configs/logging.conf | |
| ``` | |
| Execute inference: | |
| ``` | |
| python -m monai.bundle run evaluating \ | |
| --meta_file configs/metadata.json \ | |
| --config_file configs/inference.json \ | |
| --logging_file configs/logging.conf | |
| ``` | |
| Export checkpoint to TorchScript file: | |
| ``` | |
| python -m monai.bundle ckpt_export network_def \ | |
| --filepath models/model.ts \ | |
| --ckpt_file models/model.pt \ | |
| --meta_file configs/metadata.json \ | |
| --config_file configs/inference.json | |
| ``` | |
| Export checkpoint to onnx file, which has been tested on pytorch 1.12.0: | |
| ``` | |
| python scripts/export_to_onnx.py --model models/model.pt --outpath models/model.onnx | |
| ``` | |
| Export TensorRT float16 model from the onnx model: | |
| ``` | |
| trtexec --onnx=models/model.onnx --saveEngine=models/model.trt --fp16 \ | |
| --minShapes=INPUT__0:1x3x256x256 \ | |
| --optShapes=INPUT__0:16x3x256x256 \ | |
| --maxShapes=INPUT__0:32x3x256x256 \ | |
| --shapes=INPUT__0:8x3x256x256 | |
| ``` | |
| This command need TensorRT with correct CUDA installed in the environment. For the detail of installing TensorRT, please refer to [this link](https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html). | |
| # References | |
| [1] J. Hu, L. Shen and G. Sun, Squeeze-and-Excitation Networks, 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition, 2018, pp. 7132-7141. https://arxiv.org/pdf/1709.01507.pdf | |
| # License | |
| Copyright (c) MONAI Consortium | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |