不使用现有检测框架实现一个简单的物体检测网络

1 项目介绍

基于深度神经网络完成一个极简的物体检测器,实现物体类别和bounding_box的预测。

1.1 数据集

不使用现有检测框架实现一个简单的物体检测网络

  • 数据下载地址/项目地址:https://github.com/rb93dett/CNN_Object_Detection(tiny_vid)
  • 每张图像中只有一个物体;大小128*128像素
  • 物体类被只有5个:['car', 'bird', 'turtle', 'dog', 'lizard']
  • 每个类别包含180张图像
  • 标注文件在gt_XX.txt (coordinates are 0-index based): image_index, xmin, ymin, xmax, ymax

1.2 评价指标

定位准确率(IoU>0.5)、分类准确率、分类和定位同时正确率,可视化检测结果

1.3 项目环境

  • 硬件配置:MacBook Pro 13’Intel Core i5
  • 开发框架:PyCharm + PyTorch

2 项目内容

2.1 实现思路

不使用现有检测框架实现一个简单的物体检测网络

 首先是项目的完整思路,其实并不复杂,具体而言,针对原始图像,由于tiny_vid数据集较小,所以为了得到较好的结果,先对数据实现数据增强,从而获得了更多的训练数据,提高模型效果。接下来,通过扩充后的数据集输入搭建的CNN模型,并导入ground truth标签,完成模型的训练,最终就可以向模型输入待分类和定位的图像,输出预测的物体类别和边框。

2.2 数据增强

 不使用现有检测框架实现一个简单的物体检测网络

上图所示是具体的数据增强方法举例,首先针对一张原始图像,可以对它进行随机的distort,改变饱和度,亮度这些颜色参数,然后还以进行图像翻转,同时对bounding box的位置也进行调整,最后是图像裁切,同样根据裁切后的图像设定新的bounding box即可。

 2.3 网络架构

不使用现有检测框架实现一个简单的物体检测网络

 VGG预训练模型下载地址:https://download.pytorch.org/models/vgg16-397923af.pth

接下来是网络的架构,首先将数据输入到backbone网络中完成特征提取,backbone实现了VGG16和MobileNet两个版本,可以在训练之前选择任一一种,然后自己训练网络或者导入预训练的模型参数,然后首先将输出特征送入一个自己定义的回归网络,完成bounding box的预测,另外再使用一个分类模型实现物体识别与分类。具体网络结构如上图。

 2.4 项目效果

以VGG为backbone,经过多次训练得到的最好效果如下,对于一个简单的物体检测网络而言,在这个数据集上的表现还可以。

不使用现有检测框架实现一个简单的物体检测网络

 下面是物体识别的可视化结果示例,其中粉色为groud_truth,蓝色为此模型预测的结果。

不使用现有检测框架实现一个简单的物体检测网络

参考文献:https://github.com/pengzhiliang/object-localization 

本项目代码实现参考了上述工作,感谢作者(基本是照搬复现>.<,作者代码思路很清晰),对于基本功是很好的锻炼,通过这篇博文来回顾整个工作,当作复习。希望对大家有所帮助:)

上一篇:深度学习之RCNN初识


下一篇:CircleNet: Anchor-Free Glomerulus Detection withCircle Representation(理解)