{"id":13488336,"url":"https://github.com/sml2h3/dddd_trainer","last_synced_at":"2025-05-15T01:08:05.727Z","repository":{"id":37346489,"uuid":"451713431","full_name":"sml2h3/dddd_trainer","owner":"sml2h3","description":"ddddocr训练工具","archived":false,"fork":false,"pushed_at":"2025-03-06T03:01:44.000Z","size":144,"stargazers_count":898,"open_issues_count":49,"forks_count":358,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-04-13T23:53:48.767Z","etag":null,"topics":["ddddocr"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sml2h3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-25T02:52:24.000Z","updated_at":"2025-04-11T13:19:24.000Z","dependencies_parsed_at":"2024-10-30T15:04:46.040Z","dependency_job_id":"6504bdb8-28a8-4961-a819-688ba720965b","html_url":"https://github.com/sml2h3/dddd_trainer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sml2h3%2Fdddd_trainer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sml2h3%2Fdddd_trainer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sml2h3%2Fdddd_trainer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sml2h3%2Fdddd_trainer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sml2h3","download_url":"https://codeload.github.com/sml2h3/dddd_trainer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254254042,"owners_count":22039792,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddddocr"],"created_at":"2024-07-31T18:01:13.966Z","updated_at":"2025-05-15T01:08:00.714Z","avatar_url":"https://github.com/sml2h3.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# dddd_trainer 带带弟弟OCR训练工具 （2025.01.18项目即将更新，将支持完善的可视化训练和新的训练策略）\n\n### 带带弟弟OCR所用的训练工具今天正式开源啦！ [ddddocr](https://github.com/sml2h3/ddddocr)\n\n### 项目仅支持N卡训练，A卡或其他卡就先别看啦\n\n### 项目基于Pytorch进行开发，支持cnn与crnn进行训练、断点恢复、自动导出onnx模型，并同时支持无缝使用[ddddocr](https://github.com/sml2h3/ddddocr) 与 [ocr_api_server](https://gitee.com/fkgeek/ocr_api_server) 的无缝部署\n\n### 训练环境支持\n\nWindows/Linux\n\nMacos仅支持cpu训练\n\n## 1、深度学习必备环境配置（非仅本项目要求，而是所有深度学习项目要求，cpu训练除外）\n\n### 开始本教程前请先前往[pytorch](https://pytorch.org/get-started/locally/) 官网查看自己系统与硬件支持的pytorch版本，注意30系列之前的N卡，如2080Ti等请选择cuda11以下的版本（例：CUDA 10.2），如果为30系N卡，仅支持CUDA 11版本，请选择CUDA 11以上版本（例：CUDA 11.3），然后根据选择的条件显示的pytorch安装命令完成pytorch安装，由于pytorch的版本更新速度导致很多pypi源仅缓存了cpu版本，CUDA版本需要自己在官网安装。\n\n### 安装CUDA和CUDNN\n\n根据自己显卡型号与系统选择\n\n[cuda](https://developer.nvidia.com/cuda-downloads)\n\n[cudnn](https://developer.nvidia.com/zh-cn/cudnn)\n\n注意cudnn支持的cuda版本号要与你安装的cuda版本号对应，不同版本的cuda支持的显卡不一样，\u003cb\u003e20系无脑选择10.2版本cuda，30系无脑选择11.3版本cuda\u003c/b\u003e,这里有啥问题就百度吧，算是一个基础问题。\n\n## 2、训练部分 \n\n- 以下所有变量均以 {param} 格式代替，表示可根据自己需要修改，而使用时并不需要带上{}，如步骤创建新的训练项目，使用时可以直接写\n\n`python app.py create test_project`\n\n- ### 1、Clone本项目到本地\n\n`git clone https://github.com/sml2h3/dddd_trainer.git`\n\n- ### 2、进入项目目录并安装本项目所需依赖\n\n`pip install -r requirements.txt -i https://pypi.douban.com/simple`\n\n- ### 3、创建新的训练项目\n\n`python app.py create {project_name}`\n\n如果想要创建一个CNN的项目，则可以加上--single参数，CNN项目识别比如图片类是什么分类的情况，比如图片上只有一个字，识别这张图是什么字（图上有多个字的不要用CNN模式），又比如分辨图片里是狮子还是兔子用CNN模式比较合适，大多数OCR需求请不要使用--single\n\n`python app.py create {project_name} --single`\n\nproject_name 为项目名称，尽量不要以特殊符号命名\n\n- ### 4、准备数据\n\n    项目支持两种形式的数据\n    \n    ### A、从文件名导入\n        \n    图片均在同一个文件夹中，且命名为类似，其中/root/images_set为图片所在目录，可以为任意目录地址\n\n    ```\n  /root/images_set/\n    |---- abcde_随机hash值.jpg\n    |---- sdae_随机hash值.jpg\n    |---- 酱闷肘子_随机hash值.jpg\n  \n  ```\n    \n    如下图所示\n\n    ![image](https://cdn.wenanzhe.com/img/mkGu_000001d00f140741741ed9916240d8d5.jpg)\n\n    那么图片命名可以是 \n\n    `mkGu_000001d00f140741741ed9916240d8d5.jpg`\n\n    ### 为考虑各种情况，dddd_trainer不会自动去处理大小写问题，如果想训练大小写，则在样本标注时就需要自己标注好大小写，如上面例子\n\n    ### B、从文件中导入\n\n    受限于可能样本组织形式或者特殊字符，本项目支持从txt文档中导入数据，数据集目录必须包含有`labels.txt`文件和`images`文件夹, 其中/root/images_set为图片所在目录，可以为任意目录地址\n    \n    `labels.txt`文件中包含了所有在`/root/images_set/images`目录下基于`/root/images_set/images`的图片相对路径，`/root/images_set/images`下可以有目录。\n\n    #### 当然，在这种模式下，图片的文件名随意，可以有具体label也可以没有，因为咱们不从这里获取图片的label\n\n    如下所示\n- \n   a.images下无目录的形式\n\n    ```\n  /root/images_set/\n    |---- labels.txt\n    |---- images\n          |---- 随机hash值.jpg\n          |---- 随机hash值.jpg\n          |---- 酱闷肘子_随机hash值.jpg\n  \n  labels.txt文件内容为（其中\\t制表符为每行文件名与label的分隔符）\n  随机hash值.jpg\\tabcd\n  随机hash值.jpg\\tsdae\n  酱闷肘子_随机hash值.jpg\\t酱闷肘子\n  ```\n  b.images下有目录的形式\n    ```\n  /root/images_set/\n    |---- labels.txt\n    |---- images\n          |---- aaaa\n                |---- 随机hash值.jpg\n          |---- 酱闷肘子_随机hash值.jpg\n  \n  labels.txt文件内容为（其中\\t制表符为每行文件名与label的分隔符）\n  aaaa/随机hash值.jpg\\tabcd\n  aaaa/随机hash值.jpg\\tsdae\n  酱闷肘子_随机hash值.jpg\\t酱闷肘子\n  \n  ```\n  \n  ### 为了新手更好的理解本部分的内容，本项目也提供了两套基础数据集提供测试\n\n    [数据集一](https://wwm.lanzoum.com/iUyYb0b5z3lg)\n    [数据集二](https://wwm.lanzoum.com/itczd0b5z3yj)\n- ### 5、修改配置文件\n```yaml\nModel:\n    CharSet: []     # 字符集，不要动，会自动生成\n    ImageChannel: 1 # 图片通道数，如果你想以灰度图进行训练，则设置为1，彩图，则设置为3。如果设置为1，数据集是彩图，项目会在训练的过程中自动在内存中将读取到的彩图转为灰度图，并不需要提前自己修改并且该设置不会修改本地图片\n    ImageHeight: 64 # 图片自动缩放后的高度，单位为px,高度必须为16的倍数，会自动缩放图像\n    ImageWidth: -1  # 图片自动缩放后的宽度，单位为px，本项若设置为-1，将自动根据情况调整\n    Word: false     # 是否为CNN模型，这里在创建项目的时候通过参数控制，不要自己修改\nSystem:\n    Allow_Ext: [jpg, jpeg, png, bmp]  # 支持的图片后缀，不满足的图片将会被自动忽略\n    GPU: true                         # 是否启用GPU去训练，使用GPU训练需要参考步骤一安装好环境\n    GPU_ID: 0                         # GPU设备号，0为第一张显卡\n    Path: ''                          # 数据集根目录，在缓存图片步骤会自动生成，不需要自己改，除非数据集地址改了\n    Project: test                     # 项目名称 也就是{project_name}\n    Val: 0.03                         # 验证集的数据量比例，0.03就是3%，在缓存数据时，会自动选则3%的图片用作训练过程中的数据验证，修改本值之后需要重新缓存数据\nTrain:\n    BATCH_SIZE: 32                                    # 训练时每一个batch_size的大小，主要取决于你的显存或内存大小，可以根据自己的情况，多测试，一般为16的倍数,如16，32，64，128\n    CNN: {NAME: ddddocr}                              # 特征提取的模型，目前支持的值为ddddocr,effnetv2_l,effnetv2_m,effnetv2_xl,effnetv2_s,mobilenetv2,mobilenetv3_s,mobilenetv3_l\n    DROPOUT: 0.3                                      # 非专业人员不要动\n    LR: 0.01                                          # 初始学习率\n    OPTIMIZER: SGD                                    # 优化器，不要动\n    SAVE_CHECKPOINTS_STEP: 2000                       # 每多少step保存一次模型\n    TARGET: {Accuracy: 0.97, Cost: 0.05, Epoch: 20}   # 训练结束的目标，同时满足时自动结束训练并保存onnx模型，Accuracy为需要满足的最小准确率，Cost为需要满足的最小损失，Epoch为需要满足的最小训练轮数\n    TEST_BATCH_SIZE: 32                               # 测试时每一个batch_size的大小，主要取决于你的显存或内存大小，可以根据自己的情况，多测试，一般为16的倍数,如16，32，64，128\n    TEST_STEP: 1000                                   # 每多少step进行一次测试\n\n\n```\n配置文件位于本项目根目录下`projects/{project_name}/config.yaml`\n\n- ### 6、缓存数据\n\n`python app.py cache {project_name} /root/images_set/`\n\n如果是从labels.txt里面读取数据\n\n`python app.py cache {project_name} /root/images_set/ file`\n\n- ### 7、开始训练或恢复训练\n\n`python app.py train {project_name}`\n\n- ### 8、部署\n\n`你们先训练着，我去适配ddddocr和ocr_api_server了，适配完我再继续更新文档`\n\n- ### 9、备注\n  \n  1. ddddocr crnn网络结构来自 https://github.com/meijieru/crnn.pytorch.git\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsml2h3%2Fdddd_trainer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsml2h3%2Fdddd_trainer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsml2h3%2Fdddd_trainer/lists"}