当前位置: 首页 > news >正文

Med-R1论文阅读理解

论文介绍

这篇论文介绍了一个名为 Med-R1 的新方法,用于提升多模态视觉语言模型(VLM)在医学图像理解和推理任务中的泛化能力和可解释性。下面是对整篇论文的简洁总结:

🧠 核心思想

•	当前医学 VLM 多依赖于监督微调(SFT),容易过拟合,缺乏泛化能力,且推理过程不可解释。
•	Med-R1 引入了强化学习(RL),采用GRPO(Group Relative Policy Optimization)方法,能在无需复杂标注的情况下,引导模型学习具备医学推理逻辑的回答路径。

🧰 方法框架

1.	基础模型:以 Qwen2-VL-2B 为底座进行训练。
2.	强化学习方法:采用 GRPO,不依赖价值模型,利用规则和分组比较得到奖励信号,提升训练效率。
3.	奖励机制:
•	格式奖励(结构是否规范,如包含 <think>...</think>)
•	准确性奖励(预测结果是否正确)

🏥 应用范围

•	在 8 类医学图像模态 上进行测试:
•	CT、MRI、X-ray、超声、皮肤镜、眼底、OCT、显微图像
•	针对 5 类医学任务:
•	器官识别、疾病诊断、病灶分级、模态识别、生物特征分析

📊 实验亮点

对比项 成绩
相比 Qwen2-VL-2B(SFT) 提升 15.84%
相比原始 Qwen2-VL-2B(Zero-shot) 提升 29.94%
跨任务泛化能力 比 Qwen2-VL-2B 提升 32.06%
模型规模 仅 2B 参数,超过了 Qwen2-VL-72B(72B)大模型

✅ 贡献总结

1.	提出 Med-R1:首个支持 8 类医学模态的 RL 医学 VLM,具备结构化推理输出。
2.	使用 GRPO:用规则奖励替代人工标注,提升训练效率和可解释性。
3.	小模型超大模型:在医疗领域实现更优的性能和资源效率。

📌 总结一句话:

Med-R1 利用强化学习实现高效、可解释且泛化性强的医学多模态问答系统,为医学大模型实用化提供了新范式。

GRPO

当然可以!GRPO 是强化学习中一个新颖的策略优化方法,特别适合用于大语言模型(LLM)等需要偏好引导、排序学习、推理强化的任务。

🧠 GRPO 是什么?

GRPO 全称是:Group Relative Policy Optimization(群体相对策略优化)
它是一种 无偏好标注、无价值函数 的强化学习方法,适用于对模型输出进行相对排序优化的场景。

🎯 GRPO 核心思想

不再只是“哪一个回答更好”,而是“在一组回答中,哪些更好”,以排序优化代替单一偏好训练。

🔍 GRPO 的关键特征:

特性 说明
✅ 群体对比 每次优化考虑一组候选输出(Group),进行相对排序
✅ 无需 reward model 不依赖人工打分或偏好模型(不像 PPO / DPO)
✅ 可插入规则奖励 如结构格式、医学准确性等
✅ 优化方式 类似 ListNet / ListMLE 的排序 loss,用策略梯度更新

🏥 在 Med-R1 中的使用方式:
• 每个问题让模型生成多个回答(构成一个 group)
• 使用规则打分(结构合理性、医学正确性)
• 对回答进行排序比较
• 训练模型使其更倾向于产生更靠前的回答

📌 GRPO vs DPO/PPO 对比表:

方法 偏好来源 是否需要价值函数 支持排序优化 适合任务
PPO Reward model ✅ 是 ❌ 只更新打分高的 RLHF、对齐
DPO 人工偏好对 ❌ 否 ❌ 二选一偏好 LLM 对齐
GRPO 无监督排序规则 ❌ 否 ✅ 群体排序优化 推理类、多步任务

📦 总结一句话:

GRPO 是一种无需人工打分的强化学习方法,基于组内排序信号优化模型输出,在复杂任务中兼顾效率、性能和可解释性。


