前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yolov5鱼苗检测计数:从数据标注到训练

yolov5鱼苗检测计数:从数据标注到训练

作者头像
机器学习AI算法工程
发布2022-03-04 13:40:32
2.2K0
发布2022-03-04 13:40:32
举报

向AI转型的程序员都关注了这个号👇👇👇

机器学习AI算法工程   公众号:datayx

目标检测yolov5 v6.0版,pytorch实现,包含了目标检测数据标注,数据集增强,训练自定义数据集全流程。

一.环境

代码语言:javascript
复制
    Python >= 3.7
    Pytorch >= 1.7.x

二.标注工具

pip install labelImg ==1.8.6

安装完毕后,键入命令:

labelImg

或者下载工具 labelImg.exe 

项目全部代码,数据集,标注工具,预训练模型获取方式:

关注微信公众号 datanlp  然后回复 鱼苗 即可获取。

半自动标注

如果数据集较多,可以先手动标注少量,然后训练出初版模型,然后用初版模型预测进行预标注,最后人工检查。

步骤:

1.将待标注图像放入auto_label/images

2.修改auto_label.py的第62至65行如下的内容:

代码语言:javascript
复制
path = r"auto_label/images"   #待标注图片路径
xml_path = r"auto_label/images"    #输出的xml标注文件保存路径
yolo_model_weight='./weight/IDCard_v6x_best.pt'  #模型文件路径
data_conf = './data/custom_data.yaml'  #数据集配置文件路径

3.运行auto_label.py

三.数据集增强

步骤:

1.将标注数据集的标签(xml文件)放入./DataAugForObjectDetection/data/Annotations

2.将标注数据集的图片放入./DataAugForObjectDetection/data/images

3.修改./DataAugForObjectDetection/DataAugmentForObejctDetection.py/中的need_aug_num,即每张图片需要扩增的数量,然后运行./DataAugForObjectDetection/DataAugmentForObejctDetection.py

注意:DataAugmentForObejctDetection_pool.py 是多进程增强版本,耗时较少。代码中的process不宜设置过大否则可能会报错,默认即可。

四.数据集格式转换

 VOC 的数据集转换成 YOLOv5 训练需要用到的格式。

步骤:

1.将标注数据集的标签(xml文件)放入./datasets/Annotations

2.将标注数据集的图片放入./datasets/images

3.将voc_to_coco.py中的class_names改为数据集中标注的类别名称,运行 voc_to_coco.py


额外说明

需要生成每个图片对应的 .txt 文件,其规范如下:

  • 每一行都是一个目标
  • 类别序号是零索引开始的(从0开始)
  • 每一行的坐标 class x_center y_center width height 格式
  • 框坐标必须采用归一化的 xywh格式(从0到1)。如果您的框以像素为单位,则将x_centerwidth除以图像宽度,将y_centerheight除以图像高度。

生成的 .txt 例子:

代码语言:javascript
复制
1 0.1830000086920336 0.1396396430209279 0.13400000636465847 0.15915916301310062
1 0.5240000248886645 0.29129129834473133 0.0800000037997961 0.16816817224025726
1 0.6060000287834555 0.29579580295830965 0.08400000398978591 0.1771771814674139
1 0.6760000321082771 0.25375375989824533 0.10000000474974513 0.21321321837604046
0 0.39300001866649836 0.2552552614361048 0.17800000845454633 0.2822822891175747
0 0.7200000341981649 0.5570570705458522 0.25200001196935773 0.4294294398277998
0 0.7720000366680324 0.2567567629739642 0.1520000072196126 0.23123123683035374

如果数据标签没生成正确,则会报错

代码语言:javascript
复制
mlc = int(np.concatenate(dataset.labels, 0)[:, 0].max())  # max label class
  File "D:\app\anaconda3\lib\site-packages\numpy\core\_methods.py", line 40, in _amax
    return umr_maximum(a, axis, None, out, keepdims, initial, where)
ValueError: zero-size array to reduction operation maximum which has no identity

五.修改数据集配置文件

在 data/目录下修改数据集配置文件 custom_data.yaml ,文件内容如下

代码语言:javascript
复制
# 目标类型数量,按自己的数据集来改
nc: 3

#目标类型名称,按自己的数据集来改
names: ['person', 'head', 'helmet']

六.聚类得出先验框(Yolov5 内部已做适配,可选)

步骤:

