赞
踩
目标检测(Object Detection)是计算机视觉领域的一个重要研究方向,其主要任务是从图像或视频中识别并定位出感兴趣的目标对象。目标检测技术在许多实际应用中具有广泛的用途,如自动驾驶、视频监控、医学影像分析等。
目标检测的主要方法可以分为两大类:基于传统机器学习的方法和基于深度学习的方法。
基于传统机器学习的方法:这些方法主要依赖于手工设计的特征提取器和分类器。常用的特征提取器包括SIFT、SURF、HOG等,而分类器则可以是支持向量机(SVM)、随机森林(Random Forest)、K-近邻(KNN)等。这类方法通常需要大量的标注数据进行训练,但在一些特定场景下,它们仍具有一定的性能。
基于深度学习的方法:近年来,深度学习在目标检测领域取得了显著的进展。深度学习方法主要包括卷积神经网络(CNN)和区域卷积神经网络(R-CNN)。
随着深度学习技术的发展,目标检测的性能得到了显著提升,同时计算复杂度也得到了降低。这使得目标检测技术在各种应用场景中得到了广泛应用。
YOLOv5是一种目标检测算法,是YOLO(You Only Look Once)系列的较新版本。它由ultralytics团队开发的,采用PyTorch框架实现。
YOLOv5相较于之前的版本,有以下几个显著的改进:
YOLOv5的工作流程如下:
YOLOv5可以用于各种目标检测任务,如人脸检测、车辆检测、行人检测等。它在许多计算机视觉竞赛中取得了优异的成绩,并且被广泛应用于实际应用中,如自动驾驶、视频监控等。
YOLOv1:
YOLOv2:
YOLOv3:
YOLOv4:
YOLOv5:
https://github.com/ultralytics/yolov5
可参考这个视频代码讲解:点击
安装ultralytics、cuda、pytorch、torchvision,然后执行pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
如果是cpu,则直接安装cpu对应的pytorch和torchvision,然后再执行后面的pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple。
参考这个博客:点击
首先我们可以通过labelImg来对图片进行标注,标注的适合我们可以选择保存为VOC或者YOLO格式的数据集,VOC对应为XML,YOLO对应为TXT。具体的准备过程可参考这篇博客:数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
参考这篇博客:数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
参考这篇博客:数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
import cv2
import os
# 读取txt文件信息
def read_list(txt_path):
pos = []
with open(txt_path, 'r') as file_to_read:
while True:
lines = file_to_read.readline() # 整行读取数据
if not lines:
break
# 将整行数据分割处理,如果分割符是空格,括号里就不用传入参数,如果是逗号, 则传入‘,'字符。
p_tmp = [float(i) for i in lines.split(' ')]
pos.append(p_tmp) # 添加新读取的数据
# Efield.append(E_tmp)
pass
return pos
# txt转换为box
def convert(size, box):
xmin = (box[1] - box[3] / 2.) * size[1]
xmax = (box[1] + box[3] / 2.) * size[1]
ymin = (box[2] - box[4] / 2.) * size[0]
ymax = (box[2] + box[4] / 2.) * size[0]
box = (int(xmin), int(ymin), int(xmax), int(ymax))
return box
def draw_box_in_single_image(image_path, txt_path):
# 读取图像
image = cv2.imread(image_path)
pos = read_list(txt_path)
for i in range(len(pos)):
label = classes[int(str(int(pos[i][0])))]
print('label is '+label)
box = convert(image.shape, pos[i])
image = cv2.rectangle(image,(box[0], box[1]),(box[2],box[3]),colores[int(str(int(pos[i][0])))],2)
cv2.putText(image, label,(box[0],box[1]-2), 0, 1, colores[int(str(int(pos[i][0])))], thickness=2, lineType=cv2.LINE_AA)
cv2.imshow("images", image)
cv2.waitKey(0)
if __name__ == '__main__':
img_folder = "D:\Python\company\Object_detection\datasets\mask_detection/train\images"
img_list = os.listdir(img_folder)
img_list.sort()
label_folder = "D:\Python\company\Object_detection\datasets\mask_detection/train/labels"
label_list = os.listdir(label_folder)
label_list.sort()
classes = {0: "no-mask", 1: "mask"}
colores = [(0,0,255),(255,0,255)]
for i in range(len(img_list)):
image_path = img_folder + "\\" + img_list[i]
txt_path = label_folder + "\\" + label_list[i]
draw_box_in_single_image(image_path, txt_path)
我们将所有的原图和TXT标签得到之后,为下图结构:
mask_detection
# 只需要修改txt路径和样本数和类别名
import os
txt_path = "D:\Python\company\Object_detection\datasets\mask_detection/train/labels" # txt所在路径
class_num = 2 # 样本类别数
classes = {0: "no-mask", 1: "mask"}
class_list = [i for i in range(class_num)]
class_num_list = [0 for i in range(class_num)]
labels_list = os.listdir(txt_path)
for i in labels_list:
file_path = os.path.join(txt_path, i)
file = open(file_path, 'r') # 打开文件
file_data = file.readlines() # 读取所有行
for every_row in file_data:
class_val = every_row.split(' ')[0]
class_ind = class_list.index(int(class_val))
class_num_list[class_ind] += 1
file.close()
# 输出每一类的数量以及总数
for i in classes:
print(classes.get(i),":",class_num_list[i])
print('total:', sum(class_num_list))
开始准备训练:
python train.py --data data/mask.yaml --weights weights/yolov5s.pt --img 640 --epochs 20 --workers 4 --batch-size 8
python val.py --weights runs/train/exp/weights/best.pt --data data/mask.yaml
python detect.py --weights runs/train/exp/weights/best.pt
YOLOv5是一种用于目标检测的深度学习模型,它使用了YOLO(You Only Look Once)算法。评价指标是用来衡量模型性能的指标,以下是YOLOv5常用的评价指标介绍:
mAP(mean Average Precision):平均精度均值。mAP是目标检测中最常用的评价指标之一,它综合考虑了准确率和召回率。mAP的取值范围是0到1,数值越高表示模型性能越好。
Precision(精确率):精确率是指模型预测为正例中真正为正例的比例。Precision的计算公式是预测为正例且正确的样本数除以预测为正例的样本数。
Recall(召回率):召回率是指真实为正例中被模型正确预测为正例的比例。Recall的计算公式是预测为正例且正确的样本数除以真实为正例的样本数。
F1-score:F1-score是精确率和召回率的调和平均值,它综合考虑了两者的性能。F1-score的计算公式是2 * (Precision * Recall) / (Precision + Recall)。
AP(Average Precision):平均精度。AP是mAP的组成部分,它是在不同的置信度阈值下计算得到的精度值的平均值。
IoU(Intersection over Union):交并比。IoU是计算预测框和真实框之间重叠部分的比例,用于判断预测框和真实框的匹配程度。一般情况下,当IoU大于一定阈值时,认为预测框和真实框匹配成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。