python ssd目标检测_【目标检测】SSD & pyramidbox数据增广

v2-525f0e3f37e80fc33af7c37102ecb383_1440w.jpg?source=172ae18b
1、本文pyhton代码参考:DSFD数据增广,RandomBaiduCrop类的代码有重构,其他基本一致
2、标题图是用来数据增广的原图

SSD数据增广

SSD的数据增广堪称经典,论文中,使用数据增广的SSD在VOC2007上提升了8.8%的准确率。SSD做数据增广的初衷是为了减小网络对输入gt size的敏感性,即,不管gt大小如何变化,网络都可以较好检测。

v2-3ac0c13943df0a75f967d52df1cfa3b6_b.jpg

实现思路

每一张训练图像,随机的进行如下几种选择采样:

  • 使用原始的图像
  • 随机采样一个patch,与gt之间最小的 jaccard overlap 为:0.1,0.3,0.5,0.7 或 0.9。
  • 随机采样一个patch

采样的 patch 是原始图像大小比例是 [0.1,1.0](代码中是 [0.3,1.0]),宽高比在 0.5 到 2之间。当 gt的 中心在采样的 patch 中时,保留该gt,否则删除该gt。

python代码

  • 1、 设置7组iou条件[None,min(iou)>0.1, min(iou)>0.3, min(iou)>0.5, min(iou)>0.7, min(iou)>0.9,(None,None)]
    • None表示
    • (None,None)表示
  • 2、对于一张输入图片,随机许选取1组iou条件:
    • 如果选择None,返回原图,不进行数据增广
    • 如果选择(None,None),返回随机crop,不需要crop出来的区域满足iou条件
    • 如果选择其他条件,进入第3步
  • 3、循环:如果a,b,c中有任意一个步骤不满足条件则进入下一次循环,至多50次,循环完成都没有生成符合条件图片则返回第2步
    • a、对size为weight * height的图片,计算crop size w,h(均比原图小),且h / w < 0.5 or h / w > 2
    • b、在图中随机crop w * h的rect,若rect满足step2中的iou条件,则crop rect
    • c、对和rect有重叠区域的gt,如果其center在rect中则保留,否则删除该gt,删除后如果rect中还有gt,则返回crop rect、rect中的gt、gt对应label
class 

当然,除了以上的主函数,SSD数据增广的整体流程还包括了其他一些操作,例如:修改图片的brightness,contrast,saturation,hue,reordering channels,expand,随机翻转,resize,详见augment.py。

效果展示

v2-67d3744e0f38d9e60775bc3fed95fd8c_b.jpg

v2-b12dc1f22f83ef7db22f6e0077c9a976_b.jpg

PyramidBox数据增广

PyramidBox于2018年由baidu发表,文中提出名为Data-anchor-sampling的数据增广方法,该方法与SSD数据增广类似,但Data-anchor-sampling考虑到了gt大小,anchor size和随机裁剪之间的关系,理论上数据增广后可以匹配到更多的positive anchor。

实现思路

anchor尺寸通常不连续,例如[16, 32, 64, 128, 256, 512],但gt尺寸是连续的,即图片中gt的size很多变。为保证随机裁剪后anchor还可以较好的gt,Data-anchor-sampling提出按anchor 尺寸/gt 尺寸resize原图后,再进行随机裁剪。

例如:

  • 原图尺寸为240 * 240,图中gt 尺寸为120 *120, 此时和gt最匹配的anchor尺寸为128
  • 假设选定anchor 尺寸64,resize ratio= 64/120≈0.5
  • 经resize后原图尺寸变为120*120,其中gt尺寸变为60 * 60,此时gt最匹配的anchor尺寸为64
  • 之后在resize的基础上进行随机裁剪,不会改变gt尺寸,这样裁剪后的gt仍然可以较好匹配到anchor;反之如果直接在原图上进行随机裁剪,裁剪后gt的size可能会和给定的anchor尺寸相差甚远,不容易匹配到正anchor

python 代码

  • 图片resize
    • 给定anchor尺寸[16, 32, 64, 128, 256, 512]
    • 对图片中的gt计算面积、平均边长(sqrt(面积)
    • 随机选取一个gt,假设平均边长为120,找到与其平均边长最近的anchor尺寸,即:128
    • 在[16, 32, 64, 128, 256](该list为小于128的anchor尺寸+ 大于128的1个anchor尺寸组成)中随机选取一个anchor尺寸,假设target anchor=64
    • 计算resize ratio= 64/120≈0.5
    • 利用ratio resize 图片并相应改变gt坐标
  • 图片crop
    • 在resize后的图片上随机选取1个crop box, 其w=h=crop_size, 保证crop box至少完整覆盖1个gt,获得crop后的image
    • 对和crop box有重叠区域的gt,如果其center在crop box中则保留,否则删除该gt
  • 输出crop后的image,center在crop box中的gt,gt对应label
class 

除了以上的主函数,和SSD数据增广一样,PyramidBox数据增广的整体流程还包括了其他一些操作,例如:修改图片的brightness,contrast,saturation,hue,reordering channels,随机翻转,详见augment.py

效果展示

v2-5238e7fd7349c19c9f379c38e05cf483_b.jpg

v2-a25ad3fc7bb389ea328b4e76fe0878d6_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值