Commit 14acd1f1 authored by Rayyyyy's avatar Rayyyyy
Browse files

Add icon and SCNet

parent 0e91ce69
# 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
......@@ -221,9 +217,9 @@ wget -O gt_inversetext.zip https://cloudstor.aarnet.edu.au/plus/s/xU3yeM3GnidiST
│ └── 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
### 热点应用行业
政府,交通,物流
## 源码仓库及问题反馈
......
{
"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
}
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

61 KB

Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment