Benchmarks
在速度和準確性方面,YOLOv7 現在已經超越了所有已知的object detector,例如: YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR、Deformable DETR、DINO-5scale-R50、ViT-Adapter-B。它的速度從 5 FPS 到 160 FPS 不等,並具有最高準確度 56.8% AP。也可在 V100 GPU 上以 30FPS + 運行。
YOLOv7-E6 物件檢測器(56 FPS V100, 55.9% AP)在速度和準確度上均優於基於Transformer的檢測器-> SWINL Cascade-Mask R-CNN 509% 和based on CNN的檢測器 ->ConvNeXt-XL Cascade-Mask R- CNN (8.6 FPS A100, 55.2% AP) 速度提高 551%,準確率提高 0.7%。
先進的real-time物件偵測器之間的比較。
YOLOv7比之前更快更準確多少? 以下:
-YOLOv5 120% FPS
-YOLOX 180% FPS
-雙 Swin-T 1200% FPS
-ConvNext 550% FPS
-500% FPS 的 SWIN-L CM-RCNN
-PPYOLOE-X 150% FPS
性能與改進
- 幾種可訓練的bag-of-freebies方法在不增加推理成本(inference cost)的情況下大大提高了檢測精度。
-提出了實時物件偵測器的“拓展”和“複合縮放”方法(“extend” &“compound scaling),可以有效地利用參數和計算。
-減少了最先進的實時目標檢測器約 40% 的參數和 50% 的計算量,使推理速度更快,檢測精度更高。
建構框架
-CSPVoVNet 是 VoVNet 的變體。它分析梯度路徑,使不同層的權重能夠學習更多不同的特徵。該方法使推理更快、更準確。
-E-ELAN 是 ELAN 的一種變體,它使用組卷積來增加添加特徵的基數,並以 shuffle 和 merge cardinality 的方式組合不同組的特徵。這增強了不同特徵圖學習到的特徵,改進了參數和計算的使用。
- 模型縮放調整模型的一些屬性,生成不同尺度的模型,以滿足不同推理速度的需求。
- 提出的複合縮放(concatenation-based的模型)方法可以保持模型在初始設計時具有的屬性並保持最佳結構。
Trainable bag-of-freebies
- Bag of Freebies 為一整包技術去目的是去增加物件偵測器權方面的準確度。
- 訓練細節:(1)將批量歸一化層(BN layer)直接連接到卷積層。 這將批量歸一化的均值和方差整合到推理階段的卷積層的偏差和權重中。 (2) YOLOR中的 Implicit knowledge與卷積特徵圖相結合的加法和乘法方式:YOLOR中的隱式知識( Implicit knowledge)可以在推理階段通過預計算簡化為向量。 該向量可以與前一個或後一個卷積層的偏差和權重相結合。 (3) EMA 模型:EMA 是一種在 mean teacher 中使用的技術,在我們的系統中,我們使用 EMA 模型純粹作為最終的推理模型。
- 他們觀察到的是,RepConv 中identity connection的性能破壞了 ResNet 中的殘差和 DenseNet 中的連接,這為不同的特徵圖提供了更多的梯度多樣性。 所以他們使用沒有identity connection的 RepConv (RepConvN) 來設計計劃re-parameterized卷積的架構。
使用 Huggingface 空間進行推理
在TensorRT中進行YOLOv7推理
查看以下 thread.
安裝
> git clone https://github.com/WongKinYiu/yolov7.git
> cd yolov7
> conda create -n yolov7 python=3.7 -y && conda activate yolov7
> pip install -r requirements.txt
推理(Inference)
此階段需要先下載Pre-trained moedel 從這裡下載.
python detect.py — weights yolov7.pt — conf 0.25 — img-size 640 — source inference/images/ — view-img — device cpu
output的初始情況會儲存在以下路徑 : runs/detect/exp
以下是官方給的參數項目解釋,請務必了解。
— weights : Model path for inference
— source : Image file/Image path
— yaml : Yaml file for data
— img-size : Image size (h,w) for inference size
— conf-thres : confidence threshold for inference
— iou-thres : NMS iou thresold for inference
— max-det : maximum inference per image
— device : device to run model like 0,1,2,3 or cpu
— save-txt : save results to *.txt
— save-img : save visualized inference results
— classes : filter by classes
— project : save inference results to project/name
結果
在視頻上做推理
python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/bird.mp4 --view-img --device cpu- Output will output的初始情況會儲存在以下路徑runs/detect/exp