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

机器学习AI算法工程
机器学习AI算法工程
技术

picture.image

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

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

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

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行如下的内容:

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_center width 除以图像宽度,将 y_center height 除以图像高度。
  • 生成的 .txt 例子:

    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

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

    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

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

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

    2.运行 ./gen_anchors/clauculate_anchors.py

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

    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(可选)。

    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用户

    修改如下:

    # 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开头添加

    os .environ[ 'CUDA_VISIBLE_DEVICES' ] = '0' 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

    批量预测步骤:

    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

    picture.image

    0
    0
    0
    0
    关于作者
    关于作者

    文章

    0

    获赞

    0

    收藏

    0

    相关资源
    VikingDB:大规模云原生向量数据库的前沿实践与应用
    本次演讲将重点介绍 VikingDB 解决各类应用中极限性能、规模、精度问题上的探索实践,并通过落地的案例向听众介绍如何在多模态信息检索、RAG 与知识库等领域进行合理的技术选型和规划。
    相关产品
    推荐阅读
    使用 ScottPlot 在 .NET WinForms 中快速实现大型数据集的交互式显示!
    .NET 使用 CsvHelper 快速读取和写入 CSV 文件
    ​DeepSpeed Activation Checkpointing
    PyTorch Device
    评论
    未登录