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