0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何基于PaddlePaddle平臺(tái)訓(xùn)練并測(cè)試一個(gè)視盤(pán)圖像分割的基本模型

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-01 09:20 ? 次閱讀

人工智能的輔助下,只需要數(shù)秒,即可初步判斷被檢者是否存在眼底疾病,這將有助緩解專(zhuān)業(yè)眼科醫(yī)生不足的瓶頸,開(kāi)啟眼底疾病的基層篩查新模式。而圖像分割就是實(shí)現(xiàn)這項(xiàng)功能的基礎(chǔ),可見(jiàn)其重要性。

下面就給大家講講如何基于 PaddlePaddle 平臺(tái),訓(xùn)練并測(cè)試一個(gè)視盤(pán)圖像分割的基本模型。

1.準(zhǔn)備

為了實(shí)現(xiàn)這個(gè)實(shí)驗(yàn),Python 是必不可少的,如果你還沒(méi)有安裝 Python,建議閱讀我們的這篇文章:超詳細(xì)Python安裝指南。

在安裝前,確認(rèn)自己需要的 PaddlePaddle 版本,比如 GPU版 或 CPU版,GPU 在計(jì)算上具有絕對(duì)優(yōu)勢(shì),但是如果你沒(méi)有一塊強(qiáng)力的顯卡,建議選擇CPU版本。

(GPU版) 如果你想使用GPU版,請(qǐng)確認(rèn)本機(jī)安裝了 CUDA 計(jì)算平臺(tái)及 cuDNN,它們的下載地址分別是:
https://developer.nvidia.com/cuda-downloads
https://developer.nvidia.com/cudnn-download-survey

具體 CUDA 和 cuDNN 對(duì)應(yīng)的版本要求如下:

  • CUDA 工具包10.1/10.2配合cuDNN v7.6+
  • CUDA 工具包11.2配合cuDNN v8.1.1

CUDA安裝流程很簡(jiǎn)單,下載exe程序,一路往下走。cuDNN安裝流程復(fù)雜一些,你需要轉(zhuǎn)移壓縮包解壓后的部分文件到CUDA中,具體可見(jiàn)這篇cuDNN的官方安裝指引:
https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html

(CPU版) CPU版安裝過(guò)程比較簡(jiǎn)單,直接按照下面 PaddlePaddle 的安裝指引輸入命令即可。


**(通用)**選擇完你想要安裝的版本,并做好基礎(chǔ)工作后,接下來(lái)就是安裝 PaddlePaddle 的具體步驟,打開(kāi)安裝指引流程頁(yè)面:
https://www.paddlepaddle.org.cn/install/quick

圖片

根據(jù)你自己的情況選擇這些選項(xiàng),最后一個(gè)選項(xiàng)計(jì)算平臺(tái)指的是 GPU 加速工具包或CPU,如果你不想用GPU,請(qǐng)選CPU版;想用GPU版的同學(xué)請(qǐng)按剛剛下載的CUDA版本進(jìn)行選擇。

選擇完畢后下方會(huì)出現(xiàn)安裝信息,輸入安裝信息里的命令即可安裝成功,不得不說(shuō),PaddlePaddle 這些方面做的還是比較貼心的。

在頁(yè)面下方還有具體的從頭到尾的安裝步驟,對(duì) Python 基本的虛擬環(huán)境安裝流程不了解的同學(xué)可以看著這些步驟進(jìn)行安裝。

圖片

2.初嘗paddleseg

安裝完 paddle 后,為了能夠?qū)崿F(xiàn)圖像分割功能,我們還需要安裝 paddleseg:

pip install paddleseg

并克隆 paddleseg的代碼庫(kù) (如果克隆不了,請(qǐng)?jiān)赑ython實(shí)用寶典公眾號(hào)后臺(tái)回復(fù):圖像分割 下載):

git clone https://github.com/PaddlePaddle/PaddleSeg.git

克隆完成,進(jìn)入代碼庫(kù)文件夾:

cd PaddleSeg

執(zhí)行下面命令,并在 PaddleSeg/output 文件夾中出現(xiàn)預(yù)測(cè)結(jié)果,則證明安裝成功。

python predict.py 
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml 
       --model_path https://bj.bcebos.com/paddleseg/dygraph/optic_disc/bisenet_optic_disc_512x512_1k/model.pdparams
       --image_path docs/images/optic_test_image.jpg 
       --save_dir output/result

預(yù)測(cè)結(jié)果如下:

