百面算法工程師 | YOLOv6面試考點原理全解析

本文給大家帶來的百面算法工程師是深度學習目標檢測YOLOv6面試總結,文章內總結了常見的提問問題,旨在為廣大學子模擬出更貼合實際的面試問答場景。在這篇文章中,我們還將介紹一些常見的深度學習目標檢測面試問題,并提供參考的回答及其理論基礎,以幫助求職者更好地準備面試。通過對這些問題的理解和回答,求職者可以展現出自己的深度學習目標檢測領域的專業知識解決問題的能力以及對實際應用場景的理解。同時,這也是為了幫助求職者更好地應對深度學習目標檢測崗位的面試挑戰,提升面試的成功率和競爭力

專欄地址:百面算法工程師——總結最新各種計算機視覺的相關算法面試問題


YOLOv6論文地址 :點擊即可跳轉

YOLOv6 官方開源庫地址: 官方代碼倉庫點擊即可跳轉


目錄

1. 數據增強模塊

2. 網絡結構

2.1 Backbone

?2.2 Neck

2.3 Head

3. 正負樣本匹配策略

3.1 Anchor 設置

3.2 Bbox 編解碼過程

3.3 匹配策略

4. Loss 設計

4.1 分類損失函數 VarifocalLoss

4.2 回歸損失函數 GIoU Loss / SIoU Los


?文章中部分內容已在YOLOv5中講過,此處不再贅述,感興趣的同學可以閱讀

百面算法工程師 | YOLOv5面試考點原理全解析_yolov5面試詳解-CSDN博客

?

YOLOv6 提出了一系列適用于各種工業場景的模型,包括 N/T/S/M/L,考慮到模型的大小,其架構有所不同,以獲得更好的精度-速度權衡。本算法專注于檢測的精度和推理效率,并在網絡結構、訓練策略等算法層面進行了多項改進和優化。

簡單來說 YOLOv6 開源庫的主要特點為:

  1. 統一設計了更高效的 Backbone 和 Neck:受到硬件感知神經網絡設計思想的啟發,基于 RepVGG style 設計了可重參數化、更高效的骨干網絡 EfficientRep Backbone 和 Rep-PAN Neck。
  2. 相比于 YOLOX 的 Decoupled Head,進一步優化設計了簡潔有效的 Efficient Decoupled Head,在維持精度的同時,降低了一般解耦頭帶來的額外延時開銷。
  3. 在訓練策略上,采用 Anchor-free 的策略,同時輔以 SimOTA 標簽分配策略以及 SIoU 邊界框回歸損失來進一步提高檢測精度。

YOLOv6 和 YOLOv5 一樣也可以分成數據增強、模型結構、loss 計算等組件,如下所示:

1. 數據增強模塊

YOLOv6 目標檢測算法中使用的數據增強與 YOLOv5 基本一致,唯獨不一樣的是沒有使用 Albu 的數據增強方式:

  • Mosaic 馬賽克
  • RandomAffine 隨機仿射變換
  • MixUp
  • 圖像模糊等采用 Albu 庫實現的變換
  • HSV 顏色空間增強
  • 隨機水平翻轉

關于每一個增強的詳細解釋,詳情請看YOLOv5 數據增強模塊

百面算法工程師 | YOLOv5面試考點原理全解析_yolov5面試詳解-CSDN博客

另外,YOLOv6 參考了 YOLOX 的數據增強方式,分為 2 種增強方法組,一開始和 YOLOv5 一致,但是在最后 15 個 epoch 的時候將 Mosaic 使用 YOLOv5KeepRatioResize + LetterResize 替代了,個人感覺是為了擬合真實情況。

2. 網絡結構

