当前位置: 首页 > news >正文

桥梁建设网站长沙网站改版

桥梁建设网站,长沙网站改版,重庆网站seo优化,wordpress如何让外网访问目标检测近年来已经取得了很重要的进展#xff0c;主流的算法主要分为两个类型#xff1a; #xff08;1#xff09;two-stage方法#xff0c;如R-CNN系算法#xff0c;其主要思路是先通过启发式方法#xff08;selective search#xff09;或者CNN网络#xff08;RP…目标检测近年来已经取得了很重要的进展主流的算法主要分为两个类型 1two-stage方法如R-CNN系算法其主要思路是先通过启发式方法selective search或者CNN网络RPN)产生一系列稀疏的候选框然后对这些候选框进行分类与回归two-stage方法的优势是准确度高 2one-stage方法如Yolo和SSD其主要思路是均匀地在图片的不同位置进行密集抽样抽样时可以采用不同尺度和长宽比然后利用CNN提取特征后直接进行分类与回归整个过程只需要一步所以其优势是速度快但是均匀的密集采样的一个重要缺点是训练比较困难这主要是因为正样本与负样本背景极其不均衡参见 Focal Loss导致模型准确度稍低。不同算法的性能如图1所示可以看到两类方法在准确度和速度上的差异。 图1 不同检测算法的性能对比本文讲解的是SSD算法英文名Single Shot MultiBox Detector。Single shot指明了SSD算法属于one-stage方法MultiBox指明了SSD是多框预测。从图1也可以看到SSD算法在准确度和速度除了SSD512上都比Yolo要好很多。图2给出了不同算法的基本框架图对于Faster R-CNN其先通过CNN得到候选框然后再进行分类与回归而Yolo与SSD可以一步到位完成检测。相比YoloSSD采用CNN来直接进行检测而不是像Yolo那样在全连接层之后做检测。其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点另外还有两个重要的改变一是SSD提取了不同尺度的特征图来做检测大尺度特征图较靠前的特征图可以用来检测小物体而小尺度特征图较靠后的特征图用来检测大物体二是SSD采用了不同尺度和长宽比的先验框Prior boxes, Default boxes在Faster R-CNN中叫做锚Anchors。Yolo算法缺点是难以检测小目标而且定位不准但是这几点重要改进使得SSD在一定程度上克服这些缺点。下面我们详细讲解SDD算法的原理并最后给出如何用TensorFlow实现SSD算法。 图2 不同算法的基本框架图设计理念 SSD 和 Yolo 一样都是采用一个CNN网络来进行检测但是却采用了多尺度的特征图其基本架构如图3所示。下面将SSD核心设计理念总结为以下三点 图3 SSD基本框架(1)采用多尺度特征图用于检测 所谓多尺度大小不同的特征图指CNN网络一般前面的特征图比较大后面会逐渐采用stride2的卷积或者pool来降低特征图大小这正如图3所示一个比较大的特征图和一个比较小的特征图它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标而小的特征图负责检测大目标如图4所示8x8的特征图可以划分更多的单元但是其每个单元的先验框尺度比较小。 图4 不同尺度的特征图(2)采用卷积进行检测 与Yolo最后采用全连接层不同SSD 直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m∗n∗pm*n*pm∗n∗p 的特征图只需要采用 3∗3∗p3*3*p3∗3∗p 的特征图这样比较小的卷积核得到检测值。 (3)设置先验框 在Yolo中每个单元预测多个边界框但是其都是相对这个单元本身正方块但是真实目标的形状是多变的Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念每个单元设置尺度或者长宽比不同的先验框预测的边界框bounding boxes是以这些先验框为基准的在一定程度上减少训练难度。一般情况下每个单元会设置多个先验框其尺度和长宽比存在差异如图5所示可以看到每个单元使用了4个不同的先验框图片中猫和狗分别采用最适合它们形状的先验框来进行训练后面会详细讲解训练过程中的先验框匹配原则。 图5 SSD的先验框SSD的检测值也与Yolo不太一样。对于每个单元的每个先验框其都输出一套独立的检测值对应一个边界框主要分为两个部分。 第一部分是各个类别的置信度或者评分值得注意的是SSD将背景也当做了一个特殊的类别如果检测目标共有C个类别SSD其实需要预测C1个置信度值其中第一个置信度指的是不含目标或者属于背景的评分。后面当我们说C个个类别置信度时请记住里面包含背景那个特殊的类别即真实的检测类别只有C-1个。在预测过程中置信度最高的那个类别就是边界框所属的类别特别地当第一个置信度值最高时表示边界框中并不包含目标。 第二部分就是边界框的location包含4个值cx,cy,w,h分别表示边界框的中心坐标以及宽高。但是真实预测值其实只是边界框(grand truth 框)相对于先验框的转换值(paper里面说是offset但是觉得transformation更合适参见 R-CNN论文。先验框位置用 d(dcx,dcy,dw,dh)d(d^{cx}, d^{cy}, d^{w},d^{h})d(dcx,dcy,dw,dh)表示其对应边界框用 b(bcx,bcy,bw,bh)b(b^{cx}, b^{cy}, b^{w},b^{h})b(bcx,bcy,bw,bh) 表示那么边界框的预测值l,其实是b相对于d的转换值 习惯上我们称上面这个过程为边界框的编码encode预测时你需要反向这个过程即进行解码decode从预测值l中得到边界框的真实位置b: 然而在SSD的Caffe源码https://github.com/weiliu89/caffe/tree/ssd实现中还有trick那就是设置variance超参数来调整检测值通过bool参数variance_encoded_in_target来控制两种模式当其为True时表示variance被包含在预测值中就是上面那种情况。但是如果是Fasle大部分采用这种方式训练更容易就需要手动设置超参数variance用来对l的4个值进行放缩此时边界框需要这样解码 综上所述对于一个大小 m∗nm*nm∗n 的特征图共有mn个单元每个单元设置的先验框数目记为k,那么每个单元共需要c4k个预测值所有的单元共需要c4kmn个预测值由于SSD采用卷积做检测所以就需要c4k个卷积核完成这个特征图的检测过程。 网络结构 SSD采用VGG16作为基础模型然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。SSD的网络结构如图6所示。上面是SSD模型下面是Yolo模型可以明显看到SSD利用了多尺度的特征图做检测。模型的输入图片大小是 300∗300300*300300∗300 还可以是 512∗512512*512512∗512其与前者网络结构没有差别只是最后新增一个卷积层本文不再讨论。 图6 SSD网络结构SSD 采用VGG16做基础模型首先VGG16是在 ILSVRC CLS-LOC 数据集预训练。然后借鉴了DeepLab-LargeFOV(链接https://export.arxiv.org/pdf/1606.00915)分别将VGG16的全连接层fc6和fc7转换成 3∗33*33∗3 卷积层 conv6 和 1∗11*11∗1 卷积层 conv7同时将池化层 pool 5由原来的 2∗2−s22*2-s22∗2−s2 变成 3∗3−s13*3-s13∗3−s1 (猜想是不想reduce特征图大小),为了配合这种变化采用了一种Atrous Algorithm其实就是conv6采用扩展卷积或带孔卷积Dilation Convhttps://arxiv.org/abs/1511.07122其在不增加参数与模型复杂度的条件下指数级扩大卷积的视野其使用扩张率(dilation rate)参数来表示扩张的大小如下图6所示(a)是普通的 3∗33*33∗3 卷积其视野就是 3∗33*33∗3(b)是扩张率为2此时视野变成 7∗77*77∗7©扩张率为4时视野扩大为 15∗1515*1515∗15但是视野的特征更稀疏了。Conv6采用3∗33*33∗3 大小但 dilation rate6 的扩展卷积。然后移除dropout层和fc8层并新增一系列卷积层在检测数据集上做finetuing。 图7 扩展卷积(膨胀卷积)其中VGG16中的Conv4_3层将作为用于检测的第一个特征图。conv4_3层特征图大小是 38∗3838*3838∗38但是该层比较靠前其norm较大所以在其后面增加了一个L2 Normalization层参见ParseNethttps://arxiv.org/abs/1506.04579以保证和后面的检测层差异不是很大这个和Batch Normalization层不太一样其仅仅是对每个像素点在channle维度做归一化而Batch Normalization层是在[batch_size, width, height]三个维度上做归一化。归一化后一般设置一个可训练的放缩变量gamma使用TF可以这样简单实现 # l2norm (not bacth norm, spatial normalization) def l2norm(x, scale, trainableTrue, scopeL2Normalization):n_channels x.get_shape().as_list()[-1]l2_norm tf.nn.l2_normalize(x, [3], epsilon1e-12)with tf.variable_scope(scope):gamma tf.get_variable(gamma, shape[n_channels, ], dtypetf.float32,initializertf.constant_initializer(scale),trainabletrainable)return l2_norm * gamma从后面新增的卷积层中提取Conv7Conv8_2Conv9_2Conv10_2Conv11_2作为检测所用的特征图加上Conv4_3层共提取了6个特征图其大小分别是(38,38),(19,19),(10,10),(5,5),(3,3,),(1,1), 但是不同特征图设置的先验框数目不同同一个特征图上每个单元设置的先验框是相同的这里的数目指的是一个单元的先验框数目。先验框的设置包括尺度或者说大小和长宽比两个方面。对于先验框的尺度其遵守一个线性递增规则随着特征图大小降低先验框尺度线性增加 其中m指的特征图个数但却是5因为第一层Conv4_3层是单独设置的SkS_kSk​是先验框大小相对于图片的比例而SminS_{min}Smin​和SmaxS_{max}Smax​表示比例的最小值与最大值paper里面取0.2和0.9。对于第一个特征图其先验框的尺度比例一般设置为Smin/20.1S_{min}/20.1Smin​/20.1,那么尺度为300*0.130。对于后面的特征图先验框尺度按照上面公式线性增加但是先将尺度比例先扩大100倍此时增长步长为 这样各个特征图的SkS_kSk​为20,37,54,71,88,将这些比例除以100然后再乘以图片大小可以得到各个特征图的尺度为60,111,162,213,264这种计算方式是参考SSD的Caffe源码。综上可以得到各个特征图的先验框尺度30,60,111,162,213,264。对于长宽比一般选取 ar∈{1,2,3,12,13}a_r \in\{1,2,3,\frac{1}{2},\frac{1}{3}\}ar​∈{1,2,3,21​,31​}对于特定的长宽比按如下公式计算先验框的宽度与高度后面的Sk均指的是先验框实际尺度而不是尺度比例 默认情况下每个特征图会有一个 ar1a_r1ar​1 且尺度为 SkS_kSk​ 的先验框除此之外还会设置一个尺度为 sk′SkSk1{s}_k\sqrt{S_kS_{k1}}sk′​Sk​Sk1​​ 且 ar1a_r1ar​1 的先验框这样每个特征图都设置了两个长宽比为1但大小不同的正方形先验框。注意最后一个特征图需要参考一个虚拟 Sm1300105/100315S_{m1} 300105/100315Sm1​300105/100315来计算。因此每个特征图一共有6个先验框{1,2,3,12,13,1′}\{1,2,3,\frac{1}{2},\frac{1}{3},{1}\}{1,2,3,21​,31​,1′}但是在实现时Conv4_3Conv10_2和Conv11_2层仅使用4个先验框它们不使用长宽比为31/3的先验框。每个单元的先验框的中心点分布在各个单元的中心即 其中 ∣fk∣|f_k|∣fk​∣为特征图的大小。 得到了特征图之后需要对特征图进行卷积得到检测结果图7给出了一个5*5大小的特征图的检测过程。其中Priorbox是得到先验框前面已经介绍了生成规则。检测值包含两个部分类别置信度和边界框位置各采用一次3*3卷积来进行完成。令 nkn_knk​为该特征图所采用的先验框数目那么类别置信度需要的卷积核数量为nk∗cn_k * cnk​∗c而边界框位置需要的卷积核数量为nk∗4n_k * 4nk​∗4。由于每个先验框都会预测一个边界框所以SSD300一共可以预测 个边界框这是一个相当庞大的数字所以说SSD本质上是密集采样。 图7 基于卷积得到检测结果训练过程 1先验框匹配 在训练过程中首先要确定训练图片中的ground truth真实目标与哪个先验框来进行匹配与之匹配的先验框所对应的边界框将负责预测它。在Yolo中ground truth的中心落在哪个单元格该单元格中与其IOU最大的边界框负责预测它。但是在SSD中却完全不一样SSD的先验框与ground truth的匹配原则主要有两点。 第一个原则对于图片中每个ground truth找到与其IOU最大的先验框该先验框与其匹配这样可以保证每个ground truth一定与某个先验框匹配。通常称与ground truth匹配的先验框为正样本反之若一个先验框没有与任何ground truth进行匹配那么该先验框只能与背景匹配就是负样本。一个图片中ground truth是非常少的 而先验框却很多如果仅按第一个原则匹配很多先验框会是负样本正负样本极其不平衡所以需要第二个原则。 第二个原则对于剩余的未匹配先验框若某个ground truth的IOU大于某个阈值一般是0.5那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配这是可以的。但是反过来却不可以因为一个先验框只能匹配一个ground truth如果多个ground truth与某个先验框IOU大于阈值那么先验框只与IOU最大的那个先验框进行匹配。第二个原则一定在第一个原则之后进行仔细考虑一下这种情况如果某个ground truth所对应最大IOU小于阈值并且所匹配的先验框却与另外一个ground truth的IOU大于阈值那么该先验框应该匹配谁答案应该是前者首先要确保某个ground truth一定有一个先验框与之匹配。但是这种情况我觉得基本上是不存在的。由于先验框很多某个ground truth的最大IOU肯定大于阈值所以可能只实施第二个原则就可以了这里的TensorFlowhttps://github.com/xiaohu2015/SSD-Tensorflow/blob/master/nets/ssd_common.py版本就是只实施了第二个原则但是这里的Pytorchhttps://github.com/amdegroot/ssd.pytorch/blob/master/layers/box_utils.py两个原则都实施了。图8为一个匹配示意图其中绿色的GT是ground truth红色为先验框FP表示负样本TP表示正样本。 图8 先验框匹配示意图尽管一个ground truth可以与多个先验框匹配但是ground truth相对先验框还是太少了所以负样本相对正样本会很多。为了保证正负样本尽量平衡SSD采用了hard negative mining就是对负样本进行抽样抽样时按照置信度误差预测背景的置信度越小误差越大进行降序排列选取误差的较大的top-k作为训练的负样本以保证正负样本比例接近1:3。 2损失函数 训练样本确定了然后就是损失函数了。损失函数定义为位置误差locatization loss loc与置信度误差confidence loss, conf的加权和 其中N是先验框的正样本数量。这里 xijp∈{1,0}x^p_{ij} \in \{1,0\}xijp​∈{1,0}为一个指示参数xijpx^p_{ij}xijp​ 表示第i个先验框与第j个ground truth匹配并且ground truth的类别为p。c为类别置信度预测值。l为先验框的所对应边界框的位置预测值而g是ground truth的位置参数。对于位置误差其采用Smooth L1 loss定义如下 由于的 xijpx^p_{ij}xijp​存在所以位置误差仅针对正样本进行计算。值得注意的是要先对ground truth的g进行编码得到 g^\hat{g}g^​因为预测值l也是编码值若设置variance_encoded_in_targetTrue编码时要加上variance 对于置信度误差其采用softmax loss: 权重系数a通过交叉验证设置为1。 3数据扩增 数据扩增Data Augmentation可以提升SSD的性能主要采用的技术有水平翻转horizontal flip随机裁剪加颜色扭曲random crop color distortion随机采集块域Randomly sample a patch获取小目标训练样本如下图所示 图9 数据扩增方案其它的训练细节如学习速率的选择详见论文这里不再赘述。 预测过程 预测过程比较简单对于每个预测框首先根据类别置信度确定其类别置信度最大者与置信度值并过滤掉属于背景的预测框。然后根据置信度阈值如0.5过滤掉阈值较低的预测框。对于留下的预测框进行解码根据先验框得到其真实的位置参数解码后一般还需要做clip防止预测框位置超出图片。解码之后一般需要根据置信度进行降序排列然后仅保留top-k如400个预测框。最后就是进行NMS算法过滤掉那些重叠度较大的预测框。最后剩余的预测框就是检测结果了。 性能评估 首先整体看一下SSD在VOC2007VOC2012及COCO数据集上的性能如表1所示。相比之下SSD512的性能会更好一些。加*的表示使用了image expansion data augmentation通过zoom out来创造小的训练样本技巧来提升SSD在小目标上的检测效果所以性能会有所提升。 表1 SSD在不同数据集上的性能SSD与其它检测算法的对比结果在VOC2007数据集如表2所示基本可以看到SSD与Faster R-CNN有同样的准确度并且与Yolo具有同样较快地检测速度。 表2 SSD与其它检测算法的对比结果在VOC2007数据集文章还对SSD的各个trick做了更为细致的分析表3为不同的trick组合对SSD的性能影响从表中可以得出如下结论 数据扩增技术很重要对于mAP的提升很大使用不同长宽比的先验框可以得到更好的结果 表3 不同的trick组合对SSD的性能影响同样的采用多尺度的特征图用于检测也是至关重要的这可以从表4中看出 表4 多尺度特征图对SSD的影响TensorFlow上的实现 SSD在很多框架上都有了开源的实现这里基于balancap的TensorFlow版本https://github.com/balancap/SSD-Tensorflow来实现SSD的Inference过程。这里实现的是SSD300与paper里面不同的是这里采用 smin0.15,smax0.9s_{min}0.15, s_{max}0.9smin​0.15,smax​0.9 。首先定义SSD的参数 self.ssd_params SSDParams(img_shape(300, 300), # 输入图片大小num_classes21, # 类别数背景no_annotation_label21,feat_layers[block4, block7, block8, block9, block10, block11], # 要进行检测的特征图namefeat_shapes[(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)], # 特征图大小anchor_size_bounds[0.15, 0.90], # 特征图尺度范围anchor_sizes[(21., 45.),(45., 99.),(99., 153.),(153., 207.),(207., 261.),(261., 315.)], # 不同特征图的先验框尺度第一个值是s_k第2个值是s_k1anchor_ratios[[2, .5],[2, .5, 3, 1. / 3],[2, .5, 3, 1. / 3],[2, .5, 3, 1. / 3],[2, .5],[2, .5]], # 特征图先验框所采用的长宽比每个特征图都有2个正方形先验框anchor_steps[8, 16, 32, 64, 100, 300], # 特征图的单元大小anchor_offset0.5, # 偏移值确定先验框中心normalizations[20, -1, -1, -1, -1, -1], # l2 normprior_scaling[0.1, 0.1, 0.2, 0.2] # variance)然后构建整个网络注意对于stride2的conv不要使用TF自带的padding“same”而是手动pad这是为了与Caffe一致 def _built_net(self):Construct the SSD netself.end_points {} # record the detection layers outputself._images tf.placeholder(tf.float32, shape[None, self.ssd_params.img_shape[0],self.ssd_params.img_shape[1], 3])with tf.variable_scope(ssd_300_vgg):# original vgg layers# block 1net conv2d(self._images, 64, 3, scopeconv1_1)net conv2d(net, 64, 3, scopeconv1_2)self.end_points[block1] netnet max_pool2d(net, 2, scopepool1)# block 2net conv2d(net, 128, 3, scopeconv2_1)net conv2d(net, 128, 3, scopeconv2_2)self.end_points[block2] netnet max_pool2d(net, 2, scopepool2)# block 3net conv2d(net, 256, 3, scopeconv3_1)net conv2d(net, 256, 3, scopeconv3_2)net conv2d(net, 256, 3, scopeconv3_3)self.end_points[block3] netnet max_pool2d(net, 2, scopepool3)# block 4net conv2d(net, 512, 3, scopeconv4_1)net conv2d(net, 512, 3, scopeconv4_2)net conv2d(net, 512, 3, scopeconv4_3)self.end_points[block4] netnet max_pool2d(net, 2, scopepool4)# block 5net conv2d(net, 512, 3, scopeconv5_1)net conv2d(net, 512, 3, scopeconv5_2)net conv2d(net, 512, 3, scopeconv5_3)self.end_points[block5] netprint(net)net max_pool2d(net, 3, stride1, scopepool5)print(net)# additional SSD layers# block 6: use dilate convnet conv2d(net, 1024, 3, dilation_rate6, scopeconv6)self.end_points[block6] net#net dropout(net, is_trainingself.is_training)# block 7net conv2d(net, 1024, 1, scopeconv7)self.end_points[block7] net# block 8net conv2d(net, 256, 1, scopeconv8_1x1)net conv2d(pad2d(net, 1), 512, 3, stride2, scopeconv8_3x3,paddingvalid)self.end_points[block8] net# block 9net conv2d(net, 128, 1, scopeconv9_1x1)net conv2d(pad2d(net, 1), 256, 3, stride2, scopeconv9_3x3,paddingvalid)self.end_points[block9] net# block 10net conv2d(net, 128, 1, scopeconv10_1x1)net conv2d(net, 256, 3, scopeconv10_3x3, paddingvalid)self.end_points[block10] net# block 11net conv2d(net, 128, 1, scopeconv11_1x1)net conv2d(net, 256, 3, scopeconv11_3x3, paddingvalid)self.end_points[block11] net# class and location predictionspredictions []logits []locations []for i, layer in enumerate(self.ssd_params.feat_layers):cls, loc ssd_multibox_layer(self.end_points[layer], self.ssd_params.num_classes,self.ssd_params.anchor_sizes[i],self.ssd_params.anchor_ratios[i],self.ssd_params.normalizations[i], scopelayer_box)predictions.append(tf.nn.softmax(cls))logits.append(cls)locations.append(loc)return predictions, logits, locations对于特征图的检测这里单独定义了一个组合层ssd_multibox_layer其主要是对特征图进行两次卷积分别得到类别置信度与边界框位置 # multibox layer: get class and location predicitions from detection layer def ssd_multibox_layer(x, num_classes, sizes, ratios, normalization-1, scopemultibox):pre_shape x.get_shape().as_list()[1:-1]pre_shape [-1] pre_shapewith tf.variable_scope(scope):# l2 normif normalization 0:x l2norm(x, normalization)print(x)# numbers of anchorsn_anchors len(sizes) len(ratios)# location predictionsloc_pred conv2d(x, n_anchors*4, 3, activationNone, scopeconv_loc)loc_pred tf.reshape(loc_pred, pre_shape [n_anchors, 4])# class predictioncls_pred conv2d(x, n_anchors*num_classes, 3, activationNone, scopeconv_cls)cls_pred tf.reshape(cls_pred, pre_shape [n_anchors, num_classes])return cls_pred, loc_pred对于先验框可以基于numpy生成定义在ssd_anchors.py文件中链接为https://github.com/xiaohu2015/DeepLearning_tutorials/blob/master/ObjectDetections/SSD/ssd_anchors.py。结合先验框与检测值对边界框进行过滤与解码 classes, scores, bboxes self._bboxes_select(predictions, locations)这里将得到过滤得到的边界框其中classes, scores, bboxes分别表示类别置信度值以及边界框位置。 基于训练好的权重文件在这里下载https://pan.baidu.com/s/1snhuTsT这里对SSD进行测试 ssd_net SSD() classes, scores, bboxes ssd_net.detections() images ssd_net.images()sess tf.Session() # Restore SSD model. ckpt_filename ./ssd_checkpoints/ssd_vgg_300_weights.ckpt sess.run(tf.global_variables_initializer()) saver tf.train.Saver() saver.restore(sess, ckpt_filename)img cv2.imread(./demo/dog.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_prepocessed preprocess_image(img) # 预处理图片主要是归一化和resize rclasses, rscores, rbboxes sess.run([classes, scores, bboxes],feed_dict{images: img_prepocessed}) rclasses, rscores, rbboxes process_bboxes(rclasses, rscores, rbboxes) # 处理预测框包括clip,sort,nmsplt_bboxes(img, rclasses, rscores, rbboxes) # 绘制检测结果详细代码在GitHub上了链接为https://github.com/xiaohu2015/DeepLearning_tutorials/tree/master/ObjectDetections/SSD然后看一下一个自然图片的检测效果 如果你想实现SSD的train过程你可以参考附录里面的Caffe,TensorFlow以及Pytorch实现。 小结 SSD在Yolo的基础上主要改进了三点多尺度特征图利用卷积进行检测设置先验框。这使得SSD在准确度上比Yolo更好而且对于小目标检测效果也相对好一点。由于很多实现细节都包含在源码里面文中有描述不准或者错误的地方在所难免欢迎交流指正。 参考文献 SSD: Single Shot MultiBox DetectorSSD SlideSSD CaffeSSD TensorFlowSSD Pytorchleonardoaraujosantos Artificial Inteligence online book
http://www.zqtcl.cn/news/245631/

相关文章:

  • 企业网站建设调查问卷重庆网站制作外包
  • 要建设一个网站需要什么北京优化网站公司
  • 多语言网站建设方案大同建设网站
  • 测网站打开的速度的网址wordpress 逻辑代码
  • 网站代码开发徐州网站建设青州陈酿
  • 建网站的软件有哪些做网站怎么挣钱赚钱
  • 徐州市建设局招投标网站谷歌网站的主要内容
  • 门户网站建设工作情况汇报花店网站建设课程设计论文
  • 长春绿园网站建设哪里制作企业网站
  • 建设网站计划ppt模板核酸二维码
  • 宁波网络推广制作seo关键词推广公司
  • 东莞市网站推广西安推广公司无网不胜
  • 全国网站建设有实力建筑人才网123
  • 海安网站设计公司网站开发好学嘛
  • 网站建设深圳公司上海贸易公司注册条件
  • 深圳市坪山新区建设局网站给别人做网站去掉版权
  • 怎么做监测网站的浏览量有没有专业做股指的评论网站
  • 济南微信网站开发网上效果代码网站可以下载吗
  • 门户网站的设计常见的管理信息系统有哪些
  • 网站添加悬浮二维码成都游戏网站开发
  • 用jquery做网站百度seo排名规则
  • 免备案手机网站室内设计说明
  • 网站被做站公司贩卖怎样将qq空间建设为个人网站
  • 网站开发有哪几类淮安app开发公司
  • 营销网站建设公司哪家好兵团第二师建设环保局网站
  • 做推广最好的网站是哪个深圳办公室装修招标
  • 郑州高端网站制作wordpress那个版本好
  • wordpress屏蔽右键f12奉化首页的关键词优化
  • cn域名做犯法网站做电影网站需要哪些证
  • 官方网站有哪些韶关做网站的公司