2020 數(shù)字人體視覺挑戰(zhàn)賽宮頸癌風險智能診斷_算法賽道亞軍VNNI賽道冠軍_LLLLC團隊攻略分享
【GiantPandaCV導語】:本文為筆者年初參加天池舉辦的宮頸癌細胞檢測比賽的方案整理,本次比賽同時舉辦算法賽道和VNNI賽道,算法賽道為線上賽,選手無法“直接”接觸數(shù)據(jù),訓練和推理只能在阿里云提供的PAI平臺完成。VNNI賽道為線下賽,訓練數(shù)據(jù)可下載,提交docker完成線上推理。筆者的隊伍分別取得了算法賽道亞軍和VNNI賽道冠軍。
比賽主頁: “數(shù)字人體”視覺挑戰(zhàn)賽--宮頸癌風險智能診斷賽題與數(shù)據(jù)-天池大賽-阿里云天池(https://tianchi.aliyun.com/competition/entrance/231757/information)
團隊名稱:LLLLC
代碼開源:
算法賽道代碼( https://github.com/LiChenyang-Github/tianchi_Cervical_Cancer_top4)VNNI賽道代碼( https://github.com/lin-honghui/tianchi_Cervical_Cancer_VNNI_top1)
1. 賽題簡介
本次比賽的任務(wù)是對異常鱗狀上皮細胞進行檢測。初賽只需要檢測出異常病變細胞,復(fù)賽時,VNNI賽道延續(xù)初賽任務(wù),但新增QPS指標。算法賽道則需要進一步區(qū)分六類異常細胞,其中四種為陽性類別:“ASC-H” (AH,非典型鱗狀細胞傾向上皮細胞內(nèi)高度)、“ASC-US” (AS,非典型鱗狀細胞不能明確意義)、“HSIL” (HL,上皮內(nèi)高度病變)、“LSIL” (LL,上皮內(nèi)低度病變),兩種為陰性類別:“Candida” (CA, 念珠菌)、“Trichomonas” (TS, 滴蟲)。陽性類別為鱗狀上皮細胞本身發(fā)生病變,而陰性類型是細胞受到微生物 (念珠菌、滴蟲)感染。

圖片數(shù)量方面,初賽提供宮頸癌細胞學圖片800張,其中陽性圖片500張(注意區(qū)分于上面的陽性類別),陰性圖片300張。陽性圖片并未完全標注 (分辨率為上萬的數(shù)量級,全部標注較耗時),而是提供多個ROI區(qū)域(1212 ROI),在ROI區(qū)域里面標注異常鱗狀上皮細胞位置,陰性圖片不包含異常鱗狀上皮細胞,無標注。
復(fù)賽共提供1690張宮頸癌細胞學圖片,其中1440張為陽性圖片,250張為陰性圖片,陰性圖片不含有6類異常細胞,因此也沒有標注信息。1440張陽性圖片標注了3670個ROI區(qū)域 (分辨率為幾千的數(shù)量級),并提供ROI區(qū)域的標注信息 (ROI以為的區(qū)域可能也存在異常細胞,但未進行標注)。

2. 算法賽道
2.1 數(shù)據(jù)分析
我們首先對數(shù)據(jù)進行了病理學和數(shù)據(jù)統(tǒng)計兩方面的分析,通過這兩方面的分析,得到一些可以利用的先驗以及任務(wù)的主要挑戰(zhàn)。
2.1.1 病理學先驗
結(jié)合病理學知識的一些發(fā)現(xiàn):
細胞形態(tài)方面。四類陽性細胞較為相似,它們是出于不同時期的病變細胞,主要的區(qū)別在于核質(zhì)比的變化;兩類陰性細胞具有比較明顯的特點,CA主要是受念珠菌感染的細胞,呈矛狀,體積較大,TS是受滴蟲感染的細胞,滴蟲主要附著于細胞外部,體積較小; 細胞位置隨機均勻分布。如圖2-1是液基細胞學檢查的制片過程,其中包括了振蕩和離心過程,所以可以粗略認為細胞在玻片上是均勻隨機分布的,這對后面的數(shù)據(jù)增強策略具有指導作用; 不共存先驗。念珠菌和滴蟲適合生存的pH環(huán)境是不同的,也就是在大部分情況下,念珠菌和滴蟲只能單獨存在,這對后面的模型設(shè)計以及后處理具有指導作用; 背景因素干擾。如圖2-2是一些不滿意的標本的示意圖,可以看出,某些玻片可能存在粘液,血等背景的干擾,如何提升背景的多樣性也是值得考慮的問題; 細胞成像顏色多樣性。如圖2-3所以,受染色劑種類、配比、染色時間長短及不同數(shù)字掃描儀等因素影響,細胞成像顏色具有多樣性,提升模型對染色泛化能力也是本次比賽需要考慮的問題;



2.1.2 數(shù)據(jù)統(tǒng)計
通過數(shù)據(jù)統(tǒng)計的一些發(fā)現(xiàn):
類別數(shù)量不平衡。如圖2-4所示,是每一類細胞的ROI數(shù)量以及標注框 (gt_boxes)數(shù)量示意圖,可見存在類別不平衡問題,且這種不平衡有以下的特點:TS類以最少的ROI (234個ROI),占據(jù)了最多的標注框 (11747個標注框),即ROI最少的類別標注框反而最多。這一點在后面的訓練策略中需要進行考慮;
標注框尺度變化大。如圖2-5所示,可以看出,四種陽性細胞的尺寸只要在幾十到兩百之間;CA的尺寸較大,存在幾百甚至上千的尺寸;TS的尺寸較小,大部分為五十以下;
類別不共存先驗。如圖2-6所示,我們使用鄰接矩陣的形式來統(tǒng)計六個類別的兩兩共存情況,可以發(fā)現(xiàn),CA和TS基本上是單獨出現(xiàn),四類陽性細胞之間互為共存,這也和前面2.1.1的病理學分析是吻合的;



2.2 方案介紹
我們的整體方案可以分為數(shù)據(jù)、模型、預(yù)測與后處理三大部分進行介紹。
2.2.1 數(shù)據(jù)
數(shù)據(jù)采樣:在訓練階段,我們采用Online Random Crop的采樣方式:在ROI區(qū)域中,以病變細胞為中心產(chǎn)生隨機偏移,裁剪固定大小區(qū)域作為訓練圖片,如圖2-7所示。所以一個epoch就是遍歷所有的3670個ROI。
數(shù)據(jù)增強:除常規(guī)的數(shù)據(jù)增強方式如隨機翻轉(zhuǎn)、隨機旋轉(zhuǎn)、隨機顏色擾動、隨機標注框抖動外,我們針對本次比賽背景干擾和細胞染色問題,使用了下面的數(shù)據(jù)增強方法:
隨機標注框移動(陽性樣本背景利用):OnlineRandomCrop是以病變細胞為中心的背景隨機采樣,陽性圖片中其它區(qū)域背景可能未被充分利用,我們通過隨機移動標注框方式來增加背景多樣性,如圖2-8所示,我們將標注框進行隨機移動,并用inpainting操作對原來的位置進行填充。通過這種方式來改變標注框周圍的背景;
CopyPaste + StainNorm(陰性樣本背景利用+染色劑歸一化):如上所述,本次比賽除了提供1440張陽性圖片以外,還提供了250張陰性圖片,陰性圖片的利用對模型假陽抑制有較大幫助。具體地,如圖2-9所示,將陽性圖片中的異常細胞復(fù)制(copy),再以一定概率隨機貼到純陰性背景數(shù)據(jù)中進行樣本擴充(paste),利用陰性圖片來增加背景多樣性,從而改變標注框周圍的背景,增加分類器negative樣本的多樣性。需要注意的是,在利用陰性圖片的時候需要注意防止截取到圖片的四個角的純色背景部分,如圖1-2所示,玻片中的細胞是位于一個圓形的區(qū)域內(nèi),如果截取到四個角的話會產(chǎn)生純色的背景,影響分類器訓練;
此外,陽性樣本背景利用中隨機移動標注框是在同個樣本ROI中進行,不存在染色差異問題,但將copy的陽性細胞目標框直接貼合到新的背景中,可能因為顏色差異大而十分“違和”。我們采取的方式是以通過染色劑歸一化算法[1],將陰性背景作為target image,將copy的陽性細胞目標框都根據(jù)背景進行染色歸一化,降低顏色差異(這里背景是動態(tài)隨機選取,target image一直在變。引入陰性樣本一定程度也引入了樣本顏色多樣性)。




2.2.3 模型
我們使用通用模型和專家模型結(jié)合的形式,通用模型(圖2-11)對6種類型的細胞進行檢測,專家模型(圖2-12)針對特定的類別進行檢測。
模型的具體組成發(fā)面,我們使用的是一些常見的經(jīng)典結(jié)構(gòu):
檢測框架:Faster-RCNN [2]; 基礎(chǔ)網(wǎng)絡(luò):ResNet-50 [3]; 其它模塊:FPN[4] / BiFPN[5], DCN[6], Cascade[7];
由于上述都是一些比較常見的結(jié)構(gòu),這里不進行詳細介紹,下面主要介紹針對本次任務(wù)數(shù)據(jù)的特點,分享在訓練過程中一些細節(jié)。
在訓練通用模型的過程中:
batchsize的大小會對模型性能產(chǎn)生影響。前面提到,此次數(shù)據(jù)存在不平衡問題,且TS以最少的ROI占據(jù)了最多的標注框,即TS在圖片中密集出現(xiàn)。有234個ROI包含TS,而總共有3670個ROI,我們可以計算不同的batchsize下TS在一個batch中出現(xiàn)的概率,如圖2-13所示,可見隨著batchsize的增大,TS在某個batch中出現(xiàn)的概率增加。另外,當TS在某個batch中出現(xiàn)的時候,其梯度很可能會成為主導,最終導致模型對TS產(chǎn)生bias。所以我們最終采用較小的bathsize (1或2)進行實驗; anchor scale會對模型的性能產(chǎn)生影響。因為6個類別的標注框尺度有較大的差異,一開始我們希望通過增加anchor scale來提升anchor對CA的覆蓋程度,但是發(fā)現(xiàn)這樣并不是很work。如圖2-14所示,展示的是scales取[8]和[8, 16, 32]的時候anchor的尺寸和數(shù)量情況,可以看到,增加scales之后,anchor的尺寸變大了,能夠覆蓋到更大的CA (這是我們的本意),但是這會導致中等大小的anchor的占比升高了,而中等大小的anchor的尺寸主要是128-512,這一范圍和陽性細胞的大小正好match,這會導致模型對四類陽性細胞產(chǎn)生bias,在我們的實驗中,最終采用的是單一的scales; 在訓練專家模型的過程中:考慮如何抑制假陽性預(yù)測。陽性細胞、CA、TS的ROI數(shù)量分別為2953、483、234,可見CA和TS中總的ROI (3670)的比例較小。訓練專家模型的時候,以訓練CA的專家模型為例,最常規(guī)的做法是僅使用483個含有CA的ROI進行訓練,我們發(fā)現(xiàn)這樣訓練出來的模型在測試集上會有很多的假陽預(yù)測 (因為模型“見過”的背景較少,并沒有見過四類陽性細胞以及TS,很容易會產(chǎn)生假陽預(yù)測)。因此,我們在實驗中的做法是,訓練某一種類型的專家模型的時候,將其它類型細胞的ROI數(shù)據(jù)當成背景數(shù)據(jù)使用,通過上述的隨機背景替換數(shù)據(jù)增強方式進行利用。這樣,模型的分類器就能“見到”其它類型的細胞,提升分類器的性能。




2.2.3 預(yù)測與后處理
預(yù)測階段,我們采用交疊滑窗的形式 (步長為patch大小的一半),采用交疊滑窗的方式主要是為了保證patch邊緣的檢測質(zhì)量,防止檢測結(jié)果被patch“截斷”。
在后處理方面,我們主要進行重疊抑制和異類不共存抑制兩方面的處理:
重疊抑制: 模型內(nèi)部抑制:對預(yù)測階段的滑窗重疊部分的預(yù)測框進行融合,如圖2-15所示。采用Box Voting[8],IoU閾值為0.2; 模型之間抑制:對不同模型的預(yù)測框進行融合,采用WBF (Weighted Box Fusion)[8]進行融合,IoU閾值為0.3; 類內(nèi)抑制:對同種類別的重疊預(yù)測框進行融合 類間抑制:對不同類別的重疊預(yù)測框,抑制分數(shù)低的類別。采用跨類別的NMS,IoU閾值取0.3 (這種方法在比賽的時候收效并不明顯,甚至有所下降,主要還是因為模型本身不是很強,以及評價指標mAP的計算方式); 異類不共存抑制: 利用CA過濾其它類型的框:當ROI中超過三個CA預(yù)測框的置信度大于0.85的時候,抑制該ROI上其它類別的預(yù)測框 (我們嘗試過依據(jù)其它5類細胞的預(yù)測置信度進行抑制,但是沒有收效,主要是因為我們的CA本身區(qū)分度比較高,且我們的CA模型比較強一些);


2.3 方案總結(jié)
在本次比賽中,我們首先根據(jù)病理學和數(shù)據(jù)統(tǒng)計得到一些先驗和挑戰(zhàn):
先驗:不共存,隨機分布; 挑戰(zhàn):背景干擾,類別不平衡,標注框尺度變化;
我們提出的方法可以總結(jié)如下:
數(shù)據(jù)層面:隨機背景替換,隨機標注框移動(隨機分布;背景干擾) 模型層面:通用模型和專家模型結(jié)合(不共存;類別不平衡) 訓練層面:減小batchsize,均衡anchor scale(類別不平衡,標注框尺度變化) 后處理策略:不共存抑制,重疊抑制(不共存)
3. VNNI賽道
3.1 賽題概述
3.1.1 任務(wù)
對異常鱗狀上皮細胞進行定位
VNNI賽道:在支持Intel VNNI的框架上進行量化推理
3.1.2 指標
性能scroe :mAP 時間score :QPS ?= slide數(shù)量 / inference總時間(總時間包括數(shù)據(jù)預(yù)處理、模型推理、后處理時間等) 最終score = 性能score + 時間score(兩個指標分別計算,取第一名作為Gold standard,score=1.0, 其余的成績與第一名的差距的百分比作為score的累加值,依次計算。如第一名0.3張/s,第二名0.1張/s,則第一名score=1.0,第二名score=1.667)。
3.1.3 數(shù)據(jù)
訓練數(shù)據(jù)(初賽數(shù)據(jù)):宮頸癌細胞學圖片800張,其中陽性數(shù)據(jù)500張(包含1212個ROI),陰性數(shù)據(jù)300張; 測試數(shù)據(jù)(復(fù)賽VNNI賽道新增):200張ROI區(qū)域圖片(分辨率在幾千到上萬)
3.2 方案介紹
數(shù)據(jù)預(yù)處理在第2章算法賽道中已有詳細介紹,VNNI賽道數(shù)據(jù)預(yù)處理方式與算法賽道基本一致,這里不再贅述。
模型選擇上,我們采用基于RetinaNet[9]的目標檢測算法,在 pytorch 框架上進行模型訓練,在 Openvino 上完成量化推理,流程圖如下,包括以下四個步驟:模型訓練、格式轉(zhuǎn)換、模型量化、模型推理。

3.2.1 模型訓練
為了提升推理速度,我們對 RetinaNet 各個模塊重新設(shè)計。
Backbone : 采用輕量化的 (ImageNet pretained) MobileNetV2 [10] ; 實驗中,MobileNetV2性能與ResNet-50相當,ResNet-34、ResNet-18等精度下降; 使用本次比賽數(shù)據(jù),預(yù)訓練分類網(wǎng)絡(luò)作為backbone初始化效果不如ImageNet; 減少 FPN 以及 Head 通道數(shù): FPN-256 ---> FPN-128 Head-256 ---> Head-64

3.2.2 模型量化
量化過程中,量化層選擇及校驗數(shù)據(jù)對量化結(jié)果會產(chǎn)生一定影響。**OpenVINO ?Calibration Tool **支持自動進行量化層選擇,將準確率損失較大的層切換回fp32,但在實驗中我們發(fā)現(xiàn)對我們模型并不是很work;實驗中,我們不采用OpenVINO自動量化層選擇,而是基于經(jīng)驗,FPN部分參數(shù)對量化比較敏感,對MbV2-FPN1287-Head64,F(xiàn)PN部分卷積層不量化,其余卷基層全部量化;關(guān)于校驗數(shù)據(jù),在我們的實驗中增加校驗數(shù)據(jù)并沒有帶來校驗性能的提升,我們最終以300張訓練圖片作為校驗數(shù)據(jù);



3.2.3 模型推理
推理流程包括:圖片讀取、預(yù)處理、前向執(zhí)行、后處理等步驟。
圖片讀取:實驗中,由于比賽提供數(shù)據(jù)分辨率普遍較大,IO讀取占據(jù)了相當大的一部分時間消耗,采取了兩個優(yōu)化策略:
采用讀取速度更快的GDAL庫[12],性能優(yōu)于opencv; 多個子進程同時讀取,存放到共享隊列中;
預(yù)處理:主要包括以下步驟:
采用無交疊滑窗策略; 丟棄邊界像素,加速推理; 將裁減 1600x1600 區(qū)域縮放成 800x800;
前向執(zhí)行:采用 OpenVINO 的異步模式[11] :
發(fā)起執(zhí)行請求后,控制權(quán)交還給主程序,分攤數(shù)據(jù)讀取和后處理的時間; 執(zhí)行完成后,通過回調(diào)函數(shù)通知主程序; ―可以發(fā)起多個infer request同時執(zhí)行;



3.2.4 代碼框架 & 流程圖
子進程負責圖片的讀取、裁剪、縮放、拼batch等數(shù)據(jù)處理相關(guān)的操作,處理完的數(shù)據(jù)存放到共享隊列中; 主進程從共享隊列讀取數(shù)據(jù),負責模型推理、后處理操作;


3.3 實驗結(jié)果
3.3.1 性能分析
數(shù)據(jù)增強帶來了穩(wěn)定的性能提升; 同個setting下 ResNet50 性能略高于 MobileNetV2,但本次比賽時間性能提升帶來的分數(shù)收益更大,最終方案還是選擇了MobileNet; 增大輸入crop size也可以提升模型性能,可能是減少滑窗過程細胞被“截斷”概率;

3.3.2 時間性能分析
對 Batch size 、 infer request 、 subProcess (io) 、 Drop border 等參數(shù)進行調(diào)優(yōu); 由網(wǎng)絡(luò)結(jié)構(gòu)從MbV2-FPN256-Head128調(diào)整為計算量更小的MbV2-FPN128-Head64,但推理時間不變(均為120s)可知,推理時間瓶頸不在模型,而是 讀取,更換更快的gdal讀取庫之后,時間從120s --> 35s。

3.4 方案總結(jié)
本次VNNI比賽中,我們提出方法總結(jié)如下:
輕量化網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計; 針對醫(yī)療數(shù)據(jù)場景樣本較少的數(shù)據(jù)增強方法; 采用異步模式進行推理; 多進程、GDAL庫等加速IO;
展望:
IO與推理的時間大約各占一半,更優(yōu)化的IO庫,更小的模型都能進一步提升性能; 推理時采用更大的裁剪區(qū)域或者整圖,預(yù)計能進一步提升速度和精度; 采用量化損失更小的 backbone(Intel工程師建議,目前 OpenVINO 針對 ResNet 優(yōu)化較好,量化損失較低);
結(jié)果:

4. Reference
[1] https://github.com/wanghao14/Stain_Normalization
[2] Ren, Shaoqing, et al. “Faster r-cnn: Towards real-time object detection with region proposal networks.” Advances in neural information processing systems. 2015.
[3] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[4] Lin, Tsung-Yi, et al. “Feature pyramid networks for object detection.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.
[5] Tan, Mingxing, Ruoming Pang, and Quoc V. Le. "Efficientdet: Scalable and efficient object detection." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.
[6] Dai, Jifeng, et al. "Deformable convolutional networks." Proceedings of the IEEE international conference on computer vision. 2017.
[7] Cai, Zhaowei, and Nuno Vasconcelos. "Cascade r-cnn: Delving into high quality object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
[8] Solovyev, Roman, and Weimin Wang. “Weighted Boxes Fusion: ensembling boxes for object detection models.” arXiv preprint arXiv:1910.13302 (2019).
[9] Lin, Tsung-Yi, et al. "Focal loss for dense object detection." Proceedings of the IEEE international conference on computer vision. 2017.
[10] Sandler, Mark, et al. "Mobilenetv2: Inverted residuals and linear bottlenecks." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
[11] https://docs.openvinotoolkit.org/2019_R3.1/_inference_engine_tools_benchmark_tool_README.html
[12] https://gdal.org/
歡迎關(guān)注GiantPandaCV, 在這里你將看到獨家的深度學習分享,堅持原創(chuàng),每天分享我們學習到的新鮮知識。( ? ?ω?? )?
有對文章相關(guān)的問題,或者想要加入交流群,歡迎添加BBuf微信:
為了方便讀者獲取資料以及我們公眾號的作者發(fā)布一些Github工程的更新,我們成立了一個QQ群,二維碼如下,感興趣可以加入。
