<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)用目標(biāo)檢測(cè)器 | 性能超YoloV5,推理耗時(shí)不變(附github源碼)

          共 6083字,需瀏覽 13分鐘

           ·

          2021-08-16 03:36


          點(diǎn)擊下方AI算法與圖像處理”,一起進(jìn)步!

          重磅干貨,第一時(shí)間送達(dá)

          計(jì)算機(jī)視覺研究院專欄

          作者:Edison_G

          對(duì)PP-YOLO的一次升級(jí),從PP-YOLO出發(fā),通過增量消融方式逐步添加有助于性能提升且不增加推理耗時(shí)的措施,取得了更佳的性能(49.5%mAP)-速度(69FPS)均衡,并優(yōu)于YOLOv4與YOLOv5。


          論文:https://arxiv.org/abs/2104.10419

          代碼鏈接:https://github.com/PaddlePaddle/PaddleDetection

          一、簡要

          在實(shí)際應(yīng)用場景中,有效性與高效性對(duì)于目標(biāo)檢測(cè)器非常重要。為了滿足這兩個(gè)問題,研究者全面評(píng)估了現(xiàn)有的改進(jìn)的集合,以提高PP-YOLO的性能,同時(shí)幾乎保推理時(shí)間不變

          百度研究者對(duì)現(xiàn)有改進(jìn)措施進(jìn)行了分析并通過增強(qiáng)消融研究評(píng)估了其對(duì)最終模型的影響,此外,那些不起作用的也進(jìn)行了討論。通過組合多種有效改進(jìn),將PP-YOLO在COCO2017 test-dev數(shù)據(jù)上的性能從45.9%mAP提升到了49.5%mAP,并將所得到的模型稱之為PP-YOLOv2。在推理速度方面,PP-YOLOv2可以達(dá)到68.9FPS(輸入尺寸為640*640);采用Paddle推理引擎+TensorRT+FP16+bs1,可以進(jìn)一步將PP-YOLOv2的推理速度提升到106.5FPS。優(yōu)秀的性能完全超越了同等參數(shù)量的YOLOv4-CSP、YOLOv5l等模型。除此之外,采用ResNet101為主干網(wǎng)絡(luò)的PP-YOLOv2可以在COCO2017 test-dev數(shù)據(jù)集上取得50.3%mAP。

          二、背景及PP-YOLO

          目標(biāo)檢測(cè)是各種現(xiàn)實(shí)世界應(yīng)用程序的一個(gè)關(guān)鍵組成部分,如自動(dòng)駕駛、人臉識(shí)別和人的重識(shí)別。近年來,隨著深度卷積神經(jīng)網(wǎng)絡(luò)(CNNs)的興起,目標(biāo)探測(cè)器的性能得到了迅速的提高。雖然最近的工作集中在新的檢測(cè)pipeline(即 Cascade RCNN和HTC),復(fù)雜的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)(DetectoRS和CBNET)推動(dòng)了最先進(jìn)的目標(biāo)檢測(cè)方法,YOLOv3仍然是工業(yè)中使用最廣泛的檢測(cè)器之一。因?yàn)?,在各種實(shí)際應(yīng)用中,不僅計(jì)算資源有限,而且軟件支持不足。沒有必要的技術(shù)支持,two-stage檢測(cè)器(如Faster RCNN,Cascade RCNN)可能會(huì)非常慢。

          同時(shí),在YOLOv3和two-stage檢測(cè)器的精度之間存在著顯著的差距。因此,如何在保持推理速度的同時(shí)提高YOLOv3的有效性是實(shí)際使用的一個(gè)重要問題。為了同時(shí)滿足兩個(gè)問題,研究者添加了一堆改進(jìn),幾乎不增加推理時(shí)間來提高PP-YOLO的整體性能。要注意,盡管大量的方法聲稱可以獨(dú)立地提高目標(biāo)檢測(cè)器的精度,但在實(shí)踐中,有些方法在結(jié)合時(shí)是不有效的。因此,需要對(duì)這些技巧的組合進(jìn)行實(shí)際的測(cè)試。研究者遵循增量的方法來逐一評(píng)估它們的有效性。所有的實(shí)驗(yàn)都是基于PaddlePaddle實(shí)現(xiàn)。

          PP-YOLO

          最近出現(xiàn)了yolov4和yolov5模型,這些模型也是基于yolo3算法改進(jìn)得來。但PP-YOLO并不像yolov4探究各種復(fù)雜的backbone和數(shù)據(jù)增廣手段,也不是靠nas暴力搜索得到一個(gè)結(jié)構(gòu)。在resnet主干網(wǎng)絡(luò)系列,數(shù)據(jù)增廣僅靠mixup的條件下,通過合理的tricks組合,不斷提升模型性能。最終與其他模型對(duì)比圖如下:

          一個(gè)單階段的Anchor based的檢測(cè)模型通常是由一個(gè)主干網(wǎng)絡(luò)一個(gè)neck(通常是FPN),以及一個(gè)head(用于分類+定位)組成。PP-YOLO選擇了ResNet50-vd-dcn作為骨架網(wǎng)絡(luò)。

          Backbone

          直接用ResNet50-vd替換掉Darknet53會(huì)導(dǎo)致一部分的性能損失。因此,嘗試替換了一些ResNet中的卷積為可變形卷積(Deformable Convolution Network)??勺冃尉矸e的效果已經(jīng)被很多論文證明了其有效性,但是過多的添加DCN層會(huì)導(dǎo)致增加預(yù)測(cè)時(shí)間。論文這里使用的一個(gè)平衡的方案就是替換了最后一個(gè)stage的3x3卷積為DCNs。

          Detection Neck

          使用FPN,將backbone的3,4,5個(gè)stage的輸出作為FPN的輸入,輸出的大小變?yōu)檩斎氪笮〉囊话搿?/span>

          Detection Head

          常規(guī)來說Head的組成都是很簡單的,包含兩個(gè)卷積層,一個(gè)3x3和一個(gè)1x1。當(dāng)輸出類別是K的時(shí)候,輸出的維度就是3(K+5),每一個(gè)預(yù)測(cè)的特征圖上的每一個(gè)預(yù)測(cè)位置都與三個(gè)不同的anchors相關(guān)。針對(duì)每一個(gè)anchor,前K個(gè)維度確定了類別,后4個(gè)確定了bounding box的定位,最后一個(gè)確定了是否有目標(biāo)。然后CE和L1用于對(duì)這些預(yù)測(cè)值計(jì)算損失。

          A->B

          首先就是搭建基礎(chǔ)版本的PP-YOLO,在嘗試替換backbone后,雖然參數(shù)小了很多,但是mAP也下降了不少。我們通過增加了DCN卷積,將mAP提高到39.1%,增加的參數(shù)仍遠(yuǎn)遠(yuǎn)小于原始yolo3。

          B->C

          基礎(chǔ)模型搭建好后,嘗試優(yōu)化訓(xùn)練策略,選用的是更大的batch和EMA,并且加入DropBlock防止過擬合,mAP提升到了41.4%。

          C->F

          我們?cè)谶@個(gè)階段分別增加了IOU Loss,IOU Aware,Grid Sensitive這三個(gè)損失函數(shù)的改進(jìn)。分別得到了0.5%, 0.6%, 0.3%的提升,將mAP提升到了42.8%,推理速度下降仍屬于可接受范圍內(nèi)。

          F->G

          檢測(cè)框的處理部分也是能提升性能的,通過增加Matrix NMS,mAP提高了0.6%。這個(gè)表格暫時(shí)不考慮NMS對(duì)推理時(shí)間的影響,在實(shí)際測(cè)試中,MatrixNMS是能比傳統(tǒng)NMS降低推理時(shí)間的。

          G->I

          到了最后階段,很難通過增加網(wǎng)絡(luò)復(fù)雜度來提高mAP,因此我們將SPP和CoordConv放到這里再來考慮。這兩個(gè)結(jié)構(gòu)所帶來的額外參數(shù)較少,而實(shí)驗(yàn)也證明了將mAP提高到44.3%。

          I->J

          分類模型的好壞不能代表整個(gè)檢測(cè)模型的性能,因此我們最后才考慮是否用更好的預(yù)訓(xùn)練模型。仍然是在ImageNet上進(jìn)行預(yù)訓(xùn)練得到了一個(gè)更好的模型,并且提升了0.3%的mAP。

          三、新框架

          Path Aggregation Network

          對(duì)不同尺度的目標(biāo)進(jìn)行檢測(cè)是目標(biāo)檢測(cè)的一個(gè)基本挑戰(zhàn)。實(shí)際上,檢測(cè)Neck需要為所有尺度構(gòu)建高級(jí)語義特征。研究者參考PAN的設(shè)計(jì)集成了top-down信息??蓞⒁娚厦鎴D示部分。

          def pan_module(self, input, filter_list, name=None):        for i in range(1, len(input)):            ch_out = input[i].shape[1] // 2            conv_left = self._conv_bn(                input[i],                ch_out=ch_out,                filter_size=1,                stride=1,                padding=0,                name=name + '.{}.left'.format(i))            ch_out = input[i - 1].shape[1] // 2            conv_right = self._conv_bn(                input[i - 1],                ch_out=ch_out,                filter_size=1,                stride=1,                padding=0,                name=name + '.{}.right'.format(i))            conv_right = self._upsample(conv_right)            pan_out = fluid.layers.concat([conv_left, conv_right], axis=1)            ch_list = [pan_out.shape[1] // 2 * k for k in [1, 2, 1, 2, 1]]            input[i] = self.stack_conv(                pan_out,                ch_list=ch_list,                filter_list=filter_list,                name=name + '.stack_conv.{}'.format(i))        return input

          Mish Activation Function

          已有研究YOLOv4與YOLOv5表明:Mish對(duì)于改進(jìn)目標(biāo)檢測(cè)器的性能非常有效。由于已經(jīng)有了一個(gè)非常強(qiáng)有力的預(yù)訓(xùn)練主干模型(82.4%top1精度),為保持主干結(jié)構(gòu)不變,僅將Mish用到了Neck部分。

          def mish(x):    return x * paddle.tanh(F.softplus(x))

          Larger Input Size

          提升輸入尺寸可以增強(qiáng)目標(biāo)面積,因此小尺度的目標(biāo)信息可以更好的保持,進(jìn)而可以提升模型性能。然而更大尺寸輸入會(huì)占用更多內(nèi)存,為使用這個(gè)技巧,需要減少batch。具體來說,將每個(gè)GPU的batch從24下降到12,并將輸入尺寸從608提升到768。

          IoU Aware Branch 

          在PP-YOLO中,IoU損失采用了軟加權(quán)方式;在這里采用軟標(biāo)簽形式,IoU損失定義如下:

          其中t表示錨點(diǎn)與其匹配真實(shí)框之間的IoU,p表示原始IoU分支的輸出。

          注:僅僅正樣本的IoU損失進(jìn)行了計(jì)算。通過替換損失函數(shù),IoU損失分支表現(xiàn)更佳。

          @register@serializableclass IouAwareLoss(IouLoss):    """    iou aware loss, see https://arxiv.org/abs/1912.05992    Args:        loss_weight (float): iou aware loss weight, default is 1.0        max_height (int): max height of input to support random shape input        max_width (int): max width of input to support random shape input    """
          def __init__(self, loss_weight=1.0, giou=False, diou=False, ciou=False): super(IouAwareLoss, self).__init__( loss_weight=loss_weight, giou=giou, diou=diou, ciou=ciou)
          def __call__(self, ioup, pbox, gbox): iou = bbox_iou( pbox, gbox, giou=self.giou, diou=self.diou, ciou=self.ciou) iou.stop_gradient = True loss_iou_aware = F.binary_cross_entropy_with_logits( ioup, iou, reduction='none') loss_iou_aware = loss_iou_aware * self.loss_weight return loss_iou_aware

          四、實(shí)驗(yàn)及可視化

          首先,參考原始的PP-YOLO構(gòu)建新框架的基線模型,由于CPU端的重度預(yù)處理會(huì)減慢訓(xùn)練,將每個(gè)GPU的圖像數(shù)從24下調(diào)到了12,降低bs會(huì)導(dǎo)致0.2%mAP指標(biāo)下降。

          A->B

          PP-YOLO上添加的第一個(gè)正向改進(jìn)為PAN,為穩(wěn)定訓(xùn)練,為PAN模塊添加了幾個(gè)跳過連接,具體可以參見前面的圖示部分??梢钥吹剑篜AN+Mish的添加可以將模型的性能從45.4%mAP提升到47.1%mAP。盡管B模型要比A模型稍慢,但這種程度的性能提升促使將PAN應(yīng)用到最終的模型中。

          B->C

          由于YOLOv4與YOLOv5評(píng)估過程中的輸入尺寸為640,將訓(xùn)練與評(píng)估的輸入尺寸同樣調(diào)整到了640以進(jìn)行公平對(duì)比??梢钥吹剑耗P托阅艿玫搅?.6%mAP提升。

          C->D

          持續(xù)輸入尺寸應(yīng)該受益更多,然而不可能同時(shí)采用大輸入尺寸與大batch。因此采用更大輸入尺寸+每個(gè)GPU12圖像訓(xùn)練模型D。此時(shí)可以帶來額外的0.6%mAP指標(biāo)提升。

          D->E

          在訓(xùn)練階段,改進(jìn)IoU損失表現(xiàn)更好。通過該損失的替換,模型E的提升提升到了49.1%mAP指標(biāo)且不造成推理效率的損失。

          上表給出了所提方法與其他SOTA方案的性能、效率對(duì)比,從中可以看到:

          • PP-YOLOv2顯著優(yōu)于YOLOv4-CSP與YOLOv5;

          • 在同等FPS下,PP-YOLOv2以2%mAP優(yōu)于YOLOv4-CSP,以1.3%AP優(yōu)于YOLOv5l;

          • 替換ResNet50為ResNet101后,PP-YOLOv2的性能與YOLOv5x相當(dāng)且推理速度快15.9%。

          努力分享優(yōu)質(zhì)的計(jì)算機(jī)視覺相關(guān)內(nèi)容,歡迎關(guān)注:
          個(gè)人微信(如果沒有備注不拉群!
          請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會(huì)分享


          AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


          下載2:終身受益的編程指南:Google編程風(fēng)格指南


          AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):c++,即可下載。歷經(jīng)十年考驗(yàn),最權(quán)威的編程規(guī)范!



          下載3 CVPR2021

          AI算法與圖像處公眾號(hào)后臺(tái)回復(fù):CVPR,即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文



          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草91| 成人不卡在线观看 | 成人电影伊人网 | 久久婷五月 | 成人性生交大免费看 |