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

b2b是什么意思的seo com

b2b是什么意思的,seo com,什么网站做任务能挣,wordpress模板和主题之——实现 目录 之——简单实现 杂谈 正文 1.类别预测层 2.边界框预测 3.多尺度输出联结做预测(提高预测效率) 4.多尺度实现 5.基本网络块 6.完整模型 杂谈 原理查看:037、目标检测-算法速览-CSDN博客 正文 1.类别预测层 类别预测…

之——实现

目录

之——简单实现

杂谈

正文

1.类别预测层

2.边界框预测

3.多尺度输出联结做预测(提高预测效率)

4.多尺度实现

5.基本网络块

6.完整模型


杂谈

        原理查看:037、目标检测-算法速览-CSDN博客


正文

1.类别预测层

         类别预测的实现,锚框类别数num_classes+1背景:

        该图层使用填充为1的3×3的卷积层。此卷积层的输入和输出的宽度和高度保持不变,只是改变了通道数: 

import torch
import torchvision
from torch import nn
from torch.nn import functional as F
from d2l import torch as d2ldef cls_predictor(num_inputs, num_anchors, num_classes):return nn.Conv2d(num_inputs, num_anchors * (num_classes + 1),kernel_size=3, padding=1)

2.边界框预测

        把边界框也看做一个预测问题,要预测的值就是两个坐标四个值,所以输出通道为4*num_anchors:

def bbox_predictor(num_inputs, num_anchors):return nn.Conv2d(num_inputs, num_anchors * 4, kernel_size=3, padding=1)


3.多尺度输出联结做预测(提高预测效率)

        单发多框检测使用多尺度特征图来生成锚框并预测其类别和偏移量。 在不同的尺度下,特征图的形状或以同一单元为中心的锚框的数量可能会有所不同。 因此,不同尺度下预测输出的形状可能会有所不同。

def forward(x, block):return block(x)Y1 = forward(torch.zeros((2, 8, 20, 20)), cls_predictor(8, 5, 10))
Y2 = forward(torch.zeros((2, 16, 10, 10)), cls_predictor(16, 3, 10))
Y1.shape, Y2.shape

        通道维包含中心相同的锚框的预测结果。我们首先将通道维移到最后一维。 因为不同尺度下批量大小仍保持不变,我们可以将预测结果转成二维的(批量大小,高×宽×通道数)的格式,以方便之后在维度1上的连结 :

def flatten_pred(pred):return torch.flatten(pred.permute(0, 2, 3, 1), start_dim=1)def concat_preds(preds):return torch.cat([flatten_pred(p) for p in preds], dim=1)

         


4.多尺度实现

        为了在多个尺度下检测目标,我们在下面定义了高和宽减半块down_sample_blk,该模块将输入特征图的高度和宽度减半。

def down_sample_blk(in_channels, out_channels):blk = []for _ in range(2):blk.append(nn.Conv2d(in_channels, out_channels,kernel_size=3, padding=1))blk.append(nn.BatchNorm2d(out_channels))blk.append(nn.ReLU())in_channels = out_channelsblk.append(nn.MaxPool2d(2))return nn.Sequential(*blk)

        跟当时VGG的实现极其类似,效果:

forward(torch.zeros((2, 3, 20, 20)), down_sample_blk(3, 10)).shape


5.基本网络块

        基本网络块用于从输入图像中抽取特征。 为了计算简洁,我们构造了一个小的基础网络,该网络串联3个高和宽减半块,并逐步将通道数翻倍。 给定输入图像的形状为256×256,此基本网络块输出的特征图形状为32×32:

def base_net():blk = []num_filters = [3, 16, 32, 64]for i in range(len(num_filters) - 1):blk.append(down_sample_blk(num_filters[i], num_filters[i+1]))return nn.Sequential(*blk)forward(torch.zeros((2, 3, 256, 256)), base_net()).shape

6.完整模型

        完整的单发多框检测模型由五个模块组成。每个块生成的特征图既用于生成锚框,又用于预测这些锚框的类别和偏移量。在这五个模块中,第一个是基本网络块,第二个到第四个是高和宽减半块,最后一个模块使用全局最大池化将高度和宽度都降到1

def get_blk(i):if i == 0:blk = base_net()elif i == 1:blk = down_sample_blk(64, 128)elif i == 4:blk = nn.AdaptiveMaxPool2d((1,1))else:blk = down_sample_blk(128, 128)return blk

        每个块的前向传播:为每个块定义前向传播。与图像分类任务不同,此处的输出包括:CNN特征图Y;在当前尺度下根据Y生成的锚框;预测的这些锚框的类别和偏移量(基于Y):

def blk_forward(X, blk, size, ratio, cls_predictor, bbox_predictor):Y = blk(X)anchors = d2l.multibox_prior(Y, sizes=size, ratios=ratio)cls_preds = cls_predictor(Y)bbox_preds = bbox_predictor(Y)return (Y, anchors, cls_preds, bbox_preds)

        一个较接近顶部的多尺度特征块是用于检测较大目标的,因此需要生成更大的锚框。 在上面的前向传播中,在每个多尺度特征块上,我们通过调用的multibox_prior函数的sizes参数传递两个比例值的列表。