当然可以!以下是一个简化版的 GRPO(Group Relative Policy Optimization)伪代码实现示例,用于帮助你理解其整体流程和核心逻辑。

🧠 GRPO 实现要点:
• 给定一个 prompt,模型生成多个候选回答(组成一个 group)
• 对这些回答进行打分排序(规则或函数)
• 使用排序 loss(如 ListNet) 计算奖励
• 通过策略梯度更新模型参数

✅ 简化代码框架(伪代码 + PyTorch风格)

import torch
import torch.nn.functional as Fdef grpo_loss(log_probs, rewards):"""GRPO 的核心 loss:排序感知 loss(比如 ListNet)log_probs: shape [B, G],B 是 batch,G 是 group sizerewards: shape [B, G],评分(越高越好)"""# 归一化奖励(softmax 排序分布)reward_dist = F.softmax(rewards, dim=1)  # [B, G]log_prob_dist = F.log_softmax(log_probs, dim=1)  # [B, G]# ListNet 损失:KL(reward_dist || log_prob_dist)loss = F.kl_div(log_prob_dist, reward_dist, reduction="batchmean")return loss

🚀 模型训练流程(简化)

for batch in dataloader:prompts = batch["prompt"]           # 文本输入candidates = generate_group(prompts, group_size=4)  # 模型生成多个候选回答log_probs = model.get_logprobs(prompts, candidates) # 每个回答的概率对数rewards = score_fn(candidates)      # 用规则/模型对回答打分loss = grpo_loss(log_probs, rewards)loss.backward()optimizer.step()

🧠 score_fn(candidates) 可以怎么写?
• ✅ 结构奖励(是否含 …)
• ✅ 关键词覆盖率
• ✅ 匹配参考答案
• ✅ BLEU、ROUGE、BERTScore
• ✅ 任务自定义规则

✅ 效果:

你训练出的模型就会:
• 自动倾向生成高评分排序靠前的回答
• 不依赖人工偏好打分
• 支持推理步骤的逐步奖励(比如医学领域)

GRPO和DPO的对比

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments######################################
# ✅ 通用准备
######################################
model_name = "Qwen/Qwen1.5-0.5B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)######################################
# ✅ DPO Loss 实现
######################################
def dpo_loss(preference_logits, ref_logits):"""preference_logits: 模型偏好的输出对数概率 (chosen - rejected)ref_logits: 参考模型对同一对的输出"""diff = preference_logits - ref_logitsloss = -F.logsigmoid(diff).mean()return loss######################################
# ✅ GRPO Loss 实现(排序式)
######################################
def grpo_loss(group_logps, group_rewards):# 归一化奖励分布作为 target 分布target_dist = F.softmax(group_rewards, dim=1)logp_dist = F.log_softmax(group_logps, dim=1)return F.kl_div(logp_dist, target_dist, reduction='batchmean')######################################
# ✅ 模拟训练数据结构
######################################
# 对于 DPO: [prompt, chosen_response, rejected_response]
# 对于 GRPO: [prompt, [response1, response2, response3, response4]], rewardsdata_dpo = [{"prompt": "解释什么是高血压?","chosen": "高血压是指血压持续高于正常值的一种慢性病...","rejected": "高血压就是血太多的病..."}
]data_grpo = [{"prompt": "解释什么是高血压?","responses": ["高血压是常见慢性病...","血压升高可能由...","高血压就是血太多了...","一种高发病的状态..."],"rewards": [5.0, 4.5, 1.0, 3.0]  # 用规则或参考答案打分}
]######################################
# ✅ 模型输出 logp(简化版)
######################################
def get_log_probs(prompt, responses):"""给定 prompt 和多个 responses,返回 logp"""logps = []for r in responses:inputs = tokenizer(prompt + r, return_tensors="pt")with torch.no_grad():output = model(**inputs)logp = output.logits[:, :-1, :].log_softmax(-1)token_ids = inputs.input_ids[:, 1:]score = logp.gather(2, token_ids.unsqueeze(-1)).sum() / token_ids.size(1)logps.append(score)return torch.stack(logps)######################################
# ✅ DPO 一次训练
######################################
def train_dpo_step():sample = data_dpo[0]prompt = sample["prompt"]logp_chosen = get_log_probs(prompt, [sample["chosen"]])[0]logp_rejected = get_log_probs(prompt, [sample["rejected"]])[0]loss = dpo_loss(logp_chosen, logp_rejected)print("[DPO] Loss:", loss.item())######################################
# ✅ GRPO 一次训练
######################################
def train_grpo_step():sample = data_grpo[0]prompt = sample["prompt"]rewards = torch.tensor(sample["rewards"])logps = get_log_probs(prompt, sample["responses"])loss = grpo_loss(logps.unsqueeze(0), rewards.unsqueeze(0))print("[GRPO] Loss:", loss.item())######################################
# ✅ 执行对比训练
######################################
train_dpo_step()
train_grpo_step()

相关文章:

Med-R1论文阅读理解

论文介绍 这篇论文介绍了一个名为 Med-R1 的新方法&#xff0c;用于提升多模态视觉语言模型&#xff08;VLM&#xff09;在医学图像理解和推理任务中的泛化能力和可解释性。下面是对整篇论文的简洁总结&#xff1a; ⸻ &#x1f9e0; 核心思想 • 当前医学 VLM 多依赖于监督…...

微服务相关

1.SpringCloud有哪些常用组件&#xff1f;分别是什么作用&#xff1f; 注册中心&#xff1a;nacos 负载均衡&#xff1a;rabbion/LoadBalancer 网关&#xff1a;gateway 服务熔断&#xff1a;sential 服务调用&#xff1a;Feign 2.服务注册发现的基本流程是怎样的&#x…...

Linux vagrant 导入Centos到virtualbox

前言 vagrant 导入centos 虚拟机 前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式) 创建一键部署centos 虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/centos8/Vagrantfile &#xff08;可配置网络IP&#xff0c;内存…...