圖片

圖片

3.訓(xùn)練模型

前面只是利用了 PaddlePaddle 提前訓(xùn)練好的數(shù)據(jù)進(jìn)行預(yù)測(cè),下面我們要嘗試自己訓(xùn)練一個(gè)模型。

為了訓(xùn)練模型,我們需要獲得眼底訓(xùn)練集。事實(shí)上,在前面** 初嘗 Paddleseg **中,我們便獲得了一份眼底訓(xùn)練集,其路徑是 PaddleSegdataoptic_disc_seg.

如果你沒(méi)有進(jìn)行 初嘗 Paddleseg 這一節(jié),也想要獲取訓(xùn)練集數(shù)據(jù)的話(huà),在Python實(shí)用寶典公眾號(hào)后臺(tái)回復(fù):圖像分割 下載。下載后解壓數(shù)據(jù)集,得到一個(gè)optic_disc_seg文件夾,將其放到 PaddleSeg 代碼庫(kù)的 data 文件夾下。

配置化訓(xùn)練

PaddleSeg 提供了配置化驅(qū)動(dòng)進(jìn)行模型訓(xùn)練。他們?cè)谂渲梦募性敿?xì)列出了每一個(gè)可以?xún)?yōu)化的選項(xiàng),用戶(hù)只要修改這個(gè)配置文件就可以對(duì)模型進(jìn)行定制。

所有的配置文件在PaddleSeg/configs文件夾下面

圖片

每一個(gè)文件夾代表一個(gè)模型,里面包含這個(gè)模型的所有配置文件。

在PaddleSeg的配置文件給出的學(xué)習(xí)率中,除了"bisenet_optic_disc_512x512_1k.yml"中為單卡學(xué)習(xí)率外,其余配置文件中均為4卡的學(xué)習(xí)率,因此如果你是單卡訓(xùn)練,則學(xué)習(xí)率設(shè)置應(yīng)變成原來(lái)的1/4。

為了簡(jiǎn)化學(xué)習(xí)難度,我們繼續(xù)以"bisenet_optic_disc_512x512_1k.yml"文件為例,修改部分參數(shù)進(jìn)行訓(xùn)練,下面是這個(gè)配置的全部說(shuō)明:

上滑查看更多代碼

batch_size: 4#設(shè)定batch_size的值即為迭代一次送入網(wǎng)絡(luò)的圖片數(shù)量,一般顯卡顯存越大,batch_size的值可以越大
iters: 1000#模型迭代的次數(shù)

train_dataset:#訓(xùn)練數(shù)據(jù)設(shè)置
type: OpticDiscSeg#選擇數(shù)據(jù)集格式
dataset_root: data/optic_disc_seg#選擇數(shù)據(jù)集路徑
num_classes: 2#指定目標(biāo)的類(lèi)別個(gè)數(shù)(背景也算為一類(lèi))
transforms:#數(shù)據(jù)預(yù)處理/增強(qiáng)的方式
- type: Resize#送入網(wǎng)絡(luò)之前需要進(jìn)行resize
target_size:[512, 512]#將原圖resize成512*512在送入網(wǎng)絡(luò)
- type: RandomHorizontalFlip#采用水平反轉(zhuǎn)的方式進(jìn)行數(shù)據(jù)增強(qiáng)
- type: Normalize#圖像進(jìn)行歸一化
mode: train

val_dataset:#驗(yàn)證數(shù)據(jù)設(shè)置
type: OpticDiscSeg#選擇數(shù)據(jù)集格式
dataset_root: data/optic_disc_seg#選擇數(shù)據(jù)集路徑
num_classes: 2#指定目標(biāo)的類(lèi)別個(gè)數(shù)(背景也算為一類(lèi))
transforms:#數(shù)據(jù)預(yù)處理/增強(qiáng)的方式
- type: Resize#將原圖resize成512*512在送入網(wǎng)絡(luò)
target_size:[512, 512]#將原圖resize成512*512在送入網(wǎng)絡(luò)
- type: Normalize#圖像進(jìn)行歸一化
mode: val

optimizer:#設(shè)定優(yōu)化器的類(lèi)型
type: sgd#采用SGDStochastic Gradient Descent)隨機(jī)梯度下降方法為優(yōu)化器
momentum: 0.9#動(dòng)量
weight_decay: 4.0e-5#權(quán)值衰減,使用的目的是防止過(guò)擬合

learning_rate:#設(shè)定學(xué)習(xí)率
value: 0.01#初始學(xué)習(xí)率
decay:
type: poly#采用poly作為學(xué)習(xí)率衰減方式。
power: 0.9#衰減率
end_lr: 0#最終學(xué)習(xí)率

loss:#設(shè)定損失函數(shù)的類(lèi)型
types:
- type: CrossEntropyLoss#損失函數(shù)類(lèi)型
coef:[1, 1, 1, 1, 1]
#BiseNetV2有4個(gè)輔助loss,加上主loss共五個(gè),1表示權(quán)重 all_loss = coef_1 * loss_1 + .... + coef_n * loss_n

model:#模型說(shuō)明
type: BiSeNetV2#設(shè)定模型類(lèi)別
pretrained: Null#設(shè)定模型的預(yù)訓(xùn)練模型

你可以嘗試調(diào)整部分參數(shù)進(jìn)行訓(xùn)練,看看你自己訓(xùn)練的模型效果和官方給出的模型的效果的差別。

開(kāi)始訓(xùn)練

(GPU版)在正式開(kāi)啟訓(xùn)練前,我們需要將CUDA設(shè)置為目前有1張可用的顯卡:

set CUDA_VISIBLE_DEVICES=0 # windows
# export CUDA_VISIBLE_DEVICES=0 # linux

輸入訓(xùn)練命令開(kāi)始訓(xùn)練:

python train.py 
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml 
       --do_eval 
       --use_vdl 
       --save_interval 500 
       --save_dir output
見(jiàn)到如下的界面,說(shuō)明你已經(jīng)開(kāi)始訓(xùn)練了:

圖片

4.訓(xùn)練過(guò)程可視化

PaddlePaddle 還提供了可視化分析工具:VisualDL,讓我們的網(wǎng)絡(luò)訓(xùn)練過(guò)程更加直觀。

當(dāng)打開(kāi)use_vdl開(kāi)關(guān)后,PaddleSeg會(huì)將訓(xùn)練過(guò)程中的數(shù)據(jù)寫(xiě)入VisualDL文件,可實(shí)時(shí)查看訓(xùn)練過(guò)程中的日志。記錄的數(shù)據(jù)包括:

    1. loss變化趨勢(shì)
    1. 學(xué)習(xí)率變化趨勢(shì)
    1. 訓(xùn)練時(shí)間
    1. 數(shù)據(jù)讀取時(shí)間
    1. mean IoU 變化趨勢(shì)(當(dāng)打開(kāi)了do_eval開(kāi)關(guān)后生效)
    1. mean pixel Accuracy變化趨勢(shì)(當(dāng)打開(kāi)了do_eval開(kāi)關(guān)后生效)

使用如下命令啟動(dòng)VisualDL查看日志:

# 下述命令會(huì)在127.0.0.1上啟動(dòng)一個(gè)服務(wù),支持通過(guò)前端web頁(yè)面查看,可以通過(guò)--host這個(gè)參數(shù)指定實(shí)際ip地址
visualdl --logdir output/

在瀏覽器輸入提示的網(wǎng)址,效果如下:

圖片

如圖所示,打開(kāi) http://127.0.0.1:8040/ 頁(yè)面,效果如下:

圖片

5.模型測(cè)試評(píng)估

訓(xùn)練完成后,用戶(hù)可以使用評(píng)估腳本val.py來(lái)評(píng)估模型效果。

假設(shè)訓(xùn)練過(guò)程中迭代次數(shù)(iters)為1000,保存模型的間隔為500,即每迭代1000次數(shù)據(jù)集保存2次訓(xùn)練模型。

因此一共會(huì)產(chǎn)生2個(gè)定期保存的模型,加上保存的最佳模型best_model,一共有3個(gè)模型,可以通過(guò)model_path指定期望評(píng)估的模型文件。

python val.py 
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml 
       --model_path output/iter_1000/model.pdparams

在圖像分割領(lǐng)域中,評(píng)估模型質(zhì)量主要是通過(guò)三個(gè)指標(biāo)進(jìn)行判斷,準(zhǔn)確率(acc)、平均交并比(Mean Intersection over Union,簡(jiǎn)稱(chēng)mIoU)、Kappa系數(shù)。

  • 準(zhǔn)確率:指類(lèi)別預(yù)測(cè)正確的像素占總像素的比例,準(zhǔn)確率越高模型質(zhì)量越好。
  • 平均交并比:對(duì)每個(gè)類(lèi)別數(shù)據(jù)集單獨(dú)進(jìn)行推理計(jì)算,計(jì)算出的預(yù)測(cè)區(qū)域和實(shí)際區(qū)域交集除以預(yù)測(cè)區(qū)域和實(shí)際區(qū)域的并集,然后將所有類(lèi)別得到的結(jié)果取平均。在本例中,正常情況下模型在驗(yàn)證集上的mIoU指標(biāo)值會(huì)達(dá)到0.80以上,顯示信息示例如下所示,第2行的mIoU=0.8609即為mIoU。
  • Kappa系數(shù):一個(gè)用于一致性檢驗(yàn)的指標(biāo),可以用于衡量分類(lèi)的效果。Kappa系數(shù)越高模型質(zhì)量越好。

隨著評(píng)估腳本的運(yùn)行,最終打印的評(píng)估日志如下。

76/76 [==============================] - 6s 84ms/step - batch_cost: 0.0835 - reader cost: 0.0029
2021-06-05 19:38:53 [INFO]      [EVAL] #Images: 76 mIoU: 0.8609 Acc: 0.9945 Kappa: 0.8393
2021-06-05 19:38:53 [INFO]      [EVAL] Class IoU:
[0.9945 0.7273]
2021-06-05 19:38:53 [INFO]      [EVAL] Class Acc:
[0.9961 0.8975]

可以看到,我改了參數(shù)后的訓(xùn)練效果還是不錯(cuò)的。

6.效果可視化

除了分析模型的IOU、ACC和Kappa指標(biāo)之外,我們還可以查閱一些具體樣本的切割樣本效果,從Bad Case啟發(fā)進(jìn)一步優(yōu)化的思路。

predict.py腳本是專(zhuān)門(mén)用來(lái)可視化預(yù)測(cè)案例的,命令格式如下所示

python predict.py 
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml 
       --model_path output/iter_1000/model.pdparams 
       --image_path data/optic_disc_seg/JPEGImages/H0003.jpg 
       --save_dir output/result

運(yùn)行完成后,打開(kāi) output/result 文件夾。我們選擇1張圖片進(jìn)行查看,效果如下。

我們可以直觀的看到模型的切割效果和原始標(biāo)記之間的差別,從而產(chǎn)生一些優(yōu)化的思路,比如是否切割的邊界可以做規(guī)則化的處理等。