YOLOv6 N/T/S 模型的網絡結構由 EfficientRep + Rep-PAN + Efficient decoupled Head 構成,M/L 模型的網絡結構則由 CSPBep + CSPRepPAFPN + Efficient decoupled Head 構成。其中,Backbone 和 Neck 部分的結構與 YOLOv5 較為相似,但不同的是其采用了重參數化結構 RepVGG Block 替換掉了原本的 ConvModule,在此基礎上,將 CSPLayer 改進為了多個 RepVGG 堆疊的 RepStageBlock(N/T/S 模型)或 BepC3StageBlock(M/L 模型);Head 部分則參考了 FCOS 和 YOLOX 的檢測頭,將回歸與分類分支解耦成兩個分支進行預測。

2.1 Backbone

已有研究表明,多分支的網絡結構通常比單分支網絡性能更加優異,例如 YOLOv5 的 CSPDarknet,但是這種結構會導致并行度降低進而增加推理延時;相反,類似于 VGG 的單分支網絡則具有并行度高、內存占用小的優點,因此推理效率更高。而 RepVGG 則同時具備上述兩種結構的優點,在訓練時可解耦成多分支拓撲結構提升模型精度,實際部署時可等效融合為單個 3×3 卷積提升推理速度,RepVGG 示意圖如下。因此,YOLOv6 基于 RepVGG 重參數化結構設計了高效的骨干網絡 EfficientRep 和 CSPBep,其可以充分利用硬件算力,提升模型表征能力的同時降低推理延時。

?在 N/T/S 模型中,YOLOv6 使用了 EfficientRep 作為骨干網絡,其包含 1 個 Stem Layer 和 4 個 Stage Layer,具體細節如下:

  • Stem Layer 中采用 stride=2 的 RepVGGBlock 替換了 stride=2 的 6×6 ConvModule。
  • Stage Layer 結構與 YOLOv5 基本相似,將每個 Stage layer 的 1 個 ConvModule 和 1 個 CSPLayer 分別替換為 1 個 RepVGGBlock 和 1 個 RepStageBlock,如上圖 Details 部分所示。其中,第一個 RepVGGBlock 會做下采樣和 Channel 維度變換,而每個 RepStageBlock 則由 n 個 RepVGGBlock 組成。此外,仍然在第 4 個 Stage Layer 最后增加 SPPF 模塊后輸出。

在 M/L 模型中,由于模型容量進一步增大,直接使用多個 RepVGGBlock 堆疊的 RepStageBlock 結構計算量和參數量呈現指數增長。因此,為了權衡計算負擔和模型精度,在 M/L 模型中使用了 CSPBep 骨干網絡,其采用 BepC3StageBlock 替換了小模型中的 RepStageBlock 。如下圖所示,BepC3StageBlock 由 3 個 1×1 的 ConvModule 和多個子塊(每個子塊由兩個 RepVGGBlock 殘差連接)組成。

?2.2 Neck

Neck 部分結構仍然在 YOLOv5 基礎上進行了模塊的改動,同樣采用 RepStageBlock 或 BepC3StageBlock 對原本的 CSPLayer 進行了替換,需要注意的是,Neck 中 Down Sample 部分仍然使用了 stride=2 的 3×3 ConvModule,而不是像 Backbone 一樣替換為 RepVGGBlock。

2.3 Head

不同于傳統的 YOLO 系列檢測頭,YOLOv6 參考了 FCOS 和 YOLOX 中的做法,將分類和回歸分支解耦成兩個分支進行預測并且去掉了 obj 分支。同時,采用了 hybrid-channel 策略構建了更高效的解耦檢測頭,將中間 3×3 的 ConvModule 減少為 1 個,在維持精度的同時進一步減少了模型耗費,降低了推理延時。此外,需要說明的是,YOLOv6 在 Backobone 和 Neck 部分使用的激活函數是 ReLU,而在 Head 部分則使用的是 SiLU。

由于 YOLOv6 是解耦輸出,分類和 bbox 檢測通過不同卷積完成。以 COCO 80 類為例:

  • P5 模型在輸入為 640x640 分辨率情況下,其 Head 模塊輸出的 shape 分別為 (B,4,80,80), (B,80,80,80), (B,4,40,40), (B,80,40,40), (B,4,20,20), (B,80,20,20)。