Spring Boot MongoDB 分页工具类封装 (新手指南)

Spring Boot MongoDB 分页工具类封装 (新手指南) 目录 引言&#xff1a;为何需要分页工具类&#xff1f;工具类一&#xff1a;PaginationUtils - 简化 Pageable 创建 设计目标代码实现 (PaginationUtils.java)如何使用 PaginationUtils 工具类二&#xff1a;PageResponse<…...

第七章 指针

2024-04 2023-10 A 2023-04 2022-10 2022-04 2021-10 2021-04 2020-10 2020-04...

20年AB1解码java

P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 详细代码如下&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner innew Scanner(System.in); // 接收输入的字符串char [] c in.next().toCharArray(); // 接收 还原的字符…...

《Java实战:密码加密算法实现与代码解析》

文章目录 一、需求背景二、代码逐模块解析1. 主程序入口2. 密码输入模块3. 加密处理模块4. 结果拼接模块 三、完整代码示例四、运行示例五、优化方向&#xff08;下篇预告&#xff09; 一、需求背景 实现一个4位数字密码的简单加密系统&#xff0c;规则如下&#xff1a; 输入…...

AllData数据中台升级发布 | 支持K8S数据平台2.0版本

&#x1f525;&#x1f525; AllData大数据产品是可定义数据中台&#xff0c;以数据平台为底座&#xff0c;以数据中台为桥梁&#xff0c;以机器学习平台为中层框架&#xff0c;以大模型应用为上游产品&#xff0c;提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xf…...

Jupyter notebook使用技巧

一、打开指定文件夹 在快捷方式目标中&#xff0c;使用如下代码 anaconda3\python.exe anaconda3\cwp.py anaconda3 anaconda3\python.exe anaconda3\Scripts\jupyter-notebook-script.py --notebook-dirD:\code\python...

6.3es新特性web worker

Web Worker 是 HTML5 提供的多线程技术&#xff0c;允许在浏览器后台创建独立线程执行 JavaScript 代码&#xff0c;解决主线程因耗时任务导致的 界面卡顿 问题。 核心特性 线程隔离&#xff1a;Worker 线程无法直接操作 DOM 或访问 window 对象通信机制&#xff1a;通过 pos…...

