行人检测方法之YOLO和YOLOv2

YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。而rcnn/fast rcnn/faster rcnn将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)。
在这里插入图片描述
一、YOLO
1、原理:
YOLO将输入图像分成SxS个格子,每个格子负责检测‘落入’该格子的物体。若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。如下图所示,图中物体狗的中心点(红色原点)落入第5行、第2列的格子内,所以这个格子负责预测图像中的物体狗。
在这里插入图片描述
2、网络架构
在这里插入图片描述
3、网络输出信息:
B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。
Bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。
confidence反映当前bounding box是否包含物体以及物体位置的准确性,计算方式如下:
confidence = P(object)* IOU
因此,YOLO网络最终的全连接层的输出维度是 SS(B5 + C)。YOLO论文中,作者训练采用的输入图像分辨率是448x448,S=7,B=2;采用VOC 20类标注物体作为训练数据,C=20。因此输出向量为77*(20 + 2*5)=1470维。作者开源出的YOLO代码中,全连接层输出特征向量各维度对应内容如下:
在这里插入图片描述
4、Loss函数
在这里插入图片描述
5、训练
1)预训练。使用ImageNet
1000类数据训练YOLO网络的前20个卷积层+1个average池化层+1个全连接层。训练图像分辨率resize到224x224。
2)用步骤1)得到的前20个卷积层网络参数来初始化YOLO模型前20个卷积层的网络参数,然后用VOC 20类标注数据进行YOLO模型训练。为提高图像精度,在训练检测模型时,将输入图像分辨率resize到448x448。

二、YOLOv2
1、改进之处
在这里插入图片描述
2、网络架构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、网络输出问题
在这里插入图片描述
在这里插入图片描述
由第二张网络结构图可知,最终输出为13 x13 x125。其中125=5*(4+1+20)。
网络共分13*13网格,每个grid cell有5个anchor box,4个值(中心点x,y、宽高w,h),一个confience。

4、训练

第一阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为224x224,共训练160个epochs。
第二阶段:将网络的输入调整为448x448,继续在ImageNet数据集上finetune分类模型,训练10个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。
第三阶段:修改Darknet-19分类模型为检测模型,移除最后一个卷积层、global avgpooling层以及softmax层,并且新增加三个3x3x1024卷积层,同时增加了一个passthrough层,最后使用1x1卷积层输出预测结果,输出的channels数为:num_anchorsx(5+num_classes)。

另外,在训练过程中,还引入了多尺寸训练,由于网络删除了全连接层,所以该网络并不关心图片的具体大小,训练时使用320~608尺寸的图像{320,352,….,608}。

YOLOv2几个难理解的细节
1、anchor box
YOLOv2最大的改进之处就是引入了R-CNN的anchor box(先验框),来解决多尺度输入的问题。,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差,YOLOv2采用先验框使得模型更容易学习。
利用k-means聚类算法来获得anchor box数量,综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框。
聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:
在这里插入图片描述
在这里插入图片描述
2、Direct location prediction
在这里插入图片描述
边界框预测的4个offsets(tx、ty、tw、th),其中 (Cx、Cy)为cell的左上角坐标,(Pw、Ph)为先验框(anchor box)的预设宽和高(k-means),每个grid cell有5个先验框,用形状最贴近的来计算。
3、网络27层的passthrough层
在这里插入图片描述
4、网络28层concat层
融合27层和24层,通道数变为1024+256=1280。可具体查看concat的相关原理来理解这一部分。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLOv5是一种用于目标检测的深度学习模型,它是YOLO(You Only Look Once)系列的最新版本。YOLOv5通过使用卷积神经网络来实现实时目标检测,其中的"5"代表了该版本的改进和优化。 在使用YOLOv5进行行人检测时,通常会使用Python库中的cv2(OpenCV)来处理图像和视频。cv2是一个广泛使用的计算机视觉库,提供了许多图像处理和计算机视觉算法的功能。 要使用YOLOv5进行行人检测,首先需要安装YOLOv5和cv2库。然后,可以加载YOLOv5预训练模型,并使用cv2库中的函数对图像或视频进行处理和检测。 以下是使用YOLOv5和cv2进行行人检测的基本步骤: 1. 导入所需的库: ```python import cv2 import torch from PIL import Image from torchvision.models import yolov5 ``` 2. 加载YOLOv5预训练模型: ```python model = yolov5('yolov5s.pt') # 使用yolov5s预训练模型,也可以选择其他版本 ``` 3. 加载图像或视频: ```python image = cv2.imread('image.jpg') # 加载图像 # 或者 video = cv2.VideoCapture('video.mp4') # 加载视频 ``` 4. 对图像或视频进行预处理: ```python image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 将图像从BGR格式转换为RGB格式 image = Image.fromarray(image) # 将图像转换为PIL格式 ``` 5. 进行行人检测: ```python results = model(image) # 使用YOLOv5模型进行检测 ``` 6. 处理检测结果: ```python for result in results: # 处理每个检测到的行人结果,例如绘制边界框等 ... ``` 7. 显示或保存结果: ```python cv2.imshow('Detection Results', image) # 显示结果图像 # 或者 cv2.imwrite('result.jpg', image) # 保存结果图像 ``` 以上是使用YOLOv5和cv2进行行人检测的基本步骤。你可以根据具体需求进行参数调整和结果处理。如果你有更多关于YOLOv5和cv2的问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值