【AI实践】个人免费数学老师系列之(二):自动切题【目标检测】

出发点:承接上一篇 【AI实践】个人免费数学老师系列之(一):系统概述,本篇介绍识别流程的第一步。
顺带总结科普一下当下大模型的核心架构Transformer、CV领域目标 检测算法等概念。
另将该自动切题方案代码开源。

0、提纲:

  • 核心概念
  • 项目开源
  • 参考资料

1、核心概念

目标检测(Object detection)是计算机视觉(Computer Vision,CV)中的一类重要任务(Task),旨在识别图像中的物体并确定其位置(“what objects are located at where”)。

本项目任务为,识别&框定图像中每道题目所在的位置。检测依据为题号、版面分布等特征。

在深度学习时代,几乎所有现代目标检测器都共享相同的范式:用于特征提取的主干(Backbone)、用于整合不同层次特征的脖子(Neck)、用于定位与分类任务的检测头(Head)。

1.1 主干(Backbone)

Transformer模型首次在2017年Google的论文《Attention Is All You Need》中被提出。2018年其引申的变体BERT模型引领自然语言处理(NLP)的各大榜单。

当下最成功的大模型(LLM、例如OpenAI o1、Claude3.5、LLama3.2)都是Transformer Decoder架构。

Transformer的核心是自注意力机制(上图公式)。它能够更好地捕获全局的上下文信息,这也是Transformer有别于其它特征捕捉机制(如CNN、RNN)的关键所在。

以上图为例,我们想要翻译“The animal didn't cross the street because it was too tired”。 当Transformer在第5层编码器编码“it”时的状态,可视化之后显示it有一部分注意力集中在了“The animal”上,并且把这两个词的信息融合到了"it"中。

Transformer最初是为 NLP 任务设计的(出于自然语言天然的时序属性),但该架构已被成功扩展到CV和多模态领域。 本方案采用微软2021年开源的Swin-Transformer模型:

Swin-Transformer在层叠结构的每一层中对每个局部窗口应用下图的移动窗口(Shifted Window)计算技巧,扩充关注视野的同时,有效降低了计算成本。

1.2 脖子Neck

本方案应用目标检测领域中主流的(历史也很悠久、2017年由Facebook提出)特征金字塔网络(FPN、上图中的d),同时利用不同层次的特征,从而提升模型对各种大小目标的检测能力。

1.3 检测头(Head)

本方案应用2021年微软提出的《Dynamic Head: Unifying Object Detection Heads with Attentions》。

通过引入多种自注意力机制,统一了不同尺度、空间位置和任务的特征处理方式,从而提升了目标检测的表现。

1.4 提升策略(ATSS)

工业应用时,做目标检测任务,出于执行速度考虑,大多会选用单阶段检测器(one-stage methods),此时往往会面临存在大量负样本而正样本稀缺的情况,导致模型训练效果不佳。

2020年北邮提出的ATSS (Adaptive Training Sample Selection)策略,通过引入自适应样本选择机制,动态选择与真实目标更为接近的样本(根据均值和标准差设定IoU阈值,确保选择的正样本质量)进行训练,取得了显著的效果提升。

2、项目开源

  • 安装&训练&推理:可参看代码仓库中的README.md
  • 验证集指标:

  • 运行效果截图:

3、参考资料

(1)图解 Transformer [译]:

https://baoyu.io/translations/llm/illustrated-transformer

(2)DynamicHead:

https://github.com/microsoft/DynamicHead/tree/master

(3)Swin-Transformer:

https://github.com/microsoft/Swin-Transformer

(4)Transformer动画讲解 - 注意力工作原理(Q、K、V):

https://mp.weixin.qq.com/s/IhyOJBbc9xrNAopIqPxXDg

(5)Visualizing Attention, a Transformer's Heart:

https://www.3blue1brown.com/lessons/attention

另附上该系列目录:

【AI实践】个人免费数学老师系列之(一):系统概述

【AI实践】个人免费数学老师系列之(二):自动切题【目标检测】(本篇)

【AI实践】个人免费数学老师系列之(三):题目识别【OCR2.0】

【AI实践】个人免费数学老师系列之(四):题目解析【Qwen2.5-Math】

【AI实践】个人免费数学老师系列之(五):工程实践【代码开源】

### 大模型在试卷切题中的技术实现 #### 背景介绍 随着预训练大模型的发展,其强大的效果、泛化能力和标准化的研发流程使其逐渐成为人工智能技术的核心基础[^1]。这些特性也为教育领域的智能化提供了新思路,尤其是在自动化处理方面,如试卷生成、题目切割和解析等。 #### 技术原理 试卷切题是指通过算法将一张完整的试卷图像分割成多个独立的题目部分。这一过程通常涉及计算机视觉技术和自然语言处理技术的结合。以下是基于大模型的技术实现方式: 1. **目标检测与特征提取** 利用目标检测框架(例如特征金字塔网络FPN)可以有效地定位试卷上的各个题目区域[^3]。通过对不同层次的特征进行提取,能够提高对各种大小目标(即题目)的检测精度。 2. **文本识别与语义理解** 预训练的语言模型可以帮助理解和分类题目内容。例如,在完成目标检测后,可以通过OCR技术将图片转换为可编辑的文字,并借助大模型对文字内容进行深入分析,判断题型以及难度等级。 3. **随机抽题机制优化** 结合题库管理系统的设计理念,可以在已有的大量标注数据基础上构建更加灵活高效的随机抽题策略[^2]。具体来说,就是利用机器学习方法预测哪些类型的题目组合最有利于评估学生知识点掌握情况的同时降低重复率。 4. **端到端解决方案** 整体来看,从原始扫描件输入到最后输出结构化的电子版试题列表,整个流水线都可以由深度神经网络驱动完成。这不仅提高了效率还减少了人为干预带来的误差风险。 ```python import cv2 from transformers import pipeline, AutoTokenizer, AutoModelForTokenClassification def detect_questions(image_path): # 加载目标检测模型 detector = pipeline('object-detection', model='facebook/detr-resnet-50') image = cv2.imread(image_path) results = detector(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) questions = [] for result in results: box = result['box'] cropped_image = image[int(box[1]):int(box[3]), int(box[0]):int(box[2])] # OCR 文字识别 text_extractor = pipeline('ocr', model="microsoft/trocr-base-printed") question_text = text_extractor(cropped_image) tokenizer = AutoTokenizer.from_pretrained("bert-base-cased") model = AutoModelForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english") nlp_pipeline = pipeline("ner", model=model, tokenizer=tokenizer) ner_results = nlp_pipeline(question_text["text"]) processed_question = { 'image': cropped_image, 'text': question_text["text"], 'entities': ner_results } questions.append(processed_question) return questions ``` 此代码片段展示了如何使用现代深度学习工具链来执行基本的任务——从图像中找到并解释单独的问题项。 #### 总结 综上所述,采用先进的大模型架构和技术手段可以使传统纸质考试向数字化方向迈进一大步。它不仅能显著改善用户体验还能极大地方便后续的数据统计工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值