日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

目标检测发展路程(一)——Two stage

發(fā)布時(shí)間:2023/12/20 目标检测 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 目标检测发展路程(一)——Two stage 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目標(biāo)檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域中非常重要的一個(gè)研究方向,它是將圖像或者視頻中目標(biāo)與其他不感興趣的部分進(jìn)行區(qū)分,判斷是否存在目標(biāo),確定目標(biāo)位置,識(shí)別目標(biāo)種類的任務(wù),即定位+分類。傳統(tǒng)的目標(biāo)檢測(cè)模型有VJ.Det[1,2],HOG.Det[3],DPM[4,5,6],直到2012年,CNN模型日益成熟化,以深度學(xué)習(xí)為基礎(chǔ)的目標(biāo)檢測(cè)模型開始發(fā)展,主要分為單階段模型(One stage)和兩階段模型(Two stage),發(fā)展路徑如下:

目標(biāo)檢測(cè)也面臨許多挑戰(zhàn):

  • 環(huán)境影響
  • 密集
  • 遮擋
  • 重疊
  • 多尺度:大目標(biāo)、小目標(biāo)
  • 小樣本
  • 旋轉(zhuǎn)框

目標(biāo)檢測(cè)也細(xì)分了很多領(lǐng)域

  • 通用檢測(cè):
  • 行人檢測(cè):行人違規(guī)檢測(cè)
  • 車輛檢測(cè):車輛違規(guī)檢測(cè)、車輛牌照識(shí)別等
  • 人臉檢測(cè):人臉口罩檢測(cè),人臉識(shí)別打卡等
  • 文字檢測(cè):OCR(光學(xué)字符識(shí)別)的文本檢測(cè),常見算法:DBNet

1、常見術(shù)語介紹

(1)BBox(邊界框)

BBox:Bounding Box,邊界框,邊界框分為兩種:Groud-truth(真實(shí)框,也簡(jiǎn)稱gt_box)和prediction box(預(yù)測(cè)框,也簡(jiǎn)稱pred_box),使用邊界框(bounding?box)來表示物體的位置,邊界框是正好能包含物體的矩形框,通常有兩個(gè)格式

  • (x1,y1,x2,y2)

?? ?? ? (x1,y1)是矩形框的左上角的坐標(biāo),(x2,y2)是矩形框的右上角的坐標(biāo)。

  • ?(x ,y ,w ,h )

? ? ? ? ? (x,y)是矩形框中心點(diǎn)的坐標(biāo),w ww是矩形框的寬度,h hh是矩形框的高度。

(2)Anchor(錨框)

錨框與物體邊界框不同,是由人們假想出來的一種框。先設(shè)定好錨框的大小和形狀,再以圖像上某一個(gè)點(diǎn)為中心畫出矩形框, 將這些錨框當(dāng)成可能的候選區(qū)域。

(3)RoI(Region of Interest):特定的感興趣區(qū)域

(4)Region Proposal :候選區(qū)域

(5)RPN(Pegion Proposal Network):區(qū)域生成網(wǎng)絡(luò),用于生成候選區(qū)域的網(wǎng)絡(luò)。

(6)IoU(Intersaction over Union)

在檢測(cè)任務(wù)中,使用交并比(Intersection of Union,IoU)作為衡量指標(biāo)。這一概念來源于數(shù)學(xué)中的集合,用來描述兩個(gè)集合A AA和B BB之間的關(guān)系,它等于兩個(gè)集合的交集里面所包含的元素個(gè)數(shù),除以它們的并集里面所包含的元素個(gè)數(shù),具體計(jì)算公式如下:

我們將用這個(gè)概念來描述兩個(gè)框之間的重合度。兩個(gè)框可以看成是兩個(gè)像素的集合,它們的交并比等于兩個(gè)框重合部分的面積除以它們合并起來的面積。

(7)mAP

AP(Average Precision)是某一類以Precision、Recall為縱、橫坐標(biāo)的曲線下的面積,mAP(mean Average Precision)是所有類別AP平均。

(8)NMS

搜索局部最大值,抑制極大值。

2、深度學(xué)習(xí)的目標(biāo)檢測(cè)方案

在Ross Girshick等人提出DPM方法后,目標(biāo)檢測(cè)進(jìn)入瓶頸期,圖像特征提取成為難點(diǎn),隨著CNN的發(fā)展,也開始嘗試將神經(jīng)網(wǎng)絡(luò)加入到目標(biāo)檢測(cè)任務(wù)中。該圖是幾個(gè)模型的差異對(duì)比:

