位置: IT常识 - 正文

使用YOLOv5模型进行目标检测!AI大佬手撕源码带你学(yolov3模型大小是多少)

编辑:rootadmin
使用YOLOv5模型进行目标检测!AI大佬手撕源码带你学

推荐整理分享使用YOLOv5模型进行目标检测!AI大佬手撕源码带你学(yolov3模型大小是多少),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov3模型,yolov5训练自己的模型,yolov5 模型,yolov3模型,yolov5 模型,yolov1模型,yolov2模型,yolov1模型,内容如对您有帮助,希望把文章链接给更多的朋友!

YOLO主要做了什么? 通俗的讲目标检测是计算机视觉领域的一大任务,大致分为一阶段目标检测与两阶段目标检测。其中一阶段目标检测模型以YOLO系列为代表。

目标检测是计算机视觉领域的一大任务,大致分为一阶段目标检测与两阶段目标检测。其中一阶段目标检测模型以YOLO系列为代表。最新的YOLOv5在各个数据集上体现出收敛速度快、模型可定制性强的特点,值得关注。本文主要讲解如何从零训练自己的YOLOv5模型与一些重要参数的含义。

本文的训练数据使用的是开源数据集SHWD。

收藏=白嫖,收藏关注支持更新更多课程!!愿每个努力学习的朋友都能有所获[打call][打call][打call]                    

一、配置环境1.1 创建虚拟环境

俗话说,环境配不对,学习两行泪,首先我们需要安装Anaconda(Anaconda安装非常简单并且百度上有大量资料),然后创建一个专门用来训练YOLOv5的虚拟环境。按win+r打开“运行对话框”,输入“cmd”打开cmd。输入下面代码创建虚拟环境:

conda create -n course_yolov5 python==3.8

其中“course_yolov5”是虚拟环境的名称,“python==3.8”是虚拟环境的python版本。然后我们需要将Ultralytics开源的YOLOv5代码Clone或下载到本地,可以直接点击Download ZIP进行下载,

下载地址:https://github.com/ultralytics/yolov5

接下来激活刚刚创建的虚拟环境并解压刚下好的压缩文件,将工作路径切换到解压好的文件夹下:

conda activate course_yolov5cd D:\Study\PyCharm20\PycharmProjects\course_yolov5\yolov5-masterd:

注意:这里需要将" D:\Study\PyCharm20\PycharmProjects\course_yolov5"替换为自己的路径。

1.2 安装模块:

在安装模块之前,最好先更换pip源为阿里源或国科大源,然后安装yolov5需要的模块,记住工作路径要在yolov5文件夹下:

python -m pip install -r requirements.txt

如果没有安装cuda默认安装pytorch-cpu版,如果有gpu可以安装pytorch-gpu版。

pytorch gpu版下载指导:https://mp.weixin.qq.com/s/ZTzfC7xp8PVMvOONVIiK6g二、检测2.1 COCO数据集

在正确配置好环境后就可以检测自己的图片或视频了。YOLOv5已经在COCO数据集上训练好,COCO数据集一共有80个类别,如果您需要的类别也在其中的话,可以直接用训练好的模型进行检测。这80个类分别是:

['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']

2.2 用预训练模型进行测试

下面我们先演示如何检测图片中的目标。我们一般将要检测的数据放在'./data/images'路径下,其中 '.' 代表当前路径即解压好的yolov5-master文件夹,然后我们在cmd中输入下面代码:

python detect.py --source ./data/images/example.jpg --weights weights/yolov5s.pt --conf-thres 0.25

如果没有下载预训练模型需要等预训练模型下好,没有报错就说明我们的图像检测成功了!检测好的图片会放在'./runs/detect'下,各个参数的含义下面会有具体的介绍。

我们也可以对视频进行检测:

python detect.py --source ./data/images/happysheep.mp4 --weights weights/yolov5s.pt --conf-thres 0.25

或一个文件夹中的所有图片和视频(图片支持的格式:'bmp', 'jpg', 'jpeg', 'png', 'tif', 'tiff', 'dng', 'webp', 'mpo',视频支持的格式:'mov', 'avi', 'mp4', 'mpg', 'mpeg', 'm4v', 'wmv', 'mkv'),检测结果同样放在'./runs/detect'下。

python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf-thres 0.25

