【深度學習】醫學影像目標檢測-瘧原蟲識別問題

語言: 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 http://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平臺。

🔥 本文旨在為讀者提供完整流程的深度學習專案開發思路,供讀者參考。