Source code for neodroidvision.multitask.fission.skip_hourglass.factory
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "Christian Heider Nielsen"
__doc__ = r"""
Created on 29/10/2019
"""
from typing import List, Tuple
from neodroidvision.multitask.fission.skip_hourglass.compress import Compress
from neodroidvision.multitask.fission.skip_hourglass.decompress import Decompress
from neodroidvision.multitask.fission.skip_hourglass.modes import MergeMode, UpscaleMode
__all__ = ["fcn_decoder", "fcn_encoder"]
[docs]def fcn_encoder(in_channels: int, depth: int, start_channels: int) -> Tuple[List, int]:
"""
:param in_channels:
:type in_channels:
:param depth:
:type depth:
:param start_channels:
:type start_channels:
:return:
:rtype:"""
down_convolutions = []
new_layer_channels = start_channels
prev_layer_channels = in_channels
for i in range(depth):
new_layer_channels *= 2
down_conv = Compress(
prev_layer_channels,
new_layer_channels,
pooling=True if i < depth - 1 else False,
)
prev_layer_channels = new_layer_channels
down_convolutions.append(down_conv)
return down_convolutions, prev_layer_channels
[docs]def fcn_decoder(
in_channels: int, depth: int, up_mode: UpscaleMode, merge_mode: MergeMode
) -> Tuple[List, int]:
"""
:param in_channels:
:type in_channels:
:param depth:
:type depth:
:param up_mode:
:type up_mode:
:param merge_mode:
:type merge_mode:
:return:
:rtype:"""
up_convolutions_ae = []
ae_prev_layer_channels = in_channels
for i in range(depth - 1):
# create the decoder pathway and add to a list - careful! decoding only requires depth-1 blocks
ae_new_layer_channels = ae_prev_layer_channels // 2
up_conv = Decompress(
ae_prev_layer_channels,
ae_new_layer_channels,
upscale_mode=up_mode,
merge_mode=merge_mode,
)
ae_prev_layer_channels = ae_new_layer_channels
up_convolutions_ae.append(up_conv)
return up_convolutions_ae, ae_prev_layer_channels