bdcn手顺

  1. GitHub链接

https://github.com/pkuCactus/BDCN

  1. 环境配置(Prerequisites)

      Python 3.8

      contourpy==1.1.1

      cycler==0.12.1

      filelock==3.14.0

      fonttools==4.53.0

      fsspec==2024.6.0

      importlib_resources==6.4.0

      intel-openmp==2021.4.0

      Jinja2==3.1.4

      kiwisolver==1.4.5

      MarkupSafe==2.1.5

      matplotlib==3.7.5

      mkl==2021.4.0

      mpmath==1.3.0

      networkx==3.1

      numpy==1.24.4

      opencv-python==4.10.0.82

      packaging==24.1

      pillow==10.3.0

      pyparsing==3.1.2

      python-dateutil==2.9.0.post0

      scipy==1.10.1

      six==1.16.0

      sympy==1.12.1

      tbb==2021.12.0

      torch==2.3.1

      torchvision==0.18.1

      typing_extensions==4.12.2

      zipp==3.19.2

  2. 准备工作

    1. 下载预训练模型

          https://pan.baidu.com/s/10Tgjs7FiAYWjVyVgvEM0mA

          code: ab4g

    2. 新建一个文件夹存放测试图片

  • 新建结果存放文件夹

  1. 代码修改

      test_image.py:

      cpu:添加map_location=torch.device('cpu')

      gpu:去掉map_location=torch.device('cpu')

      cv2.imwrite(os.path.join(save_dir, 's2d_' + str(k), '%s' % nm), 255 - out[j] * 255)

      cv2.imwrite(os.path.join(save_dir, 'd2s_' + str(k), '%s' % nm), 255 - 255 * out[j+5])

      p.s. 图片分辨率过高,会非常消耗内存

    1. device问题:model.load_state_dict(torch.load('%s' % (args.model), map_location=torch.device('cpu')))。

    2. args.rate: 去掉model = bdcn.BDCN(args.rate)

    3. save_dir = args.res_dir

          if not os.path.exists(save_dir):

          os.mkdir(save_dir)移到前面

    4. 43行左右,添加k=1,且在循环中添加k+=1

    5. data = cv2.imread(test_root + '/' + nm+'.jpg')去掉'.jpg'

    6. 80行左右修改:

  2. 运行代码

 