3. 正負樣本匹配策略

YOLOv6 采用的標簽匹配策略與 TOOD相同, 前 4 個 epoch 采用 ATSSAssigner 作為標簽匹配策略的 warm-up , 后續使用 TaskAlignedAssigner 算法選擇正負樣本。

3.1 Anchor 設置

YOLOv6 采用與 YOLOX 一樣的 Anchor-free 無錨范式,省略了聚類和繁瑣的 Anchor 超參設定,泛化能力強,解碼邏輯簡單。在訓練的過程中會根據 feature size 去自動生成先驗框。

3.2 Bbox 編解碼過程

YOLOv6 的 BBox Coder 采用的是 DistancePointBBoxCoder。

網絡 bbox 預測的值為 (top, bottom, left, right),解碼器將 anchor point 通過四個距離解碼到坐標 (x1,y1,x2,y2)。

3.3 匹配策略
  • 0 <= epoch < 4,使用 BatchATSSAssigner
  • epoch >= 4,使用 BatchTaskAlignedAssigner

ATSSAssigner

ATSSAssigner 是 ATSS 中提出的標簽匹配策略。 ATSS 的匹配策略簡單總結為:通過中心點距離先驗對樣本進行初篩,然后自適應生成 IoU 閾值篩選正樣本。 YOLOv6 的實現種主要包括如下三個核心步驟:

  1. 因為 YOLOv6 是 Anchor-free,所以首先將 anchor point 轉化為大小為 5*strdie 的 anchor。
  2. 對于每一個 GT,在 FPN 的每一個特征層上, 計算與該層所有 anchor 中心點距離(位置先驗), 然后優先選取距離 topK 近的樣本,作為 初篩樣本
  3. 對于每一個 GT,計算其 初篩樣本 的 IoU 的均值 mean與標準差 std,將 mean + std 作為該 GT 的正樣本的 自適應 IoU 閾值 ,大于該 自適應閾值 且中心點在 GT 內部的 anchor 才作為正樣本,使得樣本能夠被 assign 到合適的 FPN 特征層上。

下圖中,(a) 所示中等大小物體被 assign 到 FPN 的中層,(b) 所示偏大的物體被 assign 到 FPN 中檢測大物體和偏大物體的兩個層。

TaskAlignedAssigner

TaskAlignedAssigner 是 TOOD中提出的一種動態樣本匹配策略。 由于 ATSSAssigner 是屬于靜態標簽匹配策略,其選取正樣本的策略主要根據 anchor 的位置進行挑選, 并不會隨著網絡的優化而選取到更好的樣本。在目標檢測中,分類和回歸的任務最終作用于同一個目標,所以 TaskAlignedAssigner 認為樣本的選取應該更加關注到對分類以及回歸都友好的樣本點。

TaskAlignedAssigner 的匹配策略簡單總結為: 根據分類與回歸的分數加權的分數選擇正樣本

  1. 對于每一個 GT,對所有的 預測框 基于 GT類別對應分類分數預測框與 GT 的 IoU 的加權得到一個關聯分類以及回歸的對齊分數 alignment_metrics。
  2. 對于每一個 GT,直接基于 alignment_metrics 對齊分數選取 topK 大的作為正樣本。

因為在網絡初期參數隨機, 分類分數 和 預測框與 GT 的 IoU 都不準確,所以需要經過前 4 個 epoch 的 ATSSAssigner 的 warm-up。經過預熱之后的 TaskAlignedAssigner 標簽匹配策略就不使用中心距離的先驗, 而是直接對每一個GT 選取 alignment_metrics 中 topK 大的樣本作為正樣本。

4. Loss 設計

參與 Loss 計算的共有兩個值:loss_cls 和 loss_bbox,其各自使用的 Loss 方法如下:

  • Classes loss:使用的是 mmdet.VarifocalLoss
  • BBox loss:l/m/s使用的是 GIoULoss, t/n 用的是 SIoULoss

權重比例是:loss_cls : loss_bbox = 1 : 2.5

