YOLO
参考
- github文章
- YOLO系列算法原理解析
- How to use YOLOv8 and YOLO-NAS for Object Detection
- compare different models and weigh up their respective advantages and disadvantages
- bilibili
使用
安装
pip install opencv-python ultralytics
训练
导入库:
import cv2
from ultralytics import YOLO
选择模型:
model = YOLO("yolov8n.pt")
预测
predict and detect objects in images and videos
def predict(chosen_model, img, classes=[], conf=0.5):
if classes:
results = chosen_model.predict(img, classes=classes, conf=conf)
else:
results = chosen_model.predict(img, conf=conf)
return results
def predict_and_detect(chosen_model, img, classes=[], conf=0.5):
results = predict(chosen_model, img, classes, conf=conf)
for result in results:
for box in result.boxes:
cv2.rectangle(img, (int(box.xyxy[0][0]), int(box.xyxy[0][1])),
(int(box.xyxy[0][2]), int(box.xyxy[0][3])), (255, 0, 0), 2)
cv2.putText(img, f"{result.names[int(box.cls[0])]}",
(int(box.xyxy[0][0]), int(box.xyxy[0][1]) - 10),
cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), 1)
return img, results
介绍
目标检测任务
目标检测任务是计算机视觉领域的一个重要任务,其目标是从图像或视频中检测出感兴趣的目标,并对其进行分类、定位和跟踪。目标检测任务的主要挑战是如何高效地检测出大量的目标,同时保持高的检测精度。
目标检测任务可以分为两大类:object localization and object classification.
- 分类任务:检测出目标的类别,如人、狗、车等。
- 定位任务:检测出目标的位置,如矩形框、边界框等。
RCNN系的算法的基本思想是“区域提取”与目标分类的Two-Stage方法。首先,通过区域提取器(Region Proposal)生成候选区域,然后将候选区域输入到分类器中进行分类。这种方法的优点是准确率高,但是计算量大,速度慢。
YOLO系的算法的基本思想是“一次卷积”与“一次预测”的One-Stage方法。它们将物体检测视为一个回归问题。首先,将整个图像输入到卷积神经网络中,得到图像的特征图。然后,将特征图划分为多个网格,每个网格预测出一个边界框和置信度。最后,将边界框与置信度输入到线性回归层中,得到目标的类别和位置。这种方法的优点是计算量小,速度快。
传统目标检测方法
传统的目标检测方法通常包括以下几种:
- 基于区域的检测方法:通过对图像中的不同区域进行检测,如滑动窗口、多尺度、多任务等。
- 基于深度学习的检测方法:通过深度学习技术,如卷积神经网络、深度神经网络等,对图像进行特征提取,并进行分类和回归。
- 基于特征的检测方法:通过对图像的特征进行匹配,如SIFT、SURF、HOG等,来检测出目标。
传统的目标检测方法存在以下问题:
- 计算复杂度高:传统的目标检测方法需要大量的计算资源,如GPU、多线程等。
- 准确率低:传统的目标检测方法的准确率往往不高,原因是它们对目标的形状、大小、位置等特征进行了假设,并没有充分利用图像的全局信息。
- 实时性差:传统的目标检测方法的实时性较差,因为它们需要对每张图像进行多次前向传播,耗时较长。
RCNN系
候选区域提议网络(Region-based Convolutional Neural Networks,R-CNN)是一种基于区域的卷积神经网络,其主要思想是通过对图像中的不同区域进行检测,并对检测到的目标进行分类和回归。R-CNN的网络结构如下图所示:
- R-CNN:Region-based Convolutional Neural Networks,基于区域的卷积神经网络。
- Fast R-CNN:快速的基于区域的卷积神经网络。
- Faster R-CNN:更快的基于区域的卷积神经网络。
YOLO
YOLO(You Only Look Once)是一种目标检测算法,其主要思想是通过在整个图像上只进行一次前向传播来检测目标,并对检测到的目标进行分类和回归。YOLO的主要特点是速度快、准确率高、可以实时处理视频流。
YOLO的网络结构由两部分组成:
- 第一部分是卷积神经网络(CNN),用于提取图像特征。
- 第二部分是线性回归层(Linear layer),用于预测目标的类别和位置。
YOLO v1
YOLO v1的网络结构如下图所示:
- 将原始图片缩放为448x448。
- 将缩放后的图片输入到CNN中,得到特征图。
- 将特征图划分为13x13的网格,每个网格预测出2个边界框和2个置信度。
- 将边界框与置信度输入到线性回归层中,得到目标的类别和位置。
YOLO v3
- Darknet-53的网络结构
- 增加了BatchNormalization层
- 增加了残差连接
- 多尺度特征进行预测
- 9种尺度的预测框