1.将./gen_anchors/clauculate_anchors.py的CLASS_NAMES改为数据集中标注的类别名称

2.运行 ./gen_anchors/clauculate_anchors.py

跑完会生成一个文件 anchors.txt,里面有得出的建议先验框:

代码语言:javascript
复制
Best Anchors : 
[257, 114, 309, 75, 327, 243]
[439, 59, 469, 347, 488, 117]
[497, 460, 500, 240, 500, 172]

七.修改模型配置文件

在文件夹 ./models 下选择一个你需要的模型然后复制一份出来(选择的预训练模型pt文件模型名称必须与模型配置文件yaml对应,否则加载模型会报错),将文件开头的 nc = 修改为数据集的分类数,修改第六步获取的先验框anchors(可选)。

比如,预训练模型是yolov5s.pt,就需要复制一份./models/yolov5s.yaml,重命名为custom_yolov5.yaml。

然后修改custom_yolov5.yaml中的 nc和anchors(可选)。

代码语言:javascript
复制
# parameters
nc: 1  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [257, 114, 309, 75, 327, 243]  # P3/8
  - [439, 59, 469, 347, 488, 117]  # P4/16
  - [497, 460, 500, 240, 500, 172]  # P5/32

八.开始训练

1.将预训练模型下载放置在weight目录下;

2.修改train.py中的第454行weights预训练模型的路径;

3.修改train.py中的第455行cfg模型配置文件路径

4.修改train.py中的第455行batch-size

5.运行train.py

注意 workers=0 #必须为0


注意:

如果代码是 从github 重新clone下来的,需要

注释掉 utils/loggers/init.py 的wandb,不然程序会提示你需要注册wandb用户

修改如下:

代码语言:javascript
复制
# try:
#     import wandb
#
#     assert hasattr(wandb, '__version__')  # verify package import not local dir
#     if pkg.parse_version(wandb.__version__) >= pkg.parse_version('0.12.2') and RANK in [0, -1]:
#         try:
#             wandb_login_success = wandb.login(timeout=30)
#         except wandb.errors.UsageError:  # known non-TTY terminal issue
#             wandb_login_success = False
#         if not wandb_login_success:
#             wandb = None
# except (ImportError, AssertionError):
#     wandb = None
wandb = None

train.py开头添加

代码语言:javascript
复制
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

代码语言:javascript
复制
File "/home/lkz/.virtualenvs/lkztor/lib64/python3.6/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "/data/disk2/pact/yolov5_v6.0/models/common.py", line 47, in forward
    return self.act(self.bn(self.conv(x)))
  File "/home/lkz/.virtualenvs/lkztor/lib64/python3.6/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/lkz/.virtualenvs/lkztor/lib64/python3.6/site-packages/torch/nn/modules/conv.py", line 446, in forward
    return self._conv_forward(input, self.weight, self.bias)
  File "/home/lkz/.virtualenvs/lkztor/lib64/python3.6/site-packages/torch/nn/modules/conv.py", line 443, in _conv_forward
    self.padding, self.dilation, self.groups)
RuntimeError: Unable to find a valid cuDNN algorithm to run convolution

显存不足导致

解决办法:减小batchzise

训练模型保存

开启训练之后,权重会保存在 ./runs 文件夹里面的每个 exp 文件里面的 weights

九. 预测

批量预测步骤:

1.修改predict.py 内第218行weights 模型文件.pt路径,219行source 待预测图像路径,220行data 数据集配置文件路径

2.其他参数可默认,运行predict.py

单张预测步骤:

1.修改detect_image_only.py内第97行至100行的模型路径,数据集配置文件路径等内容

2.运行detect_image_only.py

部署代码简化:

yolo5_inference目录下是清理掉无关代码后的模型部署推理代码,只需关注某几个参数即可。

机器学习算法AI大数据技术

 搜索公众号添加: datanlp

长按图片,识别二维码


阅读过本文的人还看了以下文章:

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

《深度学习:基于Keras的Python实践》PDF和代码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.环境
  • 二.标注工具
    • 三.数据集增强
      • 四.数据集格式转换
        • 五.修改数据集配置文件
          • 六.聚类得出先验框(Yolov5 内部已做适配,可选)
            • 七.修改模型配置文件
              • 八.开始训练
                • 训练模型保存
                • 九. 预测
                相关产品与服务
                NLP 服务
                NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档