下面为你详细介绍如何使用YOLOv8模型进行基于深度学习的吸烟行为检测,包含环境配置、数据准备、模型训练以及推理等步骤。
1. 环境配置
首先,你需要安装必要的库,主要是ultralytics
库,它包含了YOLOv8模型。你可以使用以下命令进行安装:
pip install ultralytics
2. 数据准备
要进行吸烟行为检测,你需要准备一个包含吸烟和非吸烟图像的数据集。数据集应按照YOLOv8所需的格式进行组织,具体如下:
dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
其中,images
文件夹存放图像文件,labels
文件夹存放对应的标注文件。标注文件是.txt
格式,每行代表一个目标,格式为class x_center y_center width height
,坐标值均为相对于图像宽高的归一化值。
同时,你需要创建一个data.yaml
文件,内容如下:
train: ../dataset/images/train
val: ../dataset/images/val
test: ../dataset/images/test
nc: 1 # 类别数量,这里只有吸烟一个类别
names: ['smoking']
3. 模型训练
以下是使用Python代码进行模型训练的示例:
from ultralytics import YOLO
# 加载预训练的YOLOv8模型
model = YOLO('yolov8n.pt')
# 训练模型
results = model.train(
data='data.yaml', # 数据集配置文件路径
epochs=10, # 训练轮数
imgsz=640 # 输入图像的大小
)
4. 模型推理
训练完成后,你可以使用训练好的模型进行吸烟行为检测。以下是推理代码示例:
from ultralytics import YOLO
import cv2
# 加载训练好的模型
model = YOLO('runs/detect/train/weights/best.pt')
# 读取图像
image = cv2.imread('path/to/your/image.jpg')
# 进行推理
results = model(image)
# 获取检测结果
for result in results:
boxes = result.boxes
for box in boxes:
class_id = int(box.cls[0])
confidence = float(box.conf[0])
bbox = box.xyxy[0].cpu().numpy().astype(int)
if class_id == 0 and confidence > 0.5: # 类别ID为0表示吸烟,置信度阈值设为0.5
x1, y1, x2, y2 = bbox
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, f'Smoking: {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
# 显示结果图像
cv2.imshow('Smoking Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解释
模型训练:
- 首先使用
YOLO('yolov8n.pt')
加载预训练的YOLOv8模型。 - 然后调用
model.train()
方法进行训练,指定数据集配置文件、训练轮数和输入图像大小。
- 首先使用
模型推理:
- 使用
YOLO('runs/detect/train/weights/best.pt')
加载训练好的模型。 - 读取图像并调用
model(image)
进行推理。 - 遍历检测结果,根据类别ID和置信度绘制边界框和标签。
- 使用
通过以上步骤,你就可以使用YOLOv8模型进行吸烟行为检测了。