?(1)R-CNN

R-CNN的全稱是Region-CNN,是第一個(gè)成功將深度學(xué)習(xí)應(yīng)用到目標(biāo)檢測(cè)中的算法,傳統(tǒng)的目標(biāo)檢測(cè)方法是在圖片上窮舉出所有物體可能出現(xiàn)的區(qū)域框,對(duì)這些區(qū)域提取特征并進(jìn)行分類,得到所有分類成功的區(qū)域,通過非極大值抑制(Non-maximum suppression)輸出結(jié)果。R-CNN的實(shí)現(xiàn)步驟是

  • 采用提取框(Selective?Search):搜索候選區(qū)域,并對(duì)候選區(qū)域提取特征,并將提取到的特征存儲(chǔ)起來。

  • 對(duì)每個(gè)框提取特征(CNN):在數(shù)據(jù)集上訓(xùn)練CNN,R-CNN論文中使用的網(wǎng)絡(luò)是AlexNet,數(shù)據(jù)集是ImageNet,在目標(biāo)檢測(cè)的數(shù)據(jù)集上,對(duì)訓(xùn)練好的CNN做微調(diào)。

  • 圖像分類(SVM):使用分類模型SVM進(jìn)行訓(xùn)練

  • 邊框回歸:通過非最大抑制策略對(duì)同一類別的ROI(region of interest)進(jìn)行合并得到最終的檢測(cè)結(jié)果,即得到每個(gè)矩形框的置信度。

不足:

  • 每個(gè)候選區(qū)域都需要通過CNN計(jì)算特征,計(jì)算量大
  • Selective Search提取的區(qū)域質(zhì)量不夠好
  • 特征提取、SVM分類器是分模塊獨(dú)立訓(xùn)練的,沒有聯(lián)合起來系統(tǒng)性優(yōu)化,訓(xùn)練耗時(shí)長

(2)Fast R-CNN

在改進(jìn)Fast R-CNN之前,有一個(gè)版本是SPPNet(Spatial?Pyramind?Pooling?Convolutional?

Networks),將CNN的輸入從固定尺寸改進(jìn)為任意尺寸,加入ROI池化層(即對(duì)ROI的區(qū)域進(jìn)行池化),使得網(wǎng)絡(luò)的輸入圖像可以是任意尺寸,輸出則不變,是固定維數(shù)的向量。

Fast?R-CNN在SPPNet的基礎(chǔ)上,將?SVM分類改成了神經(jīng)網(wǎng)絡(luò)進(jìn)行分類,全連接層有兩個(gè)輸出,一個(gè)輸出負(fù)責(zé)分類(softmax),另一個(gè)輸出負(fù)責(zé)框回歸(bbox?regressor)。

最終得到兩個(gè)結(jié)果:softmax分類以及L2回歸,損失函數(shù)是分類和回歸的加權(quán)和。

不足:

  • 仍用Selective Search提取候選區(qū)域

ROI Pooling的不足:

  • 在候選框的位置和提取特征時(shí)兩次取整,會(huì)導(dǎo)致檢測(cè)信息和提取出的特征不匹配

(3)Faster R-CNN

為了解決Selective Search帶來的耗時(shí)問題,Faster R-CNN引用了RPN來進(jìn)行候選區(qū)域的提取,RPN是一個(gè)全卷積神經(jīng)網(wǎng)絡(luò)(Fully Convolutional Network),輸入是前一層任意大小的特征圖,輸出是一系列的矩形目標(biāo)候選區(qū),在卷積神經(jīng)網(wǎng)絡(luò)的最后一個(gè)特征層上滑動(dòng)。

?為了適應(yīng)多種形狀的物體,RPN定義了k種不同尺度的滑窗,并將這些滑窗成為anchor,在Faster R-CNN論文中,用了9種anchor。

在分類任務(wù)中,需計(jì)算每個(gè)anchor和真實(shí)標(biāo)記矩形框gt_box的IOU

  • 當(dāng)IOU>0.7時(shí),認(rèn)為該anchor包含目標(biāo)物體,為正樣本
  • 當(dāng)IOU在0.3-0.7之間時(shí),不參與網(wǎng)絡(luò)訓(xùn)練的迭代過程
  • 當(dāng)IOU<0.3時(shí),認(rèn)為該anchor不包含目標(biāo)物體,為負(fù)樣本

