深度可分离卷积-图例
计算流程
1. 数据特征图 - image图像
2. 分组卷积 - 对应通道进行卷积操作 -核心
3. 逐点卷积 - 调整通道 - 核心
4. 输出数据特征图 - featuremap
代码 - torch
"""
python - pytorch - 深度分离卷积
"""
import torch
import torch.nn as nn
class Depth_Wise_Conv(nn.Module):
"""
深度可分离卷积 = 分组卷积 + 逐点卷积调整通道
"""
def __init__(self, in_channel, out_channel):
super(Depth_Wise_Conv, self).__init__()
# 分组
self.conv_group = nn.Conv2d(in_channel, in_channel, kernel_size=3, stride=1, padding=1, groups=in_channel)
# 逐点
self.conv_point = nn.Conv2d(in_channel, out_channel, kernel_size=1, stride=1, padding=1, groups=1)
# BN
self.bn = nn.BatchNorm2d(out_channel)
# activate
self.act = nn.ReLU()
def forward(self, inputs):
"""
前向传播
"""
x = self.conv_group(inputs)
x = self.conv_point(x)
x = self.bn(x)
x = self.act(x)
return x
if __name__ == '__main__':
# 均匀分布产生数据
test = torch.rand(1, 3, 16, 16)
model = Depth_Wise_Conv(3, 16)
model = model(test)
print(model)