zoukankan      html  css  js  c++  java
  • 不使用现有检测框架实现一个简单的物体检测网络

    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 

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

  • 相关阅读:
    jquery实现奇偶行赋值不同css值
    Android短信批量插入速度优化的思考与尝试
    Android短信列表的时间显示
    短信优先级及有效期
    模拟器收短信和接电话的方法
    Android:Perferences的使用
    留个脚印
    Android电池电量更新 BatteryService(转)
    Android号码匹配位数修改
    CDMA SMS pdu解码
  • 原文地址:https://www.cnblogs.com/RB26DETT/p/13852604.html
Copyright © 2011-2022 走看看