概述
1 网络结构
1.1 MobileNet系列
1.1.1 MobileNetV1
深度可分离卷积:
(1) 先用depthwise卷积(卷积核输出通道数和输入通道数相同)将每一通道都进行卷积操作(没有进行特征组合)
(2) 再使用pointwise卷积(即跟其他1$*$1卷积使用相同)
(3) pytorch实现
def conv_dw(inp, oup, stride):
return nn.Sequential(
nn.Conv2d(inp, inp, 3, stride, 1, groups=inp, bias=False),
nn.BatchNorm2d(inp),
nn.ReLU(inplace=True),
nn.Conv2d(inp, oup, 1, 1, 0, bias=False),
nn.BatchNorm2d(oup),
nn.ReLU(inplace=True),
)
(4) MobileNet是小模型不容易过拟合: 当训练MobileNets时,不使用sideheads或者labelsmoothing,通过限制croping的尺寸来减少图片扭曲;depthwise滤波器上放置很少或没有重量衰减(L2正则化),因为它们参数很少
参考
[1] MobileNetV1翻译
[2] MobileNetV1 & MobileNetV2 简介
[3] CNN模型之MobileNet
1.1.2 MobileNetV2
(1) Inverted residuals
加入残差块: 先用1*1卷积核扩张通道数(获取更多的特征)再使用MobileNetV1的深度可分离卷积
(2) Linear bottlenecks
意义: 避免ReLU对特征的破坏(对负的输入,输出为0)
实现: 去掉深度可分离卷积的最后一层ReLU
参考:
[1] MobileNetV2翻译
[2] 轻量化网络:MobileNet-V2
[3] MobileNetV2阅读笔记
1.1.3 MobileNetV3
1.2 SqueezeNet
Fire Module:将一层conv层改为squeeze层(带上Relu)和expand层(带上Relu)
参考:SqueezeNet模型详解
2 实践总结
2.1 运行代码
参考:
[1] MobileNetV3-SSD github(已跑通)
[2] SSD源码分析
[3] 另一个 MobileNetV3-SSD github(未跑通)
2.2 svhn数据集转voc
参考:
[1] svhn数据集中:matlab文件转txt格式
[2] 目标检测txt格式转voc
注意: 要查看好标注的坐标信息格式(voc数据集格式中是左上角和右下角,而svhn是左上角和框的长宽)
2.2 常见bug
(1) IndexError: too many indices for array #224 记得检查标注文件的annotations
参考: https://github.com/amdegroot/ssd.pytorch/issues/224
(2) python:CLASSES = (‘unlicensed_merchants’, )是元组但是CLASSES = (‘unlicensed_merchants’)不是,因为()没有用逗号’,'隔开
2.3 python语法
(1) super继承的MRO顺序的下一个类,不是父类.
(2) nametuple使用: tuple比list快且内存小,但只能通过下标访问.nametuple弥补了该缺陷,可像访问对象属性那样访问数据,增加了代码的可读性.
(3) python中函数加了个箭头是为了给函数参数增加信息,在python解释器当中不会对这些注解增加语义
参考:
[1] super自己的方法
[2] MRO
[3] 给函数增加一些元信息
3 应用场景
注:个人经验,如有不对,敬请指出
MobileNetV3-SSD
缺陷:对小物体不敏感,检测不出来,如遮阳伞,小箱子,可能是没有很好地利用浅层信息
优势:用1050显卡能够实时,在rk3399的demo上也能实时,nano有25帧数.相对其他轻量模型,mAP值比较高,实际中对非小物体IOU也比较好.
最后
以上就是鲜艳盼望为你收集整理的论文笔记3 MobileNetV3-SSD的全部内容,希望文章能够帮你解决论文笔记3 MobileNetV3-SSD所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复