论文阅读-Prototype Rectification for Few-Shot Learning

pdf

ECCV 2020 Oral

源码暂未开放

motivation

传统的原型网络是将support集里面每个类的所有样本的特征的平均作为该类的原型representation,通过query集合的特征representation与support集中每个类别的原型representation进行欧式距离计算,在经过softmax得出最后所属类别。

作者认为简单的求平均会产生很大的bias,因此提出了对原型网络进行修正。从两个角度:intra-class bias和cross-class bias

contribution

  • 提出基于余弦相似度的原型网络用于计算novel类的基本原型

  • bias diminishing module (BD)

  • 过程

    • training stage:

      CSPN(cosine similarity based prototypical network),基于余弦分类器使用base类训练一个特征提取器 F θ F_\theta Fθ以及余弦分类器 C w C_w Cw

    • inference stage:

      • 使用类均值作为novel 类的基础原型,计算和样本的余弦相似度进行分类
      • 基础原型和预期原型存在偏差,要消去intra-class bias和cross-class bias
        • intra-class bias
          • 是指类的预期无偏差原型表达与可用数据实际计算出的原型表达之间的距离。
          • 通过伪标签策略把具有高置信度的没有标签的样本添加到support集合中。但是伪标签可能会带来其他误差,所以采用 weighted sum代替简单的平均
        • cross-class bias:
          • 是指support set和query set的代表之间的距离,通常由均值向量表示的
          • 通过引入一个 ξ \xi ξ 解决

    其对于特征提取器的训练是基于整个训练集的,仅在预测过程中使用N-way K-shot的形式(也可以称之为Episode),这也意味着网络训练的参数仅仅为特征提取器的参数。两个bias消除机制作用下的prototypes产生过程没有其他需学习的参数

image-20200721093913160

methodology

CSPN

  • 基于余弦分类器使用base类训练一个特征提取器 F θ ( ⋅ ) F_\theta(·) Fθ()以及余弦分类器 C ( ⋅ ∣ W ) C(·|W) C(W)

    C ( F θ ( x ) ∣ W ) = Softmax ⁡ ( τ ⋅ Cos ⁡ ( F θ ( x ) , W ) ) C\left(F_{\theta}(x) \mid W\right)=\operatorname{Softmax}\left(\tau \cdot \operatorname{Cos}\left(F_{\theta}(x), W\right)\right) C(Fθ(x)W)=Softmax(τCos(Fθ(x),W))

  • W W W是可学习的权重, τ \tau τ是一个标量参数

  • 损失函数: L ( θ , W ∣ D ) = E [ − log ⁡ C ( F θ ( x ) ∣ W ) ] L(\theta, W \mid \mathcal{D})=\mathbb{E}\left[-\log C\left(F_{\theta}(x) \mid W\right)\right] L(θ,WD)=E[logC(F<

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
立体校正(Stereo Rectification)是将双目图像中的像素点转换成同一平面上的像素点,以便进行后续的立体匹配。使用Python-OpenCV可以很方便地进行立体校正。下面是一个简单的示例代码: ```python import cv2 # 读取左右两张图像 img_left = cv2.imread('left.png') img_right = cv2.imread('right.png') # 读取相机参数 K_left = np.loadtxt('K_left.txt') d_left = np.loadtxt('dist_left.txt') K_right = np.loadtxt('K_right.txt') d_right = np.loadtxt('dist_right.txt') R = np.loadtxt('R.txt') T = np.loadtxt('T.txt') # 计算校正映射 size = img_left.shape[:2][::-1] R1, R2, P1, P2, Q, validPixROI1, validPixROI2 = cv2.stereoRectify(K_left, d_left, K_right, d_right, size, R, T) # 计算校正映射表 map1_left, map2_left = cv2.initUndistortRectifyMap(K_left, d_left, R1, P1, size, cv2.CV_16SC2) map1_right, map2_right = cv2.initUndistortRectifyMap(K_right, d_right, R2, P2, size, cv2.CV_16SC2) # 应用校正映射表,进行立体校正 img_left_rect = cv2.remap(img_left, map1_left, map2_left, cv2.INTER_LINEAR) img_right_rect = cv2.remap(img_right, map1_right, map2_right, cv2.INTER_LINEAR) ``` 在上述代码中,我们首先读取了左右两张图像和相机参数,然后使用`cv2.stereoRectify()`函数计算校正映射。该函数的参数包括左右相机的内参矩阵、畸变系数、旋转矩阵和平移向量,以及图像大小。校正映射包括左右两张图像的旋转矩阵、投影矩阵和视差变换矩阵等信息,可以通过该函数的返回值获取。 接着,我们使用`cv2.initUndistortRectifyMap()`函数计算校正映射表。该函数的参数包括相机的内参矩阵、畸变系数、旋转矩阵、投影矩阵、图像大小和插值方法等。该函数的返回值是两个映射表,可以通过这两个映射表对图像进行校正。 最后,我们使用`cv2.remap()`函数对左右两张图像进行校正。该函数的参数包括原图像、映射表和插值方法等。校正后得到的图像可以用于后续的立体匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值