仔细观察图中,我们可以发现,官方训练好的模型虽然能将物体框出来,但是对物体的分类存在问题。一会儿将那只边牧预测为奶牛,一会儿预测为绵羊。

狗狗疑惑

这是目标检测现阶段的难点之一,即不容易区分图像中与目标物体外形相似的非目标物体,对于这个问题,我们可以在检测出目标区域后再接一个分类器对物体进行分类。另外,地上的树枝被误认为是小鸟,我们可以通过调整置信度阈值来解决这一问题。

2.3 检测文件参数说明

yolov5的参数是由argparse包传入的,我们可以通过命令行传入参数,也可以直接设置参数默认值。我们打开yolov5-master文件夹下的detect.py文件,传参的代码在主函数中,几个关键参数如下:

parser.add_argument('--weights', nargs='+', type=str, default='yolov5x.pt', help='model.pt path(s)')parser.add_argument('--source', type=str, default='data/images/happysheep.mp4', help='source')parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')

weights参数是我们训练好的权重文件,yolov5共有四种模型:yolov5s、yolov5m、yolov5l、yolov5x,它们的网络主干深度和宽度依次递增,一般情况下检测效果也递增,yolov5x的效果最好,yolov5s最差,但是yolov5s网络参数最少(14MB),yolov5x参数最多(166MB)。官方提供的预训练模型也有四种,大家可以根据需要设置。

source参数为检测数据路径。img-size参数为检测时图像大小,最好与训练时相同,默认为640。conf-thres为检测置信度阈值,预测出的置信度高于这个阈值的物体就会显示在图中。iou-thres是NMS的IOU阈值,一般为0.3~0.5。

3 训练自己的数据集3.1 使用labelimg标注图片

我们训练模型的第一步就是获取数据集,数据集一般通过拍照、爬虫或直接下载等方式获得,直接下载的数据集如比赛数据集都会有标注,我们可以直接使用所给的数据进行训练,但是通过拍照和爬虫获得的数据需要我们自己进行数据标注。目标检测标注工具有很多,今天主要讲解labelimg的标注步骤(文末附labeling下载地址)。

下载并解压完后打开data文件夹中的predefined_classes.txt文件,可以在文件中写入自己要定义的类名,如安全帽检测中有两类:安全帽和人,我们就在predefined_classes.txt文件中的第一行写helmet,第二行写person。

标注图片步骤如下:

把要标注的数据放在img_whole/datasets文件夹中,打开labelimg.exe,点击“Open Dir”打开img_whole/datasets文件夹,屏幕中就会显示图片,点击“Create RectBox”将需要标注的物体框出来并注明其类别,在标注完所有物体后点击“Save”保存标注文件至img_whole/xml文件夹中,标注文件格式为xml,点击“Next Image”标注下一张图片,然后继续进行步骤3直至标注完全部图片。

3.2 将xml文件转换为YOLO标注文件

我们随便打开一个xml文件,xml文件是DOM树结构,python的xml模块可以解析它。

我们需要的信息是图像宽度width、图像高度height、检测框左上角坐标xmin和ymin以及检测框右下角坐标xmax、ymax。我们运行voc_label.py便可在labels文件夹中生成YOLOv5标签文件,标签文件中每一行的数据为class, x, y, w, h,class是该物体的类别,x,y是检测框中心坐标,w,h是检测框的宽和高。voc_label.py代码:

import xml.etree.ElementTree as ETimport osfrom os import getcwdfrom tqdm import tqdmclasses = ["helmet", "person"]def convert(size, box):    dw = 1. / size[0]    dh = 1. / size[1]    x = (box[0] + box[1]) / 2.0    y = (box[2] + box[3]) / 2.0    w = box[1] - box[0]    h = box[3] - box[2]    x = x * dw    w = w * dw    y = y * dh    h = h * dh    return (x, y, w, h)def convert_annotation(image_id):    in_file = './xml/%s.xml' % (image_id)    out_file = open('./labels/%s.txt' % (image_id), 'w')    tree = ET.parse(in_file)    root = tree.getroot()    size = root.find('size')    w = int(size.find('width').text)    h = int(size.find('height').text)    for obj in root.iter('object'):        difficult = obj.find('Difficult').text        cls = obj.find('name').text        if cls not in classes or int(difficult) == 1:            continue        cls_id = classes.index(cls)        xmlbox = obj.find('bndbox')        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),             float(xmlbox.find('ymax').text))        bb = convert((w, h), b)        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')if __name__ == "__main__":    wd = getcwd()    print(wd)    if not os.path.exists('./labels/'):        os.makedirs('./labels/')    image_ids = os.listdir('./datasets')    for image_id in tqdm(image_ids):        convert_annotation(image_id.split('.')[0])