基于 OpenHarmony 5.0 的星闪轻量型设备应用开发——Ch3 设备驱动开发

写在前面&#xff1a;本篇是系列文章《基于 OpenHarmony 5.0 的星闪轻量型设备应用开发》的第 3 章。本篇从 GPIO、PWM、I2C、UART 以及 ADC 等方面对基于 OpenHarmony 5.0 的 WS63 设备驱动开发进行了详细的介绍。本篇的篇幅较长&#xff0c;建议先收藏再阅读。 3.1 OpenHarmo…...

iphone各个机型尺寸

以下是苹果&#xff08;Apple&#xff09;历代 iPhone 机型 的屏幕尺寸、分辨率及其他关键参数汇总&#xff08;截至 2023年10月&#xff0c;数据基于官方发布信息&#xff09;&#xff1a; 一、标准屏 iPhone&#xff08;非Pro系列&#xff09; 机型屏幕尺寸&#xff08;英寸…...

OfficePlus去掉PDF文件右键菜单里的PDF转换

今天在吾爱破解论坛看到一个求助帖&#xff0c;说是OfficePlus&#xff0c;安装后&#xff0c;PDF文件的右键菜单里多了PDF转换&#xff0c;想去掉&#xff0c;不知道怎么弄。底下的回复基本都是百度复制或者AI搜索出的答案&#xff0c;大致就是找注册表里CLASSID下的菜单栏相关…...

Linux驱动开发进阶(七)- DRM驱动程序设计

文章目录 1、前言2、DRAM(KMS、GEM)2.1、KMS2.2、GEM 3、DRM3.1、驱动结构体3.2、设备结构体3.3、DRM驱动注册3.4、DRM模式设置3.4.1、plane初始化3.4.2、crtc初始化3.4.3、encoder初始化3.4.4、connect初始化 4、示例说明5、DRM Simple Display框架6、DRM热插拔7、DRM中的plan…...

Parasoft C++Test软件单元测试_条件宏和断言宏使用方法的详细介绍

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…...

vue辅助工具(vue系列二)

目录 第一章、安装周边库1.1&#xff09;状态管理&#xff1a;Pinia1.2&#xff09;路由管理&#xff1a;Router1.3&#xff09;HTTP 客户端&#xff1a;Axios1.4&#xff09;UI 组件库&#xff1a;Element 第二章、下载Vue插件并安装2.1&#xff09;安装开发者工具2.1.1&#…...

WPF 五子棋项目文档

WPF 五子棋项目文档 1. 项目概述 本项目是一个使用 Windows Presentation Foundation (WPF) 技术栈和 C# 语言实现的桌面版五子棋&#xff08;Gomoku&#xff09;游戏。它遵循 MVVM&#xff08;Model-View-ViewModel&#xff09;设计模式&#xff0c;旨在提供一个结构清晰、可…...

UniApp 实现兼容 H5 和小程序的拖拽排序组件

如何使用 UniApp 实现一个兼容 H5 和小程序的 九宫格拖拽排序组件&#xff0c;实现思路和关键步骤。 一、实现目标 支持拖动菜单项改变顺序拖拽过程实时预览移动位置拖拽松开后自动吸附回网格兼容 H5 和小程序平台 二、功能结构拆解以及完整代码 完整代码&#xff1a; <…...

谷歌推出统一安全平台-一个平台实现跨云网端主动防护

&#x1f44b; 今天要给大家带来一个超级棒的消息&#xff01;谷歌云推出了全新的“谷歌统一安全平台”&#xff0c;感觉我们的网络安全问题有救啦&#xff01;&#x1f604; 随着企业基础设施变得越来越复杂&#xff0c;保护它们也变得越来越难。攻击面不断扩大&#xff0c;安…...

众趣科技丨沉浸式 VR 体验,助力酒店民宿数字化营销宣传

随着旅游季的到来&#xff0c;各地的旅游景区开始“摩拳擦掌”推出各种活动&#xff0c;吸引更多游客来此游玩。 自去年以来&#xff0c;冰雪游热度持续上升&#xff0c;尤其是对于满心期待的南方游客来说&#xff0c;哈尔滨仍是冰雪旅游的热门目的地。据美团数据显示&#xff…...

