# 手写公式识别项目
## 一. 项目概述
### 1.1 项目简介
实践是检验学习成果的重要环节。在之前的作业当中,同学们已经熟悉了深度学习的基本原理和Pytorch/TensorFlow框架的使用方法,但是之前的作业距离实际的开发或科研仍然相差甚远。
为了检验同学们的学习成果,期末的大作业将是以小组的形式开展(每组4~5人),目标是从数据标注开始,训练一个手写公式识别模型。
其中,步骤一是每位同学都需要完成的,后续的步骤请进行合理的分工。
最终的考核形式以**答辩为主**,并且需要每位同学提交实验报告和源代码。
实验代码等数据以组为单位上交,实验报告单独撰写,单独上交,注明分工内容。
相关代码见github仓库:https://github.com/zzz47zzz/deep-learning-course-documents
### 1.2 问题定义
需要把图片格式的**数学表达式**转化为文字格式的**LaTex表达式**
<div align="center">
<img src="figs/0.png" width = "800" />
</div>
如上图所示是将印刷体格式的数学表达式进行识别和转化,而我们这次项目聚焦的是手写体的数学表达式。
手写体比印刷体的识别难度更加大,目前还是一个挑战。
如图<img src="figs/5.png" width = "100" />,需要识别成 "1-2 < x"
### 1.3 评价指标
1. [EditDistance](https://www.jianshu.com/p/a617d20162cf):即Levenshtein距离,以取反的百分数呈现,越大越好。例:80%的EditDistance代表需要改动20%的内容才能达到groundtruth
2. ExactMatch:当预测结果和gt一样时才算100%准确,否则为0%,因此同样越大越好。
### 1.4 完成内容
1. 熟悉并使用labelImg软件提取公式图片。本次实验会提供**真实的初高中数学试卷**作为数据源给每位同学,每位同学负责其中一部分图片的**公式框选**。(步骤一)
2. 待每位同学完成后,将会收集同学们框选的标注,通过[mathpix](https://mathpix.com/)识别后,**取mathpix的识别结果作为ground truth**,再发回给大家作为数据集来训练。(步骤二)
3. 下载获取数据集(步骤三)
4. 利用所提供的代码,完成数据的**清洗+预处理**工作,以便作为模型的输入。(步骤四)
5. 训练**两个模型**:(步骤五)
- 模型1:Encoder用CNN,Decoder用RNN
- 模型2:Encoder用Resnet,Decoder用[Transformer](https://arxiv.org/abs/1706.03762)
6. 提交模型测试集预测结果,获取测试集成绩(步骤六)
7. 准备**小组答辩**,同时提交**实验报告**和**源代码**。(步骤七)
### 1.5 评分标准(项目总体分值为100分)
1. 数据标注(40分):**高质量完成**对应标注任务即可得到该部分分数的85%,**额外标注一份**即可得到得到该部分分数的100%。注:若标注质量低则酌情扣分。
2. 模型实现(50分,**结合答辩环节评估**):
- 模型正确性(30分):模型1 CNN+RNN(15分)和 模型2 Resnet+Transformer(15分)。评分根据参考代码实现是否正确、实验结果评测指标、代码可复现性和注释等方面来考虑。
- 模型拓展性(20分):优化模型、优化数据预处理、讨论任务瓶颈等。有UI的根据UI的美观、实用性等方面酌情加分。
3. 实验报告(10分):材料完整性,命名规范性,书写美观性等等。
**注:若发现代码,模型,结果,实验报告有抄袭或伪造情况,则扣除相应部分的分数!**
## 二,步骤一:标注数据
### 2.1 使用软件介绍
本次标注使用的是labelImg,是目标检查与识别科研界内广泛使用的开源标注软件。项目地址为:https://github.com/tzutalin/labelImg。
### 2.2 软件安装流程
1. 在windows系统下运行。首先下载仓库文件到本地,可以*手动下载zip压缩包后解压*或者*在目标路径下打开git bash并输入以下命令*
```
git clone https://github.com/heartexlabs/labelImg.git
```
2. 进入labelImg文件夹,打开cmd终端依次运行
```
pip3 install pyqt5 lxml
make qt5py3
python3 labelImg.py
```
注:如果遇到报错“'make' 不是内部或外部命令,也不是可运行的程序或批处理文件。”,解决方法:(1)参考[这里](https://www.jianshu.com/p/9bffbaf12bed)先安装MinGW;(2)参考[这里](https://blog.csdn.net/qq_43382350/article/details/105840862)打开MinGW管理界面安装toolkit等组件,最后在MinGW/bin路径下找到mingw32-make.exe并复制改名为make.exe。
<div align="center">
<img src="figs/1.jpg" width = "600"/>
</div>
顺利执行*labelImg.py*后将自动打开标注软件如下图:
<div align="center">
<img src="figs/2.jpg" width = "600"/>
</div>
### 2.3 标注流程
数据标注属于最基础且重要的工作,在真实的生产环境中,提高数据的质量往往比提高算法更加有效,因此企业常常花费大量的时间和经历做一些数据相关的工作。
此次的任务延续去年深度学习课程的传统,让同学们参与到一个可以落地的深度学习项目当中,不同在于今年比往年更近一步,需要识别手写体而不是印刷体,因此更加具有挑战。
此次标注过程一方面是为了搜集数据以便设计出更好的模型,另一方面也是让同学们亲身感受和参与数据标注的过程,本身工作量并不大,而且只要求框选出数学表达式,真正生成latex标注的工作会交给mathpix完成,所以希望大家用心完成标注任务,标注完成后会检查标注质量,若质量不合格则会会扣除一定的分数。
每位同学会分配60张的试卷图片(预计标注时长1h),需要额外标注的同学联系助教拿额外60张试卷图片,其他标注问题在群里面问助教。
1. 新建文件夹用于存放标注图片和对应的标签
在自定义的路径下新建*input_images*和*output_annotations*两个空文件夹。把所分配的数学试题图片放入*input_images*中。*output_annotations*文件夹用于存放后续软件生成的每张图片的xml标签。**待标注完成后重命名并提交*output_annotations*文件夹压缩包**
2. 在网址 http://202.38.247.12/ 下找到自己*点名册序号.zip*的图片压缩包下载,并把解压的图片放入*input_images*文件夹中。
3. 修改类别标签文件*labelImg/data/predefined_classes.txt*,删去原来类别名称,输入math,保存退出。
4. 在labelImg下,使用命令```python3 labelImg.py```打开标注软件(若在上一步中已经打开标注软件则跳过此步骤)
5. 点击打开目录(Open Dir),选择*input_images*文件夹
6. 点击改变存放目录(Change Save Dir),选择*output_annotations*文件夹
7. 点击Yolo/Pascal切换到PascalVOC模式。
<div align="center">
<img src="figs/3.png" width = "600"/>
</div>
8. 点击创建区块(快捷键w),圈出图片中的数学表达式(框选规则见下一节),选择标签选择math,按“OK”键完成一个框的标注。当完成当前图片所有框选后,使用快捷键ctrl+S保存,当前图片的标注将自动保存到*output_annotations*文件夹下。之后点击下一张图片(下一张图片快捷键d,上一张图片快捷键a),重复以上过程直到完成预定数量的标注。
注:检查*output_annotations*文件下是否生成同名的xml标注文件
<div align="center">
<img src="figs/10.jpg" width = "600"/>
</div>
注:提升效率小技巧:(1)熟练使用快捷键w和d;(2)在软件右上角勾选使用预设标签
9. 重命名*output_annotations*文件夹为*点名册序号_姓名*,压缩并在提交到指定网址 https://workspace.jianguoyun.com/inbox/collect/5f99cc9da86147c08b50bbae45e1e432/submitv2 。
### 2.4 框选数学表达式规则:
框选图片中所有清晰的数学表达式,这里的数学�
![avatar](https://profile-avatar.csdnimg.cn/8aa41e1a9c6c4428a1e22f23f0c8c0da_m0_73728511.jpg!1)
机智的程序员zero
- 粉丝: 2469
- 资源: 4739
最新资源
- 基于Node.js的JavaScript、CSS、HTML个人博客项目设计源码
- (源码)基于C++和Qt框架的2048游戏.zip
- 基于CSS和JavaScript的HTML车位共享系统物业端设计源码
- 基于扰动观测器的永磁同步电机模型预测控制仿真研究:理想控制效果与通俗易通的模块程序设计,基于扰动观测器的永磁同步电机模型预测控制仿真研究:速度外环与电流内环的协同控制效果分析,基于扰动观测器的永磁同步
- 基于Vue框架的健身后台管理系统设计源码
- (源码)基于Arduino的电动门控制系统.zip
- (源码)基于ESP32和TTGO显示板的停车场传感器系统.zip
- 基于Java架构的电影管家后端与GPT接口设计源码
- (源码)基于Flutter框架的物联网应用.zip
- (源码)基于JavaScript的合成大西瓜游戏魔改版.zip
- 基于JavaScript的先锋积分档案管理系统源码设计
- (源码)基于模块化设计的RSA加密解密系统.zip
- (源码)基于ARM CMSIS DSP库的数字信号处理工具集.zip
- 基于5.2MW永磁风机与虚拟同步机控制的九节点并网系统:高效稳定与可扩展的风电仿真模型,基于双PWM环设计的5.2MW永磁风机一次调频并网三机九节点系统:融合虚拟惯性与下垂控制及虚拟同步机VSG,风电
- (源码)基于TensorRT的Yolo模型推理.zip
- 基于COMSOL多场耦合技术的水合物降压开采与地质能源应用案例分析,COMSOL多场耦合技术在地质能源开采与地质灾害防护中的应用分析,comsol多场耦合 水合物降压降压开采THMC,注气驱替甲烷TH
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)