3.3 训练

本文的训练数据使用的是开源数据集SHWD,数据已上传开源数据平台Graviti,在文末可下载。当我们数据很多的时候我们可以将数据集划分为训练集、验证集和测试集,比例大致为98:1:1,数据较少划分时比例大概为6:2:2。我们新建一个文件夹datasets,将划分好的图片和标签放入其中,文件夹结构如下:

以训练集为例,标签文件名需要与图片对应:

然后将datasets文件夹放入yolov5-master中的data文件夹中,数据准备阶段就算完成了。

下面需要修改YOLOv5的配置文件,需要修改的配置文件有两个,我们先复制一份data/coco.yaml,这里将其重命名为helmet.yaml,修改图中横线中的参数:

在 download前加上一个#注释掉这段代码

将train、val、test修改为自己的路径,以train为例   ./data/helmet/images/train

将nc修改为数据的类别数,如安全帽检测只检测人和安全帽,故修改为2

将names修改自己数据的类名,如['helmet', 'person']

修改后的文件如下:

下一个需要修改的文件为模型配置文件,在models文件夹中有四个模型的配置文件:yolov5s.yaml、yolov5m.yaml、yolov5l.yaml和yolov5x.yaml,可以根据需要选择相应的模型,这里以yolovx.yaml为例,打开文件,修改文件中的nc为自己的类别数即可。

yolov5加入了自动判断是否需要重新k-means聚类anchors的功能,所以该文件中的anchors参数可以不做修改。如果有需要只需将这里anchors修改为自己计算出的即可。

在修改完这两个配置文件后就可以开始训练了!我们在cmd中输入(记住在yolov5-master路径下):

python train.py --weights weights/yolov5x.pt --cfg models/yolov5x.yaml --data data/helmet.yaml --epoch 50 --batch-size 32使用YOLOv5模型进行目标检测!AI大佬手撕源码带你学(yolov3模型大小是多少)

如果出现下面界面,说明已经开始训练了:

3.4 训练参数解释

我们打开train.py文件,滑到主函数部分就可以看到需要传入的参数,下面一一介绍一下这些参数:

weights:权重文件路径,如果是''则重头训练参数,如果不为空则做迁移学习,权重文件的模型需与cfg参数中的模型对应

cfg:存储模型结构的配置文件

data:训练、验证数据配置文件

hyp:超参数配置文件,其中的参数意义下面会解释

epochs:指的就是训练过程中整个数据集将被迭代多少次

batch-size:每次梯度更新的批量数,太大会导致显存不足

img-size:训练图片的尺寸

rect:进行矩形训练

resume:恢复最近保存的模型开始训练

nosave:仅保存最终checkpoint

notest:仅测试最后的epoch

noautoanchor:不进行anchors的k-means聚类

evolve:进化超参数

bucket:gsutil bucket

cache-images:缓存图像以加快训练速度

image-weights:给图片加上权重进行训练

device:cuda device, i.e. 0 or 0,1,2,3 or cpu

multi-scale:多尺度训练,img-size +/- 50%

single-cls:单类别的训练集

adam:使用adam优化器

name:重命名results.txt to results_name.txt

超参数配置文件./data/hyp.scratch.yaml参数解释:

lr0:学习率,可以理解为模型的学习速度

lrf:OneCycleLR学习率变化策略的最终学习率系数

momentum:动量,梯度下降法中一种常用的加速技术,加快收敛

weight_decay:权值衰减,防止过拟合。在损失函数中,weight decay是正则项(regularization)前的一个系数

warmup_epochs:预热学习轮数

warmup_momentum:预热学习初始动量

warmup_bias_lr:预热学习初始偏差学习率

giou:GIoU损失收益

cls:类别损失收益

cls_pw:类别交叉熵损失正类权重

obj:是否有物体损失收益

obj_pw:是否有物体交叉熵正类权重

iou_t:iou阈值

anchor_t:多尺度anchor阈值

fl_gamma:focal loss gamma系数

