目錄
1. 項目需求
2. 網絡選擇
2.1 UNet模塊
2.2 TransUnet
2.2.1 SE模塊
2.2.2 CBAM
2.3 關鍵代碼
3 對比試驗
3.1 unet
3.2?transformer+SE
3.3?transformer+CBAM
4. 結果分析
5. 推理
6. 下載
1. 項目需求
本文需要做的工作是基于CNN和Transformer的心臟左心室分割,需要在Transformer網絡中進行改進,以求期待更好的分割結果
數據集的樣式如下:

這里的標簽是這樣的:

因為是二值的分割任務,這里心臟的左心室標簽全部標記為1,看起來是全黑的,可以可視化看看

2. 網絡選擇
本文選擇的網絡是UNet和TransUnet,并且在TransUnet中加入注意力模塊
2.1 UNet模塊
Unet網絡是一種用于圖像分割任務的深度學習架構,由Ronneberger等人于2015年提出。Unet的結構類似于自編碼器,采用對稱的結構,分為編碼器和解碼器兩部分。
編碼器部分由卷積層和池化層構成,用于提取圖像的特征并逐漸減小空間分辨率。解碼器部分則由反卷積層和卷積層構成,用于將編碼器提取的特征映射回原始分辨率,并生成分割結果。
在訓練過程中,Unet通過將輸入圖像與對應的標簽圖像一起輸入網絡,利用損失函數計算網絡輸出與標簽之間的差異,并通過反向傳播算法調整網絡參數,使得網絡輸出能夠盡可能地接近標簽圖像。
Unet網絡在圖像分割任務中表現出色,尤其在醫學圖像分割等領域取得了很好的效果。其優點包括較小的參數數量、對少量訓練樣本的高效利用,以及良好的分割精度。

2.2 TransUnet
TransUNet是一種基于Transformer的圖像分割模型,它結合了Transformer的自注意力機制和UNet的編碼-解碼結構。這個模型由微軟研究院提出,旨在應用于醫學圖像分割任務。
TransUNet模型的架構主要分為兩部分:Encoder部分和Decoder部分。Encoder部分主要利用Transformer的自注意力機制來提取圖像的全局特征,而Decoder部分則類似于UNet的解碼器,用于將特征映射回原始圖像的分辨率并生成分割結果。
相較于傳統的卷積神經網絡,TransUNet模型在處理長程依賴關系和全局特征提取方面具有優勢。它可以學習到更加細致和全局的特征表示,有助于提升圖像分割的準確性和性能。
總的來說,TransUNet模型是一種結合了Transformer和UNet特點的先進圖像分割模型,適用于醫學圖像等領域的任務。

2.2.1 SE模塊
SE模塊(Security Enhancement Module)是一種用于增強系統安全性的軟件或硬件模塊。它通常被用于加固系統的安全性,提高系統的防護能力,防止惡意攻擊和數據泄露。SE模塊可以實現諸如數據加密、訪問控制、身份認證等功能,從而確保系統和數據的安全。在當今信息安全日益重要的環境下,SE模塊成為許多系統和應用程序的重要組成部分,幫助用戶保護其重要信息和資產不受損害。

2.2.2 CBAM
CBAM模塊是一種用于解決關注機制(Attention Mechanism)的問題的模塊。它結合了通道注意(Channel Attention)和空間注意(Spatial Attention)的方法,從而能夠更加有效地捕捉輸入特征圖中的重要信息。通過CBAM模塊,神經網絡可以學習到更加具有區分度的特征表示,從而提升模型在各種視覺任務中的性能表現。CBAM模塊已經在許多計算機視覺領域得到了成功的應用,成為提升模型性能的重要工具之一。

