Real-time Scene Text Detection with Differentiable Binarization 问题记录

官方:https://github.com/MhLiao/DB
周军大神实现的:https://github.com/WenmuZhou/DBNet.pytorch

1.官方的

官方的按照安装流程很容易安装,只是我的环境是ubuntu16.04+cuda8,所以一直用的pytorch1.0.1(py3.7)的。也可以跑起来.但是训练的模型推理预测出来全是空啊,txt全是空的,visualize文件夹图片灰蒙蒙的没有框。loss不收敛

[INFO] [2020-01-18 16:24:09,584] step:   1340, epoch:   0, loss: 4.332346, lr: 0.007000
[INFO] [2020-01-18 16:24:09,585] bce_loss: 0.568492
[INFO] [2020-01-18 16:24:09,585] thresh_loss: 0.563487
[INFO] [2020-01-18 16:24:09,586] l1_loss: 0.092640
[INFO] [2020-01-18 16:24:19,117] step:   1360, epoch:   0, loss: 4.255758, lr: 0.007000
[INFO] [2020-01-18 16:24:19,120] bce_loss: 0.544069
[INFO] [2020-01-18 16:24:19,122] thresh_loss: 0.539020
[INFO] [2020-01-18 16:24:19,124] l1_loss: 0.099640
[INFO] [2020-01-18 16:24:28,766] step:   1380, epoch:   0, loss: 4.507674, lr: 0.007000
[INFO] [2020-01-18 16:24:28,767] bce_loss: 0.560643
[INFO] [2020-01-18 16:24:28,768] thresh_loss: 0.652172
[INFO] [2020-01-18 16:24:28,768] l1_loss: 0.105229

用ic15数据集训练也是如此,不知道问题出在哪里。后面再看看

有一个bug,是学习率一开始都是0.07,设置都没有用,需要到DB/DB-master/training/learning_rate.py这里改,被写死了

因为怀疑是版本原因导致不收敛什么的,于是我就把自己电脑上装两个cuda,8和10,装10,然后创建虚拟环境,然后又报错,报cuda错误,
error in : invalid device function
RuntimeError: copy_if failed to synchronize: device-side assert triggered
搞了好久,无解,然后解决问题的时候发现conda安装的cuda是10.1版本的,而我本地是10.0版本的,同时看到
作者在回答issue的时候说:https://github.com/MhLiao/DB/issues/36

Make sure your CUDA path of $CUDA_HOME is the same version as your CUDA in PyTorch by the command of echo $CUDA_HOME. If not, you need to change the $CUDA_HOME by export CUDA_HOME=path-of-another-version or re-install PyTorch with the same CUDA version as in CUDA_HOME.

本地与conda的cuda版本需要一致。然后我重来一遍:

conda install numpy=1.17.4 pytorch=1.3 torchvision cudatoolkit=10.0.130 -c pytorch

如此,可以!
但是,好像还不收敛啊。。。。………………。6……6…………-%4$

2.非官方的

安装安装流程,一股脑的安装,确实可以跑,但是一开始显示, DBNet.pytorch INFO: train with device cpu and pytorch 1.3.0
因为我电脑上没有1.3需要的cuda10,所以就跑cpu了。很慢。
后来在群里看到有人用pytorch1.1.0版本编过了,但是他是cuda10.我也安装1.1.0版本,然后训练各种报错啊,无助。。。后来都放弃了,后来又重捣鼓。
在此过程中,越来越觉得anconda很好,在虚拟环境下,敲conda list可以显示安装的各个库的版本。

