2 import chainer.functions
as F
3 import chainer.links
as L
10 conv1_1=L.Convolution2D(3, 64, 3, stride=1, pad=1),
11 conv1_2=L.Convolution2D(64, 64, 3, stride=1, pad=1),
13 conv2_1=L.Convolution2D(64, 128, 3, stride=1, pad=1),
14 conv2_2=L.Convolution2D(128, 128, 3, stride=1, pad=1),
16 conv3_1=L.Convolution2D(128, 256, 3, stride=1, pad=1),
17 conv3_2=L.Convolution2D(256, 256, 3, stride=1, pad=1),
18 conv3_3=L.Convolution2D(256, 256, 3, stride=1, pad=1),
20 conv4_1=L.Convolution2D(256, 512, 3, stride=1, pad=1),
21 conv4_2=L.Convolution2D(512, 512, 3, stride=1, pad=1),
22 conv4_3=L.Convolution2D(512, 512, 3, stride=1, pad=1),
24 conv5_1=L.Convolution2D(512, 512, 3, stride=1, pad=1),
25 conv5_2=L.Convolution2D(512, 512, 3, stride=1, pad=1),
26 conv5_3=L.Convolution2D(512, 512, 3, stride=1, pad=1),
28 fc6=L.Linear(25088, 4096),
29 fc7=L.Linear(4096, 4096),
30 cls_score=L.Linear(4096, 21),
31 bbox_pred=L.Linear(4096, 84)
35 h = F.relu(self.conv1_1(x))
36 h = F.relu(self.conv1_2(h))
37 h = F.max_pooling_2d(h, 2, stride=2)
39 h = F.relu(self.conv2_1(h))
40 h = F.relu(self.conv2_2(h))
41 h = F.max_pooling_2d(h, 2, stride=2)
43 h = F.relu(self.conv3_1(h))
44 h = F.relu(self.conv3_2(h))
45 h = F.relu(self.conv3_3(h))
46 h = F.max_pooling_2d(h, 2, stride=2)
48 h = F.relu(self.conv4_1(h))
49 h = F.relu(self.conv4_2(h))
50 h = F.relu(self.conv4_3(h))
51 h = F.max_pooling_2d(h, 2, stride=2)
53 h = F.relu(self.conv5_1(h))
54 h = F.relu(self.conv5_2(h))
55 h = F.relu(self.conv5_3(h))
56 h = F.roi_pooling_2d(h, rois, 7, 7, spatial_scale=0.0625)
58 h = F.dropout(F.relu(self.fc6(h)), ratio=0.5)
59 h = F.dropout(F.relu(self.fc7(h)), ratio=0.5)
60 cls_score = F.softmax(self.cls_score(h))
61 bbox_pred = self.bbox_pred(h)
63 return cls_score, bbox_pred
def __call__(self, x, rois)