| 110 | |
| 111 | class ResnetDilated(nn.Module): |
| 112 | def __init__(self, orig_resnet, dilate_scale=8): |
| 113 | super(ResnetDilated, self).__init__() |
| 114 | from functools import partial |
| 115 | |
| 116 | if dilate_scale == 8: |
| 117 | orig_resnet.layer3.apply( |
| 118 | partial(self._nostride_dilate, dilate=2)) |
| 119 | orig_resnet.layer4.apply( |
| 120 | partial(self._nostride_dilate, dilate=4)) |
| 121 | elif dilate_scale == 16: |
| 122 | orig_resnet.layer4.apply( |
| 123 | partial(self._nostride_dilate, dilate=2)) |
| 124 | |
| 125 | # take pretrained resnet, except AvgPool and FC |
| 126 | self.conv1 = orig_resnet.conv1 |
| 127 | self.bn1 = orig_resnet.bn1 |
| 128 | self.relu1 = orig_resnet.relu1 |
| 129 | self.conv2 = orig_resnet.conv2 |
| 130 | self.bn2 = orig_resnet.bn2 |
| 131 | self.relu2 = orig_resnet.relu2 |
| 132 | self.conv3 = orig_resnet.conv3 |
| 133 | self.bn3 = orig_resnet.bn3 |
| 134 | self.relu3 = orig_resnet.relu3 |
| 135 | self.maxpool = orig_resnet.maxpool |
| 136 | self.layer1 = orig_resnet.layer1 |
| 137 | self.layer2 = orig_resnet.layer2 |
| 138 | self.layer3 = orig_resnet.layer3 |
| 139 | self.layer4 = orig_resnet.layer4 |
| 140 | |
| 141 | def _nostride_dilate(self, m, dilate): |
| 142 | classname = m.__class__.__name__ |