前言
由于在學習和應用目標檢測算法時,不可避免的接觸到正負樣本的生成策略等知識點,并且正負樣本的區分策略對算法最終效果至關重要。因此,通過參考他人的文章資料,本文將目標檢測中正負樣本的區分策略進行匯總。為了能將主要篇幅集中在不同算法生成正負樣本的策略上,本文不對每個算法完整結構進行詳細介紹。本文涉及了不同種類的anchor-based和anchor-free的相關算法(共5個算法)。并且會在后續文章中,繼續補充其他算法(例如yolo系列、centernet、ATSS等)。
一、正負樣本的概念
目前,許多人在看相關目標檢測的論文時,常常誤以為正樣本就是我們手動標注的GT(ground truth),這個理解是錯誤的,正確的理解是這樣的:
首先,正樣本是想要檢測的目標,比如檢測人臉時,人臉是正樣本,非人臉則是負樣本,比如旁邊的窗戶、紅綠燈之類的其他東西。其次,在正負樣本選取時,要注意:正樣本是與GT的IOU值大于閾值時的取值,負樣本是小于閾值的,其他的則把它去除即可。
總之,正負樣本都是針對于程序生成的框而言,非GT數據[^1]。
二、為什么要進行正負樣本采樣?
需要處理好正負樣本不平衡問題:在ROI、RPN等過程中,整個圖像中正樣本區域少,大部分是負樣本[^2]。
提高網絡收斂速度和精度:對于目標檢測算法,主要需要關注的是對應著真實物體的 正樣本 ,在訓練時會根據其loss來調整網絡參數。相比之下, 負樣本對應著圖像的背景,如果有大量的負樣本參與訓練,則會淹沒正樣本的損失,從而降低網絡收斂的效率與檢測精度。
三、anchor-free和anchor-based
二者的區別在于是否利用anchor提取候選框[^2]
從anchor回歸屬于anchor-based類,代表如faster rcnn、retinanet、YOLOv2 v3、ssd等,
從point回歸屬于anchor-free類,代表如cornernet、extremenet、centernet等,
二者融合代表如fsaf、sface、ga-rpn等。
四、典型算法
1、MTCNN
論文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
算法推理流程圖
MTCNN算法訓練過程:[^3]:
PNet的輸入尺寸為, RNet的輸入尺寸為, ONet的輸入尺寸為。
由于PNet輸入是一個大小的圖片,所以訓練前需要把生成的訓練數據(通過生成bounding box,然后把該bounding box 剪切成大小的圖片),轉換成的結構。其他網絡輸入尺寸如下圖所示:
1)正負樣本的定義
訓練數據可以通過和GT的 IOU 的計算生成一系列的 bounding box。可以通過滑動窗口或者隨機采樣的方法獲取訓練數據,訓練數據分為三種正樣本,負樣本,中間樣本[^4]。
正樣本:IOU > 0.65部分樣本:0.4 < IOU < 0.65負樣本: IOU < 0.3
如下圖所示,為依據圖片中人臉框的坐標信息生成正樣本和部分樣本:由于篇幅原因,下圖中IOU的計算過程沒有截圖,可以參考[^4]的源碼。
注意:代碼中的 w、h 分別是GT的尺度。
此處生成正樣本的腳本,除了對生成的矩形框尺度進行約束,還約束了矩形框的中心點坐標范圍。筆者認為,這樣做主要是為了提高生成正樣本的效率:因為一張圖片中正樣本的數量是非常有限的,要確保生成的矩形框與GT的IOU大于一定閾值才能成為正樣本。
如下圖所示,使用隨機采樣的方式生成負樣本:紅色框為crop_box計算方法,相對正樣本的生成方式更簡單。
注意:代碼中的 width、height 分別是原始圖像的尺度。
訓練樣本包含:正樣本,負樣本,部分樣本,關鍵點樣本。比例為 1 : 3 : 1 : 2
訓練主要包括三個任務:
人臉分類任務:利用正樣本和負樣本進行訓練,
人臉邊框回歸任務:利用正樣本和部分樣本進行訓練,
關鍵點檢測任務:利用關鍵點樣本進行訓練。
MTCNN算法測試過程:[^3]:
1、首先整張圖像經過金字塔,生成多個尺度的圖像(圖像金字塔),然后輸入PNet,PNet由于尺寸很小,所以可以很快的選出候選區域。但是準確率不高,不同尺度上的判斷出來的人臉檢測框,然后采用NMS算法,合并候選框。
2、根據候選框提取圖像,之后縮放到的大小,作為RNet的輸入,RNet可以精確的選取邊框,一般最后只剩幾個邊框。
3、最后縮放到的大小,輸入ONet,判斷后選框是不是人臉,ONet雖然速度較慢,但是由于經過前兩個網絡,已經得到了高概率的邊框,所以輸入ONet的圖像較少,然后ONet輸出精確的邊框和關鍵點信息,只是在第三個階段上才顯示人臉特征定位;前兩個階段只是分類,不顯示人臉定點的結果。
2、Faster rcnn
論文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
算法整體結構
1)Anchor概念
Anchor(錨框):
Anchor本質上是在原圖上預先定義好(這個預先定義十分關鍵)的一系列大小不一的矩形框[^5]。
為什么要引入Anchor呢?
這是因為之前的目標檢測都是模型直接回歸邊框的位置,而通過引入Anchor相當于加入了強先驗信息,然后通過錨框再去篩選與修正,最后再得到預測框。這樣做的好處在與是在Anchor的基礎上做物體檢測,這樣要比從無到有的直接擬合物體的邊框容易一些。
具體的做法就是:讓模型去預測Anchor與真實邊框的偏移值,而不是直接預測邊框的坐標[^5]。
如何生成Anchor呢?
從圖片到卷積特征圖
特征圖(feature map)上的每一個點都生成一組錨點。注意:即使我們是在特征圖上生成的錨點,這些錨點最終是要映射回原始圖片的尺寸(參考下圖感受野的相關概念[^7])。
因為我們只用到了卷積和池化層,所以特征圖的最終維度與原始圖片是呈比例的。數學上,如果圖片的尺寸是,那么特征圖最終會縮小到尺寸為 和,其中 r 是次級采樣率。如果我們在特征圖上每個空間位置上都定義一個錨點,那么最終圖片的錨點會相隔 r 個像素,在 VGG 中,,此處可以參考文章最后的文獻[^6]。 所以,feature map上一點對應到原圖的大小為的區域。
原始圖片的錨點中心
在目標檢測中,需要檢測的目標形態大小各異,如果統一以固定大小的窗口進行檢測,肯定會影響檢測效果,降低精度。因此Faster R-CNN算法為每個滑動窗口位置配置了9個基準矩形框來適配各種目標。即,對于每張輸入的特征圖像的每一個位置,使用9種尺度的候選窗口:三種面積{, , },三種比例{1 : 1, 1 : 2, 2 : 1},目的是盡可能的將尺度大小不一的特定目標區域特征檢測出來,并判斷候選窗口是否包含感興趣的目標。
Anchor原理圖(如上圖所示)
原始圖片的錨點中心生成的9種候選框(如上圖所示)
原始圖片中所有anchor可視化(如上圖所示)
左側:錨點、中心:特征圖空間單一錨點在原圖中的表達,右側:所有錨點在原圖中的表達(如上圖所示)
2)正負樣本的定義[^8]
faster rcnn中正負樣本是根據anchors的標定規則來生成的。
(1)正樣本的生成:
如果某個anchor和其中一個GT的最大iou大于pos_iou_thr,那么該anchor就負責對應的GT;
如果某個GT和所有anchor的iou中最大的iou會小于pos_iou_thr,但是大于min_pos_iou,則依然將該anchor負責對應的gt。通過本步驟,可以最大程度保證每個GT都有anchor負責預測,如果還是小于min_pos_iou,那就沒辦法了,只能當做忽略樣本了;
(2)負樣本的生成:
如果anchor和GT的iou低于neg_iou_thr的,那就是負樣本,其應該包括大量數目;
其余的anchor全部當做忽略區域,不計算梯度。
該最大分配策略,可以盡最大程度的保證每個GT都有合適的高質量anchor進行負責預測。
RPN中正負樣本定義
RCNN中正負樣本定義
3)正負樣本的采樣
雖然上文中的最大分配策略可以區分正負樣本和忽略樣本,但是依然存在大量的正負樣本不平衡問題。
解決辦法可以通過正負樣本采樣或者loss上面一定程度解決,faster rcnn默認是需要進行正負樣本采樣的。 rpn head和rcnn head的采樣器都比較簡單,就是隨機采樣,閾值不一樣而已。
RPN head采樣器
注意:RPN中的add_gt_as_proposals=False
rcnn head采樣器
注意:rcnn中的add_gt_as_proposals=True
dict函數中各個參數具體含義:
num表示采樣后樣本總數,包括正負和忽略樣本。
pos_fraction表示其中的正樣本比例。
neg_pos_ub表示正負樣本比例,用于確定負樣本采樣個數上界,例如我打算采樣1000個樣本,正樣本打算采樣500個,但是可能實際正樣本才200個,那么正樣本實際上只能采樣200個,如果設置neg_pos_ub=-1,那么就會對負樣本采樣800個,用于湊足1000個,但是如果設置為neg_pos_ub比例,例如1.5,那么負樣本最多采樣個,最終返回的樣本實際上不夠1000個。默認情況neg_pos_ub=-1。
由于rcnn head的輸入是rpn head的輸出,在網絡訓練前期,rpn無法輸出大量高質量樣本,故為了平衡和穩定rcnn訓練過程,通常會對rcnn head部分添加gt作為proposal。因此,上述兩個采樣器還有一個參數add_gt_as_proposals。
3、SSD
論文:SSD: Single Shot MultiBox Detector
SSD是最典型的多尺度預測結構,是非常早期的網絡。
可以通過如下網絡結構對比圖,大致理解SSD解決多尺度問題的思路與其他網絡的區別。
左側:僅在一種尺度的特征圖上進行檢測,例如Faster rcnn。右側:在多種尺度特征上進行檢測,例如SSD。
1)SSD核心設計思路[^9]:
(1)采用多尺度特征圖用于檢測
所謂多尺度采用大小不同的特征圖(feature map),CNN網絡一般前面的特征圖比較大,后面會逐漸采用stride=2的卷積或者pool來降低特征圖大小。
下圖所示,一個比較大的特征圖和一個比較小的特征圖,他們都用來做檢測。這樣做的好處是:比較大的特征圖用來檢測相對較小的目標,而小的特征圖負責檢測大目標,的特征圖可以劃分更多的單元,但是其每個單元的default box尺度比較小。
左側:的特征圖上設置尺寸小的先驗框。右側:的特征圖上設置尺寸大的先驗框
特別注意:上述兩個特征圖尺寸是不一樣的,的尺寸比的尺寸大,但是,的特征圖中每個小格子,即feature map cell的感受野都比小,即,每個小格子映射回原圖時對應的圖片區域。一塊區域就可以看做一組特征。然后對這些特征進行分類和回歸。
(2)采用卷積進行檢測
SSD直接采用卷積對不同的特征圖來進行提取檢測結果。對于形狀為的特征圖,只需要采用這樣比較小的卷積核得到檢測值。此處主要是與yolo最后采用全連接層的方式進行對比。
(3)設置先驗框(default boxes)
SSD借鑒了Faster R-CNN中anchor的理念,每個單元設置尺度或者長寬比不同的先驗框(default boxes),預測的邊界框(bounding boxes)是以這些先驗框為基準的,在一定程度上減少訓練難度。
一般情況下,每個單元會設置多個先驗框,其尺度和長寬比存在差異,如下圖所示,可以看到每個單元使用了4個不同的default boxes(SSD中不同尺度的特征圖可以設置不同個數的先驗框),圖片中貓和狗分別采用最適合它們形狀的先驗框來進行訓練,后面會詳細講解訓練過程中的先驗框匹配原則。
如上圖所示,在不同尺度的特征圖上設置不同尺度和長寬比的先驗框
每一個feature map中的每一個小格子(cell)都包含多個default box,同時每個box對應loc(位置坐標)和conf(每個種類的得分)。
default box長寬比例默認有四個和六個:四個default box是長寬比(aspect ratios)為(1:1)、(2:1)、(1:2)、(1:1);六個則是添加了(1:3)、(3:1)。
為什么會有兩個(1:1)呢?
這時候就要講下論文中Choosing scales and aspect ratios for default boxes這段內容了。作者認為不同的feature map應該有不同的比例(一個大框一個小框,長寬比相同,但是不同feature map 相對于原圖的尺寸比例不同)。這是什么意思呢?代表的是default box中這個1在原圖中的尺寸是多大的。
(4)計算先驗框min_sizes和max_sizes的方式
對于先驗框的尺度,其遵守一個線性遞增規則:隨著特征圖大小降低,先驗框尺度線性增加。計算公式如下所示:
****即代表在300*300輸入中的比例,表示第k層feature map上生成的先驗框大小相對于圖片的比例。
****代表的是特征圖索引。
為當前的網絡結構中可以生成先驗框的feature map層數。特別注意:,因為一共有6個feature map,但是第一層(Conv4_3層)是單獨設置的。
和代表的是第一層和最后一層所占的比例,比例的最小值和最大值,在ssd300中為0.2-0.9。
實際上是:對于第一個特征圖Conv4_3,其先驗框的尺度比例一般設置為 ,故第一層的。輸入是300,故conv4_3的min_size=30。對于從第二層開始的特征圖,則利用上述公式進行線性增加,然后再乘以圖片大小,可以得到各個特征圖的尺度為60、111、162、213、264。最后一個特征圖conv9_2的size是直接計算的,。 以上計算可得每個特征的min_size和max_size,如下:
具體實現代碼:ssd_pascal.py 下圖注釋中提到的博客:關于SSD默認框產生的詳細解讀
接下來,補充回答為什么default box的size有兩個(1:1)[^9]?
作者在這有引入了一個,也就是每個特征圖都設置了兩個長寬比為1大小不同的正方形default box。有的小伙伴可能會有疑問,這有了則需要多出來一部分的啊,是的沒錯,最后一個特征圖需要參考來計算,因此每個特征圖(的每個cell)都有6個default box(aspect ratios),但是在實現時, Conv4_3,Conv10_2,Conv11_2僅僅使用4個先驗框(default box),不使用長寬比為的先驗框(default box)。作者的代碼中就添加了兩層,第一層取0.1,最后一層取1。
那么S怎么用呢?按如下方式計算先驗框的寬高(這里的Sk是上面求得的各個特征圖的先驗框的實際size,不再是尺度比例):
ar代表的是之前提到的先驗框default box(aspect ratios)比例,即
對于先驗框default box中心點的值取值為:
其中i,j代表在feature map中的水平和垂直的第幾格。
fk代表的是feature map的size。
每個單元的先驗框中心點分布在各單元的中心。
(5)計算先驗框的大小的方式
下圖所示為每個cell生成4個先驗框的方法,生成6個先驗框的方式類似,只需要增加1:3和3:1兩個比例的矩形框即可。
如上圖所示,先驗框計算方式
2)正負樣本的定義
SSD采用的正負樣本定義器依然是MaxIoUAssigner,但是由于參數設置不一樣,故有了不同的解釋。
正負樣本定義規則為[^2]:
(1)正樣本的生成:
anchor和某個GT的最大iou大于0.5,則認為是正樣本。
GT和所有anchor的最大iou值,如果大于0.0,則認為該最大iou anchor是正樣本。
(2)負樣本的生成:
anchor和所有GT的iou都小于0.5,則認為是負樣本。
沒有忽略樣本,即每個GT一定會和某個anchor匹配上,不可能存在GT沒有anchor匹配的情況。
3)正負樣本的采樣
盡管一個ground truth可以與多個先驗框匹配,但是ground truth相對于先驗框還是太少了,所以負樣本會很多。為保證正負樣本盡量均衡,SSD采用了hard negative mining,先將每一個物體位置上對應 predictions(default boxes)是 negative 的 boxes 進行排序,按照先驗框的confidence的大小。 選擇最高的幾個,保證最后 negatives、positives 的比例接近3:1。
4、FPN
論文:Feature Pyramid Networks for Object Detection
下圖展示了4種利用特征的形式:(a)圖像金字塔,即將圖像做成不同的scale,然后不同scale的圖像生成對應的不同scale的特征。這種方法的缺點在于增加了時間成本。有些算法會在測試時候采用圖像金字塔。(b)像SPPnet,Fast RCNN,Faster RCNN是采用這種方式,即僅采用網絡最后一層的特征。(c)像SSD(Single Shot Detector)采用這種多尺度特征融合的方式,沒有上采樣過程,即從網絡不同層抽取不同尺度的特征做預測,這種方式不會增加額外的計算量。作者認為SSD算法中沒有用到足夠低層的特征(在SSD中,最低層的特征是VGG網絡的conv4_3),而在作者看來足夠低層的特征對于檢測小物體是很有幫助的。(d)本文作者是采用這種方式,頂層特征通過上采樣和低層特征做融合,而且每層都是獨立預測的。
FPN主要解決的是物體檢測中的多尺度問題,通過簡單的網絡連接改變,在基本不增加原有模型計算量的情況下,大幅度提升了小物體檢測的性能。通過高層特征進行上采樣和低層特征進行自頂向下的連接,而且每一層都會進行預測。
FPN算法大致結構:一個自底向上的線路,一個自頂向下的線路,橫向連接(lateral connection)。下圖中放大的區域就是橫向連接,這里的卷積核的主要作用是減少卷積核的個數,也就是減少了feature map的個數,并不改變feature map的尺寸大小。
如上圖所示,FPN+RPN結構
在橫向連接中,采用的卷積核進行連接(減少特征圖數量)。將FPN和RPN結合起來,那RPN的輸入就會變成多尺度的feature map,那我們就需要在金字塔的每一層后邊都接一個RPN head(一個卷積,兩個卷積),如下圖所示.其中,P6是通過P5下采樣得到的。
1)設置先驗框(default boxes)
在生成anchor的時候,因為輸入是多尺度特征,就不需要再對每層都使用3種不同尺度的anchor了,所以在每一個scale層,都定義了不同大小的anchor。對于P2,P3,P4,P5,P6這些層,定義anchor的大小為、、、、,另外每個scale層都有3個長寬對比度:1:2,1:1,2:1。所以整個特征金字塔有15種anchor,如上圖所示。
anchor的正負樣本定義和Faster R-CNN中的定義相同,即如果某個anchor和GT有最大的IoU,或者IoU大于0.7,那這個anchor就是正樣本,如果IoU小于0.3,那就是負樣本。此外,需要注意的是每層的RPN head都參數共享的。
但是,生成的anchor(注意:此時的anchor已經經歷了一輪篩選)如何確定映射到哪一個特征圖上呢?這是有公式計算的,如下圖:
表示映射到哪一層的作為特征層傳入到ROI Pooling層中。是基準值,設置為4。和表示RPN給出的Region Proposal的寬和高。此處的224是在ImageNet上訓練時resize的大小。
例如,和都是112,則(值做取整處理),對應P3特征層和Region Proposal傳入到ROI Pooling,得到一個尺寸為的特征,再經過flatten之后輸入到全連接層。
2)正負樣本的定義
如1)所述,正負樣本的界定和Faster RCNN差不多:如果某個anchor和一個給定的ground truth有最高的IOU或者和任意一個Ground truth的IOU都大于0.7,則是正樣本。如果一個anchor和任意一個ground truth的IOU都小于0.3,則為負樣本。
5、FCOS
論文:FCOS: Fully Convolutional One-Stage Object Detection
本文提出一種基于像素級預測一階全卷積目標檢測(FCOS)來解決目標檢測問題,類似于語義分割。目前大多數先進的目標檢測模型,例如RetinaNet、SSD、YOLOv3、Faster R-CNN都依賴于預先定義的錨框。相比之下,本文提出的FCOS是anchor free,而且也是proposal free,就是不依賴預先定義的錨框或者提議區域。通過去除預先定義的錨框,FCOS完全的避免了關于錨框的復雜運算,例如訓練過程中計算重疊度,而且節省了訓練過程中的內存占用。更重要的是,本文避免了和錨框有關且對最終檢測結果非常敏感的所有超參數。由于后處理只采用非極大值抑制(NMS),所以本文提出的FCOS比以往基于錨框的一階檢測器具有更加簡單的優點[^10]。
FCOS的骨架和neck部分是標準的resnet+FPN結構,和Retinanet完全相同。
我們僅僅考慮head部分。除去center-ness分支,則可以看出和retinanet完全相同。
1)錨框(anchor-based)缺點
超參數設置難度大:檢測表現效果對于錨框的尺寸、長寬比、數目非常敏感,因此錨框相關的超參數需要仔細的調節。
anchor的設置缺乏靈活性:錨框的尺寸和長寬比是固定的,因此,檢測器在處理形變較大的候選對象時比較困難,尤其是對于小目標。預先定義的錨框還限制了檢測器的泛化能力,因為,它們需要針對不同對象大小或長寬比進行設計。
容易產生正負樣本不平衡問題:為了提高召回率,需要在圖像上放置密集的錨框。而這些錨框大多數屬于負樣本,這樣造成了正負樣本之間的不均衡。
計算量大:大量的錨框增加了在計算交并比時計算量和內存占用。
2)正負樣本的定義
作為Anchor-free的方法,FCOS直接對feature map中每個位置對應原圖的邊框都進行回歸,如果位置 (x,y) 落入任何真實邊框,就認為它是一個正樣本,它的類別標記為這個真實邊框的類別[^11]。可以理解為他是基于物體的一個key point點進行回歸的。在實際的anchor-free中也會遇到一些問題,為了解決這些問題,FCOS做了如下工作:
1)為了解決anchor-free的方式在真實邊框重疊帶來的模糊性和低召回率(不像anchor-based可以有多重不同尺寸的anchor),FCOS采用類似FPN中的多級檢測,就是在不同級別的特征層檢測不同尺寸的目標。
2)為了解決距離目標中心較遠的位置產生很多低質量的預測邊框,FCOS提出了一種簡單而有效的策略來抑制這些低質量的預測邊界框,而且不引入任何超參數。具體來說,FCOS添加單層分支,與分類分支并行,以預測"Center-ness",可以這這個理解成為一個度量值,于中心距離的一個度量值,與中心點較遠,則度量值較低,與中心點越近,度量值越高,以此來讓置信度更高的像素產生更高的貢獻。
正負樣本匹配方式的實現:
1、分配目標給哪一層預測。 根據目標的尺寸將目標分配到不同的特征層上進行預測。
具體實現:引入了min_size和max_size,具體設置是0, 64, 128, 256, 512和無窮大。例如,對于輸出的第一個預測層而言,其stride=8,負責最小尺度的物體,對于該層上面的任何一個點,如果有GT bbox映射到特征圖上,滿足0 < max(中心點到4條邊的距離) < 64,那么該GT bbox就屬于第1層負責,其余層也是采用類似原則。
總結來說就是第1層負責預測尺度在0~ 64范圍內的GT,第2層負責預測尺度在64~128范圍內的GT,以此類推。通過該分配策略就可以將不同大小的GT分配到最合適的預測層進行學習。
2、確定正負樣本區域。 對于每一層feature map,設定一個以GT中心為圓心,固定半徑的圓,如果像素落在該圓內,則標記為positive樣本,否則為negative。
具體實現:通過center_sample_radius**(基于當前stride參數)**參數,確定在半徑范圍內的樣本都屬于正樣本區域,其余區域作為負樣本。默認配置center_sample_radius=1.5。例如,第1層的stride=8,那么在該輸出層上,對于任何一個GT,基于GT bbox中心點為起點,在半徑為個像素范圍內點都屬于正樣本區域。
3、centerness找到目標的中心點。 為了使靠近GT中心的像素能學到更多的信息,故給予他更高的權重,而離GT中心越遠的點,貢獻則遞減。
具體實現:使得離目標中心越近,輸出值越大,反之越小。Center-ness的定義如下公式:
可見最中心的點的centerness為1,距離越遠的點,centerness的值越小。在推測的時候直接將中心度分數centerness乘到分類分數上,將偏離很遠的檢測框分值進行懲罰。
center-ness本質就是對正樣本區域按照距離GT bbox中心來設置權重,這是作者的做法,還有很多類似做法,不過有些是在Loss上面做文章,例如在ce loss基礎上乘上一個類似預center-ness的權重來實現同樣效果。
center-ness效果如下:
3)總結:
FCOS采用物體center的匹配方式來進行回歸,在正負樣本匹配的時候,采用了top-k的策略進行匹配,并且使用centerness來對不同距離的匹配樣本進行不同程度的懲罰,以達到資源傾斜于貢獻最佳者的目的。
-
數據
+關注
關注
8文章
6892瀏覽量
88828 -
網絡
+關注
關注
14文章
7517瀏覽量
88628
原文標題:目標檢測算法是如何生成正負樣本的(一)
文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論