DAY05:【pytorch】图像预处理

1、torchvision 功能&#xff1a;计算视觉工具包 torchvision.transforms&#xff1a;常用的图像预处理方法torchvision.datasets&#xff1a;常用数据集的 dataset 实战&#xff0c;MINIST&#xff0c;CIFAR-10&#xff0c;ImageNet等torchvision.model&#xff1a;常用的模…...

真实企业级K8S故障案例:ETCD集群断电恢复与数据保障实践

背景描述 某跨境电商平台生产环境使用Kubernetes&#xff08;v1.23.17&#xff09;管理500微服务。某日机房突发市电中断&#xff0c;UPS未能及时接管导致&#xff1a; 3节点ETCD集群&#xff08;v3.5.4&#xff09;全部异常掉电 Control-Plane节点无法启动api-server 业务P…...

rbd块设备的id修改

背景 看到有这个需求&#xff0c;具体碰到什么场景了不太清楚&#xff0c;之前做过rbd的重构的研究&#xff0c;既然能重构&#xff0c;那么修改应该是比重构还要简单一点的&#xff0c;我们具体看下怎么操作 数据结构分析 rbd的元数据信息 [rootlab104 ~]# rbd create tes…...

WP最主题专业的wordpress主题开发

WP最主题&#xff08;wpzui.com&#xff09; WP最主题是一个提供高品质WordPress主题的平台。它注重主题的设计和功能&#xff0c;旨在为用户提供美观且实用的主题选择。其主题通常具有良好的用户体验、丰富的自定义选项以及优化的性能&#xff0c;能够满足不同类型的网站搭建…...

HomeAssistant本地化部署结合内网穿透打造跨网络智能家居中枢

文章目录 前言1. 添加镜像源2. 部署HomeAssistant3. HA系统初始化配置4. HA系统添加智能设备4.1 添加已发现的设备4.2 添加HACS插件安装设备 5. 安装cpolar内网穿透5.1 配置HA公网地址 6. 配置固定公网地址 推荐 ​ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂…...

# 实时人脸性别与年龄识别:基于OpenCV与深度学习模型的实现

实时人脸性别与年龄识别&#xff1a;基于OpenCV与深度学习模型的实现 在当今数字化时代&#xff0c;计算机视觉技术正以前所未有的速度改变着我们的生活与工作方式。其中&#xff0c;人脸检测与分析作为计算机视觉领域的重要分支&#xff0c;已广泛应用于安防监控、智能交互、…...

SAP-ABAP:SAP的Open SQL和Native SQL详细对比

