rknn模型部署(knn模型用来干嘛的)

rknn模型部署(knn模型用来干嘛的)import torch nn as nnimport torchimport torch nn functional as Fclass GoogLeNet nn Module def init self num classes 1000 aux logits True init weights False super GoogLeNet self init

大家好,我是讯享网,很高兴认识大家。



import torch.nn as nn
import torch
import torch.nn.functional as F


class GoogLeNet(nn.Module):
def init(self, num_classes=1000, aux_logits=True, init_weights=False):
super(GoogLeNet, self).init()

self.aux_logits = aux_logits

# 7*7,stride=2
self.conv1 = BasicConv2d(3, 64, kernel_size=7, stride=2, padding=3)
self.maxpool1 = nn.MaxPool2d(3, stride=2, ceil_mode=True)

# 1*1+3*3+maxpool
self.conv2 = BasicConv2d(64, 64, kernel_size=1)
self.conv3 = BasicConv2d(64, 192, kernel_size=3, padding=1)
self.maxpool2 = nn.MaxPool2d(3, stride=2, ceil_mode=True)

# 枝丫a
self.inception3a = Inception(192, 64, 96, 128, 16, 32, 32)
# 枝丫a
self.inception3b = Inception(256, 128, 128, 192, 32, 96, 64)
self.maxpool3 = nn.MaxPool2d(3, stride=2, ceil_mode=True)


self.inception4a = Inception(480, 192, 96, 208, 16, 48, 64)
self.inception4b = Inception(512, 160, 112, 224, 24, 64, 64)
self.inception4c = Inception(512, 128, 128, 256, 24, 64, 64)
self.inception4d = Inception(512, 112, 144, 288, 32, 64, 64)
self.inception4e = Inception(528, 256, 160, 320, 32, 128, 128)
self.maxpool4 = nn.MaxPool2d(3, stride=2, ceil_mode=True)

self.inception5a = Inception(832, 256, 160, 320, 32, 128, 128)
self.inception5b = Inception(832, 384, 192, 384, 48, 128, 128)

# 辅助分类器
if self.aux_logits:
self.aux1 = InceptionAux(512, num_classes)
self.aux2 = InceptionAux(528, num_classes)

# 平均池化
self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
self.dropout = nn.Dropout(0.4)
self.fc = nn.Linear(1024, num_classes)
if init_weights:
self._initialize_weights()

def forward(self, x):
# N x 3 x 224 x 224
x = self.conv1(x)
# N x 64 x 112 x 112
x = self.maxpool1(x)
# N x 64 x 56 x 56
x = self.conv2(x)
# N x 64 x 56 x 56
x = self.conv3(x)
# N x 192 x 56 x 56
x = self.maxpool2(x)

# N x 192 x 28 x 28
x = self.inception3a(x)
# N x 256 x 28 x 28
x = self.inception3b(x)
# N x 480 x 28 x 28
x = self.maxpool3(x)
# N x 480 x 14 x 14
x = self.inception4a(x)
# N x 512 x 14 x 14
if self.training and self.aux_logits: # eval model lose this layer
aux1 = self.aux1(x)

x = self.inception4b(x)
# N x 512 x 14 x 14
x = self.inception4c(x)
# N x 512 x 14 x 14
x = self.inception4d(x)
# N x 528 x 14 x 14

if self.training and self.aux_logits: # eval model lose this layer
aux2 = self.aux2(x)

x = self.inception4e(x)
# N x 832 x 14 x 14
x = self.maxpool4(x)
# N x 832 x 7 x 7
x = self.inception5a(x)
# N x 832 x 7 x 7
x = self.inception5b(x)
# N x 1024 x 7 x 7

x = self.avgpool(x)
# N x 1024 x 1 x 1
x = torch.flatten(x, 1)
# N x 1024
x = self.dropout(x)
x = self.fc(x)
# N x 1000 (num_classes)
if self.training and self.aux_logits: # eval model lose this layer
return x, aux2, aux1
return x

def _initialize_weights(self):

for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaimingnormal(m.weight, mode=‘fanout’, nonlinearity=‘relu’)
if m.bias is not None:
nn.init.constant

(m.bias, 0)
elif isinstance(m, nn.Linear):
nn.init.normal(m.weight, 0, 0.01)
nn.init.constant
(m.bias, 0)


class Inception(nn.Module):
def init(self, in_channels, ch1x1, ch3x3red, ch3x3, ch5x5red, ch5x5, pool_proj):
“’

:param in_channels: 输入的通道数
:param ch1x1: 1x1 卷积核通道数
:param ch3x3red:
:param ch3x3:
:param ch5x5red:
:param ch5x5:
:param pool_proj: 池化输出通道
“’
super(Inception, self).init()

self.branch1x1 = BasicConv2d(in_channels=in_channels,out_channels= ch1x1, kernel_size=1)

self.branch3x3 = nn.Sequential(
BasicConv2d(in_channels=in_channels, out_channels=ch3x3red, kernel_size=1),
BasicConv2d(in_channels= ch3x3red, out_channels=ch3x3, kernel_size=3, padding=1) # 保证输出大小等于输入大小
)

self.branch5x5 = nn.Sequential(
BasicConv2d(in_channels=in_channels, out_channels=ch5x5red, kernel_size=1),
BasicConv2d(in_channels=ch5x5red, out_channels=ch5x5, kernel_size=5, padding=2) # 保证输出大小等于输入大小
)

self.pool = nn.Sequential(
nn.MaxPool2d(kernel_size=3, stride=1, padding=1),
BasicConv2d(in_channels=in_channels, out_channels=pool_proj, kernel_size=1)
)

def forward(self, x):
branch1 = self.branch1x1(x)
branch2 = self.branch3x3(x)
branch3 = self.branch5x5(x)
branch4 = self.pool(x)

outputs = [branch1, branch2, branch3, branch4]
return torch.cat(outputs, 1)


class InceptionAux(nn.Module):
def init(self, in_channels, num_classes):
super(InceptionAux, self).init()
self.averagePool = nn.AvgPool2d(kernel_size=5, stride=3)
self.conv = BasicConv2d(in_channels, 128, kernel_size=1) # output[batch, 128, 4, 4]

self.fc1 = nn.Linear(2048, 1024)
self.fc2 = nn.Linear(1024, num_classes)

def forward(self, x):
# aux1: N x 512 x 14 x 14, aux2: N x 528 x 14 x 14
x = self.averagePool(x)
# aux1: N x 512 x 4 x 4, aux2: N x 528 x 4 x 4
x = self.conv(x)
# N x 128 x 4 x 4
x = torch.flatten(x, 1)
x = F.dropout(x, 0.5, training=self.training)
# N x 2048
x = F.relu(self.fc1(x), inplace=True)
x = F.dropout(x, 0.5, training=self.training)
# N x 1024
x = self.fc2(x)
# N x num_classes
return x


class BasicConv2d(nn.Module):

def init(self, in_channels, out_channels, kwargs):
super(BasicConv2d, self).init()
self.conv = nn.Conv2d(in_channels, out_channels, kwargs)
self.relu = nn.ReLU(inplace=True)

def forward(self, x):

x = self.conv(x)
x = self.relu(x)
return x


if name == ‘main’:
model = GoogLeNet()
print(model)



































































































































































































讯享网


讯享网


小讯
上一篇 2025-05-12 20:58
下一篇 2025-04-16 13:44

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/204776.html