大家也可以嘗試自己標(biāo)注一個(gè)數(shù)據(jù)集進(jìn)行圖像分割,你只要按照 PaddleSegdataoptic_disc_seg 里面那樣組織圖片結(jié)構(gòu),就可以復(fù)用這些訓(xùn)練、評(píng)估的過(guò)程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像分割
    +關(guān)注

    關(guān)注

    4

    文章

    180

    瀏覽量

    17932
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3032

    瀏覽量

    48373
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84082
  • PaddlePaddle
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    1402
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在SAM時(shí)代下打造高效的高性能計(jì)算大模型訓(xùn)練平臺(tái)

    Segment Anything Model (SAM)是Meta 公司最近推出的個(gè)創(chuàng)新AI 模型,專(zhuān)門(mén)用于計(jì)算機(jī)視覺(jué)領(lǐng)域圖像分割任務(wù)。借
    的頭像 發(fā)表于 08-21 04:02 ?1628次閱讀
    如何在SAM時(shí)代下打造高效的高性能計(jì)算大<b class='flag-5'>模型</b><b class='flag-5'>訓(xùn)練</b><b class='flag-5'>平臺(tái)</b>

    【愛(ài)芯派 Pro 開(kāi)發(fā)板試用體驗(yàn)】+ 圖像分割和填充的Demo測(cè)試

    測(cè)試的程序是官方提供的交互式圖像分割和修復(fù)(Segment and Inpaint Anything)。所謂交互式圖像分割和修復(fù),就是軟件提
    發(fā)表于 12-26 11:22

    基于GAC模型實(shí)現(xiàn)交互式圖像分割的改進(jìn)算法

    基于GAC模型實(shí)現(xiàn)交互式圖像分割的改進(jìn)算法提出了種改進(jìn)的交互式圖像分割算法。采用全變分去噪
    發(fā)表于 09-19 09:19

    PaddlePaddle Fluid版本的PaddlePaddle如何保存模型

    PaddlePaddle Fluid版本的PaddlePaddle如何在訓(xùn)練前加載此前訓(xùn)練好的模型
    發(fā)表于 04-15 11:19

    PaddlePaddle Fluid版PaddlePaddle加載圖像數(shù)據(jù)出錯(cuò)解決方案

    PaddlePaddle Fluid版的PaddlePaddle加載圖像數(shù)據(jù)報(bào)錯(cuò)
    發(fā)表于 04-18 09:22

    使用全卷積網(wǎng)絡(luò)模型實(shí)現(xiàn)圖像分割

    OpenCv-C++-深度神經(jīng)網(wǎng)絡(luò)(DNN)模塊-使用FCN模型實(shí)現(xiàn)圖像分割
    發(fā)表于 05-28 07:33

    研發(fā)干貨丨基于OK3399-C平臺(tái)android系統(tǒng)下實(shí)現(xiàn)圖像識(shí)別

    ,百度,華為,騰訊的OCR文字識(shí)別庫(kù)等。二:調(diào)用些開(kāi)源庫(kù)進(jìn)行識(shí)別):tensorflow 訓(xùn)練自定義圖像識(shí)別1.是先在ubuntu上對(duì)
    發(fā)表于 02-07 08:46

    基于多級(jí)混合模型圖像分割方法

    本文研究了典型的基于區(qū)域的圖像分割方法主動(dòng)形狀模型(Active Shape Model, ASM)和基于邊緣的圖像分割snake 算法,分
    發(fā)表于 07-08 09:58 ?20次下載

    基于方向氣球力活動(dòng)輪廓模型圖像分割

    針對(duì)傳統(tǒng)參數(shù)活動(dòng)輪廓模型存在對(duì)輪廓線(xiàn)初始位置敏感的缺點(diǎn),提出了方向氣球力活動(dòng)輪廓模型應(yīng)用于MRI 圖像分割。該
    發(fā)表于 07-15 10:51 ?8次下載

    基于改進(jìn)活動(dòng)輪廓模型圖像分割

    基于改進(jìn)活動(dòng)輪廓模型圖像分割_王芳
    發(fā)表于 01-07 19:00 ?0次下載

    基于圖像局部灰度差異的噪聲圖像分割模型

    圖像分割在計(jì)算機(jī)視覺(jué)處理技術(shù)中占據(jù)重要位置,是圖像處理和分析的關(guān)鍵步驟?;谒郊椒ǖ幕顒?dòng)輪廓模型被成功應(yīng)用于在圖像
    發(fā)表于 04-17 11:41 ?3次下載

    個(gè)很小的Pascal VOC數(shù)據(jù)集上訓(xùn)練個(gè)實(shí)例分割模型

    的應(yīng)用,如自動(dòng)駕駛汽車(chē)或醫(yī)療診斷。在這些任務(wù)中,我們依靠機(jī)器的能力來(lái)識(shí)別物體。 我們經(jīng)??吹降呐c目標(biāo)識(shí)別相關(guān)的任務(wù)有4個(gè):分類(lèi)和定位、目標(biāo)檢測(cè)、語(yǔ)義分割和實(shí)例分割。 在分類(lèi)和定位中,我們感興趣的是為
    的頭像 發(fā)表于 12-26 11:26 ?5917次閱讀

    基于SEGNET模型圖像語(yǔ)義分割方法

    使用原始 SEGNET模型對(duì)圖像進(jìn)行語(yǔ)義分割時(shí),未對(duì)圖像中相鄰像素點(diǎn)間的關(guān)系進(jìn)行考慮,導(dǎo)致同目標(biāo)中像素點(diǎn)類(lèi)別預(yù)測(cè)結(jié)果不
    發(fā)表于 05-27 14:54 ?15次下載

    SAM分割模型是什么?

    SAM是類(lèi)處理圖像分割任務(wù)的通用模型。與以往只能處理某種特定類(lèi)型圖片的圖像分割
    的頭像 發(fā)表于 05-20 09:30 ?2051次閱讀

    圖像分割與語(yǔ)義分割中的CNN模型綜述

    圖像分割與語(yǔ)義分割是計(jì)算機(jī)視覺(jué)領(lǐng)域的重要任務(wù),旨在將圖像劃分為多個(gè)具有特定語(yǔ)義含義的區(qū)域或?qū)ο?。卷積神經(jīng)網(wǎng)絡(luò)(CNN)作為深度學(xué)習(xí)的種核心
    的頭像 發(fā)表于 07-09 11:51 ?341次閱讀