google官方efficientdet网络训练自己数据集步骤以及问题解决

2023-12-15 10:59

本文主要是介绍google官方efficientdet网络训练自己数据集步骤以及问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

google官方efficientdet网络训练自己数据集步骤以及问题解决

1、谷歌官方代码网址,github上有各种版本的,建议使用官方的不会出现什么问题。

https://github.com/google/automl/tree/master/efficientdet

本人采坑记录,一开始使用github上pytorch版本star比较高的用来训练测试,发现精度还不错,但是infer的速度始终无法达到参考指标,后来一查确实有一些人也遇到这样的问题也都没有解决,经过1天的努力,最后决定跳坑,最终证明还是官方的香!

2、先上图,一睹为快,然后再详细介绍。

测试集上的指标:

3、推测的速度(从图像读入到model中到处理之后得到结果的时间):

在这里插入图片描述
接下来进入正题:

1、数据集准备

这里建议自己的数据集转换成Pascal VOC的格式,因为我试过coco的转换存在一些问题,一会儿详细说一下。

这里推荐一个详细的参考教程:
数据集准备教程

下面内容作为上面博文未提到的补充

1、采坑记录:当我按照这个教程制定自己的数据集跑网络的时候出现了如下的问题:
在这里插入图片描述
我用coco的又转换了一遍发现还是这个问题,最终通过调试找到了问题的原因:
将图片转换成tfrecord的形式,要求图片一定是JPEG格式的图片,因为我的数据集里面虽然文件后缀都是.jpg但是其中有很多格式的,比如BMP,RGBA等等,所以到一定要将图片都转换为JPEG格式的。
将转换文件里面113行代码:

  if image.format != 'JPEG':raise ValueError('Image format not JPEG')

转换改写成如下:将格式统一进行转换之后用image.save将图片以.jpg格式以同名的形式保存到另一个文件夹,之后再将两个文件夹图片融合,代替重复图片。

  if image.format != 'JPEG':# raise ValueError('Image format not JPEG')if image.mode == "P":image = image.convert('RGB')if image.mode =="RGBA":image=image.convert('RGB')image.save('/home/user/Downloads/'+full_path)print("image:",full_path,"format:",image.format)

之后再运行就没有问题了,这也是为什么建议用Pascal VOC的格式进行转换,防止浪费不必要的时间。

2、获得infer一张图片需要的时间:

python model_inspect.py --runmode=bm \--model_name=efficientdet-d0   --ckpt_path=tmp/efficientdet-d0-finetune \--hparams=my_config.yaml  \--input_image=testdata/image.jpg --output_image_dir=/tmp/

ckpt_path为保存训练checkpoint的文件夹名
input_image可以指定一张图片,当需要预测多张图片的时候可以改成testdata/*.jpg
结果如开头的图片所示。

3、可视化图片的检测结果:

python model_inspect.py --runmode=infer \--model_name=efficientdet-d0   --ckpt_path=tmp/efficientdet-d0-finetune \--hparams=my_config.yaml  \--input_image=testdata/image.jpg --output_image_dir=/tmp/ --line_thickness=2

从训练到测试过程介绍完毕!

这篇关于google官方efficientdet网络训练自己数据集步骤以及问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496201

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp