text-detection-ctpn icon indicating copy to clipboard operation
text-detection-ctpn copied to clipboard

Running with CPU only

Open zhao181 opened this issue 8 years ago • 68 comments
trafficstars

Hello everyone, it is the first time I could successfully run a demo. Many thanks to the author.

To use cpu only, I follow the author's instruction and make the following modifications: (1) Set "USE_GPU_NMS " in the file ./ctpn/text.yml as "False" (2) Set the "__C.USE_GPU_NMS" in the file ./lib/fast_rcnn/config.py as "False"; (3) Comment out the line "from lib.utils.gpu_nms import gpu_nms" in the file ./lib/fast_rcnn/nms_wrapper.py; (4) To rebuild the setup.py:

The author provides the new code of setup.py for cpu only:

from Cython.Build import cythonize import numpy as np from distutils.core import setup

try: numpy_include = np.get_include() except AttributeError: numpy_include = np.get_numpy_include()

setup( ext_modules=cythonize(["bbox.pyx","cython_nms.pyx"],include_dirs=[numpy_include]), )

(a) execute export CFLAGS=-I/home/zhao181/ProGram1/anaconda2/lib/python2.7/site-packages/numpy/core/include you should use your own numpy path.

(b) cd xxx/text-detection-ctpn-master/lib/utils and execute:python setup.py build

(c) copy the .so file from the "build" directory to the
xxx/text-detection-ctpn-master/lib/utils.

(5) cd xxx/text-detection-ctpn-master and execute: python ./ctpn/demo.py

By the way, I am running under ubuntu 16.04 with Anaconda2-4.2.0-Linux-x86_64.sh and tensorflow-1.3.0-cp27-cp27mu-manylinux1_x86_64.whl(cpu).

zhao181 avatar Nov 17 '17 14:11 zhao181

Thanks for the sharing.

eragonruan avatar Nov 18 '17 08:11 eragonruan

hello, i try to run code on cpu, when i change code according like you, it caused like below: image i have enough 17G RAM and i do not kmow what happened @zhao181 @eragonruan

cjt222 avatar Nov 29 '17 06:11 cjt222

Guys , I am trying to run the code on Raspberry Pi 3, I have tensorflow 1.3 installed and have configured the script to use CPU only, but I get the following error when the script demo.py is executed.

** Tensor("Placeholder:0", shape=(?, ?, ?, 3), dtype=float32) Tensor("conv5_3/conv5_3:0", shape=(?, ?, ?, 512), dtype=float32) Tensor("rpn_conv/3x3/rpn_conv/3x3:0", shape=(?, ?, ?, 512), dtype=float32) WARNING:tensorflow:<tensorflow.python.ops.rnn_cell_impl.BasicLSTMCell object at 0x6fe17ff0>: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True. Tensor("lstm_o/Reshape:0", shape=(?, ?, ?, 128), dtype=float32) Tensor("lstm_o/Reshape:0", shape=(?, ?, ?, 128), dtype=float32) Tensor("rpn_cls_score/Reshape:0", shape=(?, ?, ?, 20), dtype=float32) Tensor("rpn_cls_prob:0", shape=(?, ?, ?, ?), dtype=float32) Tensor("Reshape_5:0", shape=(?, ?, ?, 20), dtype=float32) Tensor("rpn_bbox_pred/Reshape:0", shape=(?, ?, ?, 40), dtype=float32) Tensor("Placeholder_1:0", shape=(?, 3), dtype=float32) Loading network VGGnet_test... Restoring from checkpoints/VGGnet_fast_rcnn_iter_50000.ckpt... done

terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted **

I have narrowed down the cause of error to a line 53 in test.py rois = sess.run([net.get_output('rois')[0]],feed_dict=feed_dict)

I there is any information missing please do ask. Thanks

zunair11 avatar Dec 02 '17 10:12 zunair11

I remember that, before I fix the code, there are errors occurring here too. But I forget the details and the solutions.

发自网易邮箱大师

On 12/2/2017 18:09,zunair11[email protected] wrote:

Guys , I am trying to run the code on Raspberry Pi 3, I have tensorflow 1.3 installed and have configured the script to use CPU only, but I get the following error when the script demo.py is executed.

Tensor("Placeholder:0", shape=(?, ?, ?, 3), dtype=float32) Tensor("conv5_3/conv5_3:0", shape=(?, ?, ?, 512), dtype=float32) Tensor("rpn_conv/3x3/rpn_conv/3x3:0", shape=(?, ?, ?, 512), dtype=float32) WARNING:tensorflow:<tensorflow.python.ops.rnn_cell_impl.BasicLSTMCell object at 0x6fe17ff0>: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True. Tensor("lstm_o/Reshape:0", shape=(?, ?, ?, 128), dtype=float32) Tensor("lstm_o/Reshape:0", shape=(?, ?, ?, 128), dtype=float32) Tensor("rpn_cls_score/Reshape:0", shape=(?, ?, ?, 20), dtype=float32) Tensor("rpn_cls_prob:0", shape=(?, ?, ?, ?), dtype=float32) Tensor("Reshape_5:0", shape=(?, ?, ?, 20), dtype=float32) Tensor("rpn_bbox_pred/Reshape:0", shape=(?, ?, ?, 40), dtype=float32) Tensor("Placeholder_1:0", shape=(?, 3), dtype=float32) Loading network VGGnet_test... Restoring from checkpoints/VGGnet_fast_rcnn_iter_50000.ckpt... done 1 terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted

I have narrowed down the cause of error to a line 53 in test.py rois = sess.run([net.get_output('rois')[0]],feed_dict=feed_dict)

I there is any information missing please do ask. Thanks

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

zhao181 avatar Dec 02 '17 12:12 zhao181

Yes I got the same problem "Segmentation fault (core dumped)" . Have you fixed it?

发自网易邮箱大师

On 11/29/2017 14:32,cjt222[email protected] wrote:

hello, i try to run code on cpu, but it caused like below:

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

zhao181 avatar Dec 02 '17 17:12 zhao181

@zunair11 your device may not have sufficient memory to run the code

eragonruan avatar Dec 04 '17 03:12 eragonruan

@zhao181 I have follow your steps, but there always with problems:

