(self,x, skips)
| 212 | self.SA = SpatialAttention() |
| 213 | |
| 214 | def forward(self,x, skips): |
| 215 | |
| 216 | d4 = self.Conv_1x1(x) |
| 217 | |
| 218 | # CAM4 |
| 219 | d4 = self.CA4(d4)*d4 |
| 220 | d4 = self.SA(d4)*d4 |
| 221 | d4 = self.ConvBlock4(d4) |
| 222 | |
| 223 | # upconv3 |
| 224 | d3 = self.Up3(d4) |
| 225 | |
| 226 | # AG3 |
| 227 | x3 = self.AG3(g=d3,x=skips[0]) |
| 228 | |
| 229 | # aggregate 3 |
| 230 | d3 = d3 + x3 |
| 231 | |
| 232 | # CAM3 |
| 233 | d3 = self.CA3(d3)*d3 |
| 234 | d3 = self.SA(d3)*d3 |
| 235 | d3 = self.ConvBlock3(d3) |
| 236 | |
| 237 | # upconv2 |
| 238 | d2 = self.Up2(d3) |
| 239 | |
| 240 | # AG2 |
| 241 | x2 = self.AG2(g=d2,x=skips[1]) |
| 242 | |
| 243 | # aggregate 2 |
| 244 | d2 = d2 + x2 |
| 245 | |
| 246 | # CAM2 |
| 247 | d2 = self.CA2(d2)*d2 |
| 248 | d2 = self.SA(d2)*d2 |
| 249 | #print(d2.shape) |
| 250 | d2 = self.ConvBlock2(d2) |
| 251 | |
| 252 | # upconv1 |
| 253 | d1 = self.Up1(d2) |
| 254 | |
| 255 | #print(skips[2]) |
| 256 | # AG1 |
| 257 | x1 = self.AG1(g=d1,x=skips[2]) |
| 258 | |
| 259 | # aggregate 1 |
| 260 | d1 = d1 + x1 |
| 261 | |
| 262 | # CAM1 |
| 263 | d1 = self.CA1(d1)*d1 |
| 264 | d1 = self.SA(d1)*d1 |
| 265 | d1 = self.ConvBlock1(d1) |
| 266 | return d4, d3, d2, d1 |
nothing calls this directly
no outgoing calls
no test coverage detected