U-Net を構築する:レイヤーの定義
この演習と次の演習では、U-Net アーキテクチャを最初から構築します。ここでは、__init__() メソッドを定義し、モデルで使用するレイヤーやレイヤーブロックを用意します。
エンコーダと転置畳み込みはすでに用意されています。残っているのはデコーダ側の畳み込みブロックです。スキップ接続を考慮しながら、各ブロックに適切な入力チャネル数と出力チャネル数を渡してください。
最初のブロック dec1 は、upconv3 の出力と enc3 の出力を連結したものを入力に取ります。さらに、dec1 の出力は enc3 の出力と同じになるべきです。不足している入力サイズと出力サイズをすべて埋められますか?
この演習はコースの一部です
PyTorch で学ぶ画像向け Deep Learning
演習の手順
- デコーダ内の 3 つの畳み込みブロックについて、各ブロックに適切な入力チャネル数と出力チャネル数を渡して定義してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
class UNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(UNet, self).__init__()
self.enc1 = self.conv_block(in_channels, 64)
self.enc2 = self.conv_block(64, 128)
self.enc3 = self.conv_block(128, 256)
self.enc4 = self.conv_block(256, 512)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.upconv3 = nn.ConvTranspose2d(512, 256, kernel_size=2, stride=2)
self.upconv2 = nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2)
self.upconv1 = nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2)
# Define the decoder blocks
self.dec1 = self.conv_block(____, ____)
self.dec2 = self.conv_block(____, ____)
self.dec3 = self.conv_block(____, ____)
self.out = nn.Conv2d(64, out_channels, kernel_size=1)