營銷型網(wǎng)站一套東莞seo網(wǎng)站優(yōu)化排名
目錄
綜述與實(shí)踐指南
SSD (Single Shot MultiBox Detector)
基本配置和使用代碼
RetinaNet
基本配置和使用代碼
Faster R-CNN?
基本配置和使用代碼
Mask R-CNN
基本配置和使用代碼
Cascade R-CNN
基本配置和使用代碼
總結(jié)
綜述與實(shí)踐指南
MMDetection是一個(gè)基于PyTorch的開源框架,是一個(gè)目標(biāo)檢測工具箱,包含了豐富的目標(biāo)檢測、實(shí)例分割、全景分割算法以及相關(guān)的組件和模塊,支持多種經(jīng)典和現(xiàn)代模型,如ResNet、VGG、EfficientNet等。它還集成了單階段和兩階段檢測器,如YOLO、SSD、Faster R-CNN等,并提供了模塊化設(shè)計(jì),簡化了模型組合、調(diào)整和優(yōu)化的流程。框架還包括數(shù)據(jù)處理、模型訓(xùn)練、驗(yàn)證和測試的集成解決方案,并附有詳細(xì)的文檔和示例。MMDetection 由 7 個(gè)主要部分組成,apis、structures、datasets、models、engine、evaluation 和 visualization。
MMDetection廣泛應(yīng)用于自動駕駛、安防監(jiān)控等領(lǐng)域,為研究者和開發(fā)者提供了一個(gè)強(qiáng)大的工具,以促進(jìn)深度學(xué)習(xí)目標(biāo)檢測的實(shí)踐和創(chuàng)新。
模型算法下載?
在Coovally AI Hub公眾號后臺回復(fù)「模型算法」,即可獲取下載鏈接!
SSD (Single Shot MultiBox Detector)
SSD,是一種單階段目標(biāo)檢測器。其優(yōu)點(diǎn)是原始的YOLO和Faster R-CNN在推理速度和精度之間取得了更好的平衡。SSD模型是由Wei Liu等人在使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行目標(biāo)檢測的研究中,提出的一種改進(jìn)思路。
SSD用于圖像分類、物體檢測和語義分割等各種深度學(xué)習(xí)任務(wù)。相對于其他目標(biāo)檢測算法,SSD模型有更高的精度,而且速度也是非??斓摹F渲饕悸肥峭ㄟ^在CNN的最后幾層添加多個(gè)預(yù)測層實(shí)現(xiàn)多尺度的目標(biāo)檢測,然后通過一個(gè)過濾策略對每個(gè)檢測框進(jìn)行篩選,最后輸出最終的檢測結(jié)果。
SSD模型結(jié)構(gòu)分為兩個(gè)部分,一個(gè)是特征提取網(wǎng)絡(luò),另一個(gè)是多尺度檢測網(wǎng)絡(luò)。SSD模型可以被應(yīng)用在各種目標(biāo)檢測任務(wù)中,比如人臉檢測、車輛檢測等。
基本配置和使用代碼
# 配置文件路徑
config_file = 'configs/ssd/ssd300_coco.py'# 模型權(quán)重路徑
checkpoint_file = 'ssd300_coco_20200307-b3c19318.pth'# 創(chuàng)建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 測試單張圖片
img = 'test.jpg' # 測試圖片路徑
result = inference_detector(model, img)
# 可視化結(jié)果
show_result_pyplot(model, img, result)
-
參考論文:SSD: Single Shot MultiBox Detector
-
論文鏈接:https://arxiv.org/pdf/1512.02325
RetinaNet
RetinaNet來自FAIR 論文:Focal Loss for Dense Object Detection,其簡要概述為:深入分析了極度不平衡的正負(fù)(前景背景)樣本比例導(dǎo)致 one-stage 檢測器精度低于 two-stage 檢測器,基于上述分析,提出了一種簡單但是非常實(shí)用的 Focal Loss 焦點(diǎn)損失函數(shù),并且 Loss 設(shè)計(jì)思想可以推廣到其他領(lǐng)域,同時(shí)針對目標(biāo)檢測領(lǐng)域特定問題,設(shè)計(jì)了 RetinaNet 網(wǎng)絡(luò),結(jié)合 Focal Loss 使得 one-stage 檢測器在精度上能夠達(dá)到乃至超過 two-stage 檢測器。
總的來說,RetinaNet 有兩個(gè)大創(chuàng)新:1.Focal Loss,2.RetinaNet網(wǎng)絡(luò)。Focal Loss 幾乎已經(jīng)成為 one-stage 算法的標(biāo)配,而 RetinaNet 網(wǎng)絡(luò)結(jié)構(gòu)也是目前主流的目標(biāo)檢測網(wǎng)絡(luò)結(jié)構(gòu),其變體不計(jì)其數(shù)。
RetinaNet網(wǎng)絡(luò)主要由ResNet作為主干網(wǎng)絡(luò)、FPN(特征金字塔網(wǎng)絡(luò))作為 neck、以及分類和邊框回歸子網(wǎng)絡(luò)作為head組成。RetinaNet模型的特點(diǎn)是它是一種單階段目標(biāo)檢測器,與傳統(tǒng)的兩階段檢測器(如Faster R-CNN)相比,它更為簡潔和高效。RetinaNet的結(jié)構(gòu)主要包括三個(gè)部分:Backbone、Neck和Head。Backbone通常采用深度卷積神經(jīng)網(wǎng)絡(luò)來提取特征,Neck部分用于收集不同尺度的特征圖,而Head則負(fù)責(zé)生成最終的檢測結(jié)果。
標(biāo)準(zhǔn)的 RetinaNet 骨架網(wǎng)絡(luò)采用的是 ResNet 系列。由于骨架本身沒有限制,MMDetection 中目前提供的預(yù)訓(xùn)練權(quán)重所涉及的骨架網(wǎng)絡(luò)包括:ResNet50-Caffe、ResNet50-Pytorch、ResNet101-Caffe、ResNet101-Pytorch、ResNeXt101,非常豐富。
MMDetection RetinaNet包括了詳細(xì)的配置和參數(shù)設(shè)置,這使得用戶可以根據(jù)自己的需求靈活地調(diào)整模型。例如,用戶可以自定義Backbone網(wǎng)絡(luò)、調(diào)整錨點(diǎn)生成策略、選擇不同的損失函數(shù)等。
基本配置和使用代碼
# 配置文件路徑
config_file = 'configs/retinanet/retinanet_r50_fpn_1x_coco.py'
# 模型權(quán)重路徑
checkpoint_file = 'retinanet_r50_fpn_1x_coco_20200130-c2398f9e.pth'# 創(chuàng)建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 測試單張圖片
img = 'test.jpg' # 測試圖片路徑
result = inference_detector(model, img)
# 可視化結(jié)果
show_result_pyplot(model, img, result)
-
參考論文:Focal Loss for Dense Object Detection
-
論文鏈接:https://arxiv.org/abs/1708.02002
Faster R-CNN?
Faster R-CNN是目標(biāo)檢測領(lǐng)域最為經(jīng)典的方法之一,通過 RPN(Region Proposal Networks) 區(qū)域提取網(wǎng)絡(luò)和 R-CNN 網(wǎng)絡(luò)聯(lián)合訓(xùn)練實(shí)現(xiàn)高效目標(biāo)檢測。其簡要發(fā)展歷程為:R-CNN?Fast R-CNN?Faster R-CNN。
Faster R-CNN是在Fast R-CNN基礎(chǔ)上引入了RPN,Faster R-CNN 的出現(xiàn)改變了整個(gè)目標(biāo)檢測算法的發(fā)展歷程。之所以叫做 two-stage 檢測器,原因是其包括一個(gè)區(qū)域提取網(wǎng)絡(luò) RPN 和 RoI Refine 網(wǎng)絡(luò) R-CNN,同時(shí)為了將 RPN 提取的不同大小的 RoI 特征圖組成 batch 輸入到后面的 R-CNN 中,在兩者中間還插入了一個(gè) RoI Pooling 層,可以保證任意大小特征圖輸入都可以變成指定大小輸出。簡要結(jié)構(gòu)圖如下所示:
由于 Faster R-CNN 是后續(xù)各個(gè)算法的 baseline 且用途非常廣泛,OpenMMLab 提供了非常多的模型配置供研究或者不同任務(wù) fintune 用,幾乎覆蓋了所有常用配置,如下所示:
-
1x、2x 和 3x 的模型配置和權(quán)重;
-
多尺度訓(xùn)練配置和權(quán)重;
-
不同骨架的配置和權(quán)重;
-
PyTorch 和 Caffe style 的配置和權(quán)重;
-
各種 loss 對比配置和權(quán)重;
-
不包含 FPN 的 Faster R-CNN 配置和權(quán)重;
-
常用類別例如 person 的配置和權(quán)重,可作為下游任務(wù)例如行人檢測的預(yù)訓(xùn)練權(quán)重,性能極佳。
基本配置和使用代碼
# 測試單張圖片
img = 'path/to/test/image.jpg' # 圖片路徑
result = inference_detector(model, img)# 可視化結(jié)果
show_result_pyplot(model, img, result)# 如果你需要批量處理圖片,可以使用以下代碼
# images = ['path/to/image1.jpg', 'path/to/image2.jpg', ...]
# for img in images:
# result = inference_detector(model, img)
# show_result_pyplot(model, img, result)
-
參考論文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
-
論文鏈接:https://arxiv.org/pdf/1506.01497
Mask R-CNN
在 FPN 提出后,Kaiming He 等進(jìn)一步對其進(jìn)行任務(wù)擴(kuò)展,提出了 Mask R-CNN,通過新增 mask 掩碼分支實(shí)現(xiàn)實(shí)例分割任務(wù),其最大特點(diǎn)是任務(wù)擴(kuò)展性強(qiáng),通過新增不同分支就可以實(shí)現(xiàn)不同的擴(kuò)展任務(wù)。例如可以將 mask 分支替換為關(guān)鍵點(diǎn)分支即可實(shí)現(xiàn)多人姿態(tài)估計(jì)。除此之外,為解決特征圖與原始圖像上的 RoI 不對準(zhǔn)的問題,提出了 ROIAlign 模塊。
Mask R-CNN 和 Faster R-CNN 的區(qū)別主要包括兩個(gè)方面:
-
R-CNN 中額外引入 Mask Head,從而可以實(shí)現(xiàn)實(shí)例分割任務(wù);
-
針對特征圖與原始圖像上的 RoI 不對準(zhǔn)問題,提出了 RoIPool 的改進(jìn)版本 RoIAlign 。
Mask R-CNN 易于推廣到其他任務(wù)例如,我們可以在同一框架內(nèi)實(shí)現(xiàn)多人姿態(tài)估計(jì)。我們在 COCO 整套挑戰(zhàn)賽的所有三個(gè)賽道上都取得了優(yōu)異成績,包括實(shí)例分割、邊界框?qū)ο髾z測和人物關(guān)鍵點(diǎn)檢測。在沒有任何附加功能的情況下,Mask R-CNN 在每項(xiàng)任務(wù)中的表現(xiàn)都優(yōu)于所有現(xiàn)有的單一模型參賽者,包括 COCO 2016 挑戰(zhàn)賽的獲獎?wù)?。我們希望我們簡單有效的方法能成為一個(gè)堅(jiān)實(shí)的基線,并為未來的實(shí)例級識別研究提供幫助。
基本配置和使用代碼
# 配置文件路徑
config_file = 'configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py'
# 模型權(quán)重路徑
checkpoint_file = 'mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth'# 創(chuàng)建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 測試單張圖片
img = 'test.jpg' # 測試圖片路徑
result = inference_detector(model, img)
# 可視化結(jié)果
show_result_pyplot(model, img, result)
-
參考論文:Mask R-CNN
-
論文鏈接:https://arxiv.org/pdf/1703.06870
Cascade R-CNN
Cascade R-CNN,即級聯(lián)區(qū)域卷積神經(jīng)網(wǎng)絡(luò),是一種高效的目標(biāo)檢測算法。它的出現(xiàn)解決了傳統(tǒng)R-CNN系列算法在處理小目標(biāo)、重疊目標(biāo)和背景混雜等復(fù)雜場景時(shí)的困擾。Cascade R-CNN通過多階段精細(xì)化的檢測過程,克服了單階段處理器在處理復(fù)雜場景時(shí)的不足,顯著提升了目標(biāo)檢測的性能。
在目標(biāo)檢測中,需要使用IoU閾值來區(qū)分正負(fù)樣本。一個(gè)使用低IoU閾值(比如0.5)訓(xùn)練的目標(biāo)檢測器,往往會產(chǎn)生噪聲檢測結(jié)果。但是,增加IoU閾值往往又會導(dǎo)致檢測性能下降。這主要是由于兩個(gè)原因:①在訓(xùn)練過程中,正樣本數(shù)目呈指數(shù)級減少而導(dǎo)致過擬合;②推理過程中,訓(xùn)練檢測器時(shí)的IoU和預(yù)測結(jié)果時(shí)的IoU不匹配(mismatch,這一點(diǎn)后面會具體解釋)。針對這些問題,論文中提出了一種多階段目標(biāo)檢測結(jié)構(gòu)Cascade R-CNN。它由一系列隨著IoU閾值增加訓(xùn)練而成的檢測器組成,對close false positives具有更高的選擇性。這個(gè)算法是分階段訓(xùn)練的,每個(gè)階段的檢測器的輸出都會獲得一個(gè)更好的分布,從而以該輸出作為新的輸入來訓(xùn)練下一個(gè)更高質(zhì)量的檢測器。通過逐步改進(jìn)預(yù)測輸出結(jié)果的重采樣可以保證所有檢測器在訓(xùn)練時(shí)都有一個(gè)大小相當(dāng)?shù)恼龢颖炯?#xff0c;從而減少了過擬合問題。在推理階段會采用相同的級聯(lián)過程,使得每個(gè)階段的hypotheses和detector quality更加匹配。Cascade R-CNN在COCO數(shù)據(jù)集上的表現(xiàn)超過了所有單階段目標(biāo)檢測模型。實(shí)驗(yàn)表明,Cascade R-CNN適用于不同的檢測器結(jié)構(gòu),并且取得了一致性的提升。
Cascade R-CNN與Faster R-CNN流程對比圖,如下圖所示。
論文中提出了多階段/多閾值的cascade rcnn網(wǎng)絡(luò),主要目的就是通過級聯(lián)的、逐漸提升iou閾值的head,有選擇性的抑制很相近的假陽樣本(close false positives), 尤其是“close but not correct” bounding boxes,從而提升整體檢測效果。該網(wǎng)絡(luò)結(jié)構(gòu)清晰,效果顯著,并且能簡單移植到其它detector中,帶來2-4%的性能提升。
基本配置和使用代碼
# 配置文件路徑
config_file = 'configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py'
# 模型權(quán)重路徑
checkpoint_file = 'cascade_rcnn_r50_fpn_1x_coco_20200316-3dc56deb.pth'# 創(chuàng)建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 測試單張圖片
img = 'test.jpg' # 測試圖片路徑
result = inference_detector(model, img)
# 可視化結(jié)果
show_result_pyplot(model, img, result)
-
參考論文:Cascade R-CNN: High Quality Object Detection and Instance Segmentation
-
論文鏈接:https://arxiv.org/pdf/1906.09756
總結(jié)
MMDetection計(jì)算機(jī)視覺系列模型在目標(biāo)檢測領(lǐng)域不斷刷新紀(jì)錄,從精度到效率均取得了顯著成就,推動了多個(gè)領(lǐng)域的AI發(fā)展。
值得一提的是,Coovally模型訓(xùn)練平臺涵蓋了國內(nèi)外開源社區(qū)1000+模型算法,本期文章中的SSD、Faster R-CNN等熱門算法全部包含,用戶可一鍵進(jìn)行下載。