4.1 分類損失函數 VarifocalLoss

Varifocal Loss (VFL) 是 VarifocalNet: An IoU-aware Dense Object Detector中的損失函數。

?

VFL 是在 GFL 的基礎上做的改進

在上述標簽匹配策略中提到過選擇樣本應該優先考慮分類回歸都友好的樣本點, 這是由于目標檢測包含的分類與回歸兩個子任務都是作用于同一個物體。 與 GFL 思想相同,都是將 預測框與 GT IoU 軟化作為分類的標簽,使得分類分數關聯回歸質量, 使其在后處理 NMS 階段有分類回歸一致性很強的分值排序策略,以達到選取優秀預測框的目的。

Varifocal Loss 原本的公式:

?其中 𝑞 是預測 bboxes 與 GT 的 IoU,使用軟標簽的形式作為分類的標簽。 𝑝∈[0,1] 表示分類分數。

  1. 對于負樣本,即當 𝑞=0 時,標準交叉熵部分為 ?log?(𝑝),負樣本權重使用 𝛼𝑝^𝛾 作為 focal weight 使樣本聚焦與困難樣本上,這與 Focal Loss 基本一致。
  2. 對于正樣本,即當 𝑞>0 時,首先計算標準二值交叉熵部分

    但是針對正樣本的權重設置,Varifocal Loss 中并沒有采用類似 𝛼𝑝𝛾的方式降權, 而是認為在網絡的學習過程中正樣本相對于負樣本的學習信號來說更為重要,所以使用了分類的標簽 𝑞, 即 IoU 作為 focal weight, 使得聚焦到具有高質量的樣本上。

但是 YOLOv6 中的 Varifocal Loss 公式采用 TOOD 中的 Task ALignment Learning (TAL), 將預測的 IoU 根據之前標簽匹配策略中的分類對齊度 alignment_metrics 進行了歸一化, 得到歸一化 𝑡^。 具體實現方式為:

對于每一個 Gt,找到所有樣本中與 Gt 最大的 IoU,具有最大 alignment_metrics 的樣本位置的 t=max(Iou)

t=AlignmentMetrics/maxAlignmentMetrics*maxIoU?

最終 YOLOv6 分類損失損失函數為:

?

4.2 回歸損失函數 GIoU Loss / SIoU Loss

在 YOLOv6 中,針對不同大小的模型采用了不同的回歸損失函數,其中 l/m/s使用的是 GIoULoss, t/n 用的是 SIoULoss。

其中GIoULoss 詳情請看Loss——?百面算法工程師 | 損失函數篇-CSDN博客

SIou Loss

SIoU 損失函數是 SIoU Loss: More Powerful Learning for Bounding Box Regression 中提出的度量預測框與 GT 的匹配度的指標,由于之前的GIoU, CIoU, DIoU 都沒有考慮預測框向 GT 框回歸的角度,然而角度也確實是回歸中一個重要的影響因素,因此提出了全新的SIoU。

SIoU 損失主要由四個度量方面組成:

  • IoU成本
  • 角度成本
  • 距離成本
  • 形狀成本

如下圖所示,角度成本 就是指圖中預測框 𝐵 向 𝐵𝐺𝑇 的回歸過程中, 盡可能去使得優化過程中的不確定性因素減少,比如現將圖中的角度 𝛼 或者 𝛽 變為 0 ,再去沿著 x 軸或者 y 軸去回歸邊界。

?Object Loss

在 YOLOv6 中,由于額外的置信度預測頭可能與 Aligned Head 有所沖突,經實驗驗證在不同大小的模型上也都有掉點, 所以最后選擇棄用 Objectness 分支。

1.5 優化策略和訓練過程

1.5.1 優化器分組

與 YOLOv5 一致,詳情請看 YOLOv5 優化器分組

1.5.2 weight decay 參數自適應

與 YOLOv5 一致,詳情請看 YOLOv5 weight decay 參數自適應

1.6 推理和后處理過程

