首页 > 其他分享 >TensorFlow Object Detect API 实战与踩坑经验分享

TensorFlow Object Detect API 实战与踩坑经验分享

时间:2024-06-18 17:28:39浏览次数:7  
标签:教程 Detect 训练 Object object TensorFlow py 标注

Apple-Banan-Orange Detection

全部代码已上传到本人github项目,欢迎来玩呀━(`∀´)ノ亻!

简介

本项目起源于本人《人工智能原理》一课的大作业,要求识别苹果、香蕉、橙子三种水果,并用IOU、Precision、Recall、mAP四个指标进行评估 (谁拿前3个作为最终指标啊) 。一通搜索下来最终决定拿 TensorFlow Object Detect API V2 来完成。主要参考了官方教程TensorFlow 2 Object Detection API tutorial
以及众多大神博客。由于本人主要负责后端的工作,就只在这分享下后端的一些经验。本文主要汇总一下对在这期间有用的教程与分享本人在这安装、训练期间遇到的问题以及解决方法,如果有直系学弟学妹明年遇到同款大作业而搜到这个仓库,望对遇到同样问题的同学有所帮助 (真帮到了记得回来给个star啊喂)

damn作业

damn作业

如果有下次,我选择PyTorch

damn-tensorflow

项目目录

.
├─scripts           # 相关代码
│  ├─Pre-process    # 数据处理
│  ├─Train          # 训练
│  ├─Predict        # 推理预测
│  ├─export         # 导出模型
│  └─eval           # 评估
├─annotations       # 标签图 label_map
├─exported-models   # 本项目已训练好的模型
├─images            # 数据集(图片+xml标注)
└─data              # TFRecord格式数据

安装

主要参考官方安装教程,踩了诸多坑后,最后汇总出来一套可以兼容的环境,这些不一定是唯一能用的版本,但是本人亲身测试过绝对能跑的

  1. Python:3.9.19

    conda create -n (环境名称) python=3.9.19

  2. TensorFlow版本: 2.10.1,注意Windows端TensorFlow在2.11及以上不能原生支持GPU加速,要用新的版本要搞好多操作

    pip install tensorflow==2.10.1

  3. CUDA版本: 11.8,但由于本人电脑无英伟达显卡,这是在服务器上训练时直接拉的社区镜像里的配置,具体兼容性还请自行搜索。

    吐槽下Linux下是装CUDA是真的难搞,之前想换下CUDA版本搞一天都没搞定,最后直接拉大神镜像了

  4. AMD请安装 tensorflow-directml-plugin 参考 知乎@猫爪无情 的 Tensorflow2 在Windows11下使用AMD GPU加速

    pip install tensorflow-directml-plugin==0.4.0.dev230202

  5. 安装 TensorFlow Object Detection API

    1. 下载 TensorFlow Model Garden

      但事实上只需要 research 目录下的 object_detect

    2. 将 object_detection/protos 目录下的proto文件转成python文件,详见 Protobuf Installation/Compilation
      这些文件是用来描述训练、评估过程中优化器、损失计算等等的设置,有时间建议仔细读读,后面设置训练参数的时候能更加理解

    3. 安装 object_detect 包

      # 进入models/research/
      cp object_detection/packages/tf2/setup.py .
      python -m pip install .
      

      如果只下了 object_detect 文件夹,注意需要把setup.py文件拷到 object_detect 的上级目录中,注意不能放在 object_detect 之下,然后在该目录下执行 python -m pip install .

    4. 关于教程中提到的 COCO API installation

      我也一直卡在安装 Visual C++ 2015 build tools 上,教程中给的安装程序不完整装不了 (应该是太老了微软服务器都不支持了),后来找到完整版,以及安装网上教程用VS安装上去了,都还是显示 error: Microsoft Visual C++ 14.0 is required.

      但是经过本人测试似乎没有影响,COCO评估也能正常使用,只能说很玄学…

    5. 测试安装:

      python object_detection/builders/model_builder_tf2_test.py
      

数据集收集与处理

  • 推荐 KaggleRoboflow Universe 两个网站

    其中 Roboflow Universe 个人非常喜欢,上面有大量的开源数据集,并且个人最喜欢的是能下载各种格式的标注数据,以及可以在一个数据集中将感兴趣的图片克隆到自己工作空间

    在自己工作空间里可以批量修改标签、自己重新标注或者使用网站提供的AI标注 (用AI标注数据训练AI,左脚踩右脚) 、增强图像等操作,以及貌似还能直接拉社区模型,在网站服务器上训练,数据、模型、训练一站式解决,但本人没有过多研究别的,只用来整了点数据集

  • 在本仓库中,我也上传了我们小组收集到的一些数据集,总共应该有将近1w张了吧

    (update) 扔阿里云盘上了 不会用git传大文件qaq

    (6.18update) 垃圾阿里云分享不了压缩包,只能扔 百度云 了 pwd: 3940

    image文件夹为图片+xml标注,data文件夹为将图片和标注转换为的TFRecord格式,用来给TensorFlow读入,因为前前后后收集过好几次数据集,因此总共有4个文件夹

  • scripts/Pre-process 目录下有本人用来处理数据的一些脚本

    1. convert-RGB.py:将非三通道图片转为三通道图片
    2. generate_tfrecord.py:官方教程中提供的将图片和标注转为TFRecord格式的程序
    3. modify-xml.py:将xml中filename修改为同名图片名称
    4. partition_dataset.py:官方教程中提供将数据按指定比例分为训练集和数据集的程序
    5. show_box.py:将标注框画出来

训练

  1. 挑个看着顺眼的预训练模型下载 TensorFlow 2 Detection Model Zoo

    本人试过几个,最后采用了 EfficientDet D3 896x896

  2. 配置 Configure the Training Pipeline

    主要要设置:类型数量、批次大小、预训练模型地址、训练模式(detection\classfication)、数据集和label map地址

    其他配置参数的含义与调整方法可参考:

    1. object_detection“使用教程”翻译(一):configuring_jobs.md
    2. 数据读取与处理
    3. object detection训练参数——image_resizer,输入图像尺寸的修改配置
    4. 使用TensorFlow Object Detection API 训练模型方法
    5. 【理论】object detection api调参详解(兼SSD算法参数详解)

    本人主要是调调学习率和数据增强的参数 模型的内部参数也不知道怎么调更好

  3. 关于多卡训练

    本人一开始按照这份教程 (这个教程除了这里以外别的内容还挺好的,推荐看看)里说的,以为TF直接能调用所有GPU,但是!! 这会一直卡在加载阶段,GPU使用率和显存都是满的但就是不开始训练,后来我直接去翻了model_main_tf2.py的代码,发现它里面是有多卡的选项的,需要输入选项:--num_workers= ,单卡与多卡需要使用不同的分发策略

        if FLAGS.use_tpu:
      # TPU is automatically inferred if tpu_name is None and
      # we are running under cloud ai-platform.
      resolver = tf.distribute.cluster_resolver.TPUClusterResolver(
          FLAGS.tpu_name)
      tf.config.experimental_connect_to_cluster(resolver)
      tf.tpu.experimental.initialize_tpu_system(resolver)
      strategy = tf.distribute.experimental.TPUStrategy(resolver)
    elif FLAGS.num_workers > 1:
      strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()
    else:
      strategy = tf.compat.v2.distribute.MirroredStrategy()
    

    但是!!但是!!!(怎么我踩到这么多坑) 就在我开完多卡想美滋滋的等结果时,却发现Loss一直下不去,而且一直高达10点多!!这让我真的很破防,一下午2张A800花了几十块钱又打水漂了,关键是当天上午用单卡训练时还能正常的降下去。可后来换回单卡后又试了下还是降不下去,不知道到底发生了什么,也可能是模型的问题,反正最后我是把一开始坚持的 CenterNet HourGlass104 512x512 换成了 EfficientDet D3 896x896 ,之前训练花的几百块钱又打水漂了 55555555555

  4. 关于混合精度

    官方文档 里说只需写一条全局策略语句就能自动开启,但经本人实测在这里若开启后,内部的一些数学函数却不能支持 fp16 (貌似是因为输入的连个参数类型不一样),搜半天也没解决,去官方项目下发了issue,但到现在还没回…

    不过,后来我才发现在4090以上显卡训练,内部矩阵运算会自动开启TF32,因此也就不在纠结这个问题了

  5. 本人训练过程

    训练过程Loss曲线

    训练过程Loss曲线

预测推理

  • Predict目录下的脚本均为本人根据官方教程中 Examples给的代码修改而来,CV-predict.py 为调用摄像头为输入,剩下两个是用图片作为输入,推荐看看IMG-predict_saved_model.py (因为其他两个直接copy的,真的屎山)

  • 这里有个大坑是:推理时一定要用saved_model形式的模型,而不是checkpoint形式!!后者比前者满了将近50倍!!

  • 测试预测
    测试预测

评估

  • 可以直接使用model_main_tf2.py进行评估

    当输入checkpoint路径时会切换成评估模式,训练时新开个终端进行评估,它会在每个新checkpoint输出时自动评估,可用tensorboard实时查看指标曲线,关于评估选用的指标,可参考:关于tensorflow之config–eval_config中metrics_set参数(学习笔记)

    训练过程COCO曲线

    训练过程COCO曲线

  • 本人写的 evaluate.pyevaluate_util.py

    因为老师若至要求的 IOU、Precision、Recall、mAP 四个指标用这里面自带的评估搞不出来,与其去改它源码,不如自己写个 虽然我写的真是一堆屎山

    若至指标

    关于TP、FP、FN、FPIOUPrecisionRecallAP、mAP等指标的含义,推荐参考:

    1. MS COCO数据集的评价标准以及不同指标的选择推荐(AP、mAP、MS COCO、AR、@、0.5、0.75、1、目标检测、评价指标)

    2. 史上最易懂AP、mAP计算解析

    在计算TP、FP、FN、FP时,一个目标框与多个标注框重合或一个标注框与多个目标框重合是让我最头疼的,去问老师,给我发来一篇 目标检测中使用二部图匹配算法

    最后我采取的方案是:

    1. 每个预测框作为一个样本, 判断其是TP or FP
    2. 若一个预测框与多个标注框达到TP, 则只取其中IOU最大的标注框
    3. 若一个标注框有多个预测框为TP, 则只取IOU最大的预测框为TP, 其余调整为FP

    不知道这样理解对不对QAQ

    至于其他输出,IOU 为 “每个预测框与所有标注框中最大的IOU” 的均值, PrecisionRecall 取了P/R列表中两者都大于0.7的输出 (小摸了一手,找不到两者都大于0.7的直接给我置为0.7)。因为我认为这些都是计算 AP 的中间量,IOU 只是作为判断TP的阈值,而 PrecisionRecall 取决于置信水平,这些都不能作为衡量模型的最终指标,所以随便糊弄一下达标就好 (真不知道为什么规定这么若至的指标)

    其他细节可以看看 evaluate_util.py 文件,但这主要是为应付这次的任务写的一坨,应该不会有人拿它来实际评估吧

    评估结果

    评估结果

    数据这么好看是因为把老师要求的测试集扔进去练了

最后

这是本人第二次单独写出这么长的代码(指 evaluate_util.py ),虽然用了TensorFlow的API,最核心的代码都不用自己从头搞,但即使这样环境的配置与训练参数调节对蒟蒻还是太难了,给AutoDL交了几百大洋学费,如果有哪里不对的地方,还望指正。最后感谢各路大神的博客,帖子!

标签:教程,Detect,训练,Object,object,TensorFlow,py,标注
From: https://blog.csdn.net/Megrez__/article/details/139741323

相关文章

  • Objective-C — static关键字用法详解
    Static的作用在Objective-C中,static关键字有几种不同的用途,主要用于修饰全局变量、局部变量、修饰静态函数1、static修饰的静态全局变量代码#import<Foundation/Foundation.h>//由于静态变量作用域仅限于声明它的文件,所以访问和设置可以通过以下方法来访问//通过setGlob......
  • Ragas实践问题记录2 AttributeError: ‘TestsetGenerator‘ object has no attribute
    报错问题依然是在尝试官方文档“CompareLLMsusingRagasEvaluations”的“Createsynthetictestdata”步骤发生报错。官方文档以及文档中代码如下:Ragas:CompareLLMsusingRagasEvaluations官方文档中的代码:importosfromllama_indeximportdownload_loader,Simp......
  • BEV detection(自底向上)小结
    LLShttps://zhuanlan.zhihu.com/p/589146284BEVDet提出一种优雅可行可扩展的范式,包含4个部分:image-viewencoder,viewtransformerfromimageviewtoBEV,bevencoder,head.pipelinemoduleAugmentation防止过拟合,不光对图片做增强,还对bevfeature做flipping,scali......
  • monocular 3D detection小结
    smoke参考https://zhuanlan.zhihu.com/p/452676265monodle通过大量密集实验(逐步用gt替换预测值测试),localizationerror是3d检测的关键。提出三点策略:1.重新思考了2d中心和3d中心的不对齐影响(用3dcenter替换2dcenter能提高性能,且2d检测能作为辅助任务帮助3d检测)2.去除较远......
  • PyTorch与TensorFlow模型互转指南
    在深度学习的领域中,PyTorch和TensorFlow是两大广泛使用的框架。每个框架都有其独特的优势和特性,因此在不同的项目中选择使用哪一个框架可能会有所不同。然而,有时我们可能需要在这两个框架之间进行模型的转换,以便于在不同的环境中部署或利用两者的优势。本文将详细介绍如何......
  • 【PL理论】(29) OOP:面向对象编程 | 案例研究:C++ 中的类 | 继承 | 继承和指针 | Object
    ......
  • 升级到.Net 8 api 返回JObject 对象为空字符串
    在使用dotnet8过程中,使用了JObject类型作为api的返回,但是返回的空数组api:[HttpGet("voices")]publicasyncTask<IActionResult>GetObject(){JObjectobj=newJObject();obj["test"]="test";returnnewJsonResult(obj){StatusCod......
  • GPU版PyTorch安装、GPU版TensorFlow安装(详细教程)
    目录一、介绍PyTorch、TensorFlow 1. PyTorch2.TensorFlow二、GPU版PyTorch安装1.确定CUDA版本2.确定python版本3.安装PyTorch3.1使用官网命令安装(速度慢)3.2本地安装(速度快)4.检验是否安装成功三、GPU版TensorFlow安装1.确定CUDA版本2.确定TensorFlow版本3.安......
  • Caffe、PyTorch、Scikit-learn、Spark MLlib 和 TensorFlowOnSpark 概述
    在AI框架方面,有几种工具可用于图像分类、视觉和语音等任务。有些很受欢迎,如PyTorch和Caffe,而另一些则更受限制。以下是四种流行的AI工具的亮点。CaffeeCaffee是贾扬青在加州大学伯克利分校(UCBerkeley)时开发的深度学习框架。该工具可用于图像分类、语音和视觉。但......
  • 【TensorFlow深度学习】使用Horovod加速TensorFlow分布式训练
    使用Horovod加速TensorFlow分布式训练使用Horovod加速TensorFlow分布式训练:并行计算的高效实践Horovod简介安装与环境准备示例代码结构性能优化建议结语使用Horovod加速TensorFlow分布式训练:并行计算的高效实践在深度学习领域,随着模型复杂度的日益增加,单机训练已......