【深度学习】医学影像目标检测-疟原虫识别问题

语言: CN / TW / HK

highlight: a11y-dark theme: smartblue


我正在参与掘金创作者训练营第5期,点击了解活动详情

1. 引言

1.1 项目简介

现如今,医生虽然可以通过检测图像中的疟原虫辅助诊断患者是否患有疟疾。但是通过构建准确率的目标检测模型可实现由智能系统辅助医生进行检测工作,应用于目前的医疗检测产品中能够满足真实的疟原虫检测需求。

人工智能的发展推动了医疗建设,也为医学影像增添了新的方法和手段。因此,为解决疟原虫识别问题,本文将使用PaddleDetection套件中的PicoDet模型,完成目标检测任务,从而实现AI+医疗,为产业赋能。

本文将从环境安装、数据准备、模型训练、模型评估、模型预测、总结以及附录配置文件代码等方面进行介绍。

1.2 数据集介绍

本文使用的数据集包含2703张图像,来自133张用Fields染色处理过的厚血涂片。每个图像都有一个附带的注释文件,其中包含任何可见疟原虫周围边界框的坐标。使用安装在布鲁内尔SP150显微镜上的Motic MC1000摄像头以1000倍放大率拍摄图像。

数据集包含具体文件如下所示:

txt ├── annotation │ ├── plasmodium-0000.xml │ ├── plasmodium-0001.xml │ ... ├── images │ ├── plasmodium-0000.jpg │ ├── plasmodium-0001.jpg │ ... ├── README.txt 其中所包含具体图像示例如下所示:

e9aabafeb69141538fbb83c8f4e687e5a76d44f3911e47c9b252426b93f19b8a.jpg

注意:其中Annotation标注文件中使用的 name 属性为person。

数据集来源:Chapter in Mobile Point-of-Care Monitors and Diagnostic Device Design

2. 环境安装

2.1 克隆PaddleDetection

PaddleDetection作为成熟的目标检测开发套件,提供了从数据准备、模型训练、模型评估、模型导出到模型部署的全流程,使用如下语句完成套件克隆。

! git clone https://gitee.com/PaddlePaddle/PaddleDetection

安装相关工具:

!pip install paddlex -q

2.2 安装依赖库

使用如下命令安装PaddleDetection依赖,并设置环境变量

linux %cd ~/work/PaddleDetection/ !pip install -r requirements.txt %env PYTHONPATH=.:$PYTHONPATH %env CUDA_VISIBLE_DEVICES=0

3. 数据准备

3.1 解压数据集

数据集通常是压缩文件,需要使用类似如下命令对其进行解压。 linux %cd ~ ! unzip -q data/data152739/plasmodium-images.zip

3.2 数据集格式转换

本项目采用VOC格式数据。Pascal VOC数据格式的目标检测数据,是指每个图像文件对应一个同名的xml文件,xml文件中标记物体框的坐标和类别等信息。Pascal VOC格式数据集所需详细内容如下所示: linux ├── Annotations │ ├── plasmodium-0000.xml │ ├── plasmodium-0001.xml │ ... ├── JPEGImages │ ├── plasmodium-0000.jpg │ ├── plasmodium-0001.jpg │ ... ├── labels.txt ├── train_list.txt └── valid_list.txt

label_list.txt: linux person

train.txt/valid.txt: ```linux JPEGImages/plasmodium-0295.jpg Annotations/plasmodium-0295.xml JPEGImages/plasmodium-2030.jpg Annotations/plasmodium-2030.xml JPEGImages/plasmodium-1313.jpg Annotations/plasmodium-1313.xml JPEGImages/plasmodium-2084.jpg Annotations/plasmodium-2084.xml ...

``` 想要转换成如上格式,本文的数据集符合PaddleX格式转换传入要求,因此不需要自定义脚本去切分数据集。我们考虑使用PaddleX工具进行数据集切分及转换: 1. 首先按照PaddleX数据集传入要求,需要有以Annotations(储存标注xml文件)和JPEGImages(储存原图jpg文件)命名的文件夹。 1. 因此我们需要给已有的文件夹进行重命名,将images文件夹重命名为JPEGImages,将annotation文件夹重命名为Annotations 1. 然后使用PaddleX切分命令,设定好文件夹所在路径,并设定好训练集与验证集的比例大小,正式进行格式转换。