YOLOv6 后處理過程和 YOLOv5 高度類似,實際上 YOLO 系列的后處理邏輯都是類似的。 詳情請看YOLOv5 推理和后處理過程

再次放上YOLOv5的面試總結,方便大家閱讀

百面算法工程師 | YOLOv5面試考點原理全解析_yolov5面試詳解-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12633.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

壓力給到 Google,OpenAI 發布 GPT-4o 來了

北京時間5月14日凌晨1點&#xff0c;OpenAI 開啟了今年的第一次直播&#xff0c;根據官方消息&#xff0c;這次旨在演示 ChatGPT 和 GPT-4 的升級內容。在早些時候 Sam Altman 在 X 上已經明確&#xff0c;「我們一直在努力開發一些我們認為人們會喜歡的新東西&#xff0c;對我…

jar包安裝成Windows服務

一、前言 很多年前寫過一篇《使用java service wrapper把windows flume做成服務》的文章&#xff0c;也是把jar包安裝成windows服務&#xff0c;今天介紹另外一種更簡便的方案。 二、正片 這次使用的工具是 winsw&#xff0c;一個Windows服務包裝器。下面看詳細介紹 首先從g…

momentjs

Moment.js 是一個用于處理日期和時間的 JavaScript 庫&#xff0c;它提供了許多方便的函數和方法來操作、格式化和解析日期時間。官網 常見用法 格式化日期時間&#xff1a;可以使用format方法將日期時間格式化為指定的字符串格式&#xff0c;例如YYYY-MM-DD HH:mm:ss。獲取日…

中國CEO直播簡史

圖片&#xff5c;電影《教父》截圖 ©自象限原創 作者丨羅輯 編輯丨程心 領導人愛對外發言這事&#xff0c;是中國的一個傳統文化。 從乾隆愛往名畫上蓋章上&#xff0c;就可見一斑。 3Q大戰時代&#xff0c;微博成了大佬“吵架”的戰場&#xff0c;飯否變成了部分愛…

解釋Java中的動態代理(Dynamic Proxy)及其用例

在Java中&#xff0c;動態代理&#xff08;Dynamic Proxy&#xff09;是一種在運行時動態創建代理類和對象的機制。它允許你在不改變原有類代碼的前提下&#xff0c;通過代理類對原有類的方法增加額外的處理邏輯&#xff08;如安全檢查、事務處理、日志記錄等&#xff09;&…

在為法人主體添加平衡段值時選不到相應的平衡段值

1、在為H1038公司添加平衡段值時&#xff0c;值集列表中無法選到需要的平衡段值&#xff0c;進一步對其后臺取值邏輯進行分析 SELECT *FROM (SELECT FLEXVALUES.FLEX_VALUE, FLEXVALUES.DESCRIPTIONFROM FND_FLEX_VALUES_VL FLEXVALUESWHERE FLEXVALUES.FLEX_VALUE_SET_ID :1…

Digimat在電池殼體SMC復合材料成型工藝中的應用

SMC工藝介紹及挑戰 SMC&#xff08;Sheet Molding Compound的縮寫&#xff0c;即片狀模塑料&#xff09;是一種復合材料制造工藝。該工藝可以有效地代替金屬&#xff0c;實現車輛輕量化目標。該工藝不僅能夠顯著降低車身重量&#xff0c;而且設計靈活&#xff0c;操作簡單、易…

社交媒體的探索者:探尋Facebook的發展歷程

在當今數字化時代&#xff0c;社交媒體已經成為了人們日常生活中不可或缺的一部分&#xff0c;而Facebook作為最具影響力的社交平臺之一&#xff0c;其發展歷程承載著無數的探索與創新。本文將深入探討Facebook的發展歷程&#xff0c;從其創立初期到如今的全球化影響&#xff0…

第 8 章 機器人底盤Arduino端電機驅動(自學二刷筆記)

