神经网络复现之Pytorch-SSD

照着源码一遍遍反复地看,每次都有收获的,理清思路,从定义网络结构,提取有效特征层,获得回归和分类信息,训练和预测不同角度去看,定义的函数穿插着理解,损失函数怎么计算,框怎么画的,NMS,编码(真实与先验框)解码(预测与先验框)作用,图片怎么增强等等。

博客链接
视频链接

大致过程:
输入一幅图片(300x300),将其输入到预训练好的分类网络中来获得不同大小的特征映射,提取有效特征层,有效特征层分别经过两次卷积获得回归信息(四个坐标变换值)和分类信息(20+1类)。通过回归和分类信息(设Px等)调整先验框变为预测框,此时有很多预测框,图片上同一个物体可能对应多个预测框,故需要进行NMS筛选,获得有效预测框(预测输出?)。计算先验框与真实框回归信息(设Gx等,此时也有NMS操作),损失函数就是降低Gx与Px之间差距(相对计算,不是真实和预测框直接的绝对计算),分类信息直接根据真实框和预测框类别计算。

个人理解:
先验框去逼近真实框,样本足够多,可能出现的所有情况都能training的到,训练的Px等越准确,泛化能力越强,预测时先验框调整的参数越准确,即预测越准确?

代码理解:

  1. nets文件夹下vgg.py和ssd.py的add_extras将层添加到layers列表里,并在此ssd.py文件里通过创建class SSD(nn.Module)将层连接(实际是在get_ssd下的实例化class SSD(nn.Module)完成连接)。
  2. nets文件夹下ssd.py的get_ssd对6个有效特征层分别进行两次卷积**(边框回归和分类)**,并作为列表分别存储。然后实例化class SSD(nn.Module),完成模型构建。
  3. nets文件夹下ssd.py的class SSD(nn.Module)大概完成边框回归和分类矩阵形状转换和复制,以及有效特征层再次存储???
    loc为batch_size,num_anchors,4
    conf为batch_size,num_anchors,num_classes
    在这里插入图片描述
  4. Vision_for_prior先验框生成和可视化:对每个有效特征层的每个网格生成先验框(两个循环实现)。
  5. Detect部分(ssd_layers.py文件中):对回归预测(4个坐标信息)、分类预测(每个网格20+1类?)结果以及先验框三者结合获得最终预测框。通过回归信息调整先验框变为预测框,此时有很多框,同时一个物体可能对应多个框,故需要进行NMS筛选。
  6. predict.py文件,外层ssd.py中的class SSD(object),先对图片进行处理(加灰条、维度调整及归一化等),传入网络进行预测,根据阈值抑制,输出top结果,然后绘图(反去灰条)。
  7. class Generator(object)进行数据集生成,把annotation里真实框框转换为小数形式,返回targets。
  8. class MultiBoxLoss(nn.Module)损失函数处理,此处match和encode函数计算先验框和真实框的调整比例并作为列表返回,再与预测框的相关参数计算损失。回归损失之间算正样本,分类损失正负1:3计算。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值