测试单张图片
python demo/image_demo.py demo/demo_text_recog.jpg configs/textrecog/crnn/crnn_academic_dataset.py pth/crnn_academic-a723a1c5.pth demo/demo_text_recog_pred.jpg --imshow
训练模型
All outputs (log files and checkpoints) will be saved to a working directory specified by
work_dir
in the config file../tools/dist_train.sh configs/textrecog/crnn/crnn_academic_dataset.py work_dirs/CRNN 4 #后台执行 nohup ./tools/dist_train.sh configs/textrecog/crnn/crnn_academic_dataset.py work_dirs/CRNN 4 > CRNN.log 2>&1 &
robust_scanner
./tools/dist_train.sh configs/textrecog/robust_scanner/robustscanner_r31_academic.py work_dirs/robustscanner 8 nohup ./tools/dist_train.sh configs/textrecog/robust_scanner/robustscanner_r31_academic.py work_dirs/robustscanner 8 > robust_scanner.log 2>&1 &
框架结构
整个MMOCR的骨架还是MMDetection
模型构建训练等等代码的主体是在 tools/train.py里面的,这是一个普适所有模型的框架,不同的模型通过configs/textrecog/crnn/crnn_academic_dataset.py 这个python文件来传递具体模型的config参数
在train.py中,这是在创建模型
build_detector返回的是一个type名字对应的类的对象
例如我们传递的模型参数是
build_detector将会返回一个CRNNNet类型的对象
这是训练模型
在train_detector函数的内部实际做的是实例化runner, 并且run runner
跳到train_detector所在的文件mmocr/apis/train.py,可以看到runner使用哪个类在这里
实例化runner
build_runner函数中就一句build_from_cfg
可以看到真正的train的命令是在这里
这里的runner是用的base_runner
runner的run()函数是在epoch_based_runner中定义的
hook的注册都是在mmocr/apis/train.py中的
但是在这里面只是register hook,没有调用hook
在runner.run()的run函数里才调用hook
val是在
anaconda3/envs/open-mmocr/lib/python3.7/site-packages/mmdet/core/evaluation/eval_hooks.py
VeryDeepVgg是在
/home/xhhao/py/mmocr/mmocr/models/textrecog/backbones/very_deep_vgg.py
CRNNDecoder是在
/home/xhhao/py/mmocr/mmocr/models/textrecog/decoders/crnn_decoder.py
CTCLoss是在
/home/xhhao/py/mmocr/configs/textrecog/crnn/crnn_academic_dataset.py
tools/train.py中其实就做了四件事
- 设定和读取各种配置;
- 创建模型;
- 创建数据集;
- 将模型,数据集和配置传进训练函数;
mmocr/apis/train.py 中做的事
- 准备 dataloaders
- 模型放到GPU上
- build runner & 实例化runner
- register hooks
- run runner
RUNNER中做的事