伪标签(Pseudo-Labelling)

本文介绍了伪标签技术在大数据时代下的重要性,特别是在金融、医疗图像和安全等领域。伪标签通过半监督学习提升模型性能,通过已标注数据训练模型,对无标注数据预测并筛选高置信度样本进行再训练。文中提到了入门版、进阶版和创新版的伪标签使用方法,并探讨了其在实际应用中的复杂性和变通性。
部署运行你感兴趣的模型镜像

大数据时代中,在推荐、广告领域样本的获取从来都不是问题,似乎适用于小样本学习的伪标签技术渐渐淡出了人们的视野,但实际上在样本及其珍贵的金融、医疗图像、安全等领域,伪标签学习是一把锋利的匕首,简单而有效。

伪标签的定义

伪标签的定义来自于半监督学习,半监督学习的核心思想是通过借助无标签的数据来提升有监督过程中的模型性能。

举个简单的半监督学习例子,我想去训练一个通过胸片图像来诊断是否患有乳腺癌的模型,但是专家标注一张胸片图像要收费,于是我掏空自己的钱包让专家帮我标注了10张胸片,可是我这10张图片又要划分训练集测试集,咋训练看着都要过拟合哇,这可咋办?

聪明的我问了问专家,说不标注的胸片要钱吗?专家一愣,不要钱,随便拿(此处忽略病人隐私的问题,单纯举例子)。于是我掏出1张标注的胸片,换了10张没标注的胸片,在专家还没缓过劲之前先溜了。

回到家里,我就开始了如图所示的半监督学习过程~

img

粗略来讲,伪标签技术就是利用在已标注数据所训练的模型在未标注的数据上进行预测,根据预测结果对样本进行筛选,再次输入模型中进行训练的一个过程。

但实际上,伪标签技术在具体应用的细节上,远没有说的如此简单,那让我们先看一下伪标签技术的具体做法吧。

伪标签的具体用法

伪标签技术的使用自由度非常高,在这里我们介绍最常用的也是最有效的三种,对于某些特殊场景,可能有更花哨的方法,这里希望能抛砖引玉,为大家拓宽一下视野。

入门版

1. 使用标记数据训练有监督模型M

2. 使用有监督模型M对无标签数据进行预测,得出预测概率P

3. 通过预测概率P筛选高置信度样本

4. 使用有标记数据以及伪标签数据训练新模型M’

img

进阶版

1. 使用标记数据训练有监督模型M

2. 使用有监督模型M对无标签数据进行预测,得出预测概率P

3. 通过预测概率P筛选高置信度样本

4. 使用有标记数据以及伪标签数据训练新模型M’

5. 将M替换为M’,重复以上步骤直至模型效果不出现提升

img

创新版

1. 使用标记数据训练有监督模型M

2. 使用有监督模型M对无标签数据进行预测,得出预测概率P

3. 将模型损失函数改为Loss = loss(labeled_data) + alpha*loss(unlabeled_data)

4. 使用有标记数据以及伪标签数据训练新模型M’

*loss(unlabeled_data)*

4. 使用有标记数据以及伪标签数据训练新模型M’

img

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### Pseudo-LiDAR 实现及其在鸟瞰图视图中的应用 #### 定义与原理 Pseudo-LiDAR 是一种利用单目或多目摄像头图像来生成类似于 LiDAR 数据的技术。通过将二维图像转换成三维空间坐标系下的点云数据,使得基于视觉的方法能够获得接近真实 LiDAR 的感知效果[^1]。 #### 鸟瞰图视图(BEV) 鸟瞰图视图是一种自上而下观察场景的方式,在自动驾驶领域被广泛应用于环境理解任务中。它有助于消除视角变化带来的影响,并提供更直观的道路布局表示形式。对于 pseudo-LiDAR 来说,构建 BEV 表示意味着要将由相机获取到的深度信息映射至俯视角度的空间网格内[^3]。 #### 实现过程 以下是创建 pseudo-LiDAR 并将其投影到 BEV 中的一个简化流程: 1. **图像采集**:使用安装于车辆上的摄像机捕捉周围环境的画面; 2. **立体匹配/深度估计**:采用双目视觉算法或学习型网络预测每像素对应的深度值; 3. **坐标变换**:根据内外参矩阵计算各点的世界坐标位置; 4. **离散化处理**:按照设定分辨率划分水平面格子单元并将对应高度存储起来形成栅格地图; 5. **渲染显示**:最后绘制出完整的 BEV 图像供后续模块调用分析。 ```python import numpy as np import cv2 def generate_pseudo_lidar(image_left, image_right, K, baseline): """ Generate pseudo-LiDAR point cloud from stereo images. Args: image_left (np.ndarray): Left camera image. image_right (np.ndarray): Right camera image. K (np.ndarray): Camera intrinsic matrix. baseline (float): Distance between two cameras. Returns: np.ndarray: Point cloud data in shape (N, 3). """ disparity = compute_disparity(image_left, image_right) depth_map = focal_length * baseline / disparity h, w = depth_map.shape[:2] xx, yy = np.meshgrid(np.arange(w), np.arange(h)) points_2d_homogeneous = np.stack([xx.ravel(), yy.ravel(), np.ones_like(xx).ravel()]) inv_K = np.linalg.inv(K) points_3d_camera_frame = inv_K @ points_2d_homogeneous * depth_map.flatten() return points_3d_camera_frame.T def project_to_bev(points_3d_world_frame, bev_params): """ Project world frame coordinates into bird-eye-view space. Args: points_3d_world_frame (np.ndarray): Points in world coordinate system with shape (N, 3). bev_params (dict): Parameters defining the output BEV grid including resolution and range limits. Returns: np.ndarray: Bird-eye-view representation of input points. """ x_min, y_min, z_min = bev_params['min'] x_max, y_max, z_max = bev_params['max'] res_x, res_y = bev_params['resolution'] indices_valid = ( (points_3d_world_frame[:, 0] >= x_min) & (points_3d_world_frame[:, 0] <= x_max) & (points_3d_world_frame[:, 1] >= y_min) & (points_3d_world_frame[:, 1] <= y_max) ) valid_points = points_3d_world_frame[indices_valid] idx_x = ((valid_points[:, 0] - x_min) / res_x).astype(int) idx_y = ((y_max - valid_points[:, 1]) / res_y).astype(int) height_values = valid_points[:, 2].reshape(-1, 1) bev_image = np.zeros((int((y_max-y_min)/res_y)+1, int((x_max-x_min)/res_x)+1)) for i in range(len(idx_x)): bev_image[idx_y[i], idx_x[i]] = max(bev_image[idx_y[i], idx_x[i]], height_values[i]) return bev_image ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值