重要參考&#xff1a; 課程鏈接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 講義鏈接:Introduction Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程 8.4.4 底盤實現_03Arduino端電機驅動 自定義電機驅動的實現與上一節的編碼器驅動流程類似&#xff1a; ROSA…

終于知道公司薪資為什么保密了!無意中拿到了部門薪資列表,自己身為小組長,只有28k,手下好幾個35k左右,心態崩了

大家好&#xff0c;我是瑤琴呀。 一直以來&#xff0c;員工不能私下談論薪資是職場公開的規定&#xff0c;入職的時候&#xff0c;HR 也會要求每個員工在保密薪資文件上簽字。 記得在大學上職業規劃課的時候&#xff0c;當時老師就給我們講過一個案例&#xff0c;公司里小李和…

數據結構與算法學習筆記九---循環隊列的表示和實現(C++)

目錄 前言 1.為什么要使用循環隊列 2.隊列的順序存儲方式的實現 1.定義 2.隊列初始化 3.銷毀 4.清空隊列 5.隊列是否為空 6.隊列長度 7.隊頭 8.入隊 9.出隊 10.遍歷隊列 11.完整代碼 3.參考資料 前言 這篇文章介紹循環隊列的表示和用法。 1.為什么要使用循環隊…

詳細分析Vue3中的defineExpose(附Demo)

目錄 前言1. 基本知識2. Demo3. 實戰 前言 其基本知識可參考官網&#xff1a;Vue3中的defineExpose 1. 基本知識 defineExpose 是 Vue 3 的 Composition API 中一個新的實用函數&#xff0c;用于在 <script setup> 語法下顯式暴露組件的公共屬性和方法 這在處理子組件…

OpenAI 重磅發布:ChatGPT Mac 桌面應用震撼上線!

OpenAI 重磅發布&#xff1a;ChatGPT Mac 桌面應用震撼上線&#xff01; 博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff0…

51單片機:點亮一個LED燈

1.新建工程 選擇AT89C52&#xff0c;在Atmel下顯示的是See Microchip 并不需要添加啟動文件到文件夾中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm匯編即更底層 程序編寫好后 nop(); 該函數在這個頭文件里面 #include <INTRINS.H> #include <R…

Java JDK下載安裝教程(2024年)

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

2024 Google I/O Android 相關內容匯總

2024 Google I/O Android 相關內容匯總 本次 Google I/O 的核心雖然是 AI &#xff0c;但是 Android 也是作為主要議題出現&#xff0c; Android 部分可以簡單分為產品和開發相關內容&#xff0c;接下來主要介紹這兩部分的相關更新。 重點開始開發相關&#xff0c;內容不少 產…

業務系統加固和安全設備加固

業務系統加固 業務系統包含哪些系統? 業務系統漏洞面臨的風險 1web風險 2漏洞掃描&#xff0c;端口掃描 3系統漏洞 4邏輯漏洞 5 信息泄露 6拒絕服務 7口令爆破 加固方式&#xff1a; 在風險加上修復 1web漏洞&#xff1a; 包括csrf,xss&#xff0c;口令破解等等 修…

koa2 + jsonwebtoken + koa-jwt:實現node token驗證

一、koa token生成、驗證 koa-jwt官網 https://github.com/koajs/jwt 推薦一個koa-jwt學習文檔&#xff1a; https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html jsonwebtoken方法添加 const { sign, verify } require(jsonwebtoken); const secretKey …

ICode國際青少年編程競賽- Python-4級訓練場-列表綜合練習

ICode國際青少年編程競賽- Python-4級訓練場-列表綜合練習 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…

JavaWeb--18 tlias-web-management 登錄認證

登錄認證 1 登錄功能功能開發 2 登錄校驗2.1 問題分析2.2 會話技術CookieSession令牌技術 2.3 JWT令牌介紹生成和校驗登錄下發令牌 2.4 過濾器Filter攔截路徑過濾器鏈 登錄校驗-Filter 2.5 攔截器InterceptorInterceptor詳解執行流程 登錄校驗- Interceptor 3 異常處理3.1 當前…