Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
DeepSolo_pytorch
Commits
14acd1f1
Commit
14acd1f1
authored
Jul 09, 2024
by
Rayyyyy
Browse files
Add icon and SCNet
parent
0e91ce69
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
260 additions
and
42 deletions
+260
-42
README.md
README.md
+33
-39
deepsolo-pytorch.ipynb
deepsolo-pytorch.ipynb
+227
-0
docker/Dockerfile
docker/Dockerfile
+0
-3
icon.png
icon.png
+0
-0
pretrained_models/CTW1500/pretrain_ctw_96voc.pth
pretrained_models/CTW1500/pretrain_ctw_96voc.pth
+0
-0
No files found.
README.md
View file @
14acd1f1
# DeepSolo
## 论文
[
DeepSolo: Let Transformer Decoder with Explicit Points Solo for Text Spotting
](
https://arxiv.org/abs/2211.10772
)
`DeepSolo: Let Transformer Decoder with Explicit Points Solo for Text Spotting`
-
https://arxiv.org/abs/2211.10772
[
DeepSolo++: Let Transformer Decoder with Explicit Points Solo for Text Spotting
](
https://arxiv.org/abs/2305.19957
)
`DeepSolo++: Let Transformer Decoder with Explicit Points Solo for Text Spotting`
-
https://arxiv.org/abs/2305.19957
## 模型结构
一个简洁的类似DETR的基线,允许一个具有显式点的解码器同时进行检测和识别(图 (c)、(f))。
<div
align=
center
>
...
...
@@ -14,7 +15,6 @@
</div>
## 算法原理
DeepSolo中,编码器在接收到图像特征后,生成由四个Bezier控制点表示的Bezier中心曲线候选和相应的分数,然后,选择前K个评分的候选。对于每个选定的曲线候选,在曲线上均匀采样N个点,这些点的坐标被编码为位置query并将其添加到内容query中形成复合query。接下来,将复合query输入deformable cross-attention解码器收集有用的文本特征。在解码器之后,采用了几个简单的并行预测头(线性层或MLP)将query解码为文本的中心线、边界、script和置信度,从而同时解决检测和识别问题。
<div
align=
center
>
...
...
@@ -22,12 +22,11 @@ DeepSolo中,编码器在接收到图像特征后,生成由四个Bezier控制
</div>
## 环境配置
训练需要依赖
**Detectron2**
库,编译Detectron2库需要满足
`Python ≥ 3.7`
,
`PyTorch ≥ 1.8`
并且
`torchvision`
与
`PyTorch`
版本匹配,
`gcc & g++ ≥ 5.4`
。如果想要更快的构建,推荐安装
`Ninja`
。
训练需要依赖Detectron2库,编译Detectron2库需要满足 Python ≥ 3.7,PyTorch ≥ 1.8 并且 torchvision 与 PyTorch 版本匹配,gcc & g++ ≥ 5.4。如果想要更快的构建,推荐安装Ninja。
Tips: 如果
`detectron2`
安装失败,可尝试以下方式进行安装:
Tips: 如果detectron2安装失败,可尝试以下方式进行安装:
```
```
bash
git clone https://github.com/facebookresearch/detectron2.git
python
-m
pip
install
-e
detectron2
```
...
...
@@ -36,7 +35,7 @@ python -m pip install -e detectron2
-v 路径、docker_name和imageID根据实际情况修改
```
vv
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-centos7.6-dtk-23.04-py38-latest
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
...
...
@@ -54,7 +53,6 @@ bash make.sh
```
cd ./docker
cp ../requirements.txt requirements.txt
docker build --no-cache -t deepsolo:latest .
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
...
...
@@ -90,7 +88,7 @@ bash make.sh
## 数据集
所有的数据集请保存在
deepsolo_pytorch/datasets
下,因数据集较大,请按训练的需求进行选择下载。训练需求详见configs
中yaml的
DATASETS字段(测试数据同理)。
所有的数据集请保存在
`
deepsolo_pytorch/datasets
`
下,因数据集较大,请按训练的需求进行选择下载。训练需求详见
`
configs
文件夹下各个yaml`
的
**
DATASETS
**
字段(测试数据同理)。
### 训练数据集
`[SynthText150K (CurvedSynText150K)]`
[
images
](
https://github.com/aim-uofa/AdelaiDet/tree/master/datasets
)
|
[
annotations(Part1)
](
https://1drv.ms/u/s!ApEsJ9RIZdBQgQTfQC578sYbkPik?e=2Yz06g
)
|
[
annotations(Part2)
](
https://1drv.ms/u/s!ApEsJ9RIZdBQgQJWqH404p34Wb1m?e=KImg6N
)
...
...
@@ -121,8 +119,7 @@ bash make.sh
### 验证数据集
```
```
bash
cd
datasets
mkdir
evaluation
cd
evaluation
...
...
@@ -134,11 +131,10 @@ wget -O gt_inversetext.zip https://cloudstor.aarnet.edu.au/plus/s/xU3yeM3GnidiST
```
### 数据集目录结构
用于正常训练的数据集请按此目录结构进行:
```
├──
./
datasets
├── datasets
│ ├── simple
│ ├── test_images
│ ├── train_images
...
...
@@ -214,16 +210,16 @@ wget -O gt_inversetext.zip https://cloudstor.aarnet.edu.au/plus/s/xU3yeM3GnidiST
│ └── lsvt_train.json
│ ├── ReCTS
│ ├── ReCTS_train_images # 18,000 images
│ ├── ReCTS_val_images # 2,000 images
│ ├── ReCTS_test_images # 5,000 images
│ ├── ReCTS_val_images
# 2,000 images
│ ├── ReCTS_test_images
# 5,000 images
│ ├── rects_train.json
│ ├── rects_val.json
│ └── rects_test.json
```
如果使用自己的数据集,请将数据标注转换成COCO的格式,并在DeepSolo/adet/data/builtin.py代码第18行
_PREDEFINED_SPLITS_TEXT
参数中,参照结构补充自己的数据集。
如果使用自己的数据集,请将数据标注转换成
**
COCO
**
的格式,并在
`
DeepSolo/adet/data/builtin.py
`
代码第18行
`
_PREDEFINED_SPLITS_TEXT
`
参数中,参照结构补充自己的数据集。
项目同样提供了迷你数据集simple进行学习。
项目同样提供了迷你数据集
`
simple
`
进行学习。
## 训练
...
...
@@ -231,61 +227,59 @@ wget -O gt_inversetext.zip https://cloudstor.aarnet.edu.au/plus/s/xU3yeM3GnidiST
Tips: 以下参数请根据实际情况自行修改 train.sh 中的参数设定
--config-file yaml文件配置地址
`
--config-file
`
yaml文件配置地址
--num-gpus 训练卡数量
`
--num-gpus
`
训练卡数量
修改后执行:
```
```
bash
bash train.sh
```
## 推理
Tips:
测试有两种展示,一种 visualization show, 测试完成后会在 --output 路径下生成测试图片结果;
第二种是 eval show, 测试完成后会展示测试结果数据, 没有测试图片结果展示。
测试有两种展示,一种
`visualization show`
, 测试完成后会在
`--output`
路径下生成测试图片结果;
第二种是
`eval show`
, 测试完成后会展示测试结果数据, 没有测试图片结果展示。
需要修改的主要参数说明如下:
${CONFIG_FILE} yaml文件配置地址(注意修改预训练模型地址)
`
${CONFIG_FILE}
`
yaml文件配置地址(注意修改预训练模型地址)
${IMAGE_PATH} 待测试数据地址
`
${IMAGE_PATH}
`
待测试数据地址
${MODEL_PATH} 待测试预训练模型地址
`
${MODEL_PATH}
`
待测试预训练模型地址
如需执行自己的预训练模型,请修改对应配置(visualization show 的模型地址修改在yaml文件中, eval show 的模型地址修改为
${MODEL_PATH}参数输入), 具体配置可参考test.sh中提供的样例。
如需执行自己的预训练模型,请修改对应配置(visualization show 的模型地址修改在yaml文件中, eval show 的模型地址修改为${MODEL_PATH}参数输入), 具体配置可参考
`
test.sh
`
中提供的样例。
以 visualization show 为, 执行步骤如下:
1.
下载CTW1500的预训练模型
pretrain_ctw_96voc.pth:
1.
下载CTW1500的预训练模型
`
pretrain_ctw_96voc.pth
`
:
|Backbone|Training Data|Weights|
|:------:|:------:|:------:|
|Res-50|Synth150K+Total-Text+MLT17+IC13+IC15|
[
OneDrive
](
https://1drv.ms/u/s!AimBgYV7JjTlgcdtYzwEBGvOH6CiBw?e=trgKFE
)
|
将预训练模型放在
pretrained_models/CTW1500/
文件夹下,如果放置于其他地方,请同步修改yaml配置文件中
MODEL.WEIGHTS
地址。
将预训练模型放在
`
pretrained_models/CTW1500/
`
文件夹下,如果放置于其他地方,请同步修改yaml配置文件中
`
MODEL.WEIGHTS
`
地址。
2.
将待测试数据存放于
${IMAGE_PATH}
下,执行
2.
将待测试数据存放于
`
${IMAGE_PATH}
`
下,执行
```
```
bash
bash test.sh
```
3.
推理结果默认保存在test_results文件夹下,可以使用参数
--output
替换结果保存路径。
3.
推理结果默认保存在
`
test_results
`
文件夹下,可以使用参数
`
--output
`
替换结果保存路径。
## result
CTW1500上的结果展示
CTW1500上的结果展示:
<div
align=
center
>
<img
src=
"./doc/results.jpg"
/>
</div>
### 精度
基于backbone=R50在ctw1500上的测试结果如下表所示:
基于
`backbone=R50`
在
`ctw1500`
上的测试结果如下表所示:
|Backbone|External Data|Det-P|Det-R|Det-F1|E2E-None|E2E-Generic|
|:------:|:------:|:------:|:------:|:------:|:------:|:------:|
...
...
@@ -296,7 +290,7 @@ CTW1500上的结果展示
### 算法类别
OCR
### 热点应用行业
v
### 热点应用行业
政府,交通,物流
## 源码仓库及问题反馈
...
...
deepsolo-pytorch.ipynb
0 → 100644
View file @
14acd1f1
{
"cells": [
{
"cell_type": "markdown",
"id": "ede95fbe",
"metadata": {},
"source": [
"# DeepSolo\n",
"\n",
"## 1. 模型简介\n",
"DeepSolo是一个简洁的类似DETR的基线模型,允许一个具有显式点的解码器同时进行检测和识别。\n",
"\n",
"**模型结构**\n",
"\n",
"DeepSolo中,编码器在接收到图像特征后,生成由四个Bezier控制点表示的Bezier中心曲线候选和相应的分数,然后,选择前K个评分的候选。对于每个选定的曲线候选,在曲线上均匀采样N个点,这些点的坐标被编码为位置query并将其添加到内容query中形成复合query。接下来,将复合query输入deformable cross-attention解码器收集有用的文本特征。在解码器之后,采用了几个简单的并行预测头(线性层或MLP)将query解码为文本的中心线、边界、script和置信度,从而同时解决检测和识别问题。\n",
"\n",
"<div align=center>\n",
" <img src=\"./doc/DeepSolo.jpg\"/>\n"
]
},
{
"cell_type": "markdown",
"id": "aa7b7b67-9d3b-4926-b039-ba9840eefa4d",
"metadata": {},
"source": [
"¶\n",
"## 2. 环境检查及依赖补全\n",
"\n",
"### 2.1 环境检查\n",
"\n",
"推荐环境:pytorch=1.13.1 py38\n",
"推荐环境:dcu=23.04.1\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "925e2b69",
"metadata": {},
"outputs": [],
"source": [
"# 检查torch版本\n",
"\n",
"import torch\n",
"import torch.utils.cpp_extension\n",
"version = torch.__version__\n",
"num = float(version[:version.rfind('.')])\n",
"assert num >= 1.10\n",
"device = \"cpu\"\n",
"\n",
"# 检查硬件环境\n",
"if torch.utils.cpp_extension.HIP_HOME:\n",
" device = \"dtk\"\n",
" !rocm-smi\n",
"elif torch.utils.cpp_extension.CUDA_HOME:\n",
" device = \"cuda\"\n",
" !nvidia-smi\n",
"print(\"pytorch version:\", version)\n",
"print(\"device =\", device)"
]
},
{
"cell_type": "markdown",
"id": "aa7b7b67-9d3b-4926-b039-ba9840eefacc",
"metadata": {},
"source": [
"### 2.2 依赖安装\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9e7d7059",
"metadata": {},
"outputs": [],
"source": [
"!pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5bf42297",
"metadata": {},
"outputs": [],
"source": [
"!bash make.sh"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0a7b0e93",
"metadata": {},
"outputs": [],
"source": [
"!git clone https://github.com/facebookresearch/detectron2.git\n",
"!python -m pip install -e detectron2"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "15f59780",
"metadata": {},
"outputs": [],
"source": [
"!pip3 install -r requirements.txt"
]
},
{
"cell_type": "markdown",
"id": "64c534dd-ad8f-493d-a5e4-435676d4f162",
"metadata": {},
"source": [
"## 3. 素材准备\n",
"### 3.1 数据集准备\n"
]
},
{
"cell_type": "markdown",
"id": "b1caaec4",
"metadata": {},
"source": [
"项目已经预制了轻量数据simple进行训练验证,请确保当前项目中包含datasets目录且结构如下:\n",
"\n",
"```\n",
"├── datasets\n",
"│ ├── simple\n",
"│ ├── test_images\n",
"│ ├── train_images\n",
"│ ├── test.json\n",
"│ └── train.json\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "ef0faf15-d9ab-454f-9368-e026372752ad",
"metadata": {},
"source": [
"## 4 训练\n",
"### 4.1 开始训练\n",
"\n",
"根据需求选择单卡或多卡训练"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c305213b",
"metadata": {},
"outputs": [],
"source": [
"# 单卡训练\n",
"!export HIP_VISIBLE_DEVICES=4\n",
"!python tools/train_net.py --config-file configs/simple/train_simple.yaml --num-gpus 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2d95c0e6-4143-40de-b90c-3978c02cb169",
"metadata": {},
"outputs": [],
"source": [
"# 多卡训练(需要2个加速卡)\n",
"!export HIP_VISIBLE_DEVICES=4,5,6,7\n",
"!python tools/train_net.py --config-file configs/simple/train_simple.yaml --num-gpus 4"
]
},
{
"cell_type": "markdown",
"id": "5f1986b2-1ea1-45be-8f56-dfaacfba7694",
"metadata": {},
"source": [
"## 5. 推理\n",
"## 5.1 开始推理\n",
"\n",
"提供了一个推理脚本来测试模型,执行下面的脚本来测试模型输出"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "de9d22f1-4764-4c16-a4c9-52e9581669ce",
"metadata": {},
"outputs": [],
"source": [
"!python demo/demo.py --config-file configs/simple/test_simple.yaml --input datasets/simple/test_images\n",
"# 推理结果默认保存在test_results文件夹下"
]
},
{
"cell_type": "markdown",
"id": "cfe3acde",
"metadata": {},
"source": [
"## 6. 相关文献和引用\n",
"https://github.com/ViTAE-Transformer/DeepSolo.git\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
docker/Dockerfile
View file @
14acd1f1
FROM
image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-centos7.6-dtk-23.04-py38-latest
RUN
source
/opt/dtk/env.sh
COPY
requirements.txt requirements.txt
RUN
pip3
install
-r
requirements.txt
icon.png
0 → 100644
View file @
14acd1f1
61 KB
pretrained_models/CTW1500/pretrain_ctw_96voc.pth
0 → 100644
View file @
14acd1f1
File added
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment