前言
前段時間,YOLOv5推出7.0版本,主要更新點是在目標(biāo)檢測的同時引入了實例分割。
目前,YOLOv5團隊已經(jīng)轉(zhuǎn)向了YOLOv8的更新,因此,7.0版本大概率是YOLOv5的最終穩(wěn)定版。
更新信息
官方公告中給出了YOLOv5-7.0的更新要點:
- 推出了基于coco-seg的實例分割預(yù)訓(xùn)練模型
- 支持Paddle Paddle模型導(dǎo)出
- 自動緩存機制:使用
python train.py --cache ram
可以自動掃描可用內(nèi)存,并且為數(shù)據(jù)集的加載進行分配 - 加入Comet日志記錄和可視化集成
實例分割實踐
下載代碼
git clone https://github.com/ultralytics/yolov5.git -b v7.0
下載預(yù)訓(xùn)練模型
官方倉庫有不同模型大小的預(yù)訓(xùn)練模型,這里以yolov5m-seg為例。
下載鏈接:https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5m-seg.pt
下載數(shù)據(jù)集
這里以教程文檔中的coco128-seg.zip數(shù)據(jù)集為例。
下載鏈接:https://ultralytics.com/assets/coco128-seg.zip
數(shù)據(jù)集的文件結(jié)構(gòu)如下:
- coco128-seg
- images
- train2017
- labels
- train2017
- images
數(shù)據(jù)集標(biāo)簽可視化
coco-seg數(shù)據(jù)集和coco數(shù)據(jù)集圖片一樣,唯一區(qū)別是標(biāo)簽不同。
coco-seg的標(biāo)簽示例如下:
45 0.557859 0.143813 0.487078 0.0314583 0.859547 0.00897917 0.985953 0.130333 0.984266 0.184271 0.930344 0.386521 0.80225 0.480896 0.763484 0.485396 0.684266 0.39775 0.670781 0.3955 0.679219 0.310104 0.642141 0.253937 0.561234 0.155063 0.559547 0.137083
50 0.39 0.727063 0.418234 0.649417 0.455297 0.614125 0.476469 0.614125 0.51 0.590583 0.54 0.569417 0.575297 0.562354 0.601766 0.56 0.607062 0.536479 0.614125 0.522354 0.637063 0.501167 0.665297 0.48 0.69 0.477646 0.698828 0.494125 0.698828 0.534125 0.712938 0.529417 0.742938 0.548229 0.760594 0.564708 0.774703 0.550583 0.778234 0.536479 0.781766 0.531771 0.792359 0.541167 0.802937 0.555292 0.802937 0.569417 0.802937 0.576479 0.822359 0.576479 0.822359 0.597646 0.811766 0.607062 0.811766 0.618833 0.818828 0.637646 0.820594 0.656479 0.827641 0.687063 0.827641 0.703521 0.829406 0.727063 0.838234 0.708229 0.852359 0.729417 0.868234 0.750583 0.871766 0.792938 0.877063 0.821167 0.884125 0.861167 0.817062 0.92 0.734125 0.976479 0.711172 0.988229 0.48 0.988229 0.494125 0.967063 0.517062 0.912937 0.508234 0.832937 0.485297 0.788229 0.471172 0.774125 0.395297 0.729417
其中第一個為類別標(biāo)簽,后面的兩個為一組,即(x1,y1),(x2,y2)…意為一個個點,這些點連線即為所框選的實例。
下面的代碼[2]實現(xiàn)了將標(biāo)簽進行可視化:
import cv2
import numpy as np
if __name__ == '__main__':
pic_path = r"coco128-seg\images\train2017\000000000009.jpg"
txt_path = r"coco128-seg\labels\train2017\000000000009.txt"
img = cv2.imread(pic_path)
height, width, _ = img.shape
file_handle = open(txt_path)
cnt_info = file_handle.readlines()
new_cnt_info = [line_str.replace("\n", "").split(" ") for line_str in cnt_info]
# 45 bowl 碗 49 橘子 50 西蘭花
color_map = {"49": (0, 255, 255), "45": (255, 0, 255), "50": (255, 255, 0)}
for new_info in new_cnt_info:
s = []
for i in range(1, len(new_info), 2):
b = [float(tmp) for tmp in new_info[i:i + 2]]
s.append([int(b[0] * width), int(b[1] * height)])
cv2.polylines(img, [np.array(s, np.int32)], True, color_map.get(new_info[0]))
cv2.imshow('img', img)
cv2.waitKey()
模型檢測
下載好預(yù)訓(xùn)練模型,可以直接用其進行檢測:
python segment/predict.py --weights yolov5m-seg.pt --data data/images/bus.jpg
檢測結(jié)果存放在runs/predict-seg
文件夾中。
模型訓(xùn)練
下面以coco128-seg數(shù)據(jù)集訓(xùn)練為例,首先修改data/coco128-seg.yaml
配置文件,修改相應(yīng)路徑:
path: coco128-seg
train: images/train2017
val: images/train2017
之后終端運行:
python segment/train.py --weights yolov5m-seg.pt --data data/coco128-seg.yaml --epochs 5 --img 640 --project train-seg --batch-size 4
注:
- –project設(shè)定了訓(xùn)練結(jié)果的保存路徑,按照默認(rèn)路徑
runs\train-seg
會引發(fā)wandb的報錯:wandb.errors.UsageError: Invalid project name "runs\train-seg": cannot contain characters "/,\,#,?,%,:", found "\"
- 默認(rèn)batch-size為16,普通單機有爆顯存風(fēng)險,因此調(diào)小。
最終模型依然會保存最佳和最后兩個模型,以及一些驗證結(jié)果圖片,和之前版本相似。文章來源:http://www.zghlxwxcb.cn/news/detail-676121.html
參考
[1] YOLOv5官方倉庫:https://github.com/ultralytics/yolov5/tree/v7.0
[2] 【深度學(xué)習(xí)】yolov5 tag7.0 實例分割 從0到1的體會,從模型訓(xùn)練,到量化完成 https://betheme.net/xiaochengxu/38021.html文章來源地址http://www.zghlxwxcb.cn/news/detail-676121.html
到了這里,關(guān)于【目標(biāo)檢測】YOLOv5-7.0:加入實例分割的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!