在回歸任務(wù)中,需計(jì)算anchor和gt_box的橫、縱坐標(biāo)及寬高的偏移量,Loss函數(shù)的是通過smooth L1進(jìn)行計(jì)算的,公式為

ROI Align:消除ROI Padding的誤差

?在區(qū)域內(nèi)均勻的取N個(gè)點(diǎn),找到特征圖上離每個(gè)點(diǎn)最近的四個(gè)點(diǎn),再通過雙線性插值的方式,得到點(diǎn)的輸出值,最后對(duì)N個(gè)點(diǎn)取平均得到區(qū)域的輸出。

(4)進(jìn)階模型

  • FPN(解決多尺度問題)

方案可以構(gòu)造多尺度金字塔,期望模型能夠具備檢測(cè)不同大小尺度物體的能力,具體方案如下圖:

  • a是將特征縮放到不同尺度,使用多個(gè)模型進(jìn)行預(yù)測(cè)
  • b是僅使用最后一層的特征作為檢測(cè)模型后續(xù)部分的輸入
  • c是每個(gè)層級(jí)分別預(yù)測(cè)
  • d是使用不同層級(jí)特征進(jìn)行融合,在分級(jí)預(yù)測(cè)(FPN)

FPN是以骨干網(wǎng)絡(luò)的輸出為輸入,將特征進(jìn)行上采樣并與上一層特征相加得到FPN結(jié)構(gòu)每一層的輸出,網(wǎng)絡(luò)結(jié)構(gòu)圖如下

在FPN結(jié)構(gòu)中,會(huì)存在多個(gè)ROI Align,將FPN的特征金字塔類比為圖像金字塔,可以通過面積來對(duì)候選框進(jìn)行分配。

  • Cascade R-CNN(IoU)

Cascade R-CNN主要是對(duì)IoU指標(biāo)的改進(jìn),IoU是計(jì)算兩個(gè)框之間的重疊區(qū)域,在模型中涉及到的細(xì)節(jié)有:一、計(jì)算基于Anchor和GT框的IoU值,二是基于預(yù)測(cè)框和真實(shí)框的IoU值。通過調(diào)整IoU的閾值并未對(duì)模型有較大提升,單一閾值訓(xùn)練的模型有限,因此,對(duì)模型進(jìn)行多Head改進(jìn)。

  • Libra R-CNN

Libra R-CNN進(jìn)行三方面的改進(jìn),分別是特征融合、采樣策略、損失函數(shù)。