_libgcc_mutex             0.1                        main  
absl-py                   0.9.0                     <pip>
anyconfig                 0.9.10                    <pip>
backcall                  0.1.0                    py36_0  
blas                      1.0                         mkl  
ca-certificates           2019.11.27                    0  
cachetools                4.0.0                     <pip>
certifi                   2019.11.28               py36_0  
cffi                      1.13.2           py36h2e261b9_0  
chardet                   3.0.4                     <pip>
cudatoolkit               8.0                           3  
cycler                    0.10.0                    <pip>
decorator                 4.4.1                      py_0  
freetype                  2.9.1                h8a8886c_1  
future                    0.18.2                    <pip>
google-auth               1.10.1                    <pip>
google-auth-oauthlib      0.4.1                     <pip>
grpcio                    1.26.0                    <pip>
idna                      2.8                       <pip>
imageio                   2.6.1                     <pip>
imgaug                    0.3.0                     <pip>
intel-openmp              2019.4                      243  
ipython                   7.11.1           py36h39e3cac_0  
ipython_genutils          0.2.0                    py36_0  
jedi                      0.15.2                   py36_0  
jpeg                      9b                   h024ee3a_2  
kiwisolver                1.1.0                     <pip>
ld_impl_linux-64          2.33.1               h53a641e_7  
libedit                   3.1.20181209         hc058e9b_0  
libffi                    3.2.1                hd88cf55_4  
libgcc-ng                 9.1.0                hdf63c60_0  
libgfortran-ng            7.3.0                hdf63c60_0  
libpng                    1.6.37               hbc83047_0  
libstdcxx-ng              9.1.0                hdf63c60_0  
libtiff                   4.1.0                h2733197_0  
Markdown                  3.1.1                     <pip>
matplotlib                3.1.2                     <pip>
mkl                       2019.4                      243  
mkl-service               2.3.0            py36he904b0f_0  
mkl_fft                   1.0.15           py36ha843d7b_0  
mkl_random                1.1.0            py36hd6b4f25_0  
natsort                   7.0.0                     <pip>
ncurses                   6.1                  he6710b0_1  
networkx                  2.4                       <pip>
ninja                     1.9.0            py36hfd86e86_0  
numpy                     1.18.1           py36h4f9e942_0  
numpy                     1.17.4                    <pip>
numpy-base                1.18.1           py36hde5b4d6_0  
oauthlib                  3.1.0                     <pip>
olefile                   0.46                       py_0  
opencv-python             4.1.2.30                  <pip>
opencv-python-headless    4.1.2.30                  <pip>
openssl                   1.1.1d               h7b6447c_3  
parso                     0.5.2                      py_0  
pexpect                   4.7.0                    py36_0  
pickleshare               0.7.5                    py36_0  
Pillow                    6.2.2                     <pip>
pillow                    7.0.0            py36hb39fc2d_0  
pip                       19.3.1                   py36_0  
Polygon3                  3.0.8                     <pip>
prompt_toolkit            3.0.2                      py_0  
protobuf                  3.11.2                    <pip>
ptyprocess                0.6.0                    py36_0  
pyasn1                    0.4.8                     <pip>
pyasn1-modules            0.2.8                     <pip>
pyclipper                 1.1.0.post3               <pip>
pycparser                 2.19                       py_0  
pygments                  2.5.2                      py_0  
pyparsing                 2.4.6                     <pip>
python                    3.6.10               h0371630_0  
python-dateutil           2.8.1                     <pip>
pytorch                   1.0.1           py3.6_cuda8.0.61_cudnn7.1.2_2    pytorch
PyWavelets                1.1.1                     <pip>
PyYAML                    5.2                       <pip>
readline                  7.0                  h7b6447c_5  
requests                  2.22.0                    <pip>
requests-oauthlib         1.3.0                     <pip>
rsa                       4.0                       <pip>
scikit-image              0.16.2                    <pip>
scipy                     1.4.1                     <pip>
setuptools                44.0.0                   py36_0  
Shapely                   1.6.4.post2               <pip>
six                       1.13.0                   py36_0  
sqlite                    3.30.1               h7b6447c_0  
tensorboard               2.1.0                     <pip>
tensorboardX              1.8                       <pip>
tk                        8.6.8                hbc83047_0  
torch                     1.1.0                     <pip>
torchvision               0.2.1                     <pip>
torchvision               0.2.2                      py_3    pytorch
tqdm                      4.40.1                    <pip>
traitlets                 4.3.3                    py36_0  
urllib3                   1.25.7                    <pip>
wcwidth                   0.1.7                    py36_0  
Werkzeug                  0.16.0                    <pip>
wheel                     0.33.6                   py36_0  
xz                        5.2.4                h14c3975_4  
zlib                      1.2.11               h7b6447c_3  
zstd                      1.3.7                h0b5b093_0  

安装软件直接:pip install tensorboardX==1.8
不加版本号默认装最新的。
还可以pip install 'tensorboardX<1.9'.安装小于1.9版本。
主要有两个错误:

2020-01-18 16:23:24,753 DBNet.pytorch ERROR: Traceback (most recent call last):
  File "/data_1/Yang/project/2019/project/DBNet.pytorch/DBNet.pytorch-master/base/base_trainer.py", line 77, in __init__
    self.writer.add_graph(self.model, dummy_input)
  File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/tensorboardX/writer.py", line 774, in add_graph
    self._get_file_writer().add_graph(graph(model, input_to_model, verbose, **kwargs))
  File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py", line 292, in graph
    list_of_nodes, node_stats = parse(graph, args)
  File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py", line 227, in parse
    if node.debugName() == 'self':