hsv_h:色调Hue,增强系数

hsv_s:饱和度Saturation,增强系数

hsv_v:明度Value,增强系数

degrees:图片旋转角度

translate:图片转换

scale:图片缩放

shear:图片仿射变换

perspec:****变换

mosaic:mosaic数据增强

mixup:mixup数据增强

由于时间和能力有限,上面的解释没有包含所有参数,读者可以通过阅读源代码进行进一步理解。

4 训练结果与测试

训练结束后,在runs/train文件夹下会自动生成训练结果,其中包括模型权重、混淆矩阵、PR曲线等。测试代码与2.2中的类似,只需将权重文件路径修改为训练好的权重文件路径即可,

免费课程资料+大牛答疑指导+人工智能系列录播课程!更有200G人工智能资料大礼包奉上!欢迎+薇❤公众hao【咕泡AI】回复123领领领~~~

本文链接地址:https://www.jiuchutong.com/zhishi/300056.html 转载请保留说明!

上一篇:Python爬虫之Web自动化测试工具Selenium&&Chrome handless(web爬虫视频教程)

下一篇:Attentional Feature Fusion 注意力特征融合

  • 微信营销方法很多,而你只是需要找到适合你的那一种(微信营销主要手段和技巧)

    微信营销方法很多,而你只是需要找到适合你的那一种(微信营销主要手段和技巧)

  • airpods自动读短信怎么关(airpods自动播放短信)

    airpods自动读短信怎么关(airpods自动播放短信)

  • qq音乐一起听有历史记录吗(QQ音乐一起听有麦克风吗)

    qq音乐一起听有历史记录吗(QQ音乐一起听有麦克风吗)

  • 华为手机温度计在哪(华为手机温度计测人体温度)

    华为手机温度计在哪(华为手机温度计测人体温度)

  • 华为手机电百分之2就关机了(华为 电量百分比)

    华为手机电百分之2就关机了(华为 电量百分比)

  • qq白屏怎么回事(qq出现白屏什么情况)

    qq白屏怎么回事(qq出现白屏什么情况)

  • 抖音定位延迟多长时间(抖音定位延迟多久才更新)

    抖音定位延迟多长时间(抖音定位延迟多久才更新)

  • 钉钉上传视频最长时间是多少(钉钉上传视频最大)

    钉钉上传视频最长时间是多少(钉钉上传视频最大)

  • 直播cpu重要还是显卡(直播cpu重要还是主板重要)

    直播cpu重要还是显卡(直播cpu重要还是主板重要)

  • 怎么隐藏抖音在线(怎么隐藏抖音在线人数)

    怎么隐藏抖音在线(怎么隐藏抖音在线人数)

  • trt tl10a是什么型号(trt—tl10a)

    trt tl10a是什么型号(trt—tl10a)

  • 苹果退款后充值的东西还在吗(苹果退款后充值的快币还在吗)

    苹果退款后充值的东西还在吗(苹果退款后充值的快币还在吗)

  • 蓝牙已连接但声音外放(蓝牙已连接但声音外放电脑)

    蓝牙已连接但声音外放(蓝牙已连接但声音外放电脑)

  • 华为荣耀lldtl10是什么(华为荣耀10)

    华为荣耀lldtl10是什么(华为荣耀10)

  • ip11电池百分比在哪里设置(电池百分比 苹果11)

    ip11电池百分比在哪里设置(电池百分比 苹果11)

  • ipad蜂窝版能打电话吗(ipad蜂窝版打电话越狱)

    ipad蜂窝版能打电话吗(ipad蜂窝版打电话越狱)

  • iphone x有指纹解锁吗(iphonex有指纹解锁吗)

    iphone x有指纹解锁吗(iphonex有指纹解锁吗)

  • 不用充电的针孔摄像头(不用充电头)

    不用充电的针孔摄像头(不用充电头)

  • 小米手环恢复出厂设置后连接不上(小米手环恢复出厂后怎么办)

    小米手环恢复出厂设置后连接不上(小米手环恢复出厂后怎么办)

  • 爱剪辑能剪辑音乐吗(爱剪辑能剪辑音频文件吗)

    爱剪辑能剪辑音乐吗(爱剪辑能剪辑音频文件吗)

  • 白条分期需要什么条件(白条分期什么时候还第一期)

    白条分期需要什么条件(白条分期什么时候还第一期)

  • dvdramsv.exe是什么进程 dvdramsv进程的作用是什么(dvdram是什么意思)

    dvdramsv.exe是什么进程 dvdramsv进程的作用是什么(dvdram是什么意思)

  • 高手养成计划基础篇-Linux第一季(高手成长礼包)

    高手养成计划基础篇-Linux第一季(高手成长礼包)

  • HTML+CSS+JS+Jquery+练手项目+...合集(前端学习必备,持续更新中...)

    HTML+CSS+JS+Jquery+练手项目+...合集(前端学习必备,持续更新中...)

  • QMS-云质说质量 - 9 我和我的客户投诉(1) - 逢年过节要祈祷(云质信息)

    QMS-云质说质量 - 9 我和我的客户投诉(1) - 逢年过节要祈祷(云质信息)

  • clear命令  清除终端界面已有内容(清除命令窗口所有内容用()命令,清除变量用()命令)

    clear命令 清除终端界面已有内容(清除命令窗口所有内容用()命令,清除变量用()命令)

  • python列表元素的获取和查看(Python列表元素的删除)

    python列表元素的获取和查看(Python列表元素的删除)

  • 企业销售不动产增值税税率
  • 公司购买金蝶属于什么费用
  • 无进项开票税点
  • 房地产投资
  • 企业付的快递费是扣增值税还是进入费用扣除
  • 利润表中的管理费用和研发费用怎么填
  • 管理费用科目代码
  • 销售多余材料会计分录怎么做
  • 共同控制合营企业的合营者
  • 净资产利润率等于净资产收益率吗
  • 当月未收到进项票怎么处理
  • 事业单位开展活动的意义
  • 自产产品用于销售费用
  • 挂靠被查出来后挂靠费怎么处理?
  • 公司取得增值税怎么算
  • 未办理土地使用证违反了什么法律
  • 企业可以同时按一般纳税和按小规模纳税吗?
  • 广告公司需要交消费税吗
  • 母子公司之间转让房产
  • 代付给其他供应商货物尾款怎么记账
  • 应交税费留底增值税
  • 车间工人工资计入
  • 差额征税的计算方式
  • 停薪留职单位欠缴社保怎么处理
  • Win7系统中如何快速查询文件内容
  • 自查以前年度补税需调帐吗
  • 包装物押金为什么含税
  • 转让无形资产的所有权计入什么科目
  • 企业所得税汇算清缴补缴税款分录
  • 缴纳印花税和残值的比例
  • window10今天更新
  • win7怎么更改开机启动项
  • uniapp传值
  • controller 层
  • 债券到期收回本金和利息的会计分录
  • 应收款余额在借方什么意思
  • 水利建设基金按季度缴纳
  • 境外支付佣金代扣代缴增值税
  • 缴纳水利建设基金计入什么科目
  • 对公打款打错了
  • chatbot下载
  • 授渔计划是什么意思
  • ausearch命令
  • Yii2中SqlDataProvider用法示例
  • 先做凭证再付款
  • 小规模纳税人收入是含税还是不含税
  • 一般纳税人补交印花税买卖合同
  • 装修增值税税率是多少2022
  • 人民币报关可以收美金吗
  • sqlserver2016维护计划
  • mysql查询性能分析
  • 固定资产怎么进行无形资产清理的
  • 小规模纳税人的税率是多少
  • 个人生产经营所得
  • 劳务外经证预缴税款
  • 解除劳动合同经济补偿金法律依据
  • 研发支出是什么意思
  • 增值税发票当月能红冲吗
  • 公司赠送客户礼品怎么做账
  • etc电子发票需要勾选吗
  • 无生产经营收入可以评为a吗
  • 独立董事需要入股吗
  • 成本核算方法有哪几种
  • mysql5.7最新版
  • hosts文件不起作用
  • 电脑死机是什么问题
  • 盗版win7升级win10
  • window10 .net3.5
  • es6class类用法
  • ms-dos 6.2批处理文件高级指南
  • 实现高性能化 两个字表达
  • 谈谈jQuery Ajax用法详解
  • python多进程编程
  • nodejs抓取网页内容
  • js模块化框架
  • multiset volatile
  • 全国哪些地区社保比例高
  • 陕西税务纳税服务平台
  • 长沙房产税如何征收
  • 关于返回
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设