从零开始实现一个月饼🥮检测器

举报
迪菲赫尔曼 发表于 2023/01/03 13:25:09 2023/01/03
【摘要】 《从零开始实现一个月饼🥮检测器》 《从零开始实现一个月饼🥮检测器》 第一步:准备一些月饼图片 第二步:标注数据 第三步:划分数据集 第四步:训练模型 第五步:测试模型 第一步:准备一些月饼图片我这里让朋友帮忙爬取了600张,清洗筛选后最终得到了304张 第二步:标注数据由于Labelimg和Labelme安装起来比较麻烦,所以这次我选择使用make sense:https://www....

image.png

《从零开始实现一个月饼🥮检测器》

第一步:准备一些月饼图片

image.png

我这里让朋友帮忙爬取了600张,清洗筛选后最终得到了304张

第二步:标注数据

由于Labelimg和Labelme安装起来比较麻烦,所以这次我选择使用make sense:https://www.makesense.ai

这是一款在线标注数据集的工具,用起来非常的方便

进入网页后点击Get Started开始使用

image.png

首先点击Drop images然后Ctrl+A选中整个数据集里面的图片

image.png

随后添加标签信息,因为我这里只检测月饼一类,所以只添加一个标签 Moon Cake

image.png

随后就进入了漫长的标注环节,这里大家一定要认真标注,不然对最终模型的影响还是很大的

image.png

大约3个小时以后就标注完毕了。。。。

我们点击Action->Export Annotation 导出yolo格式的标签文件

image.png

导出之后的标签文件就是这个样子的

image.png

第三步:划分数据集

导出后按一定比例划分训练集和验证集,我这里训练集选择了273张图片,验证集选择了31张图片

按照以下格式放置:

image.png

数据集准备好之后就可以着手训练模型啦

第四步:训练模型

我们这次选择yolov5模型作为基线训练

首先去yolov5的官方项目里下载代码:https://github.com/ultralytics/yolov5

也可以使用我个人基于yolov5官方项目改进的项目Yolov5_Magichttps://github.com/WangQvQ/Yolov5_Magic

我这里选择我个人改进的yolov5项目

首先在data的文件夹里新建一个MoonCake.yaml,我们要在这个MoonCake.yaml文件里放上我们数据集的路径和类别信息

image.png

MoonCake.yaml我们按照如下的格式书写,因为没有划分测试集,所以这里我们可以不写test的路径

新手我推荐直接写绝对路径,这样可以减少一些错误

image.png

接下来我们在项目里找到train.py ,在--data这里放上我们刚刚写好的MoonCake.yaml的路径

因为数据集比较少,所以我这里选择了轻量化的主干网络shufflenetv2,如果你选择的是我的代码,那么你会在models里发现一个写好的配置文件yolov5_ShuffleNetv2.yaml,如果你不选择我的代码,那么你使用默认的yolov5s就可以了;

image.png

所以在这里放上yolov5_ShuffleNetv2的路径,当然用默认的也是可以的

image.png

随后我们就可以开始训练模型啦

各个参数更加详细的解释可以看我的其它博文:手把手带你调参Yolo v5 (v6.1)(二)

参数简要说明:
–weights:初始化的权重文件的路径地址
–cfg:模型yaml文件的路径地址
–data:数据yaml文件的路径地址
–hyp:超参数文件路径地址
–epochs:训练轮次
–batch-size:喂入批次文件的多少
–img-size:输入图片尺寸
–rect:是否采用矩形训练,默认False
–resume:接着打断训练上次的结果接着训练
–nosave:不保存模型,默认False
–notest:不进行test,默认False
–noautoanchor:不自动调整anchor,默认False
–evolve:是否进行超参数进化,默认False
–bucket:谷歌云盘bucket,一般不会用到
–cache-images:是否提前缓存图片到内存,以加快训练速度,默认False
–image-weights:使用加权图像选择进行训练
–device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)
–multi-scale:是否进行多尺度训练,默认False
–single-cls:数据集是否只有一个类别,默认False
–adam:是否使用adam优化器
–sync-bn:是否使用跨卡同步BN,在DDP模式使用
–local_rank:DDP参数,请勿修改
–workers:最大工作核心数
–project:训练模型的保存位置
–name:模型保存的目录名称
–exist-ok:模型目录是否存在,不存在就创建

我们可以在终端里键入:python train.py --epoch 100

当出现这样的画面的时候就说明开始训练啦,我们只要耐心的等待结果就可以了

image.png

我的设备是3060显卡,100轮12分钟就训练好了,最终准确率达到了86.5%,召回率达到了78.7%,效果还是很不错的,最终的模型数据就保存在红框中的路径里,记住这里,一会儿会用得到

image.png

接下来我们就可以找一些图片测试一下我们的模型实际的检测效果了

第五步:测试模型

找到detect.py ,将这里的权重路径换成我们刚刚训练好的那个模型的路径
image.png

然后找到data/images文件夹,在这个文件夹中放上我们想检测的图片

image.png

当然也可以检测视频和调用摄像头,有关这个文件详细的超参数可以看我这篇博文:手把手带你调参Yolo v5 (v6.1)(一)

参数简要说明:

–weights:权重的路径地址
–source:测试数据,可以是图片/视频路径,也可以是’0’(电脑自带摄像头),也可以是rtsp等视频流
–output:网络预测之后的图片/视频的保存路径
–img-size:网络输入图片大小
–conf-thres:置信度阈值
–iou-thres:做nms的iou阈值
–device:是用GPU还是CPU做推理
–view-img:是否展示预测之后的图片/视频,默认False
–save-txt:是否将预测的框坐标以txt文件形式保存,默认False
–classes:设置只保留某一部分类别,形如0或者0 2 3
–agnostic-nms:进行nms是否也去除不同类别之间的框,默认False
–augment:推理的时候进行多尺度,翻转等操作(TTA)推理
–update:如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
–project:推理的结果保存在runs/detect目录下

放完后我们就可以执行detece.py了,执行后会打印出检测后图片的路径,我们直接打开就可以看到了

image.png

下面就可以看到月饼的检测效果啦

image.png

image.png

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

image.png
image.png
image.png

小彩蛋🎉

不过。。。你确定这是月饼?🤣

image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。