AttributeError: 'torch._C.Value' object has no attribute 'debugName'

2020-01-18 16:23:24,753 DBNet.pytorch WARNING: add graph to tensorboard failed
2020-01-18 16:23:24,756 DBNet.pytorch INFO: train dataset has 889 samples,297 in dataloader, validate dataset has 111 samples,111 in dataloader
Traceback (most recent call last):
  File "tools/train.py", line 74, in <module>
    main(config)
  File "tools/train.py", line 58, in main
    trainer.train()
  File "/data_1/Yang/project/2019/project/DBNet.pytorch/DBNet.pytorch-master/base/base_trainer.py", line 103, in train
    self.epoch_result = self._train_epoch(epoch)
  File "/data_1/Yang/project/2019/project/DBNet.pytorch/DBNet.pytorch-master/trainer/trainer.py", line 46, in _train_epoch
    for i, batch in enumerate(self.train_loader):
  File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 582, in __next__
    return self._process_next_batch(batch)
  File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 608, in _process_next_batch
    raise batch.exc_type(batch.exc_msg)
TypeError: Traceback (most recent call last):
  File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/torch/utils/data/_utils/worker.py", line 99, in _worker_loop
    samples = collate_fn([dataset[i] for i in batch_indices])
TypeError: 'NoneType' object is not callable

首先这个,File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py", line 227, in parse
if node.debugName() == 'self':
AttributeError: 'torch._C.Value' object has no attribute 'debugName'

看样子好像是tensorboardX版本不对,百度一下果真,说要把版本整到1.8.conda list显示我是1.9,然后敲:
pip install tensorboardX1.8,显示如下:
Requirement already satisfied: six in /data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages (from tensorboardX
1.8) (1.13.0)
Requirement already satisfied: protobuf>=3.2.0 in /data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages (from tensorboardX1.8) (3.11.2)
Requirement already satisfied: numpy in /data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages (from tensorboardX
1.8) (1.17.4)
Requirement already satisfied: setuptools in /data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages (from protobuf>=3.2.0->tensorboardX==1.8) (44.0.0.post20200106)
Installing collected packages: tensorboardX
Found existing installation: tensorboardX 1.9
Uninstalling tensorboardX-1.9:
Successfully uninstalled tensorboardX-1.9
Successfully installed tensorboardX-1.8

直接会自动卸载1.9装1.8

然后再训练,果真只剩下最后的那个错误。

Traceback (most recent call last):
File "tools/train.py", line 74, in
main(config)
File "tools/train.py", line 58, in main
trainer.train()
File "/data_1/Yang/project/2019/project/DBNet.pytorch/DBNet.pytorch-master/base/base_trainer.py", line 103, in train
self.epoch_result = self._train_epoch(epoch)
File "/data_1/Yang/project/2019/project/DBNet.pytorch/DBNet.pytorch-master/trainer/trainer.py", line 46, in _train_epoch
for i, batch in enumerate(self.train_loader):
File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 582, in next
return self._process_next_batch(batch)
File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 608, in _process_next_batch
raise batch.exc_type(batch.exc_msg)
TypeError: Traceback (most recent call last):
File "/data_1/Yang/software_install/Anaconda1105/envs/dbnet/lib/python3.6/site-packages/torch/utils/data/_utils/worker.py", line 99, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
TypeError: 'NoneType' object is not callable

在github上面有人解答了这个问题,https://github.com/WenmuZhou/DBNet.pytorch/issues/4
在DBNet.pytorch-master/data_loader/init.py, line 74
if 'collate_fn' not in config['loader'] or config['loader']['collate_fn'] is None or len(config['loader']['collate_fn']) == 0:
#config['loader']['collate_fn'] = None # here has to changle,========= 这里要改成下面的,不然传None进去会被直接赋值 ====
config['loader']['collate_fn'] = torch.utils.data.dataloader.default_collate
else:
config['loader']['collate_fn'] = eval(config['loader']['collate_fn'])()

_dataset = get_dataset(data_path=data_path, module_name=dataset_name, transform=img_transfroms, dataset_args=dataset_args)
sampler = None
if distributed:
from torch.utils.data.distributed import DistributedSampler
# 3)使用DistributedSampler
sampler = DistributedSampler(_dataset)
config['loader']['shuffle'] = False
config['loader']['pin_memory'] = True
loader = DataLoader(dataset=_dataset, sampler=sampler, **config['loader'])
return @loader

如此,再训练,就ok了!!!
赶紧训练,并用自己的数据训练看看!

posted @ 2020-01-18 17:31  无左无右  阅读(1020)  评论(5编辑  收藏  举报