2019百度之星開發者大賽 覆盤

2021-10-22 08:42:34 字數 2853 閱讀 6908

初賽:參賽系統模型,源**,注釋文件

決賽:前十名晉級決賽,之後我們因為時間安排的關係去不了北京現場路演,放棄了這次決賽的答辯機會

在的不同位置進行密集取樣,然後利用cnn提取特徵直接進行分類和回歸。 但相比 yolo,ssd 採用卷積層直接進行檢測,而不是像 yolo 那樣在全連線 層之後再做檢測。另外 ssd 提取不同尺度的特徵圖來做檢測,以及應用了不同 尺度和長寬比的 anchors 作為先驗框,極大改善了 yolo 難以檢測小目標、定 位不准的缺點

ssd的三條核心設計理念:

我方的改進:1、使用資料增強 ,能提公升map7個百分點,主要原因的資料增強增加了樣本的個數。

​ ssd演算法使用了多種資料增強的方法,包括水平翻轉、裁剪、放大和縮小等。**指出,資料增強 可以明顯的提高演算法的效能。主要的目的是為了使得該演算法對輸入的不同大小和不同形狀的目標具 有更好的魯棒性

2、ssd 採用了 hard negative mining,就是對負樣本進行抽樣,抽樣時按照置信度誤差(**背景						的置信度越小,誤差越大)進行降序排列,選取誤差的較大的top-k作為訓練的負樣本,以保證正負						樣本比例接近1:3
​ box可以在一定程度上提公升演算法的效能,主要的原因可能是這兩種box可以在一定程度上增加較大和較 小的bounding boxes,可以更更加準確的檢測到較大和較小的目標,而且voc資料集上面的目標一般 都比較大。當然,更多的比例可以進一步提公升演算法的效能。

​ 3、選取合適的損失函式,針對本評測集,對損失函式進行稍微的調整

​ 4、採用 hole 演算法,利用已經訓練好的模型進行微調,又可以改變網路結構得到更加稠密的得分圖

​ 5、nms(非極大值抑制),即使在iou處理掉大部分的bounding boxes之後,仍然會存在大量的錯 誤的、重疊的、不準確的bounding boxes(如圖14),這就需要nms進行迭代優化。

​ nms演算法,過濾掉那些重疊度較大的**框。最後剩餘的**框就是檢測結果了。

​ 6、atrous演算法可以輕微提公升演算法效能,但是其主要的作用是用來提速,**中表明它可以提速 20%。主要的原因可能是雖然該演算法可以獲得更大的feature map和感受野

侷限:使用的低層網路的特徵資訊**小物體時,由於缺乏高層語義特徵,導致ssd對於小物體的檢測效果較差。

ssd 加速的原因

原因 1:首先 ssd 是乙個 one-stage 網路,只需要乙個階段就可以輸出結果;而 faster r-cnn是乙個two-stage網路。儘管faster r-cnn的bounding boxes少很多,但是其需要大量的前向和反向推理(訓練階段),而且需要交替的訓練兩個網路;

原因2:faster r-cnn中不僅需要訓練rpn,而且需要訓練fast r-cnn,而ssd其實相當於乙個優化了的rpn網路,不需要進行後面的檢測,僅僅前向推理就會花費很多時間;

原因3:yolo網路雖然比ssd網路看起來簡單,但是yolo網路中含有大量的全連線層。和fc層相比,conv層具有更少的引數;同時yolo獲得候選bounding boxes的操作比較費時;ssd演算法中,調整了vgg網路的架構,將其中的 fc 層替換為 conv 層,這一點會大大的提公升速度。

原因4:使用了atrous演算法,該演算法能夠提速20%。

原因5:ssd設定了輸入的大小,它會將不同大小的裁剪為300x300,或者

512x512,和faster-rcnn相比,在輸入上就會少很多的計算。

最近在利用ssd檢測物體時,效果不錯但是還是和前幾名有差距,距離輕量化有一些差距. 由於實際專案要求,需要對模型進行輕量化,所以考慮利用輕量網路替換原本的骨架vgg16,查詢一些資料後最終採用了google開源的mobilenetv2。

mobilenetv1是由google在2023年發布的乙個輕量級深度神經網路,其主要特點是採用深度可分離卷積替換了普通卷積,2023年提出的mobilenetv2在v1的基礎上引入了線性瓶頸 (linear bottleneck)和倒殘差 (inverted residual)來提高網路的表徵能力。

能降低記憶體占用的量化演算法

降低執行時記憶體占用比降低引數更重要,記憶體=少部分的引數+大部分的啟用值

—>如何用量化降低記憶體的占用呢? 將盡可能多的layer的啟用值都進行量化

模型量化增加了操作複雜度,在量化時需要做一些特殊的處理,否則精度損失更嚴重

模型量化會損失一定的精度,雖然在微調後可以減少精度損失,但推理精度確實下降

剪枝:深度學習模型可以看作是乙個複雜樹狀結構,如果能減去一些對結果沒什麼影響的旁枝,就可以實現模型的減小.

每一層把數值小的神經元去掉,但是究竟剪枝粒度維持到多大是很有講究的,比如可以把每層最小的5個減掉,也可能只剪3個,或者每層有每層不同的策略,也可以用l1/l2正則的方式去做。

剪多了,模型精度影響會比較大,剪少了沒有效果。所以這裡面需要大量的嘗試和迭代,在實踐中,剪枝是乙個迭代的過程,這通常叫做「迭代式剪枝」(iterative pruning):修剪-訓練-重複(prune / train / repeat)。

有點像提取公因數,假設模型的每一層都有公用的公因數,是否可以提取出來在結果處做一次運算,而不是每一層都算一次

這些重複結構意味著卷積核在計算權重的時候會有部分權重的相似性,這些相似性是全域性可共享的。那麼如果可以通過聚類的方式挖掘出這些可以共享的權重係數,並且以類別的方式讓它們共享一些權重,就可以實現模型的壓縮。

我們這裡分析了一些樣本資料,這樣的樣本不多,多有不做修改

yolo v4的**給了這幾點參考:

2019 年百度之星 程式設計大賽 初賽一

傳送門 1 hdu 2 bestcoder 一步可以走乙個或者兩個,求依次進入n個區間 li,ri 的最少步數 就當前位置cur來說,1 如果下乙個任務的區間包括當前位置,那就可以不動 2 如果下乙個任務區間在當前位置左邊,那就向下乙個的左邊界移動 如果正好可以全走兩個格仔的話,就在此位置 如果不可...

百度之星程式設計大賽題目

輸入格式 輸入的第一行只有乙個整數n,表示購置水果的組數。接下來的n行表示水果的到達時間 取走時間 時間用1200到1900之間的正整數表示,保證取走時間大於到達時間 剩下的字串以空格分割每一種水果。如 1400 1600 雪梨 水蜜桃 表示下午兩點到四點 包含兩點和四點這兩個時間點 雪梨和水蜜桃會...

百度之星 2019 決賽遊記

咕咕咕。先是簡單的開幕式,郭老又來了。今年的比賽題目是給你乙個神經網路的計算圖,所有計算節點都跑在乙個裝置上,1併發 所有通訊節點都跑在另乙個裝置上,3併發,要求給乙個拓撲序,使得執行完的時間盡量短。今年提供自定義測試,終於不會像去年那樣第一輪爆零直接跑路了。先隨便求了個類似最長路的東西然後直接按照...