def parse_args(): parser = argparse.ArgumentParser('test BDCN') parser.add_argument('-c', '--cuda', action='store_true', help='whether use gpu to train network') parser.add_argument('-g', '--gpu', type=str, default='0', help='the gpu id to train net') parser.add_argument('-m', '--model', type=str, default='bdcn-final-model/bdcn_pretrained_on_bsds500.pth', help='the model to test') parser.add_argument('--res-dir', type=str, default='result', # folder of results help='the dir to store result') parser.add_argument('--data-root', type=str, default='testdata') # 测试文件夹 folder of test images parser.add_argument('--test-lst', type=str, default=None) return parser.parse_args()

  1. 数据集

BSDS:http://mftp.mmcheng.net/liuyun/rcf/data/HED-BSDS.tar.gz

  1. 结果图

d2s_1

s2d_1

d2s_2

s2d_2

d2s_3

s2d_3

d2s_4

s2d_4

d2s_5

s2d_5

fuse

  1. test_image.py文件

 

import numpy as np import torch import torch.optim as optim import torch.nn as nn from torch.autograd import Variable from torch.nn import functional as F import time import re import os import sys import cv2 import bdcn from datasets.dataset import Data import argparse import cfg from matplotlib import pyplot as plt import os import os.path as osp from scipy.io import savemat def make_dir(data_dir): if not os.path.exists(data_dir): os.mkdir(data_dir) def test(model, args): test_root = args.data_root if args.test_lst is not None: with open(osp.join(test_root, args.test_lst), 'r') as f: test_lst = f.readlines() test_lst = [x.strip() for x in test_lst] if ' ' in test_lst[0]: test_lst = [x.split(' ')[0] for x in test_lst] else: test_lst = os.listdir(test_root) print(test_lst[0]) save_dir = args.res_dir if not os.path.exists(save_dir): os.mkdir(save_dir) k = 1 save_sideouts = 1 if save_sideouts: for j in range(5): make_dir(os.path.join(save_dir, 's2d_' + str(k))) make_dir(os.path.join(save_dir, 'd2s_' + str(k))) k += 1 mean_bgr = np.array([104.00699, 116.66877, 122.67892]) if args.cuda: model.cuda() model.eval() start_time = time.time() all_t = 0 for nm in test_lst: data = cv2.imread(test_root + '/' + nm) print(f'data:{data}') # print(os.path.join(test_root, nm)) # data = cv2.resize(data, (data.shape[1]/2, data.shape[0]/2), interpolation=cv2.INTER_LINEAR) data = np.array(data, np.float32) data -= mean_bgr data = data.transpose((2, 0, 1)) data = torch.from_numpy(data).float().unsqueeze(0) if args.cuda: data = data.cuda() data = Variable(data) t1 = time.time() out = model(data) if '/' in nm: nm = nm.split('/')[-1] print("nm:", nm) if save_sideouts: out = [F.sigmoid(x).cpu().data.numpy()[0, 0, :, :] for x in out] print(f'out:{len(out)}') k = 1 for j in range(5): # savemat(osp.join(save_dir, 's2d_'+str(k), nm+'.mat'), {'prob': out[j]}) cv2.imwrite(os.path.join(save_dir, 's2d_' + str(k), '%s' % nm), 255 - out[j] * 255) # savemat(osp.join(save_dir, 'd2s_'+str(k), nm+'.mat'), {'prob': out[j+5]}) cv2.imwrite(os.path.join(save_dir, 'd2s_' + str(k), '%s' % nm), 255 - 255 * out[j+5]) k += 1 else: out = [F.sigmoid(out[-1]).cpu().data.numpy()[0, 0, :, :]] if not os.path.exists(os.path.join(save_dir, 'fuse')): os.mkdir(os.path.join(save_dir, 'fuse')) cv2.imwrite(os.path.join(save_dir, 'fuse/%s.png' % nm.split('/')[-1].split('.')[0]), 255 * out[-1]) all_t += time.time() - t1 print(all_t) print('Overall Time use: ', time.time() - start_time) def main(): import time print(time.localtime()) args = parse_args() os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu # model = bdcn.BDCN(rate=args.rate) model = bdcn.BDCN() model.load_state_dict(torch.load('%s' % (args.model), map_location=torch.device('cpu'))) # print model.fuse.weight.data, model.fuse.bias.data print(model.fuse.weight.data) test(model, args) def parse_args(): parser = argparse.ArgumentParser('test BDCN') parser.add_argument('-c', '--cuda', action='store_true', help='whether use gpu to train network') parser.add_argument('-g', '--gpu', type=str, default='0', help='the gpu id to train net') parser.add_argument('-m', '--model', type=str, default='bdcn-final-model/bdcn_pretrained_on_bsds500.pth', help='the model to test') parser.add_argument('--res-dir', type=str, default='result', help='the dir to store result') parser.add_argument('--data-root', type=str, default='testdata') parser.add_argument('--test-lst', type=str, default=None) return parser.parse_args() if __name__ == '__main__': main()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

扩展方块加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>扩展方块加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

mysql-community-libs-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装

在 CentOS 或 RHEL 系统上安装 RPM 包时&#xff0c;如果遇到“公钥尚未安装”的问题&#xff0c;通常是因为系统没有导入相应的 GPG 公钥。MySQL 官方提供了一个 GPG 公钥&#xff0c;用于验证 RPM 包的签名。 以下是解决该问题的步骤&#xff1a; 下载并导入 MySQL 官方的 GP…

跨境电商中的IP隔离是什么?怎么做?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…

shell条件测试和if语句

“C:\Users\Jessica\Desktop\6.12.assets\image-20240612094159578.png”# shell条件测试和if语句 一、条件测试 1、$? 返回码 判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常 2、test命令 可以进行…

Qt程序打包成单个exe文件

文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有&#xff1a; windeployqt &#xff1a;安装Qt时自带Enigma Virtual Box 下…

探索Facebook对世界各地文化的影响

随着数字化时代的到来&#xff0c;社交媒体已成为连接世界各地人们的重要平台之一。而在这个领域的巨头之一&#xff0c;Facebook不仅是人们沟通交流的场所&#xff0c;更是一座桥梁&#xff0c;将不同地域、文化的人们联系在一起。本文将探索Facebook对世界各地文化的影响&…

Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…

Ecovadis认证咨询公司丨ecovadis认证对化学工业产品管理要求

EcoVadis是世界上最值得信赖的全球供应链业务可持续性评级、暂能和协作绩效改进工具提供商。在强大的技术平台和全球领域专家团队的支持下&#xff0c;EcoVadis易于使用和可操作的可持续性记分卡提供了对200多个采购类别和160多个国家/地区的环境、社会和道德风险的详细洞察。 …

一个小的画布Canvas页面,记录点的轨迹

Hello大家好&#xff0c;好久没有更新了&#xff0c;最近在忙一些其他的事&#xff0c;今天说一下画布canvas&#xff0c;下面是我的代码&#xff0c;实现了一个点从画布的&#xff08;0,0&#xff09;到&#xff08;canvas.width&#xff0c;canvas.height&#xff09;的一个实…

【iOS】UI学习——界面切换

界面切换 push和poppresent和dismiss示例程序 push和pop 在 Objective-C 中,pop 和 push 通常是与 UINavigationController 一起使用的方法,用于控制导航栈中视图控制器的跳转和回退。 push 和 pop 通常成对使用,用于实现导航栈的前进和后退功能。当用户进入新的视图控制器时…

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…

C++ 10 之 引用

c10引用.cpp #include <iostream>using namespace std;int main() {// 引用的语法&#xff1a;类型 &别名 原名// int a 10;// int &b a; // 此时a,b指向同一块内存// cout << "a: " << a << endl;// cout << "b: &…

【机器学习】GANs网络在图像和视频技术中的应用前景

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. &#x1f525;引言 背景介绍 研究意义 2. &#x1f388;GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. &#x1f916;GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…

java基于Vue+Spring boot前后端分离架构开发的一套UWB技术高精度定位系统源码

java基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码 系统采用UWB高精度定位技术&#xff0c;可实现厘米级别定位。UWB作为一种高速率、低功耗、高容量的新兴无线局域定位技术&#xff0c;目前应用主要聚焦在室内外精确定位。在工业自动化、物流仓储、电…

每日5题Day22 - LeetCode 106 - 110

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {…

航班进出港管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;航班信息管理&#xff0c;航飞降落请求管理&#xff0c;公告信息管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告信息&a…

改进YOLOv8 | 主干网络篇 | YOLOv8 更换主干网络之 StarNet | 《重写星辰⭐》

本改进已集成到 YOLOv8-Magic 框架。 论文地址:https://arxiv.org/abs/2403.19967 论文代码:https://github.com/ma-xu/Rewrite-the-Stars 最近的研究引起了人们对“星形运算”(按元素乘法)在网络设计中未被充分利用的潜力的关注。虽然直观的解释很多,但其应用的基本原理…

C# WinForm ——31 32 Menustrip菜单栏

1. 介绍 菜单控件&#xff0c;包含多个菜单项的菜单容器 主菜单下面可以有子菜单&#xff0c;子菜单下面可以有下一级子菜单 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到Enabled控件是否启用Dock定义要绑定到容器的控件边框&#xff0c;默认是t…

IDEA配置mybatis-config.xml模板文件

IDEA配置mybatis-config.xml模板文件 File>>Settings>>File and Code Templates 创建mybatis-config.xml模板 模板内容取自mybatis官网 mybatis官网 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC &qu…

WEB基础--TOMCAT服务器

服务器概述 什么是服务器 服务器&#xff1a;就是一个提供为人民服务的机器&#xff0c;这里的服务器主要指计算机服务器&#xff0c;分为两种&#xff1a;服务器软件和硬件服务器&#xff1b; 服务器分类 1、硬件服务器&#xff1a;安装了服务器软件的主机。就相当于高配的…