前面的文章,我們分享了YOLO系列的文章,包括前段時間剛剛釋出的YOLOv7檢測算法,雖然YOLOv7對象檢測算法是YOLO最新的模型,且可以支援對象分割,人體姿态檢測等,但是最新的YOLO系列檢測模型也同步進行了更新,那就是剛剛開源的YOLOv8對象檢測算法。隻能說AI人工智能領域越來越卷了。
人工智能領域也卷了嗎——YOLO系列又被重新整理了,YOLOv7橫空出世
模型對比
——1——
YOLO系列對象檢測算法
YOLO(You Only Look Once)是由Joseph Redmon和Ali開發的一種對象檢測和圖像分割模型。YOLO的第一個版本于2015年釋出,由于其高速度和準确性,瞬間得到了廣大AI愛好者的喜愛。
YOLO
YOLOv2 于 2016 年釋出,通過合并批量歸一化、錨框和次元群集等技術,大大提高了其對象檢測算法的精度與速度。
YOLOv3
YOLOv3 于 2018 年釋出,通過使用更高效的骨幹網絡,添加特征金字塔,并利用焦點損失等技術,進一步提高了速度與精确度。
YOLOv4
2020 年,YOLOv4 釋出,引入了許多創新,例如使用 Mosaic 資料增強,一個新的無錨檢測頭,以及新的損失函數等功能。
YOLOv5
2021 年,Ultralytics 釋出了 YOLOv5,進一步改進了該模型的性能并添加了新功能,例如支援全景分割和對象跟蹤。
YOLOv6
2022年,美團釋出了YOLOv6,YOLOv6對Backbone 和 Neck 都進行了重新設計,Head層沿用了YOLO_x中的Decoupled Head并稍作修改。對YOLOv5而言,YOLOv6對網絡模型結構進行了大量的更改。除了網絡結構上的改進,作者還對訓練政策進行了改進,應用了Anchor-free 無錨範式、SimOTA标簽配置設定政策、SIOU邊界框回歸損失。
YOLOV7
2022年,WongKinYiu團隊釋出YOLOv7對象檢測算法,E-ELAN 是 YOLOv7 主幹中的計算塊。E-ELAN使用expand、shuffle、merge cardinality來實作在不破壞原有梯度路徑的情況下不斷增強網絡學習能力的能力。
——2——
YOLOv8對象檢測算法
2023年,Ultralytics再次釋出YOLO更新模型,YOLOv8模型。Ultralytics YOLOv8是YOLO對象檢測和圖像分割模型的最新版本。YOLOv8 是一種尖端的、最先進的 (SOTA) 模型。
YOLOv8的一個關鍵特性是它的可擴充性。它被設計為一個架構,支援所有以前版本的 YOLO,可以輕松地在不同版本之間切換并比較它們的性能。
除了可擴充性之外,YOLOv8 還包括許多其他創新,使其成廣泛應用在對象檢測和圖像分割任務上。其中包括新的骨幹網絡,新的無錨網絡檢測頭和新的損失函數功能。YOLOv8 也非常高效,可以在各種硬體平台(從 CPU 到 GPU)上運作。
YOLOv8 模型的每個類别中有五個模型,用于檢測、分割和分類。YOLOv8 Nano是最快和最小的,而YOLOv8 Extra Large(YOLOv8x)是最準确但最慢的。
YOLOv8n | YOLOv8s | YOLOv8m | YOLOv8l | YOLOv8x |
YOLOv8 使用了以下預訓練模型:
- 在 COCO 檢測資料集上訓練的對象檢測,圖像分辨率為 640。
- 在 COCO 分割資料集上訓練的執行個體分割,圖像分辨率為 640。
- 在 ImageNet 資料集上預訓練的圖像分類模型,圖像分辨率為 224。
YOLOv8 對象檢測與對象分割
——3——
YOLOv8對象檢測算法的代碼實作
YOLOv8對象檢測算法的代碼實作過程也很簡單,官方提供了API接口以及python第三方包安裝的方式進行代碼的實作過程。
首先需要安裝Python>=3.7.0 與PyTorch>=1.7,然後跟安裝python第三方包類似的操作,來安裝ultralytics庫,這樣,我們就可以使用YOLOv8對象檢測算法了。
pip install ultralytics
yolo task=detect mode=predict model=yolov8n.pt source="images" name=yolov8x_det
YOLOv8對象檢測
第一行代碼是安裝ultralytics,第二行代碼便可以使用YOLO指令進行對象檢測任務,好吧,我承認現在AI人工智能行業越來越卷了,2行代碼就搞定了。
對象檢測
task=detect #執行對象檢測任務
mode=predict #執行預測或者訓練
model=yolov8n.pt #使用哪個模型進行預測或者訓練
source="images" #檢測的檔案名,或者一個檔案夾
name=yolov8x_det #儲存的檔案名,或者一個檔案夾
檢測完成後,會自動儲存結果到指定的檔案夾中,我們可以使用一個腳本來進行圖檔的顯示。
def display(dir):
plt.figure(figsize=(20, 12))
image_names = glob.glob(os.path.join(result_dir, '*.jpg'))
for i, image_name in enumerate(image_names):
image = plt.imread(image_name)
plt.subplot(2, 2, i+1)
plt.imshow(image)
plt.axis('off')
plt.tight_layout()
plt.show()
display(runs/detect/yolov8x_det/)
當然,YOLOv8對象檢測算法跟YOLOv7類似,同樣可以進行對象的分割任務與對象分類任務
對象分割
yolo task=segment mode=predict model=yolov8x-seg.pt source='images' name=yolov8x_seg
yolo task=classify mode=predict model=yolov8x-cls.pt source='images' name=yolov8x_cls
display('runs/segment/yolov8x_seg/')
display('runs/classify/yolov8x_cls/')
from ultralytics import YOLO
# Load a model
#model = YOLO("yolov8n.yaml") # build a new model from scratch
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
# Use the model
results = model.train(data="coco128.yaml", epochs=3) # train the model
results = model.val() # evaluate model performance on the validation set
results = model.predict("https://ultralytics.com/images/bus.jpg") # predict on an image
success = model.export(format="onnx") # export the model to ONNX format
對象分類
當然,官方提供了python代碼來實作YOLOv8對象檢測算法模型
第一行代碼,我們導入YOLO模型
第5行代碼,我們使用yolov8n預訓練模型
第8行代碼,我們首先在COCO128資料集上面訓練YOLOv8對象檢測算法模型
第9行代碼,我們在驗證集上進行模型的評估
第10行代碼,我們進行模型的預測
最後,我們可以導出onnx格式的模型
更多參考:
https://github.com/ultralytics/ultralytics 開源連結
高大上的YOLOV3對象檢測算法,使用python也可輕松實作
使用python輕松實作高大上的YOLOV4對象檢測算法
基于python的YOLOV5對象檢測模型實作
人工智能領域也卷了嗎——YOLO系列又被重新整理了,YOLOv7橫空出世
YOLOv7與MediaPipe在人體姿态估計上的對比