# mobilenetv2的创新点,InvertedResidualclassInvertedResidual(nn.Module):def__init__(self,inp,oup,stride,expand_ratio,use_batch_norm=True,onnx_compatible=False):super(InvertedResidual,self).__init__()ReLU=nn.ReLUifonnx_compatibleelsenn.ReLU6 self.stride=strideassertstridein[1,2]hidden_dim=round...
Github库地址:pytorch-ssd/train_ssd.py 创建网络 create_net=lambdanum:create_mobilenetv2_ssd_lite(num,width_mult=args.mb2_width_mult)#这个写法有点意思哈。相当于create_net是一个能接受参数的函数!基于create_mobilenetv2_ssd_lite的函数,这个写法第一次见还纠结了一下,看完觉得很棒config=mobilenetv1_s...
MatchPrior具体代码见下(ssd.py) __init__用来初始化一些参数 __call__的写法可以学一下。之后再调用就是走的这条线,把boxes变成我们需要的locations classMatchPrior(object):def__init__(self,center_form_priors,center_variance,size_variance,iou_threshold):self.center_form_priors=center_form_priors self...
SSD_lite的lite就体现在上述这段代码中,它将SSD中的conv用深度可分离卷积来代替了.关于SSD的定义,先放一段mobilenetv2_ssd_lite.py中的代码在这里,可以大致了解每个参数的含义def create_mobilenetv2_ssd_lite(num_classes, width_mult=1.0, use_batch_norm=True, onnx_compatible=False, is_test=False): ...
box_utils.hard_negative_mining定义如下。SSD里面有正负样本1:3的说法,不然负样本就太多了。这个就是用来抑制负样本数量的。对于每张图片,做1:3的抑制。这里有点问题,注释说是对每张图做1:3,但实际看输入应该还是基于batch做的 defhard_negative_mining(loss,labels,neg_pos_ratio):""" ...
elifnet_type=='mb1-ssd':net=create_mobilenetv1_ssd(len(class_names),is_test=True)elifnet_type=='mb1-ssd-lite':net=create_mobilenetv1_ssd_lite(len(class_names),is_test=True)elifnet_type=='mb2-ssd-lite':net=create_mobilenetv2_ssd_lite(len(class_names),is_test=True)elifnet_type...
Github-pytorch-ssd 作者基于pytorch, 在SSD/SSD-Lite的基础上实现了MobileNetV1, MobileNetV2, VGG。 其中我重点关注的部分是MobileNetV2-SSDLite 接下来对代码做一个详细分析 MobileNetV2-SSDLite代码分析-2 test MobileNetV2-SSDLite代码分析-3 models-mobilenet_v2 ...