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

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

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

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

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

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

测试集上的指标:
google官方efficientdet网络训练自己数据集步骤以及问题解决_第1张图片
3、推测的速度(从图像读入到model中到处理之后得到结果的时间):

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

1、数据集准备

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

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

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

1、采坑记录:当我按照这个教程制定自己的数据集跑网络的时候出现了如下的问题:
google官方efficientdet网络训练自己数据集步骤以及问题解决_第2张图片
我用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

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

你可能感兴趣的:(图像处理,网络,深度学习,计算机视觉,目标检测)