Skip to content

Commit

Permalink
fixed memory leak for RoIPool Module
Browse files Browse the repository at this point in the history
  • Loading branch information
longcw committed Feb 6, 2017
1 parent 0958cfa commit eead52f
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 46 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,4 @@ ENV/

.idea
extension-ffi
demo_mot.py
43 changes: 1 addition & 42 deletions faster_rcnn/faster_rcnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

import network
from network import Conv2d, FC
# from roi_pool import RoIPool
# from roi_pooling.modules.roi_pool_py import RoIPool
from roi_pooling.modules.roi_pool import RoIPool
from vgg16 import VGG16

Expand Down Expand Up @@ -114,17 +114,7 @@ def __init__(self):

def forward(self, image):
features, rois, im_info = self.rpn(image)
t = Timer()
t.tic()
pooled_features = self.roi_pool(features, rois)
roi_pooling_t = t.toc()
print('roi pooling spend: {}s'.format(roi_pooling_t))

# loss = pooled_features.mean()
# print loss
# loss.backward()
# print torch.max(features.grad)
# print features.grad.size()

x = pooled_features.view(pooled_features.size()[0], -1)
x = self.fc6(x)
Expand Down Expand Up @@ -184,34 +174,3 @@ def detect(self, image, thr=0.3):
self.interpret_faster_rcnn(cls_prob, bbox_pred, rois, im_info, image.shape, min_score=thr)
return pred_boxes, scores, classes

if __name__ == '__main__':
def main():
import os
im_file = 'demo/004545.jpg'
image = cv2.imread(im_file)

detector = FasterRCNN()
network.load_net('/media/longc/Data/models/VGGnet_fast_rcnn_iter_70000.h5', detector)
detector.cuda()
print('load model successfully!')

# network.save_net(r'/media/longc/Data/models/VGGnet_fast_rcnn_iter_70000.h5', detector)
# print('save model succ')

t = Timer()
t.tic()
dets, scores, classes = detector.detect(image, 0.3)
runtime = t.toc()
print('total spend: {}s'.format(runtime))

im2show = np.copy(image)
for i, det in enumerate(dets):
if scores[i] < 0.3:
continue
det = tuple(int(x) for x in det)
cv2.rectangle(im2show, det[0:2], det[2:4], (255, 205, 51), 2)
cv2.putText(im2show, '%s: %.3f' % (classes[i], scores[i]), (det[0], det[1] + 15), cv2.FONT_HERSHEY_PLAIN,
1.0, (0, 0, 255), thickness=1)
cv2.imwrite(os.path.join('demo', 'out.jpg'), im2show)

main()
2 changes: 1 addition & 1 deletion faster_rcnn/roi_pooling/functions/roi_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def forward(self, features, rois):
_features = features.permute(0, 2, 3, 1)
roi_pooling.roi_pooling_forward(self.pooled_height, self.pooled_width, self.spatial_scale,
_features, rois, output)
output = output.cuda()
# output = output.cuda()
else:
output = output.cuda()
argmax = argmax.cuda()
Expand Down
8 changes: 5 additions & 3 deletions faster_rcnn/roi_pooling/modules/roi_pool.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from torch.nn.modules.module import Module
# from functions.roi_pool import RoIPoolFunction
from ..functions.roi_pool import RoIPoolFunction


class RoIPool(Module):
def __init__(self, pooled_height, pooled_width, spatial_scale):
super(RoIPool, self).__init__()
self.roi_pool = RoIPoolFunction(pooled_height, pooled_width, spatial_scale)

self.pooled_width = int(pooled_width)
self.pooled_height = int(pooled_height)
self.spatial_scale = float(spatial_scale)

def forward(self, features, rois):
return self.roi_pool(features, rois)
return RoIPoolFunction(self.pooled_height, self.pooled_width, self.spatial_scale)(features, rois)
File renamed without changes.

0 comments on commit eead52f

Please sign in to comment.