README.md 4.09 KB
Newer Older
sunxx1's avatar
sunxx1 committed
1
# DBNet
sunxx1's avatar
sunxx1 committed
2

sunxx1's avatar
sunxx1 committed
3
## 论文
sunxx1's avatar
sunxx1 committed
4

sunxx1's avatar
sunxx1 committed
5
Real-time Scene Text Detection with Differentiable Binarization
sunxx1's avatar
sunxx1 committed
6

sunxx1's avatar
sunxx1 committed
7
- https://arxiv.org/pdf/1911.08947.pdf
sunxx1's avatar
sunxx1 committed
8
9
10
11
12
13

## 模型结构

DBNet 模型网络结构主要分为 3 个模块:

- 第一模块(1):使用的是一个 FPN  结构,分为自底向上的卷积操作与自顶向下的上采样,以此来获取多尺度的特征。1 图下面部分是 3x3 的卷积操作,按照卷积公式分别获取原图大小比例的 `1/2、1/4、1/8、1/16、1/32` 的特征图;然后自顶向下进行上采样 x2,然后与自底向上生成的相同大小的特征图融合;融合之后再采用 3x3 的卷积消除上采样的混叠效应;最后对每层输出结果进行上采样,统一为 1/4 大小的特征图。
sunxx1's avatar
sunxx1 committed
14

sunxx1's avatar
sunxx1 committed
15
- 第二模块(2):将 1/4 大小的特征图经过一系列卷积和转置卷积的机构获取概率图 **P** 和阈值图 **T**,可参考 FCN 网络结构,目的是生成与原图一样大小的特征图 P 和 T。
sunxx1's avatar
sunxx1 committed
16

sunxx1's avatar
sunxx1 committed
17
18
- 第三模块(3):将特征图 P 和 T 经过 DB 方法(后续介绍)得到近似二值图。

sunxx1's avatar
sunxx1 committed
19
  ![db](./imgs/paper/db.jpg)
sunxx1's avatar
sunxx1 committed
20

sunxx1's avatar
sunxx1 committed
21
22
23
24
25
## 算法原理

DBNet的是将二值化操作插入到分割网络中进行联合优化,这样网络可以自适应的预测图像中每一个像素点的阈值(区别去传统方法的固定阈值),从而可完全区分前景和背景的像素。

二值化阈值由网络学习得到,彻底将二值化这一步骤加入到网络里一起训练,这样最终的输出图对于阈值就会具有非常强的鲁棒性,在简化了后处理的同时提高了文本检测的效果。
sunxx1's avatar
sunxx1 committed
26

sunxx1's avatar
sunxx1 committed
27
![segmentation](./imgs/segmentation.png)
sunxx1's avatar
sunxx1 committed
28
29
30

### 环境配置

sunxx1's avatar
sunxx1 committed
31
32
33
### Docker(方法一)

```
dcuai's avatar
dcuai committed
34
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
sunxx1's avatar
sunxx1 committed
35

dcuai's avatar
dcuai committed
36
docker run --shm-size 10g --network=host -v /opt/hyhal:/opt/hyhal:ro  --name=dbnet --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/dbnet -it <your IMAGE ID> bash 
sunxx1's avatar
sunxx1 committed
37
38
39
40
41
42
43
44

pip install -r requirements.txt
```

### Dockerfile(方法二)

```plaintext
docker build --no-cache -t dbnet:latest .
dcuai's avatar
dcuai committed
45
docker run --rm --shm-size 10g --network=host -v /opt/hyhal:/opt/hyhal:ro  --name=dbnet --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/../../dbnet:/home/dbnet -it <your IMAGE ID> bash
sunxx1's avatar
sunxx1 committed
46
47
# 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:pip install -r requirements.txt
```
dcuai's avatar
dcuai committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
### conda(方法三)
关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装。
```
DTK驱动:dtk24.04.1
python:3.10
torch:2.1.0
torchvision:0.16.0
apx:1.1.0
```
Tips:以上dtk驱动、torch等工具版本需要严格一一对应。

其它依赖库参照requirements.txt安装:
```
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
sunxx1's avatar
sunxx1 committed
63
64
65

## 数据集

sunxx1's avatar
sunxx1 committed
66
67
在本测试中可以使用icdar2015数据集。下载链接:链接:https://pan.baidu.com/s/1sWVoJlb3Ieh0ztxw_5rW6Q?pwd=6zm0 
提取码:6zm0 
sunxx1's avatar
sunxx1 committed
68

sunxx1's avatar
sunxx1 committed
69
70
71
72
73
74
```
── test
├── test.txt
├── train
└── train.txt
```
sunxx1's avatar
sunxx1 committed
75
76
77
78
79

### 训练

将训练数据解压到datasets目录下。

80
### 单机单卡
sunxx1's avatar
sunxx1 committed
81
82
83

    ./run.sh

dcuai's avatar
dcuai committed
84
85
86
87
88
89
90
### 单机多卡

   ```

    export HIP_VISIBLE_DEVICES=0,1
    python -m torch.distributed.launch --nproc_per_node 2 --master_port 12345 tools/train.py --config_file "config/icdar2015_resnet18_FPN_DBhead_polyLR.yaml"

dcuai's avatar
dcuai committed
91
   ```
dcuai's avatar
dcuai committed
92
93

## result
94
95
96

![image-20240307095138277](./imgs/result.png)

dcuai's avatar
dcuai committed
97
### 精度
sunxx1's avatar
sunxx1 committed
98
99
100

测试数据使用的是icdar2015数据集,使用的加速卡是DCU Z100L。

sunxx1's avatar
sunxx1 committed
101
| 卡数 |                 精度                  |
sunxx1's avatar
sunxx1 committed
102
| :--: | :-----------------------------------: |
sunxx1's avatar
sunxx1 committed
103
|  1   | recall: 0.767070, precision: 0.894410 |
sunxx1's avatar
sunxx1 committed
104

105
106
107
108
## 应用场景

### 算法类别

dcuai's avatar
dcuai committed
109
文本检测
110
111
112
113
114
115

### 热点行业

制造,能源,交通,网安

## 源码仓库及问题反馈
sunxx1's avatar
sunxx1 committed
116

dcuai's avatar
dcuai committed
117
https://developer.sourcefind.cn/codes/modelzoo/dbnet_pytorch
sunxx1's avatar
sunxx1 committed
118

119
## 参考资料
sunxx1's avatar
sunxx1 committed
120
121

https://github.com/WenmuZhou/DBNet.pytorch