大白话分析——SSD目标检测网络从训练到预测(中上)

一. 背景

本文档以ssd300作为背景网络进行解读,以Tensorflow,Keras为框架
原始代码:https://github.com/pierluigiferrari/ssd_keras
分析后的代码:https://github.com/Freshield/LEARN_detection/tree/master/a4_github_better_ssd/a2_analyze_model
目前网上基本都网络部分讲的比较多,但是真正训练和预测部分都相对粗略,所以自己网上找了一个相对比较好的ssd检测作为蓝本来分析,然后把相应的过程用大白话给表达出来,方便大家可以更好的理解网络。

二 到 三 请查找上一篇

https://blog.csdn.net/freshield/article/details/105235281

四. 数据部分

数据这个部分之所以重要是因为不同于分割和分类,数据基本直接从原始数据获得即可,最多只是做一些数据增强。SSD的数据部分,尤其是label部分需要通过许多步骤,最终生成和预测一样的大小,也就是(batch, 8732, 33)这样的矩阵,而原始的数据只是表示了分类号和相关坐标,其中转换可见一斑。
数据主要分为原数据读取(对原始数据转换为二进制格式保存),生成器的读取数据batchX,batchY(这部分就是构造生成器遍历从二进制格式中恢复数据),数据增强(对图像进行数据增强,同时最主要的是把图像进行resize),encoder对batchY进行处理,这部分是数据部分最重要的处理部分,把原始的batchY进行一系列处理最后编码成预测的格式,然后就可以进行之后的loss计算。

1. 原数据读取

a. 解析xml

这里以原始的SSD举例,是使用的VOC数据集,其中包括了VOC2007以及VOC2012。这个数据集图像为大小不一的RGB图像,而label以xml的形式存在。一张图像对应一个xml文件。总共20个类别,之后如果加上背景类则一共21个类别。同时,数据集还有有一个索引文件,表明了数据的id以及是如果分配trainval的数据集的。所以这里的第一步就是要解析原数据。

首先遍历图像路径,label路径和索引目录
读取图像的索引
生成图像的文件路径,并放入filenames列表
如果label存在则进行解析
读取label的xml,遍历所有的objects
得到一个object的类名,检测框,生成字典,放入这个label的boxes列表
把本label的boxes放入labels列表
如果是难例,放入eval_neutral列表(并没有用到)
保存数据集长度,索引并返回

b. 生成hdf5(可以想成dict)

这里之所以生成hdf5的原因是hdf5是一种二进制格式,并且支持多平台并且对分布式友好,是一种比较方便的格式,这里要把数据都存进单独的hdf5文件中方便之后的训练时使用。

首先生成原始的文件,生成原始的key,value结构
遍历数据集的长度
读取图像数据,保存图像的shape到hdf5_image_shape,拉平图像存到hdf5_images
如果有label,保存shape到hdf5_label_shapes,并把label拉平存到hdf5_labels
保存图像索引到hdf5_image_ids
保存难例到hdf5_eval_neutral(没有用到)

最终数据会trainval存为一个文件,test存为一个文件
其中图像数据和label数据虽然已经拉平,如果恢复回原始shape的话,如下所示
image (???, ???, 3),label [[class_id, xmin, ymin, xmax, ymax], …],这里需要注意,我们的网络预测需要的是中心点长宽这种形式,而原始数据为左上右下点坐标的形式。
这里的图像之所以为问号是因为VOC数据集的图像大小是不一的,这个会之后在生成器生成数据时实时resize,而这里label的长度也是不定的,因为一张图会有n个objects,所以最后label的shape应该是(n_objects, 5)

2. 生成器的读取数据batchX, batchY

a. shuffle

首先,需要把相应的图像索引乱序排列下

b. batchX

首先从hdf5中得到batch索引的图像,然后得到batchX的图像并恢复回原图大小,需要注意的是这里依然为任意大小,并非300,300,3

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值