【图像分割】【深度学习】Windows10下PFNet官方代码Pytorch实现与源码讲解

news2024/11/16 19:33:45

【图像分割】【深度学习】Windows10下PFNet官方代码Pytorch实现与源码讲解

提示:最近开始在【图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。


文章目录

  • 【图像分割】【深度学习】Windows10下PFNet官方代码Pytorch实现与源码讲解
  • 前言
  • PFNet模型运行环境安装
  • PFNet的使用
    • 数据集与模型权重下载
    • PFNet训练与测试
  • 总结


前言

PFNet是由大连理工大学的Haiyang Mei等人在《Camouflaged Object Segmentation with Distraction Mining【CVPR-2021】》【论文地址】一文中提出的模型,它模仿了自然界的捕食过程,PFNet包含两个关键模块,即定位模块(PM)和聚焦模块(FM)。PM旨在模仿捕食中的检测过程,从全局角度定位潜在的目标对象,然后使用FM执行捕食中的识别过程,通过关注模糊区域来逐步细化粗略预测。
在详细解析PFNet网络之前,首要任务是搭建PFNet【Pytorch-demo地址】所需的运行环境,并完成模型训练和测试工作,展开后续工作才有意义。


PFNet模型运行环境安装

代码运行这里提了要求,pytorch大于等于1.0.0,torchvision大于等于0.2.1,CUDA大于等于10.0,cudnn大于等于7.2。

  • 查看主机支持的cuda版本(最高)
    # 打开cmd,执行下面的指令查看CUDA版本号
    nvidia-smi
    
  • 安装GPU版本的torch【官网】
    博主的cuda版本是12.2,但这里cuda版本最高也是12.1,博主选的11.8也没问题。
    其他cuda版本的torch在【以前版本】找对应的安装命令。
  • 博主安装环境参考
    # 创建虚拟环境
    conda create -n PFNet python=3.9
    # 查看新环境是否安装成功
    conda env list
    # 激活环境
    conda activate PFNet 
    # 下载githup源代码到合适文件夹,并cd到代码文件夹内
    git clone https://github.com/Mhaiyang/CVPR2021_PFNet.git
    # 分别安装pytorch和torchvision
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    # 查看所有安装的包
    pip list
    conda list
    

PFNet的使用

数据集与模型权重下载

名称下载地址说明
训练集【谷歌云盘】【百度网盘:djq2】CAMO和COD10K的训练集作为训练集
测试集【谷歌云盘】【百度网盘:z83z】CHAMELEON全部数据集、CAMO的测试集和COD10K的测试集作为测试集
resnet50-19c8e357.pth下载地址预训练权重,用于训练前为自己模型初始化
PFNet.pth谷歌云盘源码作者提供的训练好的网络权重,可以直接用于测试

下载完成后,需要按照一定的目录结构放置数据集和模型权重,查看config.py文件。

import os
# 预训练权重
backbone_path = './backbone/resnet/resnet50-19c8e357.pth'
# 数据集放置目录
datasets_root = './data'
# 训练集目录结构
cod_training_root = os.path.join(datasets_root, 'train')
# 测试集目录结构
chameleon_path = os.path.join(datasets_root, 'test/CHAMELEON')
camo_path = os.path.join(datasets_root, 'test/CAMO')
cod10k_path = os.path.join(datasets_root, 'test/COD10K')
# 没有这个数据集
# nc4k_path = os.path.join(datasets_root, 'test/NC4K')

将下载好的训练集解压并拷贝到data/train目录下,并分别将Imgs和GT重命名为Image和mask。

将下载好的测试集解压并拷贝到data/test/xxx(数据名)目录下,并分别将Imgs重命名为Image,GT并不是必选项目,只是为了方便对比。

将下载好的预训练权重resnet50-19c8e357.pth拷贝到backbone/resnet目录下,将训练好的权重PFNet.pth拷贝到infer.py的同级目录下。

PFNet训练与测试

  1. 训练:可以直接运行train.py,也可以根据硬件条件修改代码中部分训练参数epoch_num和train_batch_size修改训练次数和训练的batchsize,详细的代码内容将在后续博文中介绍。

    正在训练,训练权重保存在ckpt/PFNet目录下:
  2. 测试:可以直接运行infer.py,也可以根据任务需求修改代码中部分测试参数OrderedDict的内容,选择性测试想要的数据集,而不是测试所有数据集。

    测试结果保存到results/PFNet/xxx(对应数据集)下,可以对比查看效果:

总结

尽可能简单、详细的介绍了PFNet的安装流程以及PFNet的使用方法。后续会根据自己学到的知识结合个人理解讲解PFNet的原理和代码。

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

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

相关文章

算法笔记【4】-冒泡排序法改进

一、冒泡排序缺点 冒泡排序是一种简单但效率较低的排序算法。冒泡排序通过比较相邻元素并交换位置来实现排序。具体而言,它从数组的第一个元素开始,依次比较相邻的两个元素,如果顺序错误则交换它们的位置,直到整个数组排好序为止…

RK3399平台开发系列讲解(基础篇)应用程序代码优化技巧

🚀返回专栏总目录 文章目录 一、利用高速缓存二、代码内联三、restrict 关键字四、消除不必要的内存引用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我主要会为你介绍四个优化 应用代码的技巧,它们分别是 利用高速缓存利用代码内联利用 restrict 关键字消除不必…

Java架构师软件可靠性构建

目录 1 导学2 软件可靠性基本概念3 软件可靠性建模4 软件可靠性管理5 软件可靠性设计6 软件可靠性测试与评价想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 软件可靠性基本概念 软件可靠性是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。软件…

Java精品项目源码爱心捐赠平台网站(编号V65)

Java精品项目源码扶农助农平台建设系统(编号V64) 大家好,小辰今天给大家介绍一个爱心捐赠平台网站(编号V65),演示视频公众号(小辰哥的Java)对号查询观看即可 文章目录 Java精品项目源码扶农助农平台建设系统(编号V64)难度指数&a…

修仙路上的基石 ->继承与实现

继承与实现的区别 不同点: 继承:不强制 子类重写父类方法 实现:强制 实现类重写接口的全部方法共同点: 都可以使用多态 继承:父类 父类对象 new 子类() 实现:接口 接口对象 实现类.调用方法(); 这里…

[尚硅谷React笔记]——第7章 redux

目录: redux简介redux工作流程求和案例_纯react版求和案例_redux精简版redux完整版异步action版对react-redux的理解连接容器组件与UI组件,react-redux基本使用优化1_简写mapDispatch优化2_Provider组件的使用优化3_整合UI组件与容器组件数据共享_编写P…

风云七剑攻略,最强阵容搭配

今天的风云七剑攻略最强阵容搭配给大家推荐以神仙斋减怒回血为主的阵容。 关注【娱乐天梯】,获取内部福利号 首先,这个角色在这个阵容当中,所有的角色当中,他的输出系数是最高的,已经达到了200%的层次,而且…

【NLP】什么是语义搜索以及如何实现 [Python、BERT、Elasticsearch]

语义搜索是一种先进的信息检索技术,旨在通过理解搜索查询和搜索内容的上下文和含义来提高搜索结果的准确性和相关性。与依赖于匹配特定单词或短语的传统基于关键字的搜索不同,语义搜索会考虑查询的意图、上下文和语义。 语义搜索在搜索结果的精度和相关…

Linux 文件系统之虚拟文件系统

文章目录 一、简介二、进程读写文件示例三、VFS高速缓存参考资料 一、简介 虚拟文件系统(Virtual File System,简称 VFS)是内核中的软件层,为用户空间程序提供文件系统接口。它还在内核中提供了一个抽象层,允许不同的…

SQL 通用数据类型

SQL 通用数据类型 数据类型定义了存储在列中的值的类型。 SQL 通用数据类型 数据库表中的每一列都需要有一个名称和数据类型。 SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的…

[GKCTF 2021]easycms 禅知cms

一道类似于渗透的题目 记录一下 首先扫描获取 登入界面 admin/12345登入 来到了后台 然后我们开始测试有无漏洞点 1.文件下载 设计 自定义 导出 然后进行抓包 解密后面的内容 发现是绝对路径了 所以这里我们要获取 flag 就/flag即可 L2ZsYWc /admin.php?mui&fdownlo…

linux的使用学习(1)

Linux 修改root密码 1.以 root 用户或具有 sudo 权限的登录到 Linux 系统。 2.打终端,并执行以下命令以更改 root 用户的密码: sudo passwd root 3.然后,系统会要求你输入新的 root 密码。请注意,在输入密码时,终端界…

图、深度优先(DFS)、广度优先(BFS)

图 基本介绍 表示方式 图的创建 from typing import Listclass Graph:vertex_list: List[str] [] # 存储顶点的数组edges: List[list] [] # 存储图中各条边的邻接矩阵num_edges: int 0 # 边的数总数def __init__(self, n: int):"""根据传入的顶点个数初始…

11、插件注入到vue实例中

新建插件 nuxt-demo2\plugins\vue-inject.js import Vue from "vue"Vue.prototype.$test function (str) {console.log(str) }配置插件 nuxt-demo2\nuxt.config.js export default {...// Plugins to run before rendering page: https://go.nuxtjs.dev/config-…

表格识别软件:科技革新引领行业先锋,颠覆性发展前景广阔

表格识别软件的兴起背景可以追溯到数字化和自动化处理的需求不断增加的时期。传统上,手动处理纸质表格是一项费时费力的工作,容易出现错误,效率低下。因此,开发出能够自动识别和提取表格数据的软件工具变得非常重要。 随着计算机…

Xcode运行程序提示 Executable Path is a Directory 问题解决

一、首先运行模拟器报错(没有记录),解决办法: TARGET->Build Settings->Architectures -> Exclude Architectures里面填入arm64,后运行模拟器成功 二、其次模拟器开发完成后,xcode运行真机调试&…

canvas:理解canvas / 基础使用 / Demo效果

一、理解Canvas Canvas是一个HTML5元素,用于在Web页面上绘制2D或3D图形。它允许使用JavaScript在网页上创建和操作图形。Canvas的主要功能是绘图,但也可以用来实现其他功能,如动画和交互式游戏。 使用Canvas,可以创建各种形状、…

【AOP进阶】实现重试机制

📚目录 ⚙️简介:✨注解定义:⛳RetryMechanism ⌛编写AOP代码:⚓RetryMechanismAspect 切面 ⛵演示:⛴如何使用RetryMechanism:⚡️正常请求如下:☘️测试异常并且重试:☄️测试异常…

WSL2 Ubuntu安装CUDA Toolkit

目前CUDA ToolKit需要切换到WSL2,在WLS1下不支持。之前折腾了很久,才从WSL1的坑中爬出来,仅写此文避免大家再从坑里走一次。 Windows WSL2相关 检查正在运行的 WSL 版本 可列出已安装的 Linux 发行版,并通过在 PowerShell 或 W…

Android NDK开发详解之ndk-gdb

Android NDK开发详解之ndk-gdb 要求用法选项 线程支持 NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话。偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档。 要求 要运行命令行原生调试,必须满足以下要求&#xff1…