?增強(qiáng)FPN的特征融合:

  • Rescale(重新調(diào)節(jié)):將不同層級(jí)的特征圖(C層)通過差值或者下采樣的方法進(jìn)行統(tǒng)一到C4層
  • Integrate(合并):將匯集的特征進(jìn)行融合
  • refine(重新定義):使用non-local結(jié)構(gòu)對(duì)融合特征進(jìn)行加強(qiáng)
  • strengthen(增強(qiáng)):將優(yōu)化的特征與不同層級(jí)上的原始特征加和
  • 采樣策略:

  • 正樣本采樣(正樣本類別不平衡):對(duì)正樣本里邊的類別進(jìn)行隨機(jī)采樣,保證類別均衡
  • 負(fù)樣本采樣(負(fù)樣本IoU分配不平衡):根據(jù)閾值劃分,高于閾值的進(jìn)行分桶,計(jì)算應(yīng)該落在每個(gè)桶中的樣本數(shù)量,最后得到IoU均勻分布的負(fù)樣本;低于閾值的樣本隨機(jī)采樣
  • Loss(Smooth L1 loss--->Balanced L1 loss):

    還有Mask R-CNN、RFCN、Light-Head R-CNN等模型的改進(jìn)

    3、深度學(xué)習(xí)的目標(biāo)檢測(cè)實(shí)現(xiàn)

    3.1. PaddleDetection的安裝和使用

    (1)安裝

    #下載PaddleDetection ! git clone https://github.com/PaddlePaddle/PaddleDetection #解壓 ! unzip -o PaddleDetection.zip #安裝cocoapi ! pip install "git+https://hub.fastgit.org/cocodataset/cocoapi.git#subdirectory=PythonAPI" #安裝需求包,在PaddleDetection路徑下 !pip install -r requirements.txt#配置環(huán)境變量 %env PYTHONPATH=.:$PYTHONPATH %env CUDA_VISIBLE_DEVICES=0#驗(yàn)證 ! python ppdet/modeling/tests/test_architectures.py

    (2)介紹

    在PaddleDetection中實(shí)現(xiàn)目標(biāo)檢測(cè)、關(guān)鍵點(diǎn)檢測(cè)、實(shí)例分割等算法,具體模型如下:

    ?(3)模型包內(nèi)容拆解

    核心文件有四個(gè)configs、dataset、demo、tools,?包含了數(shù)據(jù)集、測(cè)試、模型、訓(xùn)練整個(gè)過程,可以按需調(diào)整實(shí)現(xiàn)。

    教程參考:飛槳AI Studio - 人工智能學(xué)習(xí)與實(shí)訓(xùn)社區(qū)

    (4)實(shí)現(xiàn)

    #運(yùn)行代碼---訓(xùn)練操作,并進(jìn)行驗(yàn)證集驗(yàn)證 ! python -u tools/train.py -c ../faster_rcnn_r34_1x.yml --eval

    其中,faster_rcnn_r34_1x.yml為配置文件,內(nèi)容如下

    • 超參數(shù)配置

    DataReader配置:

    • image_dir: images 圖片路徑
    • anno_path: Annotations/train_cpu.json 標(biāo)注文件
    • dataset_dir: /home/aistudio/work/PCB_DATASET 數(shù)據(jù)路徑
    #預(yù)測(cè),并可視化 ! python -u tools/infer.py -c ../faster_rcnn_r34_1x.yml \--infer_img=../PCB_DATASET/images/04_missing_hole_10.jpg \-o weights=output/faster_rcnn_r34_1x/best_model

    其他模型實(shí)現(xiàn)步驟跟faster R-CNN相似!

    2、torchvision實(shí)現(xiàn)(基于pytorch)

    (1)安裝

    直接用pip就能完成安裝操作,故忽略。

    (2)實(shí)現(xiàn)(參考pytorch教程文檔)

    import torchvision from torchvision.models.detection.faster_rcnn import FastRCNNPredictor from torchvision.models.detection.mask_rcnn import MaskRCNNPredictordef get_model_instance_segmentation(num_classes):# load an instance segmentation model pre-trained on COCOmodel = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)# get number of input features for the classifierin_features = model.roi_heads.box_predictor.cls_score.in_features# replace the pre-trained head with a new onemodel.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)# now get the number of input features for the mask classifierin_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channelshidden_layer = 256# and replace the mask predictor with a new onemodel.roi_heads.mask_predictor = MaskRCNNPredictor(in_features_mask,hidden_layer,num_classes)return model

    (3)實(shí)現(xiàn)細(xì)節(jié)

    • backbone:骨干網(wǎng)絡(luò)(提取圖片特征,基本是卷積神經(jīng)網(wǎng)絡(luò)),需要知道Module的out_channels
    • rpn:區(qū)域預(yù)測(cè)網(wǎng)絡(luò)
    rpn = RegionProposalNetwork(rpn_anchor_generator, rpn_head,rpn_fg_iou_thresh, rpn_bg_iou_thresh,rpn_batch_size_per_image, rpn_positive_fraction,rpn_pre_nms_top_n, rpn_post_nms_top_n, rpn_nms_thresh,score_thresh=rpn_score_thresh)#rpn_anchor_generator:AnchorGenerator-生成錨框 #rpn_head:RPNHead(包含classification and regression 的RPN head,參數(shù):輸入特征的通道數(shù),被預(yù)測(cè)的anchors數(shù)量)
    • roi_heads:里邊的方法有RoI Pooling 轉(zhuǎn)成RoI Align。
    roi_heads = RoIHeads(# Boxbox_roi_pool, box_head, box_predictor,box_fg_iou_thresh, box_bg_iou_thresh,box_batch_size_per_image, box_positive_fraction,bbox_reg_weights,box_score_thresh, box_nms_thresh, box_detections_per_img) box_head: TwoMLPHead:兩個(gè)linear box_roi_pool:MultiScaleRoIAlign box_predictor: FastRCNNPredictor 兩個(gè)linear,一個(gè)做classifer,一個(gè)做box regression
    • transform

    總結(jié)

    以上是生活随笔為你收集整理的目标检测发展路程(一)——Two stage的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。