之前介绍了YOLO-V1~V4版本各做了哪些事以及相较于之前版本的改进。有的人或许会想“直接学习最近版本的算法不好吗”,在我看来,每一个年代的版本/算法都凝聚着当年学术界的智慧,即便是它被淘汰了也依旧有值得思考的地方,或是可以使我们对后续算法的改进/提出的缺点有更深的理解,进而“凝百家之长”真正开出道花结出道果有自己的感悟。
V4出现后,紧接着V5版本就出现了,相比于之前版本,V5出现时没有论文去介绍它怎么做的。V5像是把V4做了更好的实现,即思想算法上没有太大的变化,更像是一个“实际的偏工程的项目”。直到如今YOLO-V5也十分经典。
本文与前几篇主讲算法不同,本文教大家如何下载和使用YOLO-V5。
有时间的话我会从其源码的角度进行一遍梳理(或许吧不懒的话)。
前面也说过了具体算法和流程与V4无太大区别,主要是更好的实现。
ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com)
点击上方链接直接下载即可,下载完成后解压,打开Pycharm新建一个目录,
下载requirements里面的依赖
pip install -r requirements.txt
值得一提的是YOLO-V5要配合python>=3.7,pytorch>=1.7的版本使用,会用到里面的优化算法,所以大家自行选择一个更高的版本吧。
比如我这里直接选择anaconda里之前下载的torch1.10。
他这里用的是COCO数据集,这玩意比较大我们也没必要下载了,下载个小的玩一玩
可以去这里:Computer Vision Datasets (roboflow.com),下载物体检测相关的数据集,样式比较丰富,如检测汽车的、象棋的、动物的、人脸的等等。
以口罩数据集为例,大家也可以下载自己喜欢的,点击Mask Wearing Dataset,进去下载就行了。
下载时会提示你选择格式:
下载完成后和V5放在同一级目录就行
以train里的文件为例:
images则是训练所需的图片
labels里则是对应名字图片的标签值,如下1表示没戴口罩,戴了就是0,剩下四个则是"框的坐标"。
当然有的有很多行,毕竟一张图片里可能有很多人。找的越全recall越高,越精准accuracy越高,整体mAP越高。
后续第一次去读数据的时候还会自动生成labels.cache缓存文件,方便后续读取。
点开data.yaml,可以看到train和val的相对路径,到时候YOLO代码会直接读取,自己记得确认一下路径是否正确,路径问题比较基础这里就不讲了。
如果要做test就把test路径写进去就行。
nc指类别的个数,戴口罩和不带口罩,['mask', 'no-mask']
咱们简单下载个5s就行了,https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
下载完成后放到yolov5-master文件夹里。
参考这里:
--data ../MaskDataSet/data.yaml
--cfg models/yolov5s.yaml
--weigths ./yolov5s.pt
--batch-size 24
我们之前下载了预训练模型yolov5s.pt,用的话就加上,不用就--weights ''
当然还有一些参数可选,源码里有默认值,我们先用这些。
做好上面那些后,在yolov5-master的train.py里直接run就行了。
刚开始可能报错,我看是他第一次执行,会去github上下载标记字体,然后没连接进去。
解决办法就是自己点进去那个报错下载的连接自己下载就行了,下载完放到上面那个文件夹里。
之后再进行run,它默认会跑100个epoch,也可以自己设置。
这里就训练完了
上图告诉你 结果在runs\train\exp23那里,即最后最新跑的一次。
可见生成了权重文件和一些图片。
results.csv里面是一些标注和统计数据,至于生成的图片这里简单展示几个:
进入detect.py 直接右键run的话,由于下载的yolov5-master的时候它自带测试图片和权重文件,也填写了默认路径,所以不会报错;
直接跑的话你会看到结果里:
这和我们刚刚train那步没有一点关系,都是它自带的一开始不用训练就能玩的。
我们活学活用,刚刚训练的是是否戴口罩,所以我们不妨也自己改一下参数:
其中 -- source 后可以是图片 视频 文件夹 路径url等
我这里让它测试有没有戴口罩,就用上面这两张图片的路径吧即不修改source了;
不过我在里面又加了两张图片
修改参数:
--weights ./runs/train/exp23/weights/best.pt
--conf 0.4
--data ./MaskDataSet/data.yaml
这里我修改了权重文件 毕竟之前用的是自带的yolov5s.pt,而这个best.pt是我们通过自己下载的预训练模型yolov5s.pt的基础上训练出来的用于检测是否带口罩了的权重文件。 conf是置信度,想改就改。
run完后发现实际效果还行,但黑人那里不行
不过毕竟我们训练的数据就100多张,里面我看了也没有黑人,情有可原,它可能在面部颜色差异上占比很大。
我又找了几张试了试 发现就是数据的问题
不过问题不大,我们本次的目的就是先学会简单使用他们的代码。
可以把source那里换成视频玩一玩试一试。
希望本篇文章能够对你有所帮助,如果你是连GPU版本的torch都还没下载过的小白建议一步步来。
大家也可以换点别的数据集、参数来自己跑一跑玩一玩,同时感兴趣的小伙伴也可以开始在了解其算法的情况下简单读读源码了,我下一期或许会写一篇V5的源码引导文章。
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
什么是可以轻松集成到现有应用程序的优秀开源RoR3论坛?可选功能:OpenID支持Haml/SCSS模板支持表情符号、YouTube、图片等我可能会对其进行大量更改,而且我在Ruby方面仍然很薄弱,所以干净、带注释的代码以及良好的实践会很棒。谢谢:) 最佳答案 最近我在搜索类似的功能并遇到了discourse.您绝对应该检查一下。Discourseisthe100%opensource,next-generationdiscussionplatformbuiltforthenextdecadeoftheInternet.Whenev
QT串口调试工具第一节虚拟串口工具安装第二节QT创建一个基于QWidget的项目第三节UI界面设计第三节项目头文件widget.h第四节项目实现文件widget.cpp第五节main函数第六节编译结果重点第七节使用QT打包程序,不安装QT的电脑可使用第一节虚拟串口工具安装-----------------------------------------下载所需工具---------------------------------------------------------------------链接:https://pan.baidu.com/s/1QkT36S4EnH2HEAhZ1TZ8
目录 YOLO简介argpares模块detect模块导入部分主函数main()run()资源处理for循环输出结果 YOLO简介YOLO是目前最先进的目标检测模型之一,现在博客上常有的是如何使用YOLO模型训练自己的数据集,而鲜有对YOLO代码的精读。我认为只有对算法和代码实现有全面的了解,才能将YOLO使用的更加得心应手。这里的代码精读为YOLO v5,github版本为6.0。版本不同代码也会有所不同,请结合源码阅读本文。本文使用注释完成对每行代码的解读,文段来概括总结每个代码段。yolov5代码6.0版本github代码地址argpares模块在了解yolov5代码之前,首先要了解py
本文档适用于SOPHGO(算能)BM1684-SE5及对应通用云开发空间,主要内容:注意:由于SOPHGOSE5微服务器的CPU是基于ARM架构,部分步骤将在基于x86架构CPU的开发环境中完成初始化开发环境(基于x86架构CPU的开发环境中完成)YOLO3D目标检测算法模型转换(基于x86架构CPU的开发环境中完成)YOLO3D模型推理测试(处理后的YOLO3D项目文件将被拷贝至SOPHGOSE5微服务器上推理测试)1.初始化开发环境(基于x86架构CPU的开发环境中完成)1.1初始化开发环境(若wget后的地址不可用,请前往算能官网下载Docker镜像及SDK)#切换成root权限sudo
我想这是两个非常相关的问题:每个人都说要从Why's(Poignant)GuidetoRuby开始,我无法忍受那本书;对于语气更严肃且经验丰富的程序员来说,另一个好的起点是什么?如果我不是那种欣赏_why的人,我是否应该跳过Ruby,因为社区不合我的口味? 最佳答案 我目前正在浏览《ProgrammingRuby:ThePragmaticProgrammer'sGuide》。到目前为止,我认为作者对这些概念进行了明确定义,所提供的示例有助于澄清任何误解。该书可在线免费获取,您也可以订购一本:http://www.ruby-doc.o
例如,如果我输入“ds.35bdg56”,该函数将返回35。是否有类似的预制函数,或者我是否需要遍历字符串,找到第一个数字并查看它有多长去然后返回那个? 最佳答案 >>'ds.35bdg56'[/\d+/]=>"35"或者,既然你确实要求了一个功能......$irb>>deffx;x[/\d+/]end=>nil>>f'ds.35bdg56'=>"35"你真的可以从中获得一些乐趣:>>classString;deffirstNumber;self[/\d+/];end;end=>nil>>'ds.35bdg56'.firstNum
我有一些代码将return_toURL嵌入到我要测试的重定向(如OpenID)中:deftest_uses_referrer_for_return_toexpected_return_to='http://test.com/foo'@request.env['HTTP_REFERER']=expected_return_toget:fazbot#@response.redirected_tolookslikehttp://service.com?...&return_to=[URI-encodedversionofURLabove]&...encoded_return_to=(some
在Ruby中,数组减法或拒绝>>[1,3,5,7,7]-[7]=>[1,3,5]>>[1,3,5,7,7].reject{|i|i==7}=>[1,3,5]将删除数组中的所有条目。是否可以轻松删除1次? 最佳答案 >>a=[1,3,5,7,7]>>a.slice!(a.index(7))=>7>>a=>[1,3,5,7] 关于ruby-在Ruby中,有没有办法轻松地只删除数组中的1个匹配项?,我们在StackOverflow上找到一个类似的问题: https:
Ruby可以做这样的事情吗?irb(main):001:0>start=Time.now=>ThuNov0501:02:54-08002009irb(main):002:0>Time.now-start=>25.239irb(main):003:0>(Time.now-start).duration=>"25seconds"(duration方法现在不存在)...同样,报告23minutesand35seconds1hourand33minutes2daysand3hours(要么报告整个持续时间,最多多少秒,要么报告最多2个数字和单位(如果报告天和小时,则无需说明多少分钟))