File size: 4,653 Bytes
4b315f6 2f3b6c4 4b315f6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
---
license: mit
language:
- en
tags:
- AAA
- Aneurysm
- AI
- guidance
- Ultrasound
- POCUS
---
<!-- #region -->
# Automation of Aorta Measurement in Ultrasound Images
## Env setup
Suggested hardware:
- GPU: NVIDIA RTX 3090 or higher x1 (model training using PyTorch)
- CPU: 11th Gen Intel(R) Core(TM) i9-11900KF @ 3.50GHz, or higher (model inference using OpenVINO)
Software stack:
- OS: Ubuntu 20.04 LTS
- Python: 3.8+
- Python Env: conda
```shell
conda create -n aorta python=3.8 -y
conda activate aorta
pip install -r requirements.txt
```
## Dataset
Steps to prepare the dataset:
1. Collect images and import to CVAT
2. Label the images in CVAT
3. Export the labelled data in `COCO 1.0` format using CVAT
1. Go to CVAT > `Projects` page
2. Click `⋮` on `aorta` project
3. Click `Export dataset`
- Format: `COCO 1.0`
- Save images: `Yes`
4. Convert the new split data into YOLOv5 format
```shell
python dataset.py coco2yolov5 [path/to/coco/input/dir] [path/to/yolov5/output/dir]
```
[CVAT](https://github.com/cvat-ai/cvat/tree/v2.3.0) info, set up with docker compose
- Server version: 2.3
- Core version: 7.3.0
- Canvas version: 2.16.1
- UI version: 1.45.0
Dataset related scripts:
- [coco2yolov5seg.ipynb](../coco2yolov5seg.ipynb): Convert COCO format to YOLOv5 format for segmentation task
- [coco_merge_split.ipnb](../coco_merge_split.ipynb): Merge and split COCO format dataset
## Training / Validation / Export
Model choice: Prefer [yolov5-seg] over [yolov7-seg] for training/validation/exporting models, performance comparison:
- yolov5s-seg, fast transfer learning (~5-10 mins for 100 epochs using RTX 3090) and CPU inference
- yolov7-seg, seems too heavy (slower inference using CPU)
Please refer to the repos of yolov5 seg & yolov7 seg for details of training/validation/exporting models.
[yolov5-seg]: https://github.com/ultralytics/yolov5/blob/master/segment/tutorial.ipynb
[yolov7-seg]: https://github.com/WongKinYiu/yolov7/tree/u7/seg
### yolov5-seg
Tested commit:
```shell
# Assume work dir is aorta/
git clone https://github.com/ultralytics/yolov5
cd yolov5
git checkout 23c492321290266810e08fa5ee9a23fc9d6a571f
git apply ../add_clearml_yolov5.patch
```
As of 2023, yolov5 seg doesn't support ClearML, but there is a [PR](https://github.com/ultralytics/yolov5/pull/10752) for it. So we can manually update these files to use ClearML to track the training process, or apply [add_clearml_yolov5.patch](./add_clearml_yolov5.patch).
```shell
# Example
## Original training script
python segment/train.py --img 640 --batch 16 --epochs 3 --data coco128-seg.yaml --weights yolov5s-seg.pt --cache
## Updated training script with ClearML support
python segment/train.py --project [clearml_project_name] --name [task_name] --img 640 --batch 16 --epochs 3 --data coco128-seg.yaml --weights yolov5s-seg.pt --cache
```
## Test video
- Test video: [Demo.mp4](./Demo.mp4)
- Tested video (mp4): Converted from the original avi using `ffmpeg`:
```shell
ffmpeg -i "Demo.avi" -vcodec h264 -acodec aac -b:v 500k -strict -2 Demo.mp4`
```
## Demo (POC for 2022 Intel DevCup)
```shell
# run demo, using openvino model
python demo.py --video Demo.mp4 --model weights/yolov5s-v2/best_openvino_model/yolov5-640-v2.xml --plot-mask --img-size 640
# or run the demo using onnx model
python demo.py --video Demo.mp4 --model weights/yolov5s-v2/yolov5-640.onnx --plot-mask --img-size 640
# or run in the headless mode, generating a recording of the demo
./demo_headless.sh --video Demo.mp4 --model [path/to/model]
```
## Deploy Pyinstaller EXE
Only tested on Windows 10:
```shell
pip install pyinstaller==5.9
pyinstaller demo.py
# (TODO) Replace the following manual steps with pyinstaller --add-data or spec file
#
# Manual copy files to dist\demo
# 1. Copy best_openvino_model folder to dist\demo\
# 2. Copy openvino files to dist\demo
# C:\Users\sa\miniforge3\envs\echo\Lib\site-packages\openvino\libs
# plugins.xml
# openvino_ir_frontend.dll
# openvino_intel_cpu_plugin.dll
# openvino_intel_gpu_plugin.dll
```
Troubleshooting: If the deployed EXE is not working with error `ValueError: --plotlyjs argument is not a valid URL or file path:`, please move the dist folder to another location with no special characters or Chinese in the path. Reference: <https://github.com/plotly/Kaleido/issues/57>
## Paper
https://www.nature.com/articles/s41746-024-01269-4
Chiu, IM., Chen, TY., Zheng, YC. et al. Prospective clinical evaluation of deep learning for ultrasonographic screening of abdominal aortic aneurysms. npj Digit. Med. 7, 282 (2024).
<!-- #endregion -->
```python
``` |