注意:本项目考虑以 0.85:0.15 的比例划分训练集与验证集。

使用如下命令切分数据集 linux !paddlex --split_dataset --format VOC --dataset_dir '/home/aistudio/plasmodium-images' --val_value 0.15

4. 模型训练

下面将进行配置模型PicoDet,并开始训练。

4.1 PicoDet模型

PP-PicoDet为PaddleDetection自研模型。PP-PicoDet模型有如下特点:

  • 更高的mAP: 第一个在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时)。
  • 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
  • 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
  • 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。

本模型选用的基本配置文件地址work/PaddleDetection/configs/picodet/picodet_m_320_coco_lcnet.yml

本项目使用的主要参数配置如下所示,以下参数可以根据不同的项目需要进行修改,从而提升训练精度。 yml worker_num: 2 epoch: 150 TrainReader: mixup_epoch: 150 batch_size: 12 EvalReader: batch_size: 8 LearningRate: base_lr: 0.001 schedulers: - !PiecewiseDecay gamma: 0.1 milestones: - 466 - 516 - !LinearWarmup - start_factor: 0.1 - steps: 150

4.2 开始PicoDet模型训练

选用PicoDet模型,骨干网络为LCNet

配置文件中已经设定每100轮训练保存一次模型,在训练指令中只需要设定开启边训练边评估指令--eval以及开启可视化选项,指定好配置文件,使用如下命令开始模型训练。

```

选择配置开始训练。可以通过 -o 选项覆盖配置文件中的参数

%cd /home/aistudio/work/PaddleDetection !python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \ -o use_gpu=true \ --use_vdl=true \ --vdl_log_dir=vdl_dir/scalar \ --eval

指定配置文件

设置或更改配置文件里的参数内容

开启VisualDL记录数据

指定VisualDL记录数据的存储路径

边训练边测试

```

4.3 PicoDet模型训练过程可视化

上一步训练过程中已开启VisualDL可视化工具,VisualDL记录数据的存储路径为work/PaddleDetection/vdl_dir/scalar,可以将训练保存的.log文件上传到BML中,通过侧边栏的数据模型可视化选项进行查看。 PicoDet模型训练可视化结果如下所示:

image.png

image.png

5. 模型评估

指定好训练时使用的配置文件,并选择保存的模型参数,使用如下命令进行评估。

得到的评估结果为:$mAP(0.50, 11point) = 79.37%$

使用如下命令进行模型评估: %cd /home/aistudio/work/PaddleDetection !python tools/eval.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \ -o weights=output/picodet_m_320_coco_lcnet/model_final.pdparams

6. 模型预测

加载训练好的模型,置信度阈值设置为0.5,执行下行命令对验证集或测试集图片进行预测,此处挑选了一张图片进行预测,并输出预测后的结果到infer_output文件夹下。得到的预测结果如下所示:

image.png ```

%cd /home/aistudio/work/PaddleDetection !python3.7 tools/infer.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \ --infer_img=/home/aistudio/work/PaddleDetection/dataset/VOC2007/plasmodium-images/JPEGImages/plasmodium-0155.jpg \ --output_dir=infer_output/ \ --draw_threshold=0.5 \ -o weights=output/picodet_m_320_coco_lcnet/model_final.pdparams

指定模型配置文件

测试图片

结果输出位置

置信度阈值

加载训练好的模型

```

7. 总结

🔥 PicoDet模型,经过150轮训练得到的评估结果为:$mAP(0.50, 11point) = 79.37%$

⚡ 因此,PicoDet模型在疟原虫识别数据集上有着相对不错的效果

⚡ 在今后可以考虑进一步修改超参数进行优化,同时也可以结合其他策略来提升预测精度。

🔥 注:本文使用的是飞桨深度学习开发套件,编译器为AI Studio Notebook平台。

🔥 本文旨在为读者提供完整流程的深度学习项目开发思路,供读者参考。