GauthierUD commited on
Commit
ecc7dcb
·
verified ·
1 Parent(s): 7286c56

Upload model.py

Browse files
Files changed (1) hide show
  1. model.py +49 -0
model.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class DoubleConv(nn.Module):
2
+ def __init__(self, in_ch, out_ch):
3
+ super().__init__()
4
+ self.block = nn.Sequential(
5
+ nn.Conv2d(in_ch, out_ch, 3, padding=1, bias=False),
6
+ nn.BatchNorm2d(out_ch),
7
+ nn.ReLU(inplace=True),
8
+ nn.Conv2d(out_ch, out_ch, 3, padding=1, bias=False),
9
+ nn.BatchNorm2d(out_ch),
10
+ nn.ReLU(inplace=True),
11
+ )
12
+
13
+ def forward(self, x):
14
+ return self.block(x)
15
+
16
+
17
+ class UNet(nn.Module):
18
+ def __init__(self, in_ch=3, out_ch=1, base=64):
19
+ super().__init__()
20
+ c = [base, base * 2, base * 4, base * 8, base * 16]
21
+ self.enc1 = DoubleConv(in_ch, c[0])
22
+ self.enc2 = DoubleConv(c[0], c[1])
23
+ self.enc3 = DoubleConv(c[1], c[2])
24
+ self.enc4 = DoubleConv(c[2], c[3])
25
+ self.bottleneck = DoubleConv(c[3], c[4])
26
+ self.pool = nn.MaxPool2d(2)
27
+
28
+ self.up4 = nn.ConvTranspose2d(c[4], c[3], 2, stride=2)
29
+ self.dec4 = DoubleConv(c[4], c[3])
30
+ self.up3 = nn.ConvTranspose2d(c[3], c[2], 2, stride=2)
31
+ self.dec3 = DoubleConv(c[3], c[2])
32
+ self.up2 = nn.ConvTranspose2d(c[2], c[1], 2, stride=2)
33
+ self.dec2 = DoubleConv(c[2], c[1])
34
+ self.up1 = nn.ConvTranspose2d(c[1], c[0], 2, stride=2)
35
+ self.dec1 = DoubleConv(c[1], c[0])
36
+ self.head = nn.Conv2d(c[0], out_ch, 1)
37
+
38
+ def forward(self, x):
39
+ e1 = self.enc1(x)
40
+ e2 = self.enc2(self.pool(e1))
41
+ e3 = self.enc3(self.pool(e2))
42
+ e4 = self.enc4(self.pool(e3))
43
+ b = self.bottleneck(self.pool(e4))
44
+
45
+ d4 = self.dec4(torch.cat([self.up4(b), e4], 1))
46
+ d3 = self.dec3(torch.cat([self.up3(d4), e3], 1))
47
+ d2 = self.dec2(torch.cat([self.up2(d3), e2], 1))
48
+ d1 = self.dec1(torch.cat([self.up1(d2), e1], 1))
49
+ return self.head(d1)