cekong

导航

ssd笔记

论文:https://arxiv.org/pdf/1512.02325.pdf

代码:https://github.com/amdegroot/ssd.pytorch

代码需要修改的地方:SSD-Pytorch训练和测试自己的数据集(新手必看)

 

 

 

0.数据

pytorch框架下ssd代码的解析

pytorch版本SSD代码分析(2)——数据增强

1.网络结构

SSD算法学习及PyTorch代码分析[1]-整体框架

pytorch版本SSD代码分析(1)——网络结构

ssd.pytorch源码分析(一)— 网络结构

ssd算法论文理解

SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体检测模型

[译]理解SSD MultiBox -- 基于深度学习的实时目标检测

一文看尽目标检测算法SSD的核心架构与设计思想

深度学习 SSD的理解和细节分析

搞定目标检测(SSD篇)(上)

搞定目标检测(SSD篇)(下)

SSD——样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016)

深度学习笔记(七)SSD 论文阅读笔记

2.先验框

SSD先验框详解

目标检测|SSD原理与实现

SSD算法详解default box

ssd.pytorch源码分析(二)— 默认框PriorBox的生成

关于SSD默认框产生的详细解读

3.Hard negative example mining

ssd.pytorch源码分析(五)—损失函数及Hard negative mining

SSD代码解读(三)——MultiboxLoss

pytorch-ssd源码解读(三)------------multibox_loss(损失函数)
4.eval

voc_eval.py 解析

pytorch-ssd源码解读(二)------------detection(预测层)

 

用SSD框架训练自己的数据集 https://blog.csdn.net/chris_pei/article/details/79087284

用SSD-Pytorch训练自己的数据集https://blog.csdn.net/Blackrosetian/article/details/88816122

将数据集制作成VOC数据集格式 https://blog.csdn.net/attitude_yu/article/details/81905927

将自己的数据集改成voc的格式https://blog.csdn.net/a417197457/article/details/80701944

 

1.数据加载

data.DataLoader(Dataset)-->VOCDetection(SSDAugmentation)

VOCDetection.pull_item()将数据整理为[image,xmin, ymin, xmax, ymax, label]的格式

SSDAugmentation:数据増广

onvertFromInts(),  #数据类型转换

ToAbsoluteCoords(), # 位置信息转换

PhotometricDistort(), # 光度变形

Expand(self.mean), # 随机扩展

RandomSampleCrop(), # 随机裁剪

RandomMirror(), #随机镜像

ToPercentCoords(), #位置归一化

Resize(self.size), #图像尺寸缩放

SubtractMeans(self.mean) #图像去均值

  1. 模型搭建

https://blog.csdn.net/qq_17232031/article/details/90438676

https://blog.csdn.net/baidu_37283281/article/details/88371676

https://blog.csdn.net/xunan003/article/details/79186162

build_ssd-->SSD-->multibox(vgg,extras,mbox)

Multibox

vgg:搭建vgg网络

extras添加了额外的卷积层,通过这些卷积层得到的特征层

特征层为vgg中的第21层、倒数第二层和Extras中偶数卷积层为特征层,共6层,

每层特征图的大小为[38*3819*1910*105*53*31*1]

Mbox:为每个特征层的每个中心点的默认框的数目

Multibox:根据mbox添加定位与置信度分类层loc_layersconf_layers

SSDSSD.forword-->loc,conf,priors

Loc:通过vggExtras层和loc_layers层得到位置信息

conf:通过vggExtras层和conf_layers层得到置信度分类信息

Priors:得到默认框的坐标信息(PriorBox)

PriorBox:计算每个默认框相对于网络输入层输入图像的归一化左上角和右下角坐标

PriorBox.forward:特征图的每个中心点的默认框根据Mboxaspect_ratios(

认框的长宽比得到)

总共有38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732个默认框

  1. 构建优化器

optimizer = optim.SGD()

  1. 定义损失函数

https://blog.csdn.net/sinat_37145472/article/details/90259649

正负样本选择:

正样本:与 groundtruth box 同分类且满足 IOU>0.5 default box

负样本:根据分类loss值排序得到,数量为正样本的三倍



criterion = MultiBoxLoss()-->match

match()计算每个默认框相对于每张图片真实框的loc_t(位置偏差)和conf_t(分类置信度)

位置losssmooth_l1_loss(回归问题)

分类losscross_entropy(分类问题)

lossL(x,c,l,g) = (Lconf(x, c) + αLloc(x,l,g)) / N


  1. 识别

out = net(images)

调用的就是ssd.forword

  1. 计算损失函数

optimizer.zero_grad()

loss_l, loss_c = criterion(out, targets)

调用的其实是MultiBoxLoss

  1. 后向传播

loss.backward()



 

posted on 2019-08-05 15:10  cekong  阅读(482)  评论(0编辑  收藏  举报