[YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)
1.識別效果展示
2.視頻演示
[YOLOv7]基于YOLOv7的食物卡路里檢測系統(源碼&部署教程&數據集)_嗶哩嗶哩_bilibili
3.YOLOv7算法簡介
YOLOv7 在 5 FPS 到 160 FPS 范圍內,速度和精度都超過了所有已知的目標檢測器
并在 GPU V100 上,30 FPS 的情況下達到實時目標檢測器的最高精度 56.8% AP。YOLOv7 是在 MS COCO 數據集上從頭開始訓練的,不使用任何其他數據集或預訓練權重。
相對于其他類型的工具,YOLOv7-E6 目標檢測器(56 FPS V100,55.9% AP)比基于 transformer 的檢測器 SWINL Cascade-Mask R-CNN(9.2 FPS A100,53.9% AP)速度上高出 509%,精度高出 2%,比基于卷積的檢測器 ConvNeXt-XL Cascade-Mask R-CNN (8.6 FPS A100, 55.2% AP) 速度高出 551%,精度高出 0.7%。
此外, YOLOv7 的在速度和精度上的表現也優于 YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR 等多種目標檢測器。
4.YOLOv7 技術方法
近年來,實時目標檢測器仍在針對不同的邊緣設備進行開發。例如,MCUNet 和 NanoDet 的開發專注于生產低功耗單芯片并提高邊緣 CPU 的推理速度;YOLOX、YOLOR 等方法專注于提高各種 GPU 的推理速度;實時目標檢測器的發展集中在高效架構的設計上;在 CPU 上使用的實時目標檢測器的設計主要基于 MobileNet、ShuffleNet 或 GhostNet;為 GPU 開發的實時目標檢測器則大多使用 ResNet、DarkNet 或 DLA,并使用 CSPNet 策略來優化架構。
YOLOv7 的發展方向與當前主流的實時目標檢測器不同,研究團隊希望它能夠同時支持移動 GPU 和從邊緣到云端的 GPU 設備。除了架構優化之外,該研究提出的方法還專注于訓練過程的優化,將重點放在了一些優化模塊和優化方法上。這可能會增加訓練成本以提高目標檢測的準確性,但不會增加推理成本。研究者將提出的模塊和優化方法稱為可訓練的「bag-of-freebies」。
對于模型重參數化,該研究使用梯度傳播路徑的概念分析了適用于不同網絡層的模型重參數化策略,并提出了有計劃的重參數化模型。此外,研究者發現使用動態標簽分配技術時,具有多個輸出層的模型在訓練時會產生新的問題:「如何為不同分支的輸出分配動態目標?」針對這個問題,研究者提出了一種新的標簽分配方法,稱為從粗粒度到細粒度(coarse-to-fine)的引導式標簽分配。
該研究的主要貢獻包括:
(1) 設計了幾種可訓練的 bag-of-freebies 方法,使得實時目標檢測可以在不增加推理成本的情況下大大提高檢測精度;
(2) 對于目標檢測方法的演進,研究者發現了兩個新問題:一是重參數化的模塊如何替換原始模塊,二是動態標簽分配策略如何處理分配給不同輸出層的問題,并提出了解決這兩個問題的方法;
(3) 提出了實時目標檢測器的「擴充(extend)」和「復合擴展(compound scale)」方法,以有效地利用參數和計算;
(4) 該研究提出的方法可以有效減少 SOTA 實時目標檢測器約 40% 的參數和 50% 的計算量,并具有更快的推理速度和更高的檢測精度。
在大多數關于設計高效架構的文獻中,人們主要考慮的因素包括參數的數量、計算量和計算密度。下圖 2(b)中 CSPVoVNet 的設計是 VoVNet 的變體。CSPVoVNet 的架構分析了梯度路徑,以使不同層的權重能夠學習更多不同的特征,使推理更快、更準確。圖 2 ? 中的 ELAN 則考慮了「如何設計一個高效網絡」的問題。
YOLOv7 研究團隊提出了基于 ELAN 的擴展 E-ELAN,其主要架構如圖所示。
新的 E-ELAN 完全沒有改變原有架構的梯度傳輸路徑,其中使用組卷積來增加添加特征的基數(cardinality),并以 shuffle 和 merge cardinality 的方式組合不同組的特征。這種操作方式可以增強不同特征圖學得的特征,改進參數的使用和計算效率。
無論梯度路徑長度和大規模 ELAN 中計算塊的堆疊數量如何,它都達到了穩定狀態。如果無限堆疊更多的計算塊,可能會破壞這種穩定狀態,參數利用率會降低。新提出的 E-ELAN 使用 expand、shuffle、merge cardinality 在不破壞原有梯度路徑的情況下讓網絡的學習能力不斷增強。
在架構方面,E-ELAN 只改變了計算塊的架構,而過渡層(transition layer)的架構完全沒有改變。YOLOv7 的策略是使用組卷積來擴展計算塊的通道和基數。研究者將對計算層的所有計算塊應用相同的組參數和通道乘數。然后,每個計算塊計算出的特征圖會根據設置的組參數 g 被打亂成 g 個組,再將它們連接在一起。此時,每組特征圖的通道數將與原始架構中的通道數相同。最后,該方法添加 g 組特征圖來執行 merge cardinality。除了保持原有的 ELAN 設計架構,E-ELAN 還可以引導不同組的計算塊學習更多樣化的特征。
因此,對基于串聯的模型,我們不能單獨分析不同的擴展因子,而必須一起考慮。該研究提出圖 (c),即在對基于級聯的模型進行擴展時,只需要對計算塊中的深度進行擴展,其余傳輸層進行相應的寬度擴展。這種復合擴展方法可以保持模型在初始設計時的特性和最佳結構。
此外,該研究使用梯度流傳播路徑來分析如何重參數化卷積,以與不同的網絡相結合。下圖展示了該研究設計的用于 PlainNet 和 ResNet 的「計劃重參數化卷積」。
5.數據集的準備
標注收集到的圖片制作YOLO格式數據集
自己創建一個myself.yaml文件用來配置路徑,路徑格式與之前的V5、V6不同,只需要配置txt路徑就可以
train-list.txt和val-list.txt文件里存放的都是圖片的絕對路徑(也可以放入相對路徑)
如何獲取圖像的絕對路徑,腳本寫在下面了(也可以獲取相對路徑)
6.訓練過程
運行train.py
train文件還是和V5一樣,為了方便,我將需要用到的文件放在了根目錄下
路徑修改完之后右擊運行即可
經過漫長的訓練過程,YOLOv7相比YOLOv5訓練更吃配置尤其是顯存,實測GPU 3080ti訓練長達40小時以上,建議電腦顯存8G以下的謹慎嘗試,可能訓練的過程低配置的電腦會出現藍屏等現象皆為顯卡過載,使用本文提供的訓練好的權重進行預測則不吃配置,CPU也能取得很好的預測結果且不會損傷電腦
附上本文實驗設備配置
7.測試驗證
下面放上對比圖:(上面V7,下面V5)
8.調查食物卡路里
參考:800種常用食物熱量表!科學吃飯 - 知乎 (zhihu.com)
9.項目展示
10.完整源碼&環境部署視頻教程&數據集&自定義UI界面:
11.參考文獻:
【1】YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
總結
以上是生活随笔為你收集整理的[YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机信息项目管理高级工程师,信息系统项
- 下一篇: CC1310如何使用内部LDO