提交 19d653fe 编写于 作者: B breezedeus

update docs

上级 e515dd4b
......@@ -15,7 +15,7 @@ train:
# 在测试集上评估模型,所有badcases的具体信息会存放到文件夹 `evaluate/$(MODEL_NAME)` 中
evaluate:
cnocr evaluate --model-name $(MODEL_NAME) -i data/test/dev.tsv \
--image-folder examples --batch-size 128 -o eval_results/$(MODEL_NAME)
--image-folder data/images --batch-size 128 -o eval_results/$(MODEL_NAME)
predict:
cnocr predict -m $(MODEL_NAME) -i docs/examples/rand_cn1.png
......
......@@ -73,7 +73,7 @@ def cli():
'--train-config-fp',
type=str,
required=True,
help='训练使用的json配置文件,参考 `example/train_config.json`',
help='训练使用的json配置文件,参考 `docs/examples/train_config.json`',
)
@click.option(
'-r',
......@@ -239,7 +239,7 @@ def predict(model_name, pretrained_model_fp, context, img_file_or_dir, single_li
default='test.txt',
)
@click.option("--img-folder", required=True, help="图片所在文件夹,相对于索引文件中记录的图片位置")
@click.option("--batch-size", type=int, help="batch size", default=128)
@click.option("--batch-size", type=int, help="batch size. 默认值:128", default=128)
@click.option(
'-o',
'--output-dir',
......
# Release Notes
### Update 2021.11.06: 发布 cnocr V2.1.0
主要变更:
* 使用了更精简的模型架构:`densenet_lite_*`
* 使用了更丰富的数据重新训练了所有模型,精度相较于之前版本更高;
* 提供了更多预训练好的模型;
* 加入了 `cnocr evaluate` 命令以评估效果。
### Update 2021.09.21: 发布 cnocr V2.0.1
主要变更:
......
......@@ -11,15 +11,13 @@
```bash
(venv) ➜ cnocr git:(pytorch) ✗ cnocr predict -h
(venv) ➜ cnocr git:(dev) ✗ cnocr predict -h
Usage: cnocr predict [OPTIONS]
Options:
-m, --model-name [densenet-s-lstm|densenet-s-gru|densenet-s-fc]
模型名称。默认值为 densenet-s-fc
--model_epoch INTEGER model epoch。默认为 `None`,表示使用系统自带的预训练模型
-m, --model-name TEXT 模型名称。默认值为 densenet_lite_136-fc
-p, --pretrained-model-fp TEXT 使用训练好的模型。默认为 `None`,表示使用系统自带的预训练模型
--context TEXT 使用cpu还是 `gpu` 运行代码,也可指定为特定gpu,如`cuda:0`。默认为
-c, --context TEXT 使用cpu还是 `gpu` 运行代码,也可指定为特定gpu,如`cuda:0`。默认为
`cpu`
-i, --img-file-or-dir TEXT 输入图片的文件路径或者指定的文件夹 [required]
......@@ -43,21 +41,62 @@ cnstd predict -i docs/examples/rand_cn1.png -s
## 模型评估
使用命令 **`cnocr evaluate`** 在指定的数据集上评估模型效果,以下是使用说明:
```bash
(venv) ➜ cnocr git:(dev) ✗ cnocr evaluate -h
Usage: cnocr evaluate [OPTIONS]
Options:
-m, --model-name TEXT 模型名称。默认值为 densenet_lite_136-fc
-p, --pretrained-model-fp TEXT 使用训练好的模型。默认为 `None`,表示使用系统自带的预训练模型
-c, --context TEXT 使用cpu还是 `gpu` 运行代码,也可指定为特定gpu,如`cuda:0`。默认为
`cpu`
-i, --eval-index-fp TEXT 待评估文件所在的索引文件,格式与训练时训练集索引文件相同,每行格式为 `<图片路径>
<以空格分割的labels>`
--img-folder TEXT 图片所在文件夹,相对于索引文件中记录的图片位置 [required]
--batch-size INTEGER batch size. 默认值:`128`
-o, --output-dir TEXT 存放评估结果的文件夹。默认值:`eval_results`
-v, --verbose whether to print details to screen
-h, --help Show this message and exit.
```
例如可以使用以下命令评估 `data/test/dev.tsv` 中指定的所有样本:
```bash
cnocr evaluate -i data/test/dev.tsv --image-folder data/images
```
具体使用也可参考文件 [Makefile](https://github.com/breezedeus/cnocr/blob/master/Makefile)
## 模型训练
使用命令 **`cnocr train`** 训练文本检测模型,以下是使用说明:
```bash
(venv) ➜ cnocr git:(pytorch) ✗ cnocr train -h
(venv) ➜ cnocr git:(dev) ✗ cnocr train -h
Usage: cnocr train [OPTIONS]
Options:
-m, --model-name [densenet-s-fc|densenet-s-lstm|densenet-s-gru]
模型名称。默认值为 densenet-s-fc
-m, --model-name TEXT 模型名称。默认值为 densenet_lite_136-fc
-i, --index-dir TEXT 索引文件所在的文件夹,会读取文件夹中的 train.tsv 和 dev.tsv 文件
[required]
--train-config-fp TEXT 训练使用的json配置文件,参考 `example/train_config.json`
--train-config-fp TEXT 训练使用的json配置文件,参考
`docs/examples/train_config.json`
[required]
-r, --resume-from-checkpoint TEXT
......@@ -74,14 +113,12 @@ Options:
例如可以使用以下命令进行训练:
```bash
cnocr train -m densenet-s-fc --index-dir data/test --train-config-fp docs/examples/train_config.json
cnocr train -m densenet_lite_136-fc --index-dir data/test --train-config-fp docs/examples/train_config.json
```
训练数据的格式见文件夹 [data/test](https://github.com/breezedeus/cnocr/blob/master/data/test) 中的
[train.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv)
[dev.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv) 文件。
训练数据的格式见文件夹 [data/test](https://github.com/breezedeus/cnocr/blob/master/data/test) 中的 [train.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv)[dev.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv) 文件。
......
......@@ -13,9 +13,7 @@
"lr_scheduler": {
"name": "cos_warmup",
"min_lr_mult_factor": 0.01,
"warmup_epochs": 0,
"milestones": [5, 10, 16, 22, 30],
"gamma": 0.5
"warmup_epochs": 0.2
},
"precision": 32,
"limit_train_batches": 1.0,
......
......@@ -14,11 +14,6 @@ cnocr的ocr模型可以分为两阶段:第一阶段是获得ocr图片的局部
cnocr **V2.1** 目前包含以下可直接使用的模型,训练好的模型都放在 **[cnstd-cnocr-models](https://github.com/breezedeus/cnstd-cnocr-models)** 项目中,可免费下载使用:
| 模型名称 | 局部编码模型 | 序列编码模型 | 模型大小 | 迭代次数 | 测试集准确率 |
| :------- | ------------ | ------------ | -------- | ------ | -------- |
| densenet-s-gru | densenet-s | gru | 11 M | 11 | 95.5% |
| densenet-s-fc | densenet-s | fc | 8.7 M | 39 | 91.9% |
| Name | 参数规模 | 模型文件大小 | 准确度 | 平均推断耗时(毫秒/图) |
| --- | --- | --- | --- | --- |
| densenet\_lite\_114-fc | 1.3 M | 4.9 M | 0.9274 | 9.229 |
......
# 模型训练
自带模型基于 `400+万` 的文字图片训练而成。
自带模型基于 `500+万` 的文字图片训练而成。
## 训练命令
......@@ -8,16 +8,16 @@
[命令行工具](command.md) 介绍了训练命令。使用命令 **`cnocr train`** 训练文本检测模型,以下是使用说明:
```bash
(venv) ➜ cnocr git:(pytorch) ✗ cnocr train -h
(venv) ➜ cnocr git:(dev) ✗ cnocr train -h
Usage: cnocr train [OPTIONS]
Options:
-m, --model-name [densenet-s-fc|densenet-s-lstm|densenet-s-gru]
模型名称。默认值为 densenet-s-fc
-m, --model-name TEXT 模型名称。默认值为 densenet_lite_136-fc
-i, --index-dir TEXT 索引文件所在的文件夹,会读取文件夹中的 train.tsv 和 dev.tsv 文件
[required]
--train-config-fp TEXT 训练使用的json配置文件,参考 `example/train_config.json`
--train-config-fp TEXT 训练使用的json配置文件,参考
`docs/examples/train_config.json`
[required]
-r, --resume-from-checkpoint TEXT
......@@ -34,16 +34,31 @@ Options:
例如可以使用以下命令进行训练:
```bash
cnocr train -m densenet-s-fc --index-dir data/test --train-config-fp docs/examples/train_config.json
cnocr train -m densenet_lite_136-fc --index-dir data/test --train-config-fp docs/examples/train_config.json
```
训练数据的格式见文件夹 [data/test](https://github.com/breezedeus/cnocr/blob/master/data/test) 中的
[train.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv)
[dev.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv) 文件。
训练数据的格式见文件夹 [data/test](https://github.com/breezedeus/cnocr/blob/master/data/test) 中的 [train.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv)[dev.tsv](https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv) 文件。
具体使用也可参考文件 [Makefile](https://github.com/breezedeus/cnocr/blob/master/Makefile)
# 模型精调
如果需要在已有模型的基础上精调模型,需要把训练配置中的学习率设置的较小,`lr_scheduler`的设置可参考以下:
```json
"learning_rate": 3e-5,
"lr_scheduler": {
"name": "cos_warmup",
"min_lr_mult_factor": 0.01,
"warmup_epochs": 2
},
```
> 注:需要尽量避免过度精调!
......@@ -2,9 +2,9 @@
## 模型文件自动下载
首次使用cnocr时,系统会**自动下载** zip格式的模型压缩文件,并存于 `~/.cnocr`目录(Windows下默认路径为 `C:\Users\<username>\AppData\Roaming\cnocr`)。
下载后的zip文件代码会自动对其解压,然后把解压后的模型相关目录放于`~/.cnocr/2.0`目录中。
下载后的zip文件代码会自动对其解压,然后把解压后的模型相关目录放于`~/.cnocr/2.1`目录中。
如果系统无法自动成功下载zip文件,则需要手动从 **[cnstd-cnocr-models](https://github.com/breezedeus/cnstd-cnocr-models)** 下载此zip文件并把它放于 `~/.cnocr/2.0`目录。如果Github下载太慢,也可以从 [百度云盘](https://pan.baidu.com/s/1c68zjHfTVeqiSMXBEPYMrg) 下载, 提取码为 ` 9768`
如果系统无法自动成功下载zip文件,则需要手动从 **[cnstd-cnocr-models](https://huggingface.co/breezedeus/cnstd-cnocr-models/tree/main)** 下载此zip文件并把它放于 `~/.cnocr/2.1`目录。如果下载太慢,也可以从 [百度云盘](https://pan.baidu.com/s/1N6HoYearUzU0U8NTL3K35A) 下载, 提取码为 ` gcig`
放置好zip文件后,后面的事代码就会自动执行了。
......@@ -22,7 +22,7 @@
from cnocr import CnOcr
ocr = CnOcr()
res = ocr.ocr('examples/multi-line_cn1.png')
res = ocr.ocr('docs/examples/multi-line_cn1.png')
print("Predicted Chars:", res)
```
......@@ -32,7 +32,7 @@ from cnocr.utils import read_img
from cnocr import CnOcr
ocr = CnOcr()
img_fp = 'examples/multi-line_cn1.png'
img_fp = 'docs/examples/multi-line_cn1.png'
img = read_img(img_fp)
res = ocr.ocr(img)
print("Predicted Chars:", res)
......@@ -50,7 +50,7 @@ print("Predicted Chars:", res)
from cnocr import CnOcr
ocr = CnOcr()
res = ocr.ocr_for_single_line('examples/helloworld.jpg')
res = ocr.ocr_for_single_line('docs/examples/helloworld.jpg')
print("Predicted Chars:", res)
```
......@@ -61,7 +61,7 @@ from cnocr.utils import read_img
from cnocr import CnOcr
ocr = CnOcr()
img_fp = 'examples/helloworld.jpg'
img_fp = 'docs/examples/helloworld.jpg'
img = read_img(img_fp)
res = ocr.ocr_for_single_line(img)
print("Predicted Chars:", res)
......@@ -97,7 +97,7 @@ print("Predicted Chars:", res)
class CnOcr(object):
def __init__(
self,
model_name: str = 'densenet-s-fc'
model_name: str = 'densenet_lite_136-fc'
*,
cand_alphabet: Optional[Union[Collection, str]] = None,
context: str = 'cpu', # ['cpu', 'gpu', 'cuda']
......@@ -109,7 +109,7 @@ class CnOcr(object):
其中的几个参数含义如下:
* `model_name`: 模型名称,即上面表格第一列中的值。默认为 `densenet-s-fc`
* `model_name`: 模型名称,即上面表格第一列中的值。默认为 `densenet_lite_136-fc`
* `cand_alphabet`: 待识别字符所在的候选集合。默认为 `None`,表示不限定识别字符范围。取值可以是字符串,如 `"0123456789"`,或者字符列表,如 `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`
......@@ -121,7 +121,7 @@ class CnOcr(object):
* `root`: 模型文件所在的根目录。
* Linux/Mac下默认值为 `~/.cnocr`,表示模型文件所处文件夹类似 `~/.cnocr/2.0/densenet-s-fc`
* Linux/Mac下默认值为 `~/.cnocr`,表示模型文件所处文件夹类似 `~/.cnocr/2.1/densenet_lite_136-fc`
* Windows下默认值为 `C:\Users\<username>\AppData\Roaming\cnocr`
......@@ -175,7 +175,7 @@ print("Predicted Chars:", res)
上面使用的图片文件 [examples/multi-line_cn1.png](./examples/multi-line_cn1.png)内容如下:
上面使用的图片文件 [docs/examples/multi-line_cn1.png](./examples/multi-line_cn1.png)内容如下:
![examples/multi-line_cn1.png](./examples/multi-line_cn1.png)
......@@ -231,7 +231,7 @@ print("Predicted Chars:", res)
```
对图片文件 [examples/rand_cn1.png](./examples/rand_cn1.png)
对图片文件 [docs/examples/rand_cn1.png](./examples/rand_cn1.png)
![examples/rand_cn1.png](./examples/rand_cn1.png)
......@@ -278,4 +278,3 @@ print("Predicted Chars:", res)
更详细的使用方法,可参考 [tests/test_cnocr.py](https://github.com/breezedeus/cnocr/blob/master/tests/test_cnocr.py) 中提供的测试用例。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册