據(jù)預處理到評估全流程解析)
簡介乳腺癌細胞分割圖片數(shù)據(jù)集是一套面向醫(yī)學圖像處理與深度學習研究者的病理圖像資源內(nèi)含58張HE染色組織病理學圖像及配套真實標注主要解決細胞分割與良惡性分類環(huán)節(jié)的標注數(shù)據(jù)需求。壓縮包共232個文件包括116張tif格式原始切片圖像與116個xml格式標注文件整體大小約93.7MB圖像命名包含病例編號與良性/惡性信息便于按需篩選。該數(shù)據(jù)集源自常規(guī)蘇木素-伊紅染色流程能清晰展示細胞核與細胞質(zhì)形態(tài)細節(jié)適合用于訓練細胞分割模型、評估分割算法魯棒性也可作為醫(yī)學圖像深度學習課程的實戰(zhàn)樣本。已有270人學習使用配套XML標注提供了準確的邊界真值可幫助研究者免去人工標注成本專注模型設計與優(yōu)化是開展病理圖像分析、智慧醫(yī)療方向?qū)嶒灥母哔|(zhì)量基礎數(shù)據(jù)。1. 乳腺癌細胞分割圖片數(shù)據(jù)集58張HE切片夠干什么拿到這份“乳腺癌細胞分割圖片數(shù)據(jù)集”時我第一反應是只有58張tif但干過醫(yī)學圖像分割的人都知道這個規(guī)模恰恰是驗證訓練流程最舒服的量級。它是HE染色組織病理學圖像附帶標注用于檢測乳腺癌細胞任務邊界很明確先做細胞分割把每個細胞從組織背景里摳出來再做良性惡性分類。常規(guī)組織學切片里細胞基本透明必須用蘇木素和伊紅染色才能看到結(jié)構(gòu)所以這類數(shù)據(jù)的顏色信息不是裝飾而是先驗。適合正在搭病理分割pipeline、準備用U-Net做第一次細胞分割實驗的從業(yè)者也適合想快速驗證圖像分割算法在真實醫(yī)學數(shù)據(jù)上表現(xiàn)的團隊。2. 讀懂HE染色與文件名編碼先學會看片再談訓練2.1 為什么HE染色是醫(yī)學圖像分割繞不開的起點HE染色的原理不難但直接決定了你怎么讀這張圖。蘇木素帶正電荷會和細胞核里帶負電的核酸結(jié)合把細胞核染成藍紫色伊紅帶負電荷與細胞質(zhì)中帶正電的蛋白質(zhì)結(jié)合把細胞質(zhì)和間質(zhì)染成粉紅色。于是藍紫色區(qū)域基本就是細胞核候選區(qū)粉紅色區(qū)域是細胞質(zhì)和背景組織。對分割模型來說顏色通道不是冗余信息而是最直接的監(jiān)督信號。import tifffile as tiff import numpy as np image tiff.imread(ytma49_042203_benign2_ccd.tif) print(shape:, image.shape, dtype:, image.dtype) print(channel均值:, image.mean(axis(0, 1)))這段代碼先把tif讀進來打印形狀、數(shù)據(jù)類型和每個通道的均值。shape如果是(H, W, 3)說明是RGB三通道病理tif多數(shù)是這個布局打印dtype是為了確認是不是uint8有些掃描儀存的是uint16后面歸一化時除以255還是65535要區(qū)分。很多初學者拿到HE圖直接轉(zhuǎn)灰度等于把核質(zhì)對比度這個最重要的先驗丟掉了后面模型再怎么調(diào)也很難收斂出干凈的細胞邊界。正確做法是把RGB三通道都保留在歸一化的時候單獨處理。另外病理圖像的分割難點在于細胞核經(jīng)常粘連重疊邊界模糊加上染色深淺不一這不是單純調(diào)模型結(jié)構(gòu)能解決的而是要同時考慮染色歸一化、數(shù)據(jù)增強和損失函數(shù)設計。2.2 從文件名拆解數(shù)據(jù)組織方式患者、取材塊與良惡性文件名本身就是一份標注文檔學會讀它比翻說明文檔更快。ytma49_042203_benign2_ccd.tif這個命名里有幾層信息我拆一下字段示例通常含義ytma49ytma49患者/蠟塊編號同一編號代表同一來源042203042203取材位置或坐標編號benign2benign2良性樣本第2個視野/組織塊malignant3malignant3惡性樣本第3個視野/組織塊ccdccd采集設備標識常見于病理掃描儀tif.tif無損圖像格式保留完整細節(jié)這里要特別強調(diào)benign和malignant是圖像級別的標簽標注的是這張視野對應的組織來源是良性還是惡性不代表圖像里所有細胞都屬于同一類。實際做分類任務時以文件名中的benign/malignant作為弱標簽是可以的但如果做像素級分割這個標簽能給你的是圖像級線索不是每個像素的類別。這個區(qū)分在第5章還會再踩一遍。文件名的規(guī)律性決定了數(shù)據(jù)加載的寫法??吹酵磺熬YytmaXX多次出現(xiàn)就要意識到數(shù)據(jù)是按患者分組的后續(xù)劃分訓練集驗證集時不能隨機亂切否則同一個患者的內(nèi)容會同時出現(xiàn)在訓練和驗證里指標虛高到?jīng)]法看。2.3 數(shù)據(jù)集的三個硬邊界規(guī)模、標注與適用場景先說規(guī)模。58張圖在深度學習里確實不算多但它的價值不在樣本量而在數(shù)據(jù)質(zhì)量。HE染色的病理切片每張tif分辨率通常很高可以切出幾十上百個patch數(shù)據(jù)量可以成倍放大。這個規(guī)模很適合跑通一套“讀取-預處理-訓練-評估”的完整流程也適合做遷移學習實驗但不適合從零訓練一個大參數(shù)量模型。再說標注。項目描述里的“真實數(shù)據(jù)”指的是能用于監(jiān)督學習的ground truth標注。用它做細胞分割需要把每張圖對應的掩碼找出來配對配上訓練腳本后就能得到像素級的分割監(jiān)督信號。第三說適用場景這套數(shù)據(jù)的任務鏈條是“細胞分割→良惡性分類”最合適的模型路線是先分割出細胞區(qū)域再做統(tǒng)計特征或分類。直接拿58張圖端到端訓練一個良惡性分類器會吃樣本量不足的虧效果遠不如“先分割再提取特征”的兩階段方案穩(wěn)。3. 把tif原圖變成訓練對讀取、染色歸一化與Patch提取3.1 數(shù)據(jù)組織方式與tif文件讀取拿到數(shù)據(jù)集先別急著訓練第一步是把目錄結(jié)構(gòu)摸清楚。常見做法是圖像和ground truth分開兩個文件夾或者掩碼和原圖同名、后綴改成_mask.tif、_gt.tif。我一般會先寫一個清單腳本把目錄下所有文件列出來看命名規(guī)律再寫配對邏輯。import os from pathlib import Path data_dir Path(./breast_cancer_cells) image_files sorted(data_dir.glob(*_ccd.tif)) mask_files sorted(data_dir.glob(*_mask.tif)) print(原圖數(shù)量:, len(image_files)) print(掩碼數(shù)量:, len(mask_files)) print(前5個原圖:, [f.name for f in image_files[:5]]) for img_path in image_files: mask_path data_dir / img_path.name.replace(_ccd.tif, _mask.tif) if not mask_path.exists(): print(缺少掩碼:, img_path.name)這段代碼的核心是檢查原圖和掩碼是否一一對應。用glob匹配*_ccd.tif拿到全部原圖再試著把_ccd.tif替換成_mask.tif去找掩碼找不到就打印出來。這一步能提前暴露文件名不統(tǒng)一、掩碼缺失、后綴混亂的問題比訓練到一半才發(fā)現(xiàn)數(shù)據(jù)對不上要省時間得多。如果實際掩碼后綴不是_mask.tif把replace那行的后綴按實際情況改掉就行。我習慣把文件配對做成一個config而不是散落在各個腳本里這樣后面切patch、做歸一化、訓練加載都用同一份配置不會出現(xiàn)訓練和推理用了不同文件列表的低級錯誤。3.2 顏色歸一化解決切片之間的染色差異病理切片最折磨人的問題就是染色不均。同一批切片不同批次染色、不同掃描儀出來的顏色深淺能差出一大截。模型如果只在一種染色風格上訓練換一批數(shù)據(jù)性能就崩這是醫(yī)學圖像分割里最常見的泛化性問題。import cv2 import numpy as np def reinhard_normalize(img, target_mean, target_std): lab cv2.cvtColor(img, cv2.COLOR_RGB2LAB) for i in range(3): mean lab[..., i].mean() std lab[..., i].std() lab[..., i] ((lab[..., i] - mean) / (std 1e-6) * target_std[i] target_mean[i]) lab np.clip(lab, 0, 255).astype(np.uint8) return cv2.cvtColor(lab, cv2.COLOR_LAB2RGB) # target_mean和target_std用全部訓練圖逐通道統(tǒng)計得到 target_mean [135.0, 145.0, 155.0] target_std [45.0, 40.0, 35.0] image_norm reinhard_normalize(image, target_mean, target_std)這段實現(xiàn)的是Reinhard顏色歸一化思路是把圖像從RGB轉(zhuǎn)到LAB空間在LAB里逐通道對齊均值和標準差。LAB空間的L通道管亮度、A和B通道管顏色分開對齊不容易破壞組織結(jié)構(gòu)的對比度。轉(zhuǎn)回RGB后整張圖的染色風格就被拉到接近目標分布。參數(shù)里target_mean和target_std不是拍腦袋定的正確做法是把所有訓練原圖讀進來逐通道統(tǒng)計LAB空間的均值和標準差再取平均。實際項目里有的是參考一張標準切片有的用全部訓練數(shù)據(jù)的統(tǒng)計量。這個歸一化操作必須在切patch之前做因為同類細胞的染色一致性是后續(xù)分割效果的基礎。3.3 Patch切分與按患者劃分的訓練驗證集病理圖像分辨率高整張圖直接進模型顯存必然爆常規(guī)做法是切成patch。這里有兩個關鍵參數(shù)patch大小和stride。patch太小區(qū)分上下文不夠太大又吃顯存stride等于patch大小時無重疊小于patch大小時有重疊能緩解邊緣信息丟失。import numpy as np def extract_patches(image, mask, patch_size256, stride256): patches_img, patches_mask [], [] h, w image.shape[:2] for y in range(0, h - patch_size 1, stride): for x in range(0, w - patch_size 1, stride): img_patch image[y:y patch_size, x:x patch_size] mask_patch mask[y:y patch_size, x:x patch_size] if mask_patch.sum() 10: continue patches_img.append(img_patch) patches_mask.append(mask_patch) return np.array(patches_img), np.array(patches_mask)這段代碼有兩個關鍵點。第一用stride控制切塊密度stride256時塊與塊不重疊適合細胞密度均勻的圖如果細胞分布稀疏可以設成128讓塊與塊重疊50%增加細胞被完整包含的概率。第二mask_patch.sum() 10的過濾條件是必須的病理圖有大片空白背景這種純背景patch會拉低訓練效率過濾閾值按實際掩碼數(shù)值范圍調(diào)整。劃分訓練驗證集合時必須按患者編號分組這是這套數(shù)據(jù)集最容易踩的坑。from sklearn.model_selection import GroupKFold groups [img_path.name.split(_)[0] for img_path in image_files] gkf GroupKFold(n_splits5) for train_idx, val_idx in gkf.split(image_files, groupsgroups): train_files [image_files[i] for i in train_idx] val_files [image_files[i] for i in val_idx] breaksplit傳進去的第二個參數(shù)是groups也就是每個樣本所屬的患者編號。GroupKFold會保證同一個患者的圖不會同時出現(xiàn)在訓練和驗證集合里這是從源頭上防數(shù)據(jù)泄漏。否則模型在驗證集上見過同一患者的內(nèi)容指標虛高橫向?qū)Ρ群翢o意義。拿到這套數(shù)據(jù)后第一步就是把所有文件名前綴跑一遍確認患者數(shù)量再看分組數(shù)夠不夠支撐交叉驗證。4. 用U-Net做細胞分割模型選型、損失函數(shù)與評估4.1 為什么U-Net是這個小數(shù)據(jù)集的穩(wěn)妥選擇58張圖、像素級分割這個場景下U-Net是相當穩(wěn)的選擇不是因為它最新而是因為它的結(jié)構(gòu)正好匹配小樣本醫(yī)學圖像分割的痛點。U-Net的編碼器逐層下采樣提取高層語義解碼器逐步上采樣恢復分辨率中間的跳躍連接把編碼器各層的細節(jié)特征直接拼給解碼器讓模型在恢復細胞邊界時能同時看到淺層的邊緣信息和深層的語義信息。相比之下FCN對淺層細節(jié)利用不足細胞邊界容易糊成一片DeepLab用空洞卷積擴大感受野但空洞卷積在小目標密集的場景下對邊界的定位精度反而不如U-Net的跳躍連接直接。細胞分割是密集預測任務邊界質(zhì)量直接決定分割質(zhì)量。在樣本量只有幾十張的情況下U-Net的參數(shù)量也適中不容易過擬合得收不住。醫(yī)學圖像分割社區(qū)里對U-Net的變體研究非常多比如Attention U-Net、ResUNet、U-Net。但我的建議是先在基礎U-Net上把數(shù)據(jù)流程和訓練參數(shù)跑通再考慮變體。數(shù)據(jù)沒準備好換再花哨的網(wǎng)絡結(jié)構(gòu)都是白搭。4.2 訓練配置與組合損失函數(shù)訓練配置我直接給一份能用的參數(shù)表這是多次實驗后比較穩(wěn)定的組合。參數(shù)取值說明輸入尺寸256×256細胞核尺度小無需更大patchbatch size8單卡12GB顯存可承受優(yōu)化器AdamW權(quán)重衰減設1e-5防過擬合初始學習率1e-4配合ReduceLROnPlateau調(diào)度訓練輪數(shù)50早停patience設10損失函數(shù)BCE Dice權(quán)重0.5/0.5分割任務最常用的損失函數(shù)是二元交叉熵和Dice loss的組合。BCE逐像素計算分類損失對每個像素一視同仁Dice loss從區(qū)域重疊角度優(yōu)化緩解類別不平衡。細胞分割里背景像素遠多于細胞像素只用BCE會讓模型偏向預測背景加上Dice loss能強制模型關注前景區(qū)域。import torch import torch.nn as nn class CombinedLoss(nn.Module): def __init__(self, bce_weight0.5, dice_weight0.5): super().__init__() self.bce nn.BCEWithLogitsLoss() self.bce_weight bce_weight self.dice_weight dice_weight def forward(self, logits, targets): bce_loss self.bce(logits, targets) probs torch.sigmoid(logits) smooth 1e-6 inter (probs * targets).sum() dice_loss 1 - (2 * inter smooth) / (probs.sum() targets.sum() smooth) return self.bce_weight * bce_loss self.dice_weight * dice_loss這個實現(xiàn)里logits是模型輸出的原始值targets是二值掩碼。BCE用的是帶logits的版本數(shù)值上更穩(wěn)定不會因為sigmoid后概率接近0或1導致梯度消失。Dice loss里的smooth是平滑項防止分子分母都是0時出現(xiàn)除零錯誤。bce_weight和dice_weight控制兩個損失的權(quán)重如果發(fā)現(xiàn)訓練初期Dice loss波動大可以把dice_weight降到0.3BCE權(quán)重提到0.7穩(wěn)定后再調(diào)回來。數(shù)據(jù)增強方面病理圖像和自然圖像有個重要區(qū)別隨機旋轉(zhuǎn)90度、上下左右翻轉(zhuǎn)是安全的因為組織沒有方向性但隨機裁剪、縮放這類幾何變換以及過強的顏色擾動在低倍鏡下可能改變細胞核的相對尺度關系或者制造出染色風格不一致的假樣本反而讓模型學歪。我一般只做旋轉(zhuǎn)、翻轉(zhuǎn)、微弱亮度抖動顏色增強用HED空間擾動比簡單的HSV調(diào)色更符合病理圖像的染色退化規(guī)律。4.3 Dice和IoU在重疊細胞場景下怎么用評估指標上Dice和IoU是醫(yī)學圖像分割報告里必寫的兩個數(shù)。Dice是兩倍交集除以并集長度的兩倍之和IoU是交集除以并集。兩者高度相關但行為有細微差別IoU對錯誤的懲罰更嚴格同樣的預測結(jié)果IoU數(shù)值會比Dice低一截。def dice_coef(pred, target, smooth1e-6): pred (pred 0.5).astype(np.float32) inter (pred * target).sum() return (2 * inter smooth) / (pred.sum() target.sum() smooth) def iou_score(pred, target, smooth1e-6): pred (pred 0.5).astype(np.float32) inter (pred * target).sum() union pred.sum() target.sum() - inter return (inter smooth) / (union smooth)兩個函數(shù)都先做閾值化把模型輸出的連續(xù)概率轉(zhuǎn)成二值掩碼再計算交集。細胞重疊區(qū)域的像素在mask里本身就是連通的閾值化后如果預測偏保守Dice下降得比IoU慢看起來還行但IoU已經(jīng)很難看了。所以報告指標時我習慣兩個都寫如果Dice和IoU的差距明顯拉大說明模型預測偏保守邊界收縮得厲害需要調(diào)低閾值或者檢查后處理。細胞分割還有一個常見誤區(qū)用像素級accuracy評估。因為背景像素占比太高模型全預測成背景也能拿到90%以上的accuracy這個指標在這個場景下沒有參考價值。要么用Dice/IoU要么做實例級評估統(tǒng)計檢測到的細胞數(shù)、漏檢率和誤檢率。5. 避坑記錄病理圖像分割最容易翻車的四個環(huán)節(jié)5.1 驗證集指標虛高Dice 0.88但可視化全是噪點現(xiàn)象訓練到一半驗證集Dice一路漲到0.88看著喜人結(jié)果把預測掩碼疊加到原圖上一看滿屏小噪點細胞邊界一塌糊涂。原因這個問題我排查過多次一是同一患者的patch在無分組的情況下同時進了訓練集和驗證集模型等于“見過”驗證數(shù)據(jù)指標自然虛高二是沒有做按患者分組數(shù)據(jù)泄漏在醫(yī)學圖像數(shù)據(jù)集里是重災區(qū)。解決第一時間用3.3節(jié)的GroupKFold按ytma編號重新劃分數(shù)據(jù)把驗證指標清零重跑。指標出來之后必須抽至少5張驗證集圖像做可視化人眼確認預測mask和細胞輪廓對得上再認這個指標。從那以后我每次拿到病理數(shù)據(jù)集都會先打印患者編號分布再談訓練。5.2 良惡性標簽被當成像素級標簽訓練直接跑偏現(xiàn)象文件名里有benign2、malignant3有人直接把圖像對應的掩碼和良惡性做匹配把整個patch標注成單一類別訓練分類器。結(jié)果模型在訓練集上loss很低換一個患者的數(shù)據(jù)就全亂套。原因benign/malignant這個標簽是圖像級或組織塊級別的來源標注不保證patch內(nèi)所有像素都屬于同一類。病理組織中良性區(qū)域也可能有少量異型細胞惡性區(qū)域同樣存在正常間質(zhì)。把它當成像素級標簽等于用錯誤的監(jiān)督信號訓練分割模型。解決把“分割”和“分類”分成兩個任務。分割任務只用掩碼做像素級監(jiān)督良惡性標簽用于分割后的區(qū)域統(tǒng)計或作為弱監(jiān)督參考。你可以在分割完成后對每個連通域提取形狀、灰度、核質(zhì)比等特征再做良惡性判別而不是在分割階段混入圖像級標簽。5.3 全圖輸入顯存爆炸無重疊推理又出現(xiàn)拼接線現(xiàn)象直接把整張tif讀進模型12GB顯存報OOM被迫切patch訓練。訓練完了用patch推理預測結(jié)果拼回原圖時patch邊界出現(xiàn)一條明顯的“拼接線”細胞在拼接處被切斷。原因OOM不用多說整張圖分辨率太高。拼接線的根源是推理時patch之間沒有重疊模型只看到當前patch的上下文邊界處感受野不足預測出的掩碼在patch邊緣和中心區(qū)域置信度不一致拼接時灰度就出現(xiàn)臺階。解決推理時采用overlap-tile策略patch重疊部分取平均或加權(quán)平均。重疊區(qū)域權(quán)重可以簡單設計成中心高、邊緣低這樣拼接處過渡自然。具體做法在第6章給出實現(xiàn)我一般設patch256、stride128重疊50%顯存足夠的情況下重疊越多拼接痕跡越輕。5.4 顏色歸一化之后細胞核反而看不清了現(xiàn)象做完Reinhard歸一化訓練出來的Dice不升反降可視化一看歸一化后的圖像細胞核和細胞質(zhì)對比度明顯下降有些圖藍紫色都發(fā)灰了。原因歸一化的參考統(tǒng)計量沒有算對。有人拿單張圖算target_mean和target_std或者用了灰度圖的統(tǒng)計量往LAB通道里套把核質(zhì)對比度洗沒了。更隱蔽的問題是把uint16的圖像直接當uint8處理所有數(shù)值都偏移了255倍。解決先把所有訓練圖統(tǒng)一轉(zhuǎn)成uint8確認通道順序是RGB再逐通道統(tǒng)計LAB空間的均值和標準差最后取全體訓練圖的平均值作為target。歸一化完成后把處理后的圖與原圖并排顯示出來用肉眼看一眼核質(zhì)對比度有沒有保住。這一步花兩分鐘能給后面省下幾小時調(diào)試時間。6. 進階驗證技巧把分割結(jié)果還原到原圖坐標系6.1 重疊Patch預測的加權(quán)拼接訓練時切了patch推理時就要把預測結(jié)果拼回去。直接把預測掩碼按原始坐標放回原圖重疊區(qū)域會留下拼接線。用帶重疊的tile推理在重疊部分做加權(quán)平均能有效消除邊界跳變。權(quán)重用距離圖中心權(quán)重1.0邊緣權(quán)重0.0這樣patch中心的預測擁有最高置信度。import numpy as np def reconstruct_mask(model, image, patch_size256, stride128): h, w image.shape[:2] weight_map np.zeros((h, w), dtypenp.float32) pred_map np.zeros((h, w), dtypenp.float32) for y in range(0, h - patch_size 1, stride): for x in range(0, w - patch_size 1, stride): patch image[y:y patch_size, x:x patch_size] pred model.predict(patch[None, ...])[0, ..., 0] patch_weight np.outer( np.hanning(patch_size), np.hanning(patch_size) ) pred_map[y:y patch_size, x:x patch_size] pred * patch_weight weight_map[y:y patch_size, x:x patch_size] patch_weight pred_map pred_map / (weight_map 1e-6) return pred_map這段代碼里np.hanning(patch_size)生成一個從0到1再回到0的窗函數(shù)np.outer把它擴展成二維權(quán)重矩陣中心像素權(quán)重最大。累加預測時乘以權(quán)重最后除以總權(quán)重重疊區(qū)域的預測就按置信度融合了。stride小于patch_size是核心stride256等于沒重疊拼接線肯定還在。6.2 從掩碼到細胞實例連通域分析分割出的二值掩碼是像素級的“細胞區(qū)域/背景”標記但實際生物學統(tǒng)計需要知道有幾個細胞、每個細胞多大。用連通域分析把掩碼拆成獨立實例是分割后最常用的下游處理。from skimage import measure def extract_cell_instances(pred_mask, min_area20): labels measure.label(pred_mask 0.5, connectivity2) props measure.regionprops(labels) for prop in props: if prop.area min_area: labels[labels prop.label] 0 return labels, propsmeasure.label用二值連通性把掩碼分成獨立編號的區(qū)域connectivity2表示8鄰域連通適合細胞核這種形狀不規(guī)則的物體。min_area是過濾小噪點的閾值在256×256的patch下面積小于20像素的區(qū)域大概率是染色雜質(zhì)或預測噪聲。這個閾值不是固定的先統(tǒng)計所有連通域的面積分布再根據(jù)直方圖的低谷位置設定更合理。到這里每個細胞實例的面積、周長、圓度、質(zhì)心坐標都能從regionprops里拿出來后續(xù)做良惡性分類時這些形態(tài)學特征比raw pixel特征穩(wěn)定得多。惡性細胞通常核更大、核質(zhì)比更高、形態(tài)更不規(guī)則這些統(tǒng)計量可以在實例級別計算。6.3 抽檢可視化流程訓練指標再漂亮不如花幾分鐘做一次實際驗證。我從一個固定的驗證流程里受益很多隨機抽10張驗證集原圖跑一遍推理拼接把預測掩碼以半透明紅色疊加到原圖上同時把原圖、真實mask、預測mask并排存成一張對比圖用肉眼看細胞邊界對得準不準有沒有粘連的細胞被錯誤分成一個有沒有細長偽影被當成細胞。這一步能發(fā)現(xiàn)指標根本暴露不了的問題比如模型對某個患者編號的切片特別不適應、邊界整體偏膨脹、小細胞全被吃掉。從那以后我每次跑完訓練都強制走一遍這個流程再決定要不要繼續(xù)調(diào)參。希望幫到你。本文還有配套的精品資源點擊獲取