ruotianluo/pytorch-faster-rcnn

How to adapt /lib/nms/build.py to support pytorch1.0?

xiangyangli-cn opened this issue · 1 comments

I changed the lib/nms/build.py as:

import os
import torch
#from torch.utils.ffi import create_extension
from torch.utils.cpp_extension import BuildExtension

sources = ['src/nms.c']
headers = ['src/nms.h']
defines = []
with_cuda = False

if torch.cuda.is_available():
print('Including CUDA code.')
sources += ['src/nms_cuda.c']
headers += ['src/nms_cuda.h']
defines += [('WITH_CUDA', None)]
with_cuda = True

this_file = os.path.dirname(os.path.realpath(file))
print(this_file)
extra_objects = ['src/cuda/nms_kernel.cu.o']
extra_objects = [os.path.join(this_file, fname) for fname in extra_objects]

#BuildExtension
#create_extension
ffi = BuildExtension(
'_ext.nms',
headers=headers,
sources=sources,
define_macros=defines,
relative_to=file,
with_cuda=with_cuda,
extra_objects=extra_objects
)

if name == 'main':
ffi.build()

But the Errors are:

cd nms/src/cuda;
pwd;
echo "Compiling nms kernels by nvcc...";
nvcc -c -o nms_kernel.cu.o nms_kernel.cu -x cu -Xcompiler -fPIC -arch=sm_52;
cd ../..;
python build.py;
cd ..;\

/home/isia/d1/000-REC/mask-faster-rcnn-lxy/lib/nms/src/cuda
Compiling nms kernels by nvcc...
Including CUDA code.
/home/isia/d1/000-REC/mask-faster-rcnn-lxy/lib/nms
Traceback (most recent call last):
File "build.py", line 33, in
extra_objects=extra_objects
File "/usr/local/lib/python2.7/dist-packages/torch/utils/cpp_extension.py", line 228, in init
super(BuildExtension, self).init(*args, **kwargs)
File "build/bdist.linux-x86_64/egg/setuptools/init.py", line 163, in init

File "/usr/lib/python2.7/distutils/cmd.py", line 59, in init
raise TypeError, "dist must be a Distribution instance"
TypeError: dist must be a Distribution instance
cd layer_utils/roi_pooling/src/cuda;
pwd;
echo "Compiling roi_pooling kernels by nvcc...";
nvcc -c -o roi_pooling_kernel.cu.o roi_pooling_kernel.cu -x cu -Xcompiler -fPIC -arch=sm_52;
cd ../..;
python build.py;
cd ../../..
/home/isia/d1/000-REC/mask-faster-rcnn-lxy/lib/layer_utils/roi_pooling/src/cuda
Compiling roi_pooling kernels by nvcc...
Including CUDA code.
/home/isia/d1/000-REC/mask-faster-rcnn-lxy/lib/layer_utils/roi_pooling
Traceback (most recent call last):
File "build.py", line 33, in
extra_objects=extra_objects
File "/usr/local/lib/python2.7/dist-packages/torch/utils/cpp_extension.py", line 228, in init
super(BuildExtension, self).init(*args, **kwargs)
File "build/bdist.linux-x86_64/egg/setuptools/init.py", line 163, in init

File "/usr/lib/python2.7/distutils/cmd.py", line 59, in init
raise TypeError, "dist must be a Distribution instance"
TypeError: dist must be a Distribution instance

torch.utils.cpp_extension is for C++ to create extension.
However, nms module is written in C code here.

So it doesn't work that you just replace create_extension to BuildExtension when import packages.

You need rewrite the nms.c to C++ code if you want use the cpp_extension and you can refer the whole procedure that rewrote C code with C++ extensions like pytorch/audio/commit/18c01be.

Or just use pytorch 0.4.x instead : )