最近写论文过程中想使用目标检测l哎验证模型通用性,想到了yolo系列,现在yolo系列已经更新到了YOLOv12,这里将简单介绍一下从8到12,我放在帖子最后面。
新版本虽然很多,但是越新的版本需要的环境配置要求也高一些,比如需要安装或者更新各种依赖包,就我个人感觉,V8比较稳定,大部分环境也能兼容,我选择用的yolov8,此外,yolov8没有专门的论文可以引用,这里给出一个我的参考地址,该网站该团队开源的内容值得研究yolo系列的伙伴学习。
GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀
下面直接放使用yolov8检测图像的代码,需要的伙伴自取:
第一种,检测结果只有检测框,没有标签分类
import os
import cv2
from ultralytics import YOLO
# 加载预训练的 YOLOv8 模型
model = YOLO('yolov8n.pt') # 使用 nano 版本,适合轻量级应用
# 定义输入和输出文件夹路径
input_folder = "./aaaa" # 替换为你的输入文件夹路径
output_folder = "./bbbb" # 替换为你的输出文件夹路径
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 遍历输入文件夹中的所有图像
for filename in os.listdir(input_folder):
# 检查文件是否为图像文件(仅处理 `.jpg` 和 `.png` 文件)
if filename.endswith(('.jpg', '.png')):
image_path = os.path.join(input_folder, filename)
image = cv2.imread(image_path)
# 进行目标检测
results = model(image)
# 绘制检测框并保存结果
for result in results:
boxes = result.boxes # 获取检测框
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0] # 获取框的坐标
cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) # 绘制框
# 保存检测结果
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, image)
print(f"Processed {filename} and saved to {output_path}")
print("Batch processing completed!")
需要提示一点,在运行代码时候不要打开vpn或者开代理,因为该过程需要联网去下载yolov8权重pt文件,就像这样:
第二种,检测结果有标签分类和识别精度
import os
import cv2
from ultralytics import YOLO
# 加载预训练的 YOLOv8 模型
model = YOLO('yolov8n.pt') # 使用 nano 版本,适合轻量级应用
# 定义输入和输出文件夹路径
input_folder = "./aaaa" # 替换为你的输入文件夹路径
output_folder = "./bbbbbb" # 替换为你的输出文件夹路径
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 定义 COCO 数据集的类别名称
COCO_CLASSES = [
"person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat",
"traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird",
"cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe",
"backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard",
"sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard",
"tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl",
"banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza",
"donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet",
"tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven",
"toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear",
"hair drier", "toothbrush"
]
# 遍历输入文件夹中的所有图像
for filename in os.listdir(input_folder):
# 检查文件是否为图像文件(仅处理 `.jpg` 和 `.png` 文件)
if filename.endswith(('.jpg', '.png')):
image_path = os.path.join(input_folder, filename)
image = cv2.imread(image_path)
# 进行目标检测(降低置信度阈值)
results = model(image, conf=0.3) # 原置信度阈值是 0.25,可以根据需要调整
# 绘制检测框并保存结果
for result in results:
boxes = result.boxes # 获取检测框
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0] # 获取框的坐标
class_id = box.cls[0].item() # 获取类别 ID
confidence = box.conf[0].item() # 获取置信度
# 绘制更粗的红色检测框
cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 5) # 线宽调整为 5
# 添加类别标签和置信度
class_name = COCO_CLASSES[int(class_id)] # 获取类别名称
label = f"{class_name}: {confidence:.2f}"
(label_width, label_height), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 1.0, 2) # 字体大小调整为 1.0
label_x = int(x1)
label_y = int(y1) - label_height - 10 if int(y1) - label_height - 10 > 10 else int(y1) + label_height + 10
cv2.rectangle(image, (label_x, label_y - label_height), (label_x + label_width, label_y), (0, 0, 255), -1)
cv2.putText(image, label, (label_x, label_y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 2) # 字体大小和线宽调整
# 保存检测结果
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, image)
print(f"Processed {filename} and saved to {output_path}")
print("Batch processing completed!")
检测结果就是像下面图像这样:
YOLOv8
-
架构创新:路径聚合网络,动态核注意力。
-
训练策略:对抗训练,数据增强。
-
优化技术:动量和 Adam 优化器,训练后量化。
-
主要特点:引入了新功能和优化,使其成为广泛应用中各种目标检测任务的理想选择,具有先进的 backbone 和 neck 架构,无锚分割 Ultralytics head,优化了准确度与速度之间的平衡。
YOLOv9
-
架构创新:多级辅助特征提取。
-
训练策略:微调,领域特定的数据增强。
-
优化技术:GELAN 模块,资源受限系统的深度监督。
-
主要特点:引入可编程梯度信息(PGI)和广义高效层聚合网络(GELAN),与 YOLOv8 相比,其出色的设计使深度模型的参数数量减少了 49%,计算量减少了 43%,但在 MS COCO 数据集上仍有 0.6% 的 AP 改进。
YOLOv10
-
架构创新:轻量级分类头和分离的空间与通道变换。
-
训练策略:无 NMS 训练,双重标签分配。
-
优化技术:在下采样阶段通过分离的空间与通道变换提高整体效率。
-
主要特点:实时端到端的对象检测,主要在速度和性能方面有显著提升。
YOLOv11
-
架构创新:在骨干网络中引入 C3k2 块,并使用 C2PSA 增强空间注意力。
-
训练策略:微调,Mix-up,数据增强,自适应梯度裁剪。
-
优化技术:进一步优化了模型的参数量和计算量,使其在同等精度下参数量降低 20%,在速度和准确性方面具有无与伦比的性能。
YOLOv12
-
架构创新:首次将注意力机制引入单阶段目标检测框架。
-
训练策略:进一步优化训练策略,提高模型的泛化能力和鲁棒性。
-
优化技术:在速度和性能上取得新的突破,为单阶段目标检测领域开辟新的战场。