2.3 關鍵代碼
代碼部分,這里放了三個代碼,分別是unet、transformer+SE、transformer+CBAM,可以自行選擇
# 1. cbam 注意力機制# model =TransUnet(in_channels=3,img_dim=224,vit_blocks=1,# vit_dim_linear_mhsa_block=512, classes=nc)# 添加模塊代碼# model.vit.mlp_head.add_module('cbam', CBAM(1024))# model.vit.transformer.layers[0].mhsa.to_qvk.add_module('cbam', CBAM(1024))# model.vit.transformer.layers[0].mhsa.W_0.add_module('cbam', CBAM(1024))##2. unetmodel = U_Net(img_ch=3,output_ch=nc)# # # 3. se# model =TransUnet(in_channels=3,img_dim=224,vit_blocks=1,# vit_dim_linear_mhsa_block=512, classes=nc)## # 添加模塊代碼# model.vit.mlp_head.add_module('se', SE_Block(1024))# model.vit.transformer.layers[0].mhsa.to_qvk.add_module('se', SE_Block(1024))# model.vit.transformer.layers[0].mhsa.W_0.add_module('se', SE_Block(1024))
3 對比試驗
因為對比試驗,其他的參數都是一樣的,如下所示:
"train parameters": {"batch size": 4,"lr": 0.001,"lrf": 0.01,"ct": false,"epochs": 100,"num classes": 2,"best epoch": 96
3.1 unet


最好epoch?
"epoch:97": {"train log:": {"info": {"pixel accuracy": [0.9996318221092224],"Precision": ["0.9721"],"Recall": ["0.9731"],"F1 score": ["0.9726"],"Dice": ["0.9726"],"IoU": ["0.9466"],"mean precision": 0.9721232056617737,"mean recall": 0.9730567932128906,"mean f1 score": 0.9725897908210754,"mean dice": 0.9725897908210754,"mean iou": 0.9466421008110046}},"val log:": {"info": {"pixel accuracy": [0.9994057416915894],"Precision": ["0.9563"],"Recall": ["0.9568"],"F1 score": ["0.9566"],"Dice": ["0.9566"],"IoU": ["0.9168"],"mean precision": 0.9563419818878174,"mean recall": 0.9568029046058655,"mean f1 score": 0.956572413444519,"mean dice": 0.956572413444519,"mean iou": 0.916759729385376}
3.2?transformer+SE


最好的epoch:
"train log:": {"info": {"pixel accuracy": [0.9997045397758484],"Precision": ["0.9780"],"Recall": ["0.9780"],"F1 score": ["0.9780"],"Dice": ["0.9780"],"IoU": ["0.9569"],"mean precision": 0.9780052900314331,"mean recall": 0.9779714941978455,"mean f1 score": 0.9779884219169617,"mean dice": 0.9779884219169617,"mean iou": 0.9569249749183655}},"val log:": {"info": {"pixel accuracy": [0.9994567036628723],"Precision": ["0.9588"],"Recall": ["0.9619"],"F1 score": ["0.9604"],"Dice": ["0.9604"],"IoU": ["0.9237"],"mean precision": 0.9588128328323364,"mean recall": 0.9618959426879883,"mean f1 score": 0.9603518843650818,"mean dice": 0.9603519439697266,"mean iou": 0.9237278699874878}}},
?
3.3?transformer+CBAM


最好的epoch:
"epoch:96": {"train log:": {"info": {"pixel accuracy": [0.9996169209480286],"Precision": ["0.9724"],"Recall": ["0.9705"],"F1 score": ["0.9714"],"Dice": ["0.9714"],"IoU": ["0.9445"],"mean precision": 0.9724175333976746,"mean recall": 0.9704613089561462,"mean f1 score": 0.9714384078979492,"mean dice": 0.971438467502594,"mean iou": 0.9444631338119507}},"val log:": {"info": {"pixel accuracy": [0.9994094967842102],"Precision": ["0.9582"],"Recall": ["0.9554"],"F1 score": ["0.9568"],"Dice": ["0.9568"],"IoU": ["0.9171"],"mean precision": 0.9581836462020874,"mean recall": 0.9553713798522949,"mean f1 score": 0.9567754864692688,"mean dice": 0.956775426864624,"mean iou": 0.9171327948570251}}
4. 結果分析
指標如下:
| unet | transformer+se | transformer+cbam |
| 0.9566 | 0.9604 | 0.9568 |
| ????????0.9168???????? | 0.9237 | 0.9171 |
上述的指標均為驗證集上的指標
其中第一行為dice、第二行為iou
可以發現,transformer+se的效果是最好的
5. 推理
運行命令:streamlit run infer.py

6. 下載
關于本項目代碼和數據集、訓練結果的下載:【更換數據集進行訓練的話,參考readme文件,pip?requirements文件就行了】
基于transformer和unet卷積神經網絡對心臟左心室分割的研究、已經訓練完成資源-CSDN文庫
包含數據集、完整代碼、和訓練結果:

關于神經網絡的改進:圖像分類網絡改進_聽風吹等浪起的博客-CSDN博客?