➜  utils git:(master) ✗ ./make.sh
Traceback (most recent call last):
  File "setup.py", line 39, in <module>
    CUDA = locate_cuda()
  File "setup.py", line 26, in locate_cuda
    raise EnvironmentError('The nvcc binary could not be '
OSError: The nvcc binary could not be located in your $PATH. Either add it to your path, or set $CUDAHOME
mv: rename utils/* to ./*: No such file or directory

And i found the code in lib/utils/setup.py:

CUDA = locate_cuda()

This block code will always exec.

Thanks.

struCoder avatar Dec 04 '17 08:12 struCoder

It seems that you are using a gpu. I run the code only with cpu. I did not run make.sh since I follow the author's instruction and modified the setup.py to compile a cpu support.

发自网易邮箱大师

On 12/4/2017 16:23,David 大伟[email protected] wrote:

@zhao181 I have follow your steps, but there always with problems:

➜ utils git:(master) ✗ ./make.sh Traceback (most recent call last): File "setup.py", line 39, in CUDA = locate_cuda() File "setup.py", line 26, in locate_cuda raise EnvironmentError('The nvcc binary could not be ' OSError: The nvcc binary could not be located in your $PATH. Either add it to your path, or set$CUDAHOME mv: rename utils/* to ./*: No such file or directory

and i found the code in lib/utils/setup.py:

CUDA= locate_cuda()

This block code will always exec.

Thanks.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

zhao181 avatar Dec 04 '17 08:12 zhao181

@zhao181

Got it. Thanks a lot.

struCoder avatar Dec 04 '17 08:12 struCoder

@eragonruan I am monitoring the Raspberry Pi resource monitor the ram consumption is shown to be 250 ish MB out of 1 Gigs before the "bad alloc" error is encountered. Do you recommend any work around or is this a dead end for Raspberry Pi's capabilities

zunair11 avatar Dec 04 '17 09:12 zunair11

Exec with CPU success, but some difference. Hope help people in need.

My Sys Env:

  • Mac os 10.13.1
  • Python3.6.2
  • Tensorflow 1.3

For CPU only, here is my setup.py

from Cython.Build import cythonize
import numpy as np
from distutils.core import setup
from distutils.extension import Extension

try:
    numpy_include = np.get_include()
except AttributeError:
    numpy_include = np.get_numpy_include()

ext_modules = [
    Extension(
        'bbox',
        sources=['bbox.c'],
        include_dirs = [numpy_include]
    ),
    Extension(
        'cython_nms',
        sources=['cython_nms.c'],
    )
]
setup(
    ext_modules=ext_modules
)

When execd command python setup.py build, there was new directory build have be created, and copy build/bbox.cpython-36m-darwin.so and build/cython_nms.cpython-36m-darwin.so file to utils.

struCoder avatar Dec 04 '17 09:12 struCoder

@zunair11 the code need about 1.5G memory.

eragonruan avatar Dec 05 '17 06:12 eragonruan

When I execute CPU only setup.py file, I get following error: SystemExit: usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] or: setup.py --help [cmd1 cmd2 ...] or: setup.py --help-commands or: setup.py cmd --help

error: no commands supplied Can you please help me?

guddulrk avatar Dec 07 '17 01:12 guddulrk

@guddulrk python setup.py build_ext --inplace

eragonruan avatar Dec 07 '17 02:12 eragonruan

When I run python setup.py build_ext --inplace it shows me an invalid syntax error.

Any help please

guddulrk avatar Dec 07 '17 04:12 guddulrk

When I run pip setup.py build, it appears this error: unable to find vcvarsall.bat. Should I install the vs for c++ first?

Guo-king avatar Dec 07 '17 06:12 Guo-king

You should run: python setup.py build_ext --include-dirs={your-numpy-include-path} for example my path is: C:\ProgramData\Anaconda3\Lib\site-packages\numpy\core\include

so: python setup.py build_ext --include-dirs=C:\ProgramData\Anaconda3\Lib\site-packages\numpy\core\include

and then you will find the .lib files in "./build/temp.win-amd64-3.6/Release" On my PC, the .lib file is "cython_nms.cp36-win_amd64.lib" and "bbox.cp36-win_amd64.lib", you should rename it properly.

On 12/7/2017 12:06,guddulrk[email protected] wrote:

When I run python setup.py build_ext --inplace it shows me an invalid syntax error.

Any help please

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

zhao181 avatar Dec 07 '17 07:12 zhao181

Thanks, but still I am getting the same error. Any solution, please

guddulrk avatar Dec 07 '17 07:12 guddulrk

@guddulrk @Guo-king if your are using windows, use nms and bbox implemented in pure python instead, you have to modify some import

eragonruan avatar Dec 07 '17 07:12 eragonruan

(1) I use the python command to build the setup.py, like this: python setup.py build_ext --include-dirs=C:\ProgramData\Anaconda3\Lib\site-packages\numpy\core\include I do not know what it will response if pip command is used.

(2) you should add your vcvarsall.bat path to the enviroments variables. Generally, if you have visual studio on your machine, the vcvarsall.bat file exists. For many machine, I have vs2013 and vs2015. There all three path for vcvarsall.bat, respectively: You can follow this figure to config your own machine.

(3)Still I am not sure which vcvarsall.bat will be used, so if I want to use VS140COMNTOOLS, I will firstly execute the following command: "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat", after switching to the setup.py directory and before building the setup.py,

On 12/7/2017 14:48,Guo-king[email protected] wrote:

When I run pip setup.py build, it appears this error: unable to find vcvarsall.bat. Should I install the vs for c++ first?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

zhao181 avatar Dec 07 '17 07:12 zhao181

@zhao181 @eragonruan Thank you for your kindly help. I will try again.

Guo-king avatar Dec 07 '17 07:12 Guo-king

When I start running this program I get the following crash on windows 7: Problem Event Name: BEX64 Application Name: pythonw.exe Application Version: 3.5.2150.1013 Application Timestamp: 577be341 Fault Module Name: StackHash_1dc2

All other programs in python are running successfully. Anyone who met with this problem. Please help in the solution. Thanks

guddulrk avatar Dec 08 '17 00:12 guddulrk

I tried a lot of ways. but always got "cannot import name 'bbox'". come from xxx/lib/utils/init.py anyone can help?please. no GPU python3.5

newzyh avatar Dec 22 '17 08:12 newzyh

@zhao181 I tried your steps, I got problems of this step:

cd xxx/text-detection-ctpn-master/lib/utils and execute:python setup.py build

Traceback (most recent call last): File "setup_cpu_only_a.py", line 11, in <module> ext_modules=cythonize(["bbox.pyx","cython_nms.pyx"],include_dirs=[numpy_include]), File "/usr/local/lib/python2.7/dist-packages/Cython/Build/Dependencies.py", line 909, in cythonize c_options = CompilationOptions(**options) File "/usr/local/lib/python2.7/dist-packages/Cython/Compiler/Main.py", line 559, in __init__ raise ValueError(message) ValueError: got unknown compilation option, please remove: include_dirs

this is my setup.py: `from Cython.Build import cythonize import numpy as np from distutils.core import setup

try: numpy_include = np.get_include() except AttributeError: numpy_include = np.get_numpy_include()

setup( ext_modules=cythonize(["bbox.pyx","cython_nms.pyx"],include_dirs=[numpy_include]), )`

How can i resolve it ? thanks.

I followed @struCoder , resolved it .

quanh avatar Dec 25 '17 08:12 quanh

Dev Environment Tensorflow-1.3 Python-3.6 cython-0.24

CPU Setting: (1) Set "USE_GPU_NMS " in the file ./ctpn/text.yml as "False" (2) Set the "__C.USE_GPU_NMS" in the file ./lib/fast_rcnn/config.py as "False"; (3) Comment out the line "from lib.utils.gpu_nms import gpu_nms" in the file ./lib/fast_rcnn/nms_wrapper.py; (4) To rebuild the setup.py in path "[path]/text-detection-ctpn/lib/utils/setup.py": (5) cd xxx/text-detection-ctpn-master/lib/utils and execute:python setup.py build (6) copy the .so file from the "build" directory to the xxx/text-detection-ctpn-master/lib/utils. (7) cd xxx/text-detection-ctpn-master and execute: python ./ctpn/demo.py

ps: no need to set env variable "CFLAGS"

you may also need to modify some python file, just follow the error, it is pretty straight-forward

setup.py is like blow:

from Cython.Build import cythonize
import numpy as np
from distutils.core import setup
from distutils.extension import Extension

try:
    numpy_include = np.get_include()
except AttributeError:
    numpy_include = np.get_numpy_include()

ext_modules = [
    Extension(
        'bbox',
        sources=['bbox.c'],
        include_dirs = [numpy_include]
    ),
    Extension(
        'cython_nms',
        sources=['cython_nms.c'],
        include_dirs = [numpy_include]
    )
]
setup(
    ext_modules=ext_modules
)

hushenglang avatar Feb 26 '18 09:02 hushenglang

Thank you for you kindly ways, and i have tried it.

however, when i execute: python ./ctpn/demo.py a problem below occured:

File "/home/aigo/Desktop/text-detection-ctpn-master/lib/utils/init.py", line 6, in from . import gpu_nms ImportError: cannot import name 'gpu_nms'

i have solved it by comment "from . import gpu_nms" in file above, maybe you can make your steps more complete.

daoqinzi avatar Feb 27 '18 01:02 daoqinzi

@struCoder My Environment:

  • Mac 10.13.3
  • TensorFlow 1.5.0
  • Cython 0.26.1
  • Python 2.7.14

got errors

python setup.py build
......

35 warnings generated.
/usr/bin/gcc -bundle -undefined dynamic_lookup -L/Users/zhangxin/anaconda2/lib -arch x86_64 /Users/zhangxin/anaconda2/lib/python2.7/site-packages/numpy/core/include -arch x86_64 build/temp.macosx-10.6-x86_64-2.7/bbox.o -L/Users/zhangxin/anaconda2/lib -o build/lib.macosx-10.6-x86_64-2.7/bbox.so
ld: can't map file, errno=22 file '/Users/zhangxin/anaconda2/lib/python2.7/site-packages/numpy/core/include' for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/gcc' failed with exit status 1

How to solve it

ZhangXinNan avatar Mar 14 '18 07:03 ZhangXinNan

@ZhangXinNan You can try With Python 3.6 version.

struCoder avatar Mar 14 '18 08:03 struCoder

@struCoder the same error

34 warnings generated.
/usr/bin/gcc -bundle -undefined dynamic_lookup -L/Users/zhangxin/anaconda2/envs/venv_py3/lib -arch x86_64 -L/Users/zhangxin/anaconda2/envs/venv_py3/lib -arch x86_64 /Users/zhangxin/anaconda2/envs/venv_py3/lib/python3.5/site-packages/numpy/core/include -arch x86_64 build/temp.macosx-10.6-x86_64-3.5/bbox.o -L/Users/zhangxin/anaconda2/envs/venv_py3/lib -o /Users/zhangxin/github/text-detection-ctpn/lib/utils/bbox.cpython-35m-darwin.so
ld: can't map file, errno=22 file '/Users/zhangxin/anaconda2/envs/venv_py3/lib/python3.5/site-packages/numpy/core/include' for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/gcc' failed with exit status 1

today, I uninstall python which brew install brew uninstall python

then comment from . import gpu_nms in lib/utils/init.py , excute python setup.py build successfully.

ZhangXinNan avatar Mar 14 '18 10:03 ZhangXinNan

If you want to try CPU mode, please test my branch ZhangXinNan/text-detection-ctpn/tree/zxdev_mac

@zhao181 @eragonruan @struCoder

ZhangXinNan avatar Mar 15 '18 06:03 ZhangXinNan