在SAP ABAP开发中,Open SQL和Native SQL是两种操作数据库的方式,它们的核心区别在于可移植性、功能范围及底层实现机制。以下是详细对比: 1. Open SQL:深入解析 1.1 核心特性 数据库抽象层 Open SQL 由 SAP 内核的 Database Interface (DBI) 转换为目标数据库的 SQL(如 …...

基于大模型构建金融客服的技术调研

OpenAI-SB api接口 https://openai-sb.com/ ChatGPT与Knowledge Graph (知识图谱)分享交流 https://www.bilibili.com/video/BV1bo4y1w72m/?spm_id_from333.337.search-card.all.click&vd_source569ef4f891360f2119ace98abae09f3f 《要研究的方向和准备》 https://ww…...

Python设计模式:命令模式

1. 什么是命令模式&#xff1f; 命令模式是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使您能够使用不同的请求、队列或日志请求&#xff0c;以及支持可撤销操作。 命令模式的核心思想是将请求的发送者与请求的接收者解耦&#xff0c;使得两者之间的…...

30天学Java第八天——设计模式

装饰器模式 Decorator Pattern 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许通过动态地添加功能来扩展对象的行为&#xff0c;而不需要修改原有的类。 这种模式通常用于增强对象的功能&#xff0c;与继承相比&#xff0c;使用…...

Spring事务系列 三

Spring事务的传播机制 Spring事务系列 一-CSDN博客 Spring事务系列 二-CSDN博客 文章目录 系列文章目录 目录 文章目录 前言 一、Spring事务的传播机制 Propagation.REQUIRED: Propagation.SUPPORTS: Propagation.MANDATORY: Propagation.REQUIRES_NEW: Propagation.NOT_SUPPO…...

文件上传做题记录

1&#xff0c;[SWPUCTF 2021 新生赛]easyupload2.0 直接上传php 再试一下phtml 用蚁剑连发现连不上 那就只要命令执行了 2&#xff0c;[SWPUCTF 2021 新生赛]easyupload1.0 当然&#xff0c;直接上传一个php是不行的 phtml也不行&#xff0c;看下是不是前端验证&#xff0c;…...

机器学习的监督学习与无监督学习

机器学习主要分为监督学习和无监督学习两大类&#xff0c;两者的核心区别在于数据是否带有标签&#xff08;Label&#xff09;。以下是它们的详细对比和说明&#xff1a; 1. 监督学习&#xff08;Supervised Learning&#xff09; 定义&#xff1a;通过带有标签的训练数据&…...

C++ 入门三:函数与模板

一、内联函数&#xff1a;编译期嵌入的 “高效函数” 1. 什么是内联函数&#xff1f; 核心特性&#xff1a;在编译阶段&#xff0c;内联函数的函数体会直接嵌入到调用它的代码中&#xff0c;避免了普通函数的调用开销&#xff08;如压栈、跳转、返回&#xff09;。语法&#…...

解析券商qmt的优缺点

现在已经对于大QMT进行了一步步的深入了解与学习&#xff0c;也已经开始积木式搭建策略&#xff0c;进行交易了&#xff0c;但是&#xff0c;随时不断的深入&#xff0c;发现的问题也越来越多。下面开始逐一解析&#xff1a; 首页 | 迅投知识库 这是详细的说明。 目前券商给大…...

CSE lesson2 chrony服务器

CSE lesson2 chrony服务器 timedatectl命令 NTP(network time protocal)网络时间协议&#xff0c;时钟服务器同步时间的时候会使用到该协议进行时间同步。 #关闭/开启时间同步服务 [rootlocalhost ~]# timedatectl set-ntp 0/1#设置时间&#xff08;必须关闭时间同步服务才能…...

时光交响曲:杭州的科技与传统交响

故事背景 故事发生在中国浙江杭州&#xff0c;以现代科技与文化传统的交融为背景&#xff0c;展现了人与自然、历史的深刻联系。在晨曦中的茶园、宁静的运河书屋、科技堤坝等地方&#xff0c;每个场景都充满了生机与活力&#xff0c;展示了科技如何赋予传统文化新的生命&#x…...

【大模型智能体】Agent2Agent协议加上MCP协议也许会成为未来Agent智能体系统的标配

之前在文章《基于Claude MCP协议的智能体落地示例》、《MCP(Model Context Protocol) 大模型智能体第一个开源标准协议》我们已经对MCP协议做了介绍&#xff0c;MCP提供了将大模型连接到不同数据源和工具的标准方式&#xff0c;包括内容仓库、商业工具和开发环境。 以上解决的是…...

opencv(C++)处理图像颜色

文章目录 介绍使用策略设计模式比较颜色实现方案计算两个颜色向量之间的距离1. 简单方法&#xff1a;曼哈顿距离计算&#xff08;Manhattan Distance&#xff09;2.使用 OpenCV 的 cv::norm 函数3.使用 OpenCV 的 cv::absdiff 函数错误示例 使用 OpenCV 函数实现颜色检测实现方…...

2025年焊接与热切割作业证考试真题分享

焊接与热切割作业属于特种作业操作证考试&#xff0c;理论知识点专业性强、安全规范要求高&#xff0c;如何高效备考成为关键&#xff01;【100分题库】焊接与热切割作业理论备考题库紧扣最新考试大纲&#xff0c;帮你系统掌握考点&#xff0c;一次通过考试&#xff01; 1、下…...

AI 代码生成工具如何突破 Java 单元测试效能天花板?

一、传统单元测试的四大痛点 时间黑洞&#xff1a;根据 JetBrains 调研&#xff0c;Java 开发者平均花费 35% 时间编写测试代码覆盖盲区&#xff1a;手工测试覆盖率普遍低于 60%&#xff08;Jacoco 全球统计数据&#xff09;维护困境&#xff1a;业务代码变更导致 38% 的测试用…...

【C++游戏引擎开发】第13篇:光照模型与Phong基础实现

一、Phong模型数学原理 1.1 光照叠加公式 L = k a I a + k d I d max ⁡ ( 0 , n ⋅ l ) + k s I s max ⁡ ( 0 , r ⋅ v ) α L = k_a I_a + k_d I_d \max(0, \mathbf{n} \cdot \mathbf{l}) + k_s I_s \max(0, \mathbf{r} \cdot \mathbf{v})^\alpha L=ka​Ia​+kd​Id​max(0…...

如何在Android系统上单编ko?

文章目录 一、先了解编译驱动需要什么&#xff1f;二、配置makefile1、在Android系统编译LOG上找到编译器信息&#xff08;一般都会打印出来&#xff09;2、基于源MK构造 可独立运行的makefile3&#xff09;进入docker&#xff0c;在此makefile目录下敲make4&#xff09;最后根…...

虚拟dom工作原理以及渲染过程

浏览器渲染引擎工作流程都差不多&#xff0c;大致分为5步&#xff0c;创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting 第一步&#xff0c;用HTML分析器&#xff0c;分析HTML元素&#xff0c;构建一颗DOM树(标记化和树构建)。 第二步&#xff0c;用…...

无人机视觉定位,常用相机,及相机提供的数据信息

常用相机类型 单目相机&#xff1a;仅使用一个摄像头进行图像采集&#xff0c;结构简单、成本低。它可以获取无人机前方或下方的二维图像信息&#xff0c;包括物体的形状、颜色、纹理等。双目相机&#xff1a;由两个摄像头组成&#xff0c;模拟人类双眼视觉原理&#xff0c;通…...

A2L文件解析

目录 1 摘要2 A2L文件介绍2.1 A2L文件作用2.2 A2L文件格式详解2.2.1 A2L文件基本结构2.2.2 关键元素与声明2.2.3 完整A2L文件示例 3 总结 1 摘要 A2L文件&#xff08;也称为ASAP2文件&#xff09;是ECU开发的核心接口文件&#xff0c;用于标定、测量和诊断的关键配置文件&…...

Ansible:role企业级实战

文章目录 实现 nginx 角色创建task文件创建handler文件准备模板文件创建变量文件在playbook中调用角色 实现 memcached 角色创建相关目录创建相关task任务准备模板文件查看目录结构在playbook中调用角色 实现多角色的选择 实现 nginx 角色 卸载httpd&#xff0c;创建相关目录 a…...

vue2使用vue-echarts

1.先安装echarts npm i echarts 2.安装vue-echarts 安装的时候注意下对应的版本 "echarts": "5.5.0", "vue-echarts": "6.7.3",这是我安装的版本 注意事项&#xff1a; 如果安装之后报错&#xff1a;"export watchEffect …...

多光谱相机:海洋管道漏油(溢油)监测

每年海上溢油和化工管道漏油造成的污染事故和经济损失频发&#xff0c;在生态方面&#xff0c;漏油会带来导致水质恶化、生态系统破坏、食物链受损。在经济方面&#xff0c;会造成渔业损失、旅游业损失、航运业损失。在健康方面&#xff0c;会造成食品安全问题&#xff0c;直接…...

Kaggle-Digit Recognizer-(多分类+卷积神经网络CNN)

Digit Recognizer 题意&#xff1a; 给你每个图片的dataframe类型的数据&#xff0c;让你预测出每个图片可能是多少。 思考&#xff1a; 数据处理 1.首先把数据从dadaframe转换成numpy&#xff0c;数据类型改为float32&#xff0c;并且并且展开为1维的28281的形状&#xf…...