Diff of /ecgtoHR/HRnet.py [000000] .. [c0487b]

Switch to side-by-side view

--- a
+++ b/ecgtoHR/HRnet.py
@@ -0,0 +1,242 @@
+import torch.nn as nn
+import torch
+from torch.autograd import Variable
+import numpy as np
+
+class IncResBlock(nn.Module):
+    def __init__(self, inplanes, planes, convstr=1, convsize = 15, convpadding = 7):
+        super(IncResBlock, self).__init__()
+        self.Inputconv1x1 = nn.Conv1d(inplanes, planes, kernel_size=1, stride = 1, bias=False)
+        self.conv1_1 = nn.Sequential(
+            nn.Conv1d(in_channels = inplanes,out_channels = planes//4,kernel_size = convsize,stride = convstr,padding = convpadding),
+            nn.BatchNorm1d(planes//4))
+        self.conv1_2 = nn.Sequential(
+            nn.Conv1d(inplanes, planes//4, kernel_size=1, stride = convstr, padding=0, bias=False),
+            nn.BatchNorm1d(planes//4),
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(in_channels = planes//4,out_channels = planes//4,kernel_size = convsize+2,stride = convstr,padding = convpadding+1),
+            nn.BatchNorm1d(planes//4))
+        self.conv1_3 = nn.Sequential(
+            nn.Conv1d(inplanes, planes//4, kernel_size=1, stride = convstr, padding=0, bias=False),
+            nn.BatchNorm1d(planes//4),
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(in_channels = planes//4,out_channels = planes//4,kernel_size = convsize+4,stride = convstr,padding = convpadding+2),
+            nn.BatchNorm1d(planes//4))
+        self.conv1_4 = nn.Sequential(
+            nn.Conv1d(inplanes, planes//4, kernel_size=1, stride = convstr, padding=0, bias=False),
+            nn.BatchNorm1d(planes//4),
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(in_channels = planes//4,out_channels = planes//4,kernel_size = convsize+6,stride = convstr,padding = convpadding+3),
+            nn.BatchNorm1d(planes//4))
+        self.relu = nn.ReLU()
+    
+    def forward(self, x):
+        residual = self.Inputconv1x1(x)
+
+        c1 = self.conv1_1(x)
+        c2 = self.conv1_2(x)
+        c3 = self.conv1_3(x)
+        c4 = self.conv1_4(x)
+
+        out = torch.cat([c1,c2,c3,c4],1)
+        out += residual
+        out = self.relu(out)
+
+        return out
+
+class IncUNet (nn.Module):
+    def __init__(self, in_shape):
+        super(IncUNet, self).__init__()
+        in_channels, height, width = in_shape
+        self.e1 = nn.Sequential(
+            nn.Conv1d(in_channels, 64, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(64),
+            nn.LeakyReLU(0.2,),
+            IncResBlock(64,64))
+        self.e2 = nn.Sequential(
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(64, 128, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(128),
+            IncResBlock(128,128))
+        self.e2add = nn.Sequential(
+            nn.Conv1d(128, 128, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(128))
+        self.e3 = nn.Sequential(
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(128, 128, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(128),
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(128,256, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(256),
+            IncResBlock(256,256))
+        self.e4 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(256,256, kernel_size=4 , stride=1 , padding=1),
+            nn.BatchNorm1d(256),
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(256,512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        self.e4add = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(512,512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512)) 
+        self.e5 = nn.Sequential(
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(512,512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(512,512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+
+        self.e6 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(512,512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(512,512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512), 
+            IncResBlock(512,512))
+        
+        self.e6add = nn.Sequential(
+            nn.Conv1d(512,512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512)) 
+        
+        self.e7 = nn.Sequential(
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(512,512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(512,512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        
+        self.e8 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.Conv1d(512,512, kernel_size=4, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,inplace=True),
+            nn.Conv1d(512,512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512))
+        
+        
+        self.d1 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(512, 512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(512, 512, kernel_size=4, stride=1,padding =1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        
+        self.d2 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(1024, 512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(512, 512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        
+        self.d3 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(1024, 512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            nn.Dropout(p=0.5),
+            IncResBlock(512,512))
+        
+        self.d4 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(1024, 512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(512, 512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        
+        self.d5 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(1024, 512, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(512),
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(512, 512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        
+        self.d6 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(1024, 512, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(512),
+            IncResBlock(512,512))
+        
+        self.d7 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(1024, 256, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(256),
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(256, 256, kernel_size=4, stride=1,padding=1),
+            nn.BatchNorm1d(256),
+            IncResBlock(256,256))
+        
+        self.d8 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(512, 128, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(128),
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(128, 128, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(128))
+        
+        self.d9 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(256, 128, kernel_size=3, stride=1,padding=1),
+            nn.BatchNorm1d(128))
+        
+        self.d10 = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(256, 64, kernel_size=4, stride=2,padding=1),
+            nn.BatchNorm1d(64))
+        
+        self.out_l = nn.Sequential(
+            nn.LeakyReLU(0.2,),
+            nn.ConvTranspose1d(128, in_channels, kernel_size=4, stride=2,padding=1))
+    
+    
+    def forward(self, x):
+        
+        en1 = self.e1(x)
+        en2 = self.e2(en1)
+        en2add = self.e2add(en2)
+        en3 = self.e3(en2add)
+        en4 = self.e4(en3)
+        en4add = self.e4add(en4)
+        en5 = self.e5(en4add)
+        en6 = self.e6(en5)
+        en6add = self.e6add(en6)
+        en7 = self.e7(en6add)
+        en8 = self.e8(en7)
+        
+        de1_ = self.d1(en8)
+        de1 = torch.cat([en7,de1_],1)
+        de2_ = self.d2(de1)
+        de2 = torch.cat([en6add,de2_],1)
+        de3_ = self.d3(de2)
+        de3 = torch.cat([en6,de3_],1)
+        de4_ = self.d4(de3)
+        de4 = torch.cat([en5,de4_],1)
+        de5_ = self.d5(de4)
+        de5 = torch.cat([en4add,de5_],1)
+        de6_ = self.d6(de5)
+        de6 = torch.cat([en4,de6_],1)
+        de7_ = self.d7(de6)
+        de7 = torch.cat([en3,de7_],1)
+        de8 = self.d8(de7)
+        de8_ = self.d8(de7)
+        de8 = torch.cat([en2add,de8_],1)
+        de9_ = self.d9(de8)
+        de9 = torch.cat([en2,de9_],1)
+        de10_ = self.d10(de9)
+        de10 = torch.cat([en1,de10_],1)
+        out = self.out_l(de10)
+        
+        return out