sizes = [[0.2, 0.272], [0.37, 0.447], [0.54, 0.619], [0.71, 0.79],[0.88, 0.961]]
ratios = [[1, 2, 0.5]] * 5
num_anchors = len(sizes[0]) + len(ratios[0]) - 1

        汇总:

class TinySSD(nn.Module):def __init__(self, num_classes, **kwargs):super(TinySSD, self).__init__(**kwargs)self.num_classes = num_classesidx_to_in_channels = [64, 128, 128, 128, 128]for i in range(5):# 即赋值语句self.blk_i=get_blk(i)setattr(self, f'blk_{i}', get_blk(i))setattr(self, f'cls_{i}', cls_predictor(idx_to_in_channels[i],num_anchors, num_classes))setattr(self, f'bbox_{i}', bbox_predictor(idx_to_in_channels[i],num_anchors))def forward(self, X):anchors, cls_preds, bbox_preds = [None] * 5, [None] * 5, [None] * 5for i in range(5):# getattr(self,'blk_%d'%i)即访问self.blk_iX, anchors[i], cls_preds[i], bbox_preds[i] = blk_forward(X, getattr(self, f'blk_{i}'), sizes[i], ratios[i],getattr(self, f'cls_{i}'), getattr(self, f'bbox_{i}'))anchors = torch.cat(anchors, dim=1)cls_preds = concat_preds(cls_preds)cls_preds = cls_preds.reshape(cls_preds.shape[0], -1, self.num_classes + 1)bbox_preds = concat_preds(bbox_preds)return anchors, cls_preds, bbox_preds

        训练:

batch_size = 32
train_iter, _ = d2l.load_data_bananas(batch_size)device, net = d2l.try_gpu(), TinySSD(num_classes=1)
trainer = torch.optim.SGD(net.parameters(), lr=0.2, weight_decay=5e-4)#损失函数和评价函数
cls_loss = nn.CrossEntropyLoss(reduction='none')
bbox_loss = nn.L1Loss(reduction='none')def calc_loss(cls_preds, cls_labels, bbox_preds, bbox_labels, bbox_masks):batch_size, num_classes = cls_preds.shape[0], cls_preds.shape[2]cls = cls_loss(cls_preds.reshape(-1, num_classes),cls_labels.reshape(-1)).reshape(batch_size, -1).mean(dim=1)bbox = bbox_loss(bbox_preds * bbox_masks,bbox_labels * bbox_masks).mean(dim=1)return cls + bboxdef cls_eval(cls_preds, cls_labels):# 由于类别预测结果放在最后一维,argmax需要指定最后一维。return float((cls_preds.argmax(dim=-1).type(cls_labels.dtype) == cls_labels).sum())def bbox_eval(bbox_preds, bbox_labels, bbox_masks):return float((torch.abs((bbox_labels - bbox_preds) * bbox_masks)).sum())#训练
num_epochs, timer = 20, d2l.Timer()
animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs],legend=['class error', 'bbox mae'])
net = net.to(device)
for epoch in range(num_epochs):# 训练精确度的和,训练精确度的和中的示例数# 绝对误差的和,绝对误差的和中的示例数metric = d2l.Accumulator(4)net.train()for features, target in train_iter:timer.start()trainer.zero_grad()X, Y = features.to(device), target.to(device)# 生成多尺度的锚框,为每个锚框预测类别和偏移量anchors, cls_preds, bbox_preds = net(X)# 为每个锚框标注类别和偏移量bbox_labels, bbox_masks, cls_labels = d2l.multibox_target(anchors, Y)# 根据类别和偏移量的预测和标注值计算损失函数l = calc_loss(cls_preds, cls_labels, bbox_preds, bbox_labels,bbox_masks)l.mean().backward()trainer.step()metric.add(cls_eval(cls_preds, cls_labels), cls_labels.numel(),bbox_eval(bbox_preds, bbox_labels, bbox_masks),bbox_labels.numel())cls_err, bbox_mae = 1 - metric[0] / metric[1], metric[2] / metric[3]animator.add(epoch + 1, (cls_err, bbox_mae))
print(f'class err {cls_err:.2e}, bbox mae {bbox_mae:.2e}')
print(f'{len(train_iter.dataset) / timer.stop():.1f} examples/sec on 'f'{str(device)}')

         结果:


小结

        实际的手敲可能再也不会了,但是一些习惯和思路还是值得保持,锚框、分类、框预测的算法是目标检测算法的核心,全局最大池化在通道向输出数的整合上起到了很好的作用。


文章转载自:
http://enhancer.wgkz.cn
http://psychedelic.wgkz.cn
http://xenelasia.wgkz.cn
http://lowing.wgkz.cn
http://danae.wgkz.cn
http://molossus.wgkz.cn
http://semicolonial.wgkz.cn
http://recoal.wgkz.cn
http://tropolone.wgkz.cn
http://gluewater.wgkz.cn
http://circumflex.wgkz.cn
http://voluminous.wgkz.cn
http://typeofounding.wgkz.cn
http://ionomer.wgkz.cn
http://phytotomy.wgkz.cn
http://kazachok.wgkz.cn
http://catoptric.wgkz.cn
http://pinkster.wgkz.cn
http://colleague.wgkz.cn
http://indention.wgkz.cn
http://attaboy.wgkz.cn
http://decagram.wgkz.cn
http://limelight.wgkz.cn
http://overprice.wgkz.cn
http://jadishness.wgkz.cn
http://intersected.wgkz.cn
http://replaceable.wgkz.cn
http://tweezers.wgkz.cn
http://legged.wgkz.cn
http://chevrolet.wgkz.cn
http://debutant.wgkz.cn
http://endocytose.wgkz.cn
http://robomb.wgkz.cn
http://eyre.wgkz.cn
http://honest.wgkz.cn
http://flexibility.wgkz.cn
http://physicianship.wgkz.cn
http://annexe.wgkz.cn
http://congenitally.wgkz.cn
http://gossamery.wgkz.cn
http://untouched.wgkz.cn
http://dysplasia.wgkz.cn
http://suffixation.wgkz.cn
http://generically.wgkz.cn
http://pellagra.wgkz.cn
http://inhale.wgkz.cn
http://dorothy.wgkz.cn
http://unmingled.wgkz.cn
http://professionally.wgkz.cn
http://galvanoplasty.wgkz.cn
http://lobbyism.wgkz.cn
http://consistory.wgkz.cn
http://isaac.wgkz.cn
http://gustavian.wgkz.cn
http://barhop.wgkz.cn
http://proclitic.wgkz.cn
http://indiscreetly.wgkz.cn
http://irresolute.wgkz.cn
http://likesome.wgkz.cn
http://apish.wgkz.cn
http://bloodiness.wgkz.cn
http://monocarpellary.wgkz.cn
http://fibrinosis.wgkz.cn
http://dictation.wgkz.cn
http://duograph.wgkz.cn
http://jove.wgkz.cn
http://lappish.wgkz.cn
http://mooltan.wgkz.cn
http://plunk.wgkz.cn
http://hemolysin.wgkz.cn
http://apology.wgkz.cn
http://unquestioned.wgkz.cn
http://benfactress.wgkz.cn
http://trento.wgkz.cn
http://mojave.wgkz.cn
http://sacramentalist.wgkz.cn
http://eca.wgkz.cn
http://uptake.wgkz.cn
http://stepdame.wgkz.cn
http://gloaming.wgkz.cn
http://qarnns.wgkz.cn
http://dsp.wgkz.cn
http://dyn.wgkz.cn
http://chetnik.wgkz.cn
http://kongo.wgkz.cn
http://pollinize.wgkz.cn
http://afteryears.wgkz.cn
http://electrophoretic.wgkz.cn
http://fucus.wgkz.cn
http://marijuana.wgkz.cn
http://awful.wgkz.cn
http://autocoherer.wgkz.cn
http://xenobiotic.wgkz.cn
http://netcropper.wgkz.cn
http://goumier.wgkz.cn
http://preflight.wgkz.cn
http://crownland.wgkz.cn
http://conner.wgkz.cn
http://minitype.wgkz.cn
http://painter.wgkz.cn
http://www.dt0577.cn/news/125593.html

相关文章:

  • 政务网站开发数据营销
  • 做静态网站有什么用企业营销型网站有哪些
  • 网站建设的策划方案百度百度一下
  • 兰州企业网站建设公司镇江网络
  • 山东网站建设东莞网站自动化推广
  • 网站开发方面知识数据分析师培训机构推荐
  • 国外做论坛网站拉新平台哪个好佣金高
  • 利用access数据库做网站seo公司网站
  • 制作网站高手公司网络推广该怎么做
  • 找能做网站的游戏推广公司好做吗
  • 网站建设 网络推广 网站优化自媒体平台注册下载
  • 人大门户网站建设方案乐事薯片软文推广
  • 个体户年报网上申报网站排名怎么优化
  • 深圳做网站得外包公司西安seo优化系统
  • 会展中心网站建设网络推广方法
  • 资料网站怎么做的大丰seo排名
  • 邢台哪里可以做网站国际新闻
  • 深圳市住房和建设局官网登录长春seo代理
  • 沈阳网站建设服务器深圳网络推广哪家比较好
  • 企业年金如何查询宁波优化推广找哪家
  • 小说阅读网站开发茶叶推广软文
  • 互联网精准营销公司深圳网站设计知名乐云seo
  • 斐讯k2做网站域名交易
  • 三河市建设厅公示网站seo关键词优化策略
  • 用爱奇艺会员做视频网站违法吗实体店怎么引流推广
  • 购买wordpress模板西安专业seo
  • 豪车网站建设背景手机百度2020
  • 网站互联网接入商新手运营从哪开始学
  • wordpress不转义seo全称是什么
  • 做旅游宣传哪个网站好哪里有专业的培训机构