精华内容
下载资源
问答
  • yolov3目标检测
    千次阅读
    2020-11-18 07:26:30

    前言

    YOLOv3模型比之前的模型复杂了,但是精度也提高了。YOLOv3最大的变化包括两点:使用残差模型和采用FPN架构。YOLO2曾采用passthrough结构来检测细粒度特征,在YOLO3更进一步采用了3个不同尺度的特征图来进行对象检测。

    YOLOv3 的先验检测(Prior detection)系统将分类器或定位器重新用于执行检测任务;将模型应用于图像的多个位置和尺度。

    论文标题: YOLOv3: An Incremental Improvement

    论文作者: Joseph Redmon Ali Farhadi

    论文地址:https://arxiv.org/abs/1804.02767

     

     

    改进之处

    • 多尺度预测 

    • 更好的基础分类网络(类ResNet)和分类器 DarkNet-53

    • 分类器-类别预测

    关键点:3个尺度的特征图、能

    更多相关内容
  • 本课程中的项目以美国交通标志数据集LISA为训练对象,采用YOLOv3目标检测方法实现实时交通标志识别。具体项目过程包括包括:安装Darknet、下载LISA交通标志数据集、数据集格式转换、修改配置文件、训练LISA数据集、...
  • YOLOv3 目标检测

    2021-05-25 23:20:46
    YOLOv3 预训练的神经网络目标检测源代码,IoU 0.5,临界值 0.7,yolov3.weights下载地址:https://pjreddie.com/media/files/yolov3.weights
  • YOLOV3目标检测算法

    2020-06-08 17:40:28
    yolo3.zip,yolo3,get_loss.py,train.py,coco_classes.txt,predict.py,get_ytrue.py,yolov3_body.py,yolo_weights.h5,get_xml.py
  • 交通标志识别》《YOLOv3目标检测:原理与源码解析》在学习课程《YOLOv3目标检测实战:网络模型改进方法》前,建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》和课程《YOLOv3目标检测实战:交通标志识别》之...
  • 购课后可加入白勇老师课程学习交流QQ群:957519975除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括:《YOLOv3目标检测实战:...
  • YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。 YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。 ...
  • YOLOV3目标检测

    千次阅读 2022-04-12 16:28:39
    YOLOV3目标检测

    YOLOV3目标检测


    YOLO3借鉴了残差网络结构,形成更深的网络层次,以及多尺度检测,提升了mAP及小物体检测效果。如果采用COCO mAP50做评估指标(不是太介意预测框的准确性的话),YOLO3的表现相当惊人,如下图所示,在精确度相当的情况下,YOLOv3的速度是其它模型的3、4倍。

    效果

    在这里插入图片描述
    在这里插入图片描述

    部分代码示例

    import numpy as np
    import cv2
    import time
    
    #(1)加载预训练的COCO数据集
    classesFile = 'coco.names'  # 指定coco数据集分类名所在路径
    classNames = []  # 创建列表,存放coco数据集的分类名称
    
    # 打开数据集名称的文件
    with open(classesFile, 'rt') as f:  #读取文本文件
        classNames = f.read().rstrip('\n').split('\n')  # 通过换行符来拆分,再读入
    
    # 加载yolov3结构cfg文件
    modelConfiguration = 'yolov3.cfg'
    # 加载yolov3网络权重
    modelWeights = 'yolov3.weights'
    
    # 确定输入图像的宽和高
    wInput, hInput = 320, 320
    
    # 自定义目标检测的最小置信度
    confThreshold = 0.5
    
    # 自定义非极大值抑制的参数
    nms_threshold = 0.3
    
    
    #(2)构建网络结构
    # 导入darknet53网络,传入cfg文件和网络权重
    net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
    # 申明使用opencv作为后端
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
    # 申明使用CPU计算
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
    
    
    #(3)获取摄像头
    videoFile = '行人1.mp4'
    cap = cv2.VideoCapture(videoFile) # 0代表电脑自带的摄像头,代表外接摄像头 
    
    
    #(4)定义函数用于检测目标,获取检测框信息,以及分类类别
    def findObjects(outputs, img):
        
        # 图像的高度、宽度、通道数
        hT, wT, cT = img.shape  # 先保存高度,再保存宽度
        
        # 定义一个列表存放检测框的中心点坐标和宽高
        bbox = []
        # 定义列表存放分类的名称的索引
        classIds = []
        # 定义列表存放置信度
        confs = [] # 如果找到目标了,就将检测框的信息存放起来
        
        # 遍历三个输出层
        for output in outputs:
            
            # 遍历输出层的85项信息
            for det in output:  # det是数组类型
                
                # 在80个分类中找到哪个分类的值是最高的
                score = det[5:]  # 忽略检测框的x,y,w,h,c
                
                # 找到分类值最大对应的索引号
                classId = np.argmax(score)
                
                # 找到分类概率最大值的索引对应的值
                confidence = score[classId]
                
                # 如果检测置信度大于规定的阈值,表明检测到了物体
                if confidence > confThreshold:
                    
                    # 记录检测框的宽和高,这里的宽高是归一化之后的比例宽度和高度
                    w, h = int(det[2]*wT), int(det[3]*hT)  # 比例宽高转为像素宽高,像素宽高是整数
                    
                    # 记录检测框的左上角坐标
                    x, y = int(det[0]*wT-w/2), int(det[1]*hT-h/2)
                    
                    # 将检测框的信息保存起来
                    bbox.append([x, y, w, h])
                    # 将目标属于哪个类别的索引保存下来
                    classIds.append(classId)
                    # 保存检测框的置信度,检测出某个目标的概率
                    confs.append(float(confidence))
        
        
        #(5)消除重叠的矩形框,非极大值抑制
        indices = cv2.dnn.NMSBoxes(bbox, confs, confThreshold, nms_threshold)  # 返回检测框的索引 
        
        # 遍历索引绘制矩形框
        for i in indices:
            
            # i = i[0]
            
            # 在所有包含目标的矩形框中找到最符合的矩形框
            box = bbox[i]
            
            # 提取矩形框的信息
            x, y, w, h = box[0], box[1], box[2], box[3]
            
            # 绘制矩形框
            cv2.rectangle(img, (x,y), (x+w,y+h), (255,255,0), 2)
            
            # 显示文本
            cv2.putText(img, f'{classNames[classIds[i]]}',
                        (x,y+h+18), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0,255,0), 2)
            
            cv2.putText(img, f'{int(confs[i]*100)}%',
                        (x,y-8), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0,0,255), 2)  
    
    #(5)处理帧图像
    while True:
        
        # 接收图片是否导入成功、帧图像
        success, img = cap.read()
        
        # 改变图像大小
        img = cv2.resize(img, (1280,720))
        
        # 视频较短,循环播放
        if cap.get(cv2.CAP_PROP_POS_FRAMES) == cap.get(cv2.CAP_PROP_FRAME_COUNT):
            
            # 如果当前帧==总帧数,那就重置当前帧为0
            cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
        
       
    
    # 释放视频资源
    cap.release()
    cv2.destroyAllWindows()
    
    
    
    
    展开全文
  • 源代码可以画出loss和iou的曲线,修改相应的路径就可以使用,遇到任何问题可以私聊我
  • 基于YOLOv3目标检测算法的驾驶员疲劳检测实现.docx基于YOLOv3目标检测算法的驾驶员疲劳检测实现.docx基于YOLOv3目标检测算法的驾驶员疲劳检测实现.docx基于YOLOv3目标检测算法的驾驶员疲劳检测实现.docx基于YOLOv3...
  • 现在网上能找到的博客我现在看起来很明白,虽然讲的很详细,但是...前阵子用 matlab 做图像识别项目时发现了 yolov3 算法,觉得很有意思,但是无奈当时还没有基于matlab 的版本(听说现在有了),所以就用 python 运行
  • 基于python的YOLOV3目标检测模型在Keras当中的实现
  • Tensorflow (TF-Slim)实现的YOLO v3 目标检测
  • YOLOv3目标检测.zip

    2021-06-19 17:42:47
    针对VOC2007数据集,9963张RGB图片,9963个xml文件。 搭建YOLOv3模型,加载Darknet-53权重,从头开始手动训练调参。 最后检测精度非常高,针对如此复杂的数据集都能达到70%以上。
  • 在TensorFlow 2.3中实现的YOLOv3 [] 前言 此仓库源于zzh8829/yolov3-tf2基础上进行修改的,zzh8829/yolov3-tf2代码仓库地址:https://github.com/zzh8829/yolov3-tf2 修改后的版本是基于Python3、TensorFlow2.3版本...
  • YOLOv3目标检测实战教程

    千次阅读 2021-06-04 09:34:49
    由于研究方向为计算机视觉方向,最近也是想把自己之前跑过的代码记录一下,方便自己以后查看,因而本文主要关于yolov3进行目标检测,具体原理大家可以参考大神的博客目标检测(九)–YOLO v1,v2,v3,我就不细讲了,...

    一.简介

    这篇博客侧重从项目具体实践,适合刚入坑yolov3的小白。

    由于研究方向为计算机视觉方向,最近也是想把自己之前跑过的代码记录一下,方便自己以后查看,因而本文主要关于yolov3进行目标检测,具体原理大家可以参考大神的博客目标检测(九)–YOLO v1,v2,v3,我就不细讲了,直接进入正题,如何利用深度学习框架PyTorch对自己的数据进行训练以及最后的预测。

    论文地址:https://link.zhihu.com/?target=https%3A//pjreddie.com/media/files/papers/YOLOv3.pdf

    推荐博客:https://link.zhihu.com/?target=https%3A//blog.csdn.net/nan355655600/article/details/106246625

    睿智的目标检测5–https://link.zhihu.com/?target=https%3A//blog.csdn.net/weixin_44791964/article/details/102646387

    总结:
    YOLOv3优秀的检测结果主要的得益于残差网络、反卷积和多特征层的思想,这些特点使其可以很好的提取特征,同时训练效果好,且对大目标和小目标都有很好的检测效果。相比于之前的yolov1和yolov2主要改进点:

    1使用了残差网络Residual。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。

    2提取多特征层进行目标检测。一共提取三个特征层,它的shape分别为(13,13,75),(26,26,75),(52,52,75)最后一个维度为75是因为该图是基于voc数据集的,它的类为20种,yolo3只有针对每一个特征层存在3个先验框。

    3其采用反卷积UmSampling2d设计。逆卷积相对于卷积在神经网络结构的正向和反向传播中做相反的运算,其可以更多更好的提取出特征。

    二.开发环境

    本文是基于pytorch深度学习框架实现对建筑工地上安全帽和反光背心的检测识别。

    编译器pycharm python3.6 pytorch1.6 Anaconda3 cuda10.1 cudnn7.6

    参考:https://www.zhihu.com/people/shi-wo-89-57/posts

    三.模型训练

    3.1数据准备

    首先我们要对自己的数据进行标注,标注的工具LabelImg,如果是windows用户的话,可以直接下载可执行文件,labelImg的下载地址以及使用,可以参考博客windows下使用labelImg标注图像https://link.zhihu.com/?target=https%3A//blog.csdn.net/python_pycharm/article/details/85338801。

    这里我使用的是自己整理的建筑工人可穿戴照片,标签划分为四类hat、person、reflective_clothes、other_clothes,将数据集以voc格式处理。想要数据集小伙伴可以私信。
    在这里插入图片描述
    在这里插入图片描述

    3.2代码及预训练权重下载

    代码下载,本次没有采用官网的代码,使用一大佬代码:bubbliiiing/yolo3-pytorch https://link.zhihu.com/?target=https%3A//github.com/bubbliiiing/yolo3-pytorch

    提前克隆下载项目代码并解压到本地,同时下载预训练权重yolo_weights.pth,并放到model_data文件夹下

    3.3具体实现流程

    训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中;

    将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中;

    在训练前利用voc2yolo3.py文件生成对应的txt;

    再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes,

    此时会生成对应的2007_train.txt,每一行对应其图片位置及其真实框的位置;

    注意不要使用中文标签,文件夹中不要有空格!

    在训练前需要务必在model_data下新建一个txt文档,文档中输入需要分的类;

    修改utils/config.py里面的classes,使其为要检测的类的个数;

    运行train.py即可开始训练。
    在这里插入图片描述

    四.检测结果

    第一步:将训练生成的权重会保存到logs文件夹下,比如Epoch100-Total_Loss13.2984-Val_Loss19.7170.pth将其在yolo.py中的相应位置进行修改。

    第二步:运行predict.py进行图片预测,终端输入 img/demo.jpg
    在这里插入图片描述
    在这里插入图片描述
    第三步:运行video.py进行视频检测
    在这里插入图片描述
    在这里插入图片描述
    注:保护人物隐私,进行涂鸦处理。

    参考:https://link.zhihu.com/?target=https%3A//github.com/bubbliiiing/yolo3-pytorch
    在这里插入图片描述

    展开全文
  • yolov3详解】一文让你读懂yolov3目标检测原理

    万次阅读 多人点赞 2020-11-17 21:13:27
    yolov3目标检测原理目录前言详细过程yolov3检测流程原理(重点)第一步:从特征获取预测结果第二步:预测结果的解码第三步:对预测出的边界框得分排序与非极大抑制筛选 前言 本文是自己在b站视频讲解学习,并且查阅...

    前言

    本文是自己在b站视频讲解学习,并且查阅理解许多文章后,做的通俗理解与总结,欢迎评论交流。

    yolov3检测分两步:
    1、确定检测对象位置
    2、对检测对象分类(是什么东西)
    即在识别图片是什么的基础上,还需定位识别对象的位置,并框出。

    我们首先上一幅图宏观理解下
    在这里插入图片描述

    图中的红框是通过在yolov3检测最后得出的边界框(bounding box),又如下图的黄色框也是边界框
    在这里插入图片描述

    yolov3处理图片过程如下
    在这里插入图片描述

    首先一张图片传进yolo,yolo会将其转化为416×416大小的网格,增加灰度条用于防止失真,之后图片会分成三个网格图片(13×13,26×26,52×52)

    一、详细过程

    在这里插入图片描述
    先上流程图,该图是基于voc数据集讲解的,voc数据集有20个类别,最下面红框中(13,13,75)表示预测结果的shape,实际上是13,13,3×25,表示有13*13的网格,每个网格有3个先验框(又称锚框,anchors,先验框下面有解释),每个先验框有25个参数(20个类别+5个参数),这5个参数分别是x_offset、y_offset、height、width与置信度confidence,用这3个框去试探,试探是否框中有物体,如果有,就会把这个物体给框起来。如果是基于coco的数据集就会有80种类别,最后的维度应该为3x(80+5)=255,最上面两个预测结果shape同理

    yolov3主干网络为Darknet53,重要的是使用了残差网络Residual,darknet53的每一个卷积部分使用了特有的DarknetConv2D结构,每一次卷积的时候进行l2正则化,完成卷积后进行BatchNormalization标准化LeakyReLU激活函数

    对应代码如下:

    #--------------------------------------------------#
    #   单次卷积
    #--------------------------------------------------#
    @wraps(Conv2D)
    def DarknetConv2D(*args, **kwargs):
        darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)}
        darknet_conv_kwargs['padding'] = 'valid' if kwargs.get('strides')==(2,2) else 'same'
        darknet_conv_kwargs.update(kwargs)
        return Conv2D(*args, **darknet_conv_kwargs)
    
    #---------------------------------------------------#
    #   卷积块
    #   DarknetConv2D + BatchNormalization + LeakyReLU
    #---------------------------------------------------#
    def DarknetConv2D_BN_Leaky(*args, **kwargs):
        no_bias_kwargs = {'use_bias': False}
        no_bias_kwargs.update(kwargs)
        return compose( 
            DarknetConv2D(*args, **no_bias_kwargs),#	调用单次卷积函数进行正则化
            BatchNormalization(),	# 标准化
            LeakyReLU(alpha=0.1))	# 激活函数
    

    讲解流程之前的基本概念了解一下,后面不记得回来再看看

    x_offset:表示网格左上角相对x轴的距离(偏移量)
    y_offset:表示网格左上角相对y轴的距离(偏移量)

    上采样:缩小图像(或称为下采样(subsampled),如池化)的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。放大图像(或称为上采样(upSampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。

    先验框(anchor box):就是帮助我们定好了常见目标的宽和高,在进行预测的时候,我们可以利用这个已经定好的宽和高来进行处理,可以帮助我们进行预测,作用就是辅助处理x_offset、y_offset、h和w。如下图所示,用的是coco数据集,输出是(13,13,(80+5)*3),乘3表示,有3个先验框,每个先验框都有85个参数,下图就有3个蓝色框,也即先验框,可以理解成给你的建议框,识别的对象可能在这些建议框中,目的是带你得到更高的IOU,即更高置信度、更可能有对象得部分,黄色框为真实最后显示的边界框,红色框表示中心位置。
    在这里插入图片描述

    置信度(confidence):就是预测的先验框和真实框ground truth box(真实对象的框)的IOU值,即先验框是否有对象的概率Pr(Object),如进行人脸识别,一张图中有房子,树,车,人等,识别时背景和人的身体都没有脸这个需要识别的对象,那么这些地方的置信度就是0,框中的人脸越多,置信度(有对象概率)就越大,置信度是检测中非常重要的参数
    在这里插入图片描述
    IOU表示交并比
    在这里插入图片描述
    为什么要使用残差(Residual)神经网络?
    答:网络越深,梯度消失的现象就越来越明显,网络的训练效果也不会很好。残差神经网络就是为了在加深网络的情况下又解决梯度消失的问题。残差结构可以不通过卷积,直接从前面一个特征层映射到后面的特征层(跳跃连接),有助于训练,也有助于特征的提取,容易优化。

    二、yolov3检测流程原理(重点)

    在这里插入图片描述

    第一步:从特征获取预测结果

    1、yolov3提取多特征层进行目标检测,一共提取三个特征层,三个特征层位于主干特征提取网络darknet53的不同位置,分别位于中间层,中下层,底层,三个特征层的shape分别为(52,52,256)、(26,26,512)、(13,13,1024),这三个特征层后面用于与上采样后的其他特征层堆叠拼接(Concat)

    2、第三个特征层(13,13,1024)进行5次卷积处理(为了特征提取),处理完后一部分用于卷积+上采样UpSampling,另一部分用于输出对应的预测结果(13,13,75),Conv2D 3×3和Conv2D1×1两个卷积起通道调整的作用,调整成输出需要的大小。

    3、卷积+上采样后得到(26,26,256)的特征层,然后与Darknet53网络中的特征层(26,26,512)进行拼接,得到的shape为(26,26,768),再进行5次卷积,处理完后一部分用于卷积上采样,另一部分用于输出对应的预测结果(26,26,75),Conv2D 3×3和Conv2D1×1同上为通道调整

    4、之后再将3中卷积+上采样的特征层与shape为(52,52,256)的特征层拼接(Concat),再进行卷积得到shape为(52,52,128)的特征层,最后再Conv2D 3×3和Conv2D1×1两个卷积,得到(52,52,75)特征层

    最后图中有三个红框原因就是有些物体相对在图中较大,就用13×13检测,物体在图中比较小,就会归为52×52来检测

    第二步:预测结果的解码

    预测结果解码原因:预测结果(红框)并不对应着最终的预测框在图片上的位置,还需要解码)

    yolov3的预测原理是分别将整幅图分为13x13、26x26、52x52的网格,每个网络点负责一个区域的检测。解码过程就是计算得出最后显示的边界框的坐标bx,by,以及宽高bw,bh,这样就得出了边界框的位置,计算过程如图(b–为bounding box 缩写)在这里插入图片描述
    (cx,cy):该点所在网格的左上角距离最左上角相差的格子数。
    (pw,ph):先验框的边长
    (tx,ty):目标中心点相对于该点所在网格左上角的偏移量
    (tw,th):预测边框的宽和高
    σ:激活函数,论文作者用的是sigmoid函数,[0,1]之间概率,之所以用sigmoid取代之前版本的softmax,原因是softmax会扩大最大类别概率值而抑制其他类别概率值 ,图解如下 在这里插入图片描述

    注:最终得到的边框坐标值是bx,by,bw,bh.而网络学习目标是tx,ty,tw,th。
    另外cy向下此处为正向

    第三步:对预测出的边界框得分排序与非极大抑制筛选

    得分排序与非极大抑制筛选

    这步就是将最大概率的框筛选出来
    1、取出每一类得分大于一定阈值的框和得分进行排序。
    2、利用框的位置和得分进行非极大抑制。最后可以得出概率最大的边界框,也就是最后显示出的框
    如下几幅图,一步步筛选得到最终边界框
    在这里插入图片描述
    找到第一个
    在这里插入图片描述
    找到第二个
    在这里插入图片描述
    以上就是全过程啦,希望对点开阅读的你有帮助。

    参考博客与视频讲解:
    https://blog.csdn.net/paoxungan5156/article/details/99578828
    https://blog.csdn.net/weixin_45755332/article/details/107874775
    https://blog.csdn.net/weixin_44791964/article/details/103276106
    https://www.bilibili.com/video/BV1XJ411D7wF

    有兴趣可以看我这两篇博文练练玩玩yolov3:
    1、yolov3检测和平精英视频中人物及物体
    2、yolov3+keras训练自己的模型并预测
    3、yolov4-keras实现抽烟检测

    展开全文
  • yolov3目标检测可视化框架(轻量级)——以火焰识别为例 a.其中主要包含有图片检测、权重加载、可信度调整、检测结果保存,日志输出功能(可扩充) b.文件中的权重和数据集可以更换,训练介绍后不影响GUI的使用 ...
  • YOLOv3目标检测算法——通俗易懂的解析
  • Pyqt搭建YOLOV3目标检测界面(超详细+源代码)

    万次阅读 多人点赞 2021-05-20 10:08:20
    Pyqt搭建YOLOV3目标检测界面实现效果如下所示,可以检测图片、视频以及摄像头实时检测。0.准备工作1.测试好模型文件合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成...
  • yolov3目标检测可视化框架(轻量级)——以火焰识别为例 a.内置火焰识别数据集(2k张手工已标注)/权重(正确率95%) b.其中主要包含有图片检测、权重加载、可信度调整、检测结果保存,日志输出功能(可扩充) c....
  • 目标检测YOLOv3相关依赖 控制鼠标:pyautogui 代码是在Pytorch版yolov3代码中文注释详解基础上修改的, 基本是上文的原文,就自己按照理解修改了下注释。 完整工程下载连接 以下是我改的CSGO.py: 其中, 自己...
  • 由于工程项目太大,所以里面是一个百度网盘分享,大家可以自行下载
  • hi3516dv300端侧AI芯片;NNIE AI Subsystem;yolov3部署应用
  • Android—yolov3目标检测移植

    千次阅读 2020-12-20 08:17:26
    前言最近论文刚刚写完,终于可以做一些...Yolov3是一个非常棒的深度学习目标检测算法,如果Yolov3与Android相遇,那yolov3就可以发挥更大的价值,而不仅仅停留在实验室, 在此基础上可以开发出许多有趣的App:比如采...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,787
精华内容 8,314
关键字:

yolov3目标检测