一、準備數據
先準備一個MP4的視頻
1.測試一幀
使用opencv來提取每一個視頻的幀
先使用以下代碼查看一幀的內容,是否符合預期
import cv2
import matplotlib.pyplot as plt# 打開視頻文件
video = cv2.VideoCapture("111.mp4")
# 讀取一幀
ret, frame = video.read()plt.imshow(frame)# 顏色通道轉換為RBG
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
plt.imshow(frame_rgb)
plt.axis('off')
plt.show()
?運行結果:
?2.提取每一幀
video = cv2.VideoCapture("111.mp4")
num = 0 # 計數器
save_step = 10 # 間隔幀
while True:ret, frame = video.read()if not ret:breaknum += 1if num % save_step == 0:cv2.imwrite("./images/" + str(num) + ".jpg", frame)
?運行結果:
3.標注工具?
?在之前創建的yolov5中安裝labelimg
pip install labelimg
在終端中使用命令打開窗口
labelimg
在labelimg窗口中,點擊"Open Dir",選擇剛才提取視頻幀的文件
選擇"YOLO"格式,點擊圖中的位置會切換
?點擊"View"選擇"Auto Save mode"
?點擊窗口中的"Save",選擇保存路徑
為每一幀圖片進行標注?
點擊"Create RectBox",為圖中人物進行框選,并命名,之后點擊"ok",之后的每一張類似這樣的操作
?標注完成后,點擊保存圖片信息的文件夾
?二、數據調整
- images:存放圖片
- train:訓練集圖片
- val:驗證集圖片
- label:存放標簽
- train:訓練集標簽文件(要與訓練集圖片名稱一致)
- val:驗證機標簽文件(要與訓練集圖片名稱一致)
創建一個dataset將數據全部存入其中
?
注意:label中的clesses.txt要在此文件的根目錄下
最后的目錄結構
?
?
三、模型訓練參數設置?
將images中的train和label,復制到yolov5文件夾下的data/images中
?在data根目錄下創建一個yaml文件
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ./datasets # dataset root dir
train: images/train # 訓練集的圖片
val: images/val # 驗證集的圖片
test: # test images (optional)# Classes.txt中的內容填入其中
names:0: baiyi1: xiaoqiao
將yolov5根目錄下的train.py中修改
四、啟動模型訓練
在終端中使用命令啟動
python train.py
正在運行的輸出:
?運行成功后:
點擊runs/train/exp 可以看到結果
使用detect.py來檢測目標視頻?
python detect.py --weights runs/train/exp/weights/best.pt --source dataset/111.mp4 --view-img
?在runs/train/exp中即可找到目標文件