Unet模型的尝试在上周结束,我认为应该需要更多的尝试,首先目标有以下两点:
1.减小模型的参数,得到更轻量级的模型
2.减少模型的内存占用,为我们的tx2留下更多的资源
3.加快模型的推理速度。
我的主要思路是对于各种图像分割领域的模型进行测试,得到最好的模型进行不断的修改和尝试。
我主要对于STDC和BiseNetV2和BiseNetV1模型进行尝试,具体的尝试和Unet模型过程与步骤相同,而最终我选择了将BiSeNet系列的模型进行不断的训练测试并改善模型不去得到我们需要的模型,
首先BiseNet系列模型的更加轻量,通过训练得到的BiSeNet的模型最小20M,而STDC的模型大小为40M,虽然速度上对比有些差距,但这个需要我后期改善模型以及tensorrt的使用等方法来得到更快的速度。下面简单介绍一下BiSeNet模型吧。
BiSeNet-V2模型
(1)一个细节分支(Detail Branch),具有宽通道和浅层,以捕获low-level细节并生成高分辨率特征表示;
(2)语义分支(Semantic Branch),具有狭窄的通道和较深的层,以获取高级语义上下文。由于减少了信道容量和快速下采样策略,语义分支是轻量级的。
(3)设计了一个引导聚合层(Bilateral Guided Aggregation Layer),以增强相互连接并融合两种类型的要素表示。
(4)还设计了一种增强训练策略来提高分割性能,而无需任何额外的推理成本。
细节分支
class DetailBranch(nn.Layer):
def __init__(self, in_channels):
super().__init__()
C1, C2, C3 = 64, 64, 128
self.convs = nn.Sequential(
# stage 1
layers.ConvBNReLU(3, C1, 3, stride=2),
layers.ConvBNReLU(C1, C1, 3),
# stage 2
layers.