SegFix:预测边界和预测方向来修正边界

论文标题:SegFix: Model-Agnostic Boundary Refinement for Segmentation
论文地址:https://arxiv.org/pdf/2007.04269.pdf
代码地址:https://github.com/openseg-group/openseg.pytorch

两种loss监督

八种方向变回归问题为分类问题

代码地址:

1、使用sobel算子把边界点的方向换成分类问题

for id in range(1, len(label_list) + 1):labelmap_i = labelmap.copy()labelmap_i[labelmap_i != id] = 0labelmap_i[labelmap_i == id] = 1if labelmap_i.sum() < 100:continueif args.metric == 'euc':depth_i = distance_transform_edt(labelmap_i)elif args.metric == 'taxicab':depth_i = distance_transform_cdt(labelmap_i, metric='taxicab')else:raise RuntimeErrordepth_map += depth_idir_i_before = dir_i = np.zeros_like(dir_map)dir_i = torch.nn.functional.conv2d(torch.from_numpy(depth_i).float().view(1, 1, *depth_i.shape), sobel_ker, padding=ksize//2).squeeze().permute(1, 2, 0).numpy()# The following line is necessarydir_i[(labelmap_i == 0), :] = 0dir_map += dir_i

2、计算偏移量

def shift(x, offset):"""x: h x woffset: 2 x h x w"""h, w = x.shapex = torch.from_numpy(x).unsqueeze(0)offset = torch.from_numpy(offset).unsqueeze(0)coord_map = gen_coord_map(h, w)norm_factor = torch.FloatTensor([(w-1)/2, (h-1)/2])grid_h = offset[:, 0]+coord_map[0]grid_w = offset[:, 1]+coord_map[1]grid = torch.stack([grid_w, grid_h], dim=-1) / norm_factor - 1x = F.grid_sample(x.unsqueeze(1).float(), grid, padding_mode='border', mode='bilinear').squeeze().numpy()x = np.round(x)return x.astype(np.uint8)

3、重新计算label

class LabelTransformer:label_list = [7, 8, 11, 12, 13, 17, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33]@staticmethoddef encode(labelmap):labelmap = np.array(labelmap)shape = labelmap.shapeencoded_labelmap = np.ones(shape=(shape[0], shape[1]), dtype=np.int) * 255for i in range(len(LabelTransformer.label_list)):class_id = LabelTransformer.label_list[i]encoded_labelmap[labelmap == class_id] = ireturn encoded_labelmap@staticmethoddef decode(labelmap):labelmap = np.array(labelmap)shape = labelmap.shapeencoded_labelmap = np.ones(shape=(shape[0], shape[1]), dtype=np.uint8) * 255for i in range(len(LabelTransformer.label_list)):class_id = iencoded_labelmap[labelmap ==class_id] = LabelTransformer.label_list[i]return encoded_labelmap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P6136:【模板】普通平衡树(数据加强版) ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P6136【算法分析】 Splay 树简介及代码模板&#xff1a;https://blog.csdn.net/hnjzsyjyj/article/details/138504578【代码一&#xff1a;含 pushdown() 函数版本】 ● 本代码为洛谷 P6136 代码。题目来源为&#xff1a;https:…

PyQt6--Python桌面开发(1.安装配置环境)

一.PyQt6简介 PyQt&#xff1a;PyQt是一个功能强大且成熟的GUI框架&#xff0c;基于Qt库。它提供了丰富的组件、布局和主题选项&#xff0c;以及强大的功能和灵活性。PyQt的优点是它具有现代化的外观和丰富的功能&#xff0c;适用于复杂的GUI应用程序。然而&#xff0c;由于Py…

openEuler 22.03 GPT分区表模式下磁盘分区管理

目录 GPT分区表模式下磁盘分区管理parted交互式创建分区步骤 1 执行如下步骤对/dev/sdc磁盘分区 非交互式创建分区步骤 1 输入如下命令直接创建分区。 删除分区步骤 1 执行如下命令删除/dev/sdc1分区。 GPT分区表模式下磁盘分区管理 parted交互式创建分区 步骤 1 执行如下步骤…

明火检测实时识别报警:视觉算法助力安全生产管理

背景与现状 在各种工作、生产环境下&#xff0c;明火的存在往往是潜在的安全隐患。无论是加油站、化工园区、仓储场所还是校园&#xff0c;明火一旦失控就会引发火灾&#xff0c;造成严重的人员伤亡和财产损失。传统的明火检查手段主要依赖于人工巡查和定期的消防检查&#xf…

什么是高级持续威胁(APT)

高级持续性威胁&#xff08;Advanced Persistent Threat&#xff0c;APT&#xff09;&#xff0c;又叫高级长期威胁&#xff0c;是一种复杂的、持续的网络攻击&#xff0c;包含三个要素&#xff1a;高级、长期、威胁。 【高级】是指执行APT攻击需要比传统攻击更高的定制程度和…

预处理器标识#error的目的是什么?

在C和C编程语言中&#xff0c;预处理器标识#error是一个指令&#xff0c;它的目的是在编译过程中生成一个错误信息。当预处理器遇到#error指令时&#xff0c;它会停止编译过程&#xff0c;并显示#error后面的消息作为错误信息。这个指令通常用于确保某些条件在编译时得到满足&a…

人体姿态估计学习

人体姿态估计 1.绪论 人体姿态估计是计算机视觉中一个很基础的问题。从名字的角度来看&#xff0c;可以理解为对“人体”的姿态&#xff08;关键点&#xff0c;比如头&#xff0c;左手&#xff0c;右脚等&#xff09;的位置估计。 一般我们可以这个问题再具体细分成4个任务&…

小米手机短信删除了怎么恢复?这里教你快速解决!

手机已经成为我们生活中不可或缺的一部分&#xff0c;比如小米手机。我们通过手机进行通讯、娱乐、学习等各种活动&#xff0c;其中&#xff0c;短信是我们日常生活中的重要信息来源之一。然而&#xff0c;我们可能会不小心删除了一些重要的短信&#xff0c;这时候我们就会想知…

领航法律科技,法大大多年深耕再获认可!

近日&#xff0c;“乘势破局 第八届新兴法律服务业高峰论坛”在上海隆重举行。作为国内领先的电子签厂商&#xff0c;法大大凭借在法律科技领域的多年深耕与沉淀&#xff0c;荣获“法律科技领航机构”称号。 据悉&#xff0c;新兴法律服务业高峰论坛作为国内首个聚焦“新兴法律…

高等数学笔记(下中)

曲线积分 第一类曲线积分&#xff1a;对弧长的积分计算方法 定理&#xff1a;设 f ( x , y ) f(x,y) f(x,y)在曲线弧 L L L上有定义且连续&#xff0c; L L L的参数方程是 { x φ ( t ) y ψ ( t ) ( α ≤ t ≤ β ) \begin{cases} x\varphi(t)\\ y\psi(t) \end{cases}(\a…

一文了解什么是SSL证书?——值得收藏

SSL证书&#xff0c;全称Secure Sockets Layer证书&#xff0c;是一种网络安全协议的实现方式&#xff0c;现在通常指的是其继任者TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;不过习惯上仍称为SSL证书。它的主要作用是确保互联网上的数据传输安全&am…

WebStorm2024版 将项目上传到gitee

目录 一、准备 WebStorm gitee 二、上传代码到Gitee 三、过程中遇到的问题 报错&#xff1a;You may want to first integrate the remote changes (e.g., git pull ...) before pushing again. 报错&#xff1a;fatal: refusing to merge unrelated histories 报错&a…

机器人系统ros2-开发实践05-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

如何判断代理IP质量?

由于各种原因&#xff08;从匿名性和安全性到绕过地理限制&#xff09;&#xff0c;代理 IP 的使用变得越来越普遍。然而&#xff0c;并非所有代理 IP 都是一样的&#xff0c;区分高质量和低质量的代理 IP 对于确保流畅、安全的浏览体验至关重要。以下是评估代理 IP 质量时需要…

上升实用的Chrome浏览器命令

Chrome浏览器提供了一系列实用的命令行参数&#xff0c;这些参数可以在启动浏览器时使用&#xff0c;或者在Windows系统上通过命令提示符或PowerShell使用。以下是一些常用的Chrome浏览器命令&#xff1a; 1. **-incognito**&#xff1a;打开一个新的隐身窗口。隐身模式下&…

前端递归常见应用

概览 在 JavaScript 中&#xff0c;递归是一种编程技术&#xff0c;指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题&#xff0c;直到达到某种基本情况&#xff08;不再需要进一步递归的简单情…

C语言 main( ) 函数的指针数组形参是怎么回事?

一、问题 在使⽤⼀些开发⼯具⽣成C语⾔⽂件时&#xff0c;主函数 mian( ) 中会有参数&#xff0c;这个参数到底是怎么回事⼉呢&#xff1f; 二、解答 mian( ) 称为主函数&#xff0c;是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的&#xff0c;当处于操作命令状态下&…

【算法】滑动窗口——最大连续1的个数

本篇文章讲的是“最大连续1的个数”这道题&#xff0c;从最开始的简单暴力到用滑动窗口算法实现解题的思路历程&#xff0c;有需要借鉴即可。 目录 1.题目2.暴力求解3.滑动窗口解法3.1优化一&#xff1a;end重返start优化&#xff0c;end指针不回退3.2优化二&#xff1a;某一st…

invokeMethod 在 Flutter 中的使用场景与详解

在 Flutter 开发中,我们经常需要与原生平台(Android 或 iOS)进行交互,以实现一些平台特有的功能。invokeMethod 是 Flutter 提供的一个非常重要的 API,它允许我们通过 MethodChannel 与原生平台通信,并调用原生平台定义的方法。本文将详细介绍 invokeMethod 的使用场景、…

深入了解Process Exporter:Prometheus进程监控利器

一、概述 process-exporter主要用来监控进程的运行状态和资源使用情况。 exporter是从/proc目录下获取进程的状态。 二、安装 1、传统安装 下载二进制包&#xff0c;下载链接&#xff1a;https://github.com/ncabatoff/process-exporter/releases/tag/v0.8.1 2、kubernet…