用)
簡(jiǎn)介這是一套基于 Mask R-CNN 實(shí)現(xiàn)顯微礦物圖像檢測(cè)與分割的實(shí)踐資源使用 TensorFlow 與 Keras 構(gòu)建適合計(jì)算機(jī)視覺(jué)初學(xué)者及地質(zhì)、礦物分析方向的研究人員參考。壓縮包共 29 個(gè)文件包含 13 個(gè) Python 腳本、9 個(gè) Jupyter Notebook以及若干示例圖片和說(shuō)明文檔整體大小約 23.27MB。其中Python 腳本覆蓋了模型定義、數(shù)據(jù)預(yù)處理、數(shù)據(jù)增強(qiáng)、訓(xùn)練與預(yù)測(cè)等關(guān)鍵環(huán)節(jié)Notebook 則分步驟演示了數(shù)據(jù)檢查、模型訓(xùn)練和結(jié)果可視化能夠幫助讀者快速理解 Mask R-CNN 在礦物圖像實(shí)例分割中的完整流程。資源還附帶樣例圖像和預(yù)測(cè)模型便于對(duì)照學(xué)習(xí)和二次開(kāi)發(fā)。目前已有 178 人學(xué)習(xí)下載適合想通過(guò)完整代碼實(shí)踐深度學(xué)習(xí)分割任務(wù)的入門(mén)與進(jìn)階用戶。1. 項(xiàng)目拆解為什么要用Mask R-CNN做顯微礦物分析做礦物薄片分析的朋友一定懂這個(gè)痛點(diǎn)在偏光顯微鏡下面一塊薄片里密密麻麻分布著幾十種礦物顆粒你要統(tǒng)計(jì)它們的種類(lèi)、含量、粒徑分布、接觸關(guān)系。傳統(tǒng)做法是什么人眼一個(gè)個(gè)看一個(gè)個(gè)描一張薄片少說(shuō)兩三個(gè)小時(shí)一天下來(lái)眼睛都快看瞎了而且不同人描出來(lái)的結(jié)果還不一樣。這個(gè)項(xiàng)目本質(zhì)上就是把這套人工流程交給深度學(xué)習(xí)來(lái)做——用Mask R-CNN識(shí)別出顯微圖像中的礦物顆粒輸出每個(gè)顆粒的類(lèi)別標(biāo)簽、邊界框和精準(zhǔn)的像素級(jí)輪廓。相比只做目標(biāo)檢測(cè)輸出框的方案Mask R-CNN額外輸出的掩碼能讓后續(xù)量化分析直接拿到顆粒的真實(shí)形態(tài)數(shù)據(jù)比如周長(zhǎng)、面積、長(zhǎng)徑比、圓形度這些參數(shù)在地質(zhì)研究里都非常關(guān)鍵。這個(gè)項(xiàng)目適合三類(lèi)人來(lái)參考一是搞地質(zhì)學(xué)、礦物學(xué)、巖相學(xué)研究的科研人員二是在做工業(yè)質(zhì)檢、材料分析方向落地的算法工程師三是剛學(xué)完深度學(xué)習(xí)基礎(chǔ)、打算找一個(gè)完整實(shí)戰(zhàn)項(xiàng)目練手的初學(xué)者。無(wú)論你屬于哪類(lèi)人只要電腦上裝好了TensorFlow環(huán)境基本就能照著跑通。1.1 顯微礦物圖像的核心難點(diǎn)先說(shuō)說(shuō)礦物圖像和自然圖像在任務(wù)上的本質(zhì)差別這決定了后續(xù)很多技術(shù)選型。自然圖像的目標(biāo)比如人、車(chē)、貓通常有清晰的紋理和顏色邊界而顯微礦物圖像的第一大痛點(diǎn)是分割邊界不清晰。礦物顆粒之間往往互相鑲嵌、穿插邊界上經(jīng)常出現(xiàn)顏色漸變區(qū)有些礦物是隱晶質(zhì)結(jié)構(gòu)顆粒和膠結(jié)物之間的灰度差異極小人眼都得反復(fù)調(diào)焦才能勉強(qiáng)分辨。第二大痛點(diǎn)是類(lèi)別之間特征相似。像石英和長(zhǎng)石在單偏光下都呈灰白色主要靠干涉色、解理特征來(lái)區(qū)分但同一礦物在不同切面方向、不同厚度下光學(xué)特征又會(huì)有很大差異。這個(gè)類(lèi)內(nèi)差異大于類(lèi)間差異的問(wèn)題對(duì)模型的判別能力提出了很高要求。第三大痛點(diǎn)是顆粒尺寸跨度極大。一張顯微圖片里可能既有直徑幾百像素的大顆粒也有直徑十幾個(gè)像素的小碎屑。對(duì)小顆粒的檢測(cè)漏檢率高是這類(lèi)任務(wù)最常見(jiàn)的失敗模式后面在anchor設(shè)置部分會(huì)專(zhuān)門(mén)講。1.2 為什么選擇Mask R-CNN從任務(wù)需求反推模型選型我在項(xiàng)目啟動(dòng)前其實(shí)對(duì)比過(guò)兩個(gè)方向語(yǔ)義分割比如U-Net和實(shí)例分割Mask R-CNN系列。語(yǔ)義分割會(huì)把同類(lèi)的所有顆粒連成一片輸出的是一張像素類(lèi)別圖看起來(lái)也能用但要統(tǒng)計(jì)“顆粒數(shù)量”和“每個(gè)顆粒的表面積”就不行了因?yàn)槟愀緵](méi)有“個(gè)體”的概念。Mask R-CNN是實(shí)例分割模型它對(duì)每個(gè)檢測(cè)到的對(duì)象分別輸出一個(gè)二值掩碼。同樣是石英顆粒圖像里有30個(gè)它就會(huì)輸出30個(gè)掩碼每個(gè)掩碼獨(dú)立對(duì)應(yīng)一個(gè)顆粒個(gè)體。這樣一來(lái)天然就滿足礦物定量統(tǒng)計(jì)的需求——顆粒數(shù)、單顆粒粒徑、每個(gè)顆粒的光學(xué)特征提取都能直接做。從技術(shù)演進(jìn)角度來(lái)說(shuō)Mask R-CNN是在Faster R-CNN的基礎(chǔ)上增加了一個(gè)并行的掩碼分支架構(gòu)清晰訓(xùn)練穩(wěn)定開(kāi)源實(shí)現(xiàn)也很成熟原版論文代碼就是基于TensorFlowKeras框架寫(xiě)的出現(xiàn)了問(wèn)題你能在社區(qū)找到大量解決方案。綜合權(quán)衡下選它做礦物顆粒分割是性價(jià)比最高的。1.3 和主流替代方案對(duì)比為了讓選型更有說(shuō)服力這里直接給個(gè)簡(jiǎn)短的對(duì)比方案輸出形式能否統(tǒng)計(jì)顆粒數(shù)單顆粒形態(tài)分析訓(xùn)練難度本項(xiàng)目選擇YOLOv8-seg檢測(cè)框掩碼能有限低備選U-Net像素類(lèi)別圖不能需后處理弱低排除Mask R-CNN檢測(cè)框?qū)嵗诖a能強(qiáng)中首選YOLOv8-seg雖然推理速度快但在小目標(biāo)和精細(xì)紋理區(qū)域上的掩碼質(zhì)量不太行邊界輪廓普遍比Mask R-CNN粗糙。對(duì)于礦物顆粒分析這種對(duì)邊界精度有要求的場(chǎng)景Mask R-CNN的ROI Align機(jī)制能保留更準(zhǔn)確的像素級(jí)空間位置這是它的天然優(yōu)勢(shì)。2. 數(shù)據(jù)準(zhǔn)備決定項(xiàng)目成敗的前置環(huán)節(jié)2.1 數(shù)據(jù)采集要點(diǎn)礦物數(shù)據(jù)集的構(gòu)建是整個(gè)項(xiàng)目里最耗時(shí)、最容易在后期埋雷的環(huán)節(jié)比調(diào)參重要得多。很多人在這一步圖省事拍了幾十張圖就急著標(biāo)注開(kāi)訓(xùn)結(jié)果模型訓(xùn)練完完全不可用最后回過(guò)頭來(lái)老老實(shí)實(shí)重做數(shù)據(jù)。先說(shuō)顯微鏡采圖的幾個(gè)硬性要求。首先是分辨率建議統(tǒng)一在2048x2048以上因?yàn)榈V物顆粒的精細(xì)結(jié)構(gòu)解理縫、環(huán)帶非常依賴高分辨率信息分辨率不足標(biāo)注的時(shí)候就會(huì)發(fā)現(xiàn)很多顆粒根本看不清邊界。其次是批次一致性強(qiáng)烈建議同一個(gè)批次的圖像在相同倍率、相同光照條件下拍攝倍率不一樣顆粒的相對(duì)大小差異很大混在一起訓(xùn)練會(huì)讓模型對(duì)尺度產(chǎn)生混亂。第三是覆蓋多樣性要和做地質(zhì)研究的同事確認(rèn)數(shù)據(jù)集里必須涵蓋研究區(qū)主要的礦物組合類(lèi)型。不能只拍好看的大顆粒也要拍細(xì)?;|(zhì)、蝕變礦物、破裂顆粒等“難纏”區(qū)域——這些往往是實(shí)際統(tǒng)計(jì)時(shí)最容易出錯(cuò)的區(qū)域模型如果在這些地方表現(xiàn)好在實(shí)際數(shù)據(jù)上的泛化能力才有保證。2.2 標(biāo)注規(guī)范與工具選擇標(biāo)注工具我用的是LabelMeMIT開(kāi)源的那個(gè)它能直接導(dǎo)出JSON格式的標(biāo)注文件配合Mask R-CNN開(kāi)源倉(cāng)庫(kù)的標(biāo)注轉(zhuǎn)換腳本可以零改動(dòng)地把數(shù)據(jù)喂給模型。這個(gè)體驗(yàn)很關(guān)鍵如果你選標(biāo)注工具時(shí)發(fā)現(xiàn)格式和訓(xùn)練代碼不兼容轉(zhuǎn)換腳本得自己寫(xiě)光是debug邊界點(diǎn)坐標(biāo)就能消耗大量時(shí)間。類(lèi)別標(biāo)簽的設(shè)定是一條一條打磨出來(lái)的。起始我犯了“過(guò)于精細(xì)”的錯(cuò)誤單偏光下把斜長(zhǎng)石細(xì)分為更長(zhǎng)石、中長(zhǎng)石、拉長(zhǎng)石——人眼都經(jīng)常分不清模型完全學(xué)不會(huì)。后面把光學(xué)特征模糊的類(lèi)合并成大類(lèi)比如“長(zhǎng)石類(lèi)礦物”統(tǒng)一為一類(lèi)準(zhǔn)確率一下子就上來(lái)了。這里的核心教訓(xùn)是標(biāo)注類(lèi)別一定以“圖像上能不能可靠區(qū)分”為準(zhǔn)則而不是以“巖相學(xué)分類(lèi)的精細(xì)度”為準(zhǔn)則。每個(gè)類(lèi)別至少標(biāo)注300-500個(gè)實(shí)例總體控制在5000個(gè)實(shí)例左右這個(gè)數(shù)據(jù)量對(duì)遷移學(xué)習(xí)任務(wù)來(lái)說(shuō)是一個(gè)比較合理的規(guī)模。低于這個(gè)量級(jí)掩碼邊界的質(zhì)量會(huì)明顯下滑。2.3 數(shù)據(jù)增強(qiáng)策略礦物圖像和自然圖像的數(shù)據(jù)增強(qiáng)策略差異很大需要針對(duì)性設(shè)計(jì)。我訓(xùn)練時(shí)開(kāi)啟了水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)和90度旋轉(zhuǎn)這些幾何增強(qiáng)對(duì)礦物顆粒極其有效——礦物的方向性特征雖有比如定向排列的片狀礦物但整體上沒(méi)有“正立”的概念翻轉(zhuǎn)之后語(yǔ)義完全不受影響。顏色增強(qiáng)要格外小心。我在試的時(shí)候發(fā)現(xiàn)對(duì)RGB圖像做隨機(jī)亮度和對(duì)比度擾動(dòng)模型訓(xùn)練初期loss下降很順利但驗(yàn)證集mAP始終上不去。后來(lái)排查發(fā)現(xiàn)增強(qiáng)時(shí)把礦物干涉色給“抹平”了原本顏色上剛好能區(qū)分的兩類(lèi)礦物在一次增亮之后看起來(lái)一模一樣。所以如果后續(xù)的推理數(shù)據(jù)是在一致光照條件下拍攝的顏色類(lèi)增強(qiáng)必須保持極小的幅度更穩(wěn)妥的做法是直接不做靠幾何增強(qiáng)和更多的原始數(shù)據(jù)來(lái)?yè)涡Ч?. 環(huán)境搭建與訓(xùn)練細(xì)節(jié)3.1 環(huán)境配置與版本選擇環(huán)境這塊是新手朋友重災(zāi)區(qū)。Mask R-CNN的開(kāi)源代碼大多是照著TensorFlow 1.x寫(xiě)的而現(xiàn)在主流環(huán)境是TensorFlow 2.xAPI變動(dòng)不小直接跑舊代碼會(huì)報(bào)一堆找不到模塊的錯(cuò)。我最終跑通的環(huán)境組合是這樣Python 3.7TensorFlow-GPU 1.15.0Keras 2.3.1CUDA 10.0cuDNN 7.6這套組合是舊版Mask R-CNN生態(tài)里兼容性最好的配置。過(guò)程中最折騰的是CUDA和cuDNN版本不匹配的問(wèn)題TensorFlow在import階段就拋錯(cuò)比如cudart64_100.dll找不到這類(lèi)報(bào)錯(cuò)——網(wǎng)上搜索也能搜到大量這樣的報(bào)錯(cuò)分享排查本質(zhì)就是把版本對(duì)應(yīng)關(guān)系對(duì)齊。這里把版本對(duì)應(yīng)關(guān)系整理成表刪掉那些讓人反復(fù)踩坑的坑TensorFlow版本Python版本CUDA版本cuDNN版本1.153.710.07.62.33.7-3.810.17.62.10CPU可跑3.9-3.11無(wú)需GPU無(wú)需GPU如果你沒(méi)有GPU想先用CPU跑通流程那直接用TensorFlow 2.10 CPU版也能跑老代碼只是訓(xùn)練速度會(huì)慢到懷疑人生體驗(yàn)一下流程可以真正訓(xùn)練還是建議找GPU機(jī)器。3.2 模型結(jié)構(gòu)與遷移學(xué)習(xí)Mask R-CNN的完整結(jié)構(gòu)拆解開(kāi)是三段backbone提取特征、RPN生成候選區(qū)域、頭部網(wǎng)絡(luò)同時(shí)做分類(lèi)、邊界框回歸和掩碼生成。在Keras實(shí)現(xiàn)里這些模塊都在model.py里面命名清晰非常適合閱讀源碼學(xué)習(xí)。直接用隨機(jī)初始化的權(quán)重去訓(xùn)練全體參數(shù)以我們的數(shù)據(jù)量幾乎一定會(huì)過(guò)擬合。我采用的是標(biāo)準(zhǔn)做法backbone部分加載ImageNet數(shù)據(jù)集預(yù)訓(xùn)練的ResNet101權(quán)重或者直接加載COCO數(shù)據(jù)集上訓(xùn)練好的完整Mask R-CNN權(quán)重然后凍結(jié)backbone的前幾個(gè)stage只訓(xùn)練深層特征和頭部網(wǎng)絡(luò)。這個(gè)策略在遷移學(xué)習(xí)領(lǐng)域已經(jīng)是共識(shí)數(shù)據(jù)量越少時(shí)凍結(jié)的層數(shù)越多microscope數(shù)據(jù)的特征和自然圖像差距并不大早期層學(xué)到的邊緣、紋理通用特征可以直接復(fù)用。3.3 訓(xùn)練參數(shù)設(shè)置與實(shí)驗(yàn)記錄訓(xùn)練參數(shù)我踩出來(lái)的組合如下可以先抄作業(yè)再根據(jù)自己的任務(wù)調(diào)輸入圖像尺寸1024x1024原圖是2048的話先生成訓(xùn)練圖塊切割到1024batch size2再大顯存就不夠用了初始學(xué)習(xí)率0.001用StepLR每10個(gè)epoch降為原來(lái)的0.1倍優(yōu)化器SGDmomentum0.9weight decay0.0001訓(xùn)練輪數(shù)40-50個(gè)epoch當(dāng)驗(yàn)證集loss連續(xù)5輪不下降就停止這里有一個(gè)必須強(qiáng)調(diào)的細(xì)節(jié)因?yàn)镸ask R-CNN的原始實(shí)現(xiàn)是多頭損失聯(lián)合優(yōu)化分類(lèi)loss加權(quán)系數(shù)1.0邊界框loss加權(quán)系數(shù)1.0掩碼loss加權(quán)系數(shù)1.0如果你發(fā)現(xiàn)訓(xùn)練出來(lái)的掩碼邊緣粗糙、像“鋸齒”一樣不順滑可以嘗試把掩碼分支的loss權(quán)重從1.0調(diào)高到2.0甚至3.0讓模型把更多容量花在掩碼精細(xì)化上。這個(gè)調(diào)節(jié)手法在官方代碼的config文件里面匹配LOSS_WEIGHTS參數(shù)實(shí)現(xiàn)是一行就能改成的高性價(jià)比調(diào)參手段。另外需要強(qiáng)調(diào)每隔5個(gè)epoch保存一次權(quán)重并同步在驗(yàn)證集上計(jì)算mAP和mask IoU。訓(xùn)練日志一定要記哪一版權(quán)重配哪個(gè)參數(shù)組合產(chǎn)生了什么結(jié)果全部整理成表格。模型調(diào)參本質(zhì)是一個(gè)比較實(shí)驗(yàn)沒(méi)有日志你后面只能靠猜效率極低。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 訓(xùn)練不收斂loss值始終不下降訓(xùn)練了好幾個(gè)epochtotal loss一直維持在2.0以上紋絲不動(dòng)這種情況在Mask R-CNN礦物圖像分割任務(wù)里出現(xiàn)頻率很高。幾個(gè)排查步驟按順序來(lái)做。先確認(rèn)要不要啟用“mini-mask”模式默認(rèn)配置下Mask R-CNN會(huì)先把ROI對(duì)應(yīng)的特征圖縮放到一個(gè)小尺寸比如28x28再在這上面計(jì)算掩碼loss這種方式能顯著減少顯存占用但會(huì)讓小礦物顆粒的掩碼質(zhì)量變差。訓(xùn)練時(shí)發(fā)現(xiàn)小顆粒完全不收斂?jī)?yōu)先檢查這一項(xiàng)。然后檢查類(lèi)別數(shù)量配置。之前有個(gè)朋友把類(lèi)別數(shù)NUM_CLASSES設(shè)成了標(biāo)注JSON里出現(xiàn)的類(lèi)別總數(shù)加1不包含背景模型直接崩了——這里做一下算數(shù)檢查正確的值是類(lèi)別數(shù)加1因?yàn)?號(hào)類(lèi)別是背景。這個(gè)號(hào)位錯(cuò)的話訓(xùn)練和驗(yàn)證流程中間會(huì)在類(lèi)別映射那里出隱性問(wèn)題loss表現(xiàn)常常是詭異的不收斂。最后檢查學(xué)習(xí)率。初始學(xué)習(xí)率設(shè)置在0.01以上通常必炸batch size小、圖像分辨率大的場(chǎng)景下梯度噪聲很大過(guò)高的學(xué)習(xí)率會(huì)讓loss值反復(fù)橫跳。用TensorBoard直接繪制loss曲線的波動(dòng)規(guī)律如果發(fā)現(xiàn)周期性尖峰優(yōu)先調(diào)低學(xué)習(xí)率。4.2 顯存不足batch size和圖像尺寸之間的矛盾用GTX 1080 Ti11GB顯存訓(xùn)練時(shí)batch size設(shè)為2輸入圖像尺寸為1024x1024運(yùn)行幾分鐘后TensorFlow直接報(bào)out of memory。這是我剛開(kāi)始訓(xùn)練時(shí)最崩潰的事情。解決思路分為幾步按優(yōu)先級(jí)從高到低排列。第一步是調(diào)整圖像尺寸把DETECTION_MIN_DIMENSION從1024降到768顯存占用能少一半代價(jià)是小顆粒檢測(cè)能力會(huì)下降。第二步是降低RPN層的anchor數(shù)量比如每條空間位置上的anchor從3個(gè)降到2個(gè)這部分計(jì)算在顯存里很吃空間。第三步是開(kāi)啟“使用更小的ROI特征圖”配置把掩碼分支的空間尺寸從28x28降到14x14顯存占用大幅下降的同時(shí)大顆粒的掩碼精度幾乎沒(méi)有明顯變化。如果以上都做了還是不夠就要考慮用混合精度訓(xùn)練開(kāi)啟混合精度后顯存占用能再砍掉40%左右。4.3 分割邊界粗糙掩碼邊緣呈鋸齒狀訓(xùn)練結(jié)束后大顆粒的掩碼邊緣呈現(xiàn)明顯的鋸齒狀視覺(jué)觀感差而且算出來(lái)的面積誤差也大。這個(gè)問(wèn)題的本質(zhì)原因是圖像采集時(shí)礦物邊緣本身存在漸變色帶礦物和載玻片膠層的過(guò)渡區(qū)域標(biāo)注人員在標(biāo)注時(shí)對(duì)這些漸變區(qū)域的勾選區(qū)有主觀差異。用Mask R-CNN測(cè)試時(shí)發(fā)現(xiàn)模型輸出的掩碼往往只覆蓋了顏色最實(shí)的核心區(qū)而把漸變邊界區(qū)全部舍棄了。解決路徑有兩個(gè)方向。第一個(gè)是數(shù)據(jù)側(cè)標(biāo)注時(shí)統(tǒng)一規(guī)范對(duì)于邊界漸變區(qū)域通過(guò)“標(biāo)注核心區(qū)域但需包含整個(gè)可見(jiàn)邊界過(guò)渡帶”來(lái)統(tǒng)一。第二個(gè)是模型側(cè)降低分類(lèi)置信度閾值比如從0.7降到0.5讓模型更愿意保留低置信度區(qū)域的掩碼同時(shí)配合前面提到的增大掩碼loss權(quán)重讓網(wǎng)絡(luò)更努力地去擬合邊界細(xì)節(jié)。4.4 小顆粒漏檢嚴(yán)重anchor尺寸沒(méi)有適配驗(yàn)證集上的檢測(cè)結(jié)果大顆?;径寄芸虻降侵睆皆?0像素以內(nèi)的小礦物碎屑recall非常低。網(wǎng)上的開(kāi)源配置大多針對(duì)COCO數(shù)據(jù)集的物體尺寸COCO里的物體普遍占圖像面積的百分之幾以上而礦物碎屑在1024分辨率下可能只占圖像的百分之零點(diǎn)幾。如果沿用默認(rèn)的anchor尺寸生成邏輯小顆粒對(duì)應(yīng)的anchor和真實(shí)框的IoU一直低于正樣本閾值模型壓根“看不見(jiàn)”它們。調(diào)整方案就是修改RPN的anchor尺寸把最小anchor從默認(rèn)的32降到8或4。修改后重新訓(xùn)練小顆粒的recall有顯著提升。這種修改也會(huì)帶來(lái)副作用就是負(fù)樣本數(shù)量激增導(dǎo)致訓(xùn)練變慢需要同步調(diào)整正樣本IoU閾值從0.7降到0.6來(lái)保持正負(fù)樣本平衡。5. 項(xiàng)目擴(kuò)展方向從“識(shí)別出來(lái)”到“真正用起來(lái)”寫(xiě)到最后簡(jiǎn)單分享一下這個(gè)項(xiàng)目完工后我在實(shí)際使用中的幾個(gè)體會(huì)。量化指標(biāo)的自動(dòng)計(jì)算是最實(shí)際的價(jià)值。Mask R-CNN輸出的掩碼本身就是像素坐標(biāo)集合可以直接計(jì)算每個(gè)顆粒的面積、周長(zhǎng)、Feret徑最大和最小直徑再用這些基礎(chǔ)參數(shù)換算體積百分比、粒徑分布曲線整個(gè)過(guò)程腳本化一張薄片從出圖到統(tǒng)計(jì)結(jié)果只要幾分鐘。我后期把這些指標(biāo)的計(jì)算封裝成了一個(gè)Python類(lèi)輸入掩碼數(shù)組就能生成一份完整的礦物定量統(tǒng)計(jì)表地質(zhì)同事用了都說(shuō)好。訓(xùn)練數(shù)據(jù)不要一步到位。礦物類(lèi)型往往越到后面越復(fù)雜建議建一個(gè)“增量訓(xùn)練”的習(xí)慣先把主干礦物類(lèi)別訓(xùn)練到位等模型在處理真實(shí)薄片時(shí)遇到不認(rèn)識(shí)的新礦物把它單獨(dú)截出來(lái)人工標(biāo)注后加入訓(xùn)練集里增量升級(jí)。這樣每次訓(xùn)練成本可控模型能力能持續(xù)擴(kuò)展。最后再分享一個(gè)讓部署省心很多的小技巧推理階段的圖像預(yù)處理歸一化、resize必須要和訓(xùn)練階段完全一致一個(gè)像素的偏差都會(huì)導(dǎo)致推理結(jié)果變差。我將預(yù)處理函數(shù)單獨(dú)抽出來(lái)封裝成公共模塊訓(xùn)練和推理共用同一份代碼這個(gè)習(xí)慣幫我擋掉了很多“模型訓(xùn)練好好的一推理就廢了”的疑難雜癥。這個(gè)項(xiàng)目的整體鏈路從數(shù)據(jù)標(biāo)注到訓(xùn)練測(cè)試再到量化分析完整覆蓋了深度學(xué)習(xí)落地到科學(xué)圖像分析領(lǐng)域的所有關(guān)鍵環(huán)節(jié)。如果你正準(zhǔn)備入門(mén)實(shí)例分割或者手頭正好有顯微圖像分析需求按這個(gè)思路走完一遍能少踩的坑我都替你踩過(guò)了。本文還有配套的精品資源點(diǎn)擊獲取