deeplabv3+源码之慢慢解析 第四章network文件夹(1)backbone文件夹(a1)hrnetv2.py--4个函数和可执行代码

news2024/11/24 12:42:24

系列文章目录(更新中)

`
第一章deeplabv3+源码之慢慢解析 根目录(1)main.py–get_argparser函数
第一章deeplabv3+源码之慢慢解析 根目录(2)main.py–get_dataset函数
第一章deeplabv3+源码之慢慢解析 根目录(3)main.py–validate函数
第一章deeplabv3+源码之慢慢解析 根目录(4)main.py–main函数
第一章deeplabv3+源码之慢慢解析 根目录(5)predict.py–get_argparser函数和main函数

第二章deeplabv3+源码之慢慢解析 datasets文件夹(1)voc.py–voc_cmap函数和download_extract函数
第二章deeplabv3+源码之慢慢解析 datasets文件夹(2)voc.py–VOCSegmentation类
第二章deeplabv3+源码之慢慢解析 datasets文件夹(3)cityscapes.py–Cityscapes类
第二章deeplabv3+源码之慢慢解析 datasets文件夹(4)utils.py–6个小函数

第三章deeplabv3+源码之慢慢解析 metrics文件夹stream_metrics.py–StreamSegMetrics类和AverageMeter类

第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a1)hrnetv2.py–4个函数和可执行代码
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a2)hrnetv2.py–Bottleneck类和BasicBlock类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a3)hrnetv2.py–StageModule类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a4)hrnetv2.py–[HRNet类]

第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(b)mobilenetv2.py–[3个类,3个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹©resnet.py–[2个类,12个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d)xception.py–[3个类,1个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(2)_deeplab.py–[7个类和1个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(3)modeling.py–[15个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(4)utils.py–[2个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(1)ext_transforms.py.py–[17个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(2)loss.py–[1个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(3)scheduler.py–[1个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(4)utils.py–[1个类,4个函数]
第五章deeplabv3+源码之慢慢解析 utils文件夹(5)visualizer.py–[1个类]
总结

文章目录

  • 系列文章目录(更新中)
    • 前期准备和说明
    • 总体目录
    • \_\_init__.py
    • backbone文件夹
    • backbone文件夹中的\_\_init__.py
    • hrnetv2.py的导入部分
    • hrnetv2.py的非函数非类代码
    • hrnetv2.py的4个函数


前期准备和说明

提示:源码众多,此次选这个版本pytorch版

  1. 本章是各类神经网络的代码,所以前期准备是已经了解过(最好是学习过)pytorch。此处对于新手同学推荐的是沐神的动手学深度学习。开篇前置链接,新手必学内容,再次强调一遍,推荐资源都是免费的。
  2. 知道深度学习,特别是卷积神经网络为基础的系列网络的构建理论。
  3. 本章应该是新手同学最为关心的章节,建议有足够的耐心看全部补充链接。
  4. 每次只说一个函数,进度足够慢,尽量足够简单。

总体目录

提示:network文件夹总体结构如下。
在这里插入图片描述

  1. 先介绍以下整体结构和__init__.py。
  2. 然后按顺序,本章从backbone文件夹,也就是主干网络(骨干网络)开始。
  3. 本章是全部代码中最长的章节,后续按函数和类进行内容安排,遇到长的类和函数,一节讲一个,体现deeplab慢慢学系列的初心。

__init__.py

from .modeling import *
from ._deeplab import convert_to_separable_conv

1.按显示顺序,modeling.py和_deeplab.py在backbone文件夹结束后再做详解。


backbone文件夹

提示: backbone文件夹总体结构如下。
在这里插入图片描述

  1. 本文件夹内虽然只有4个主要的python文件,但涉及的内容稍多,目的以详解为主,时间可能会有点长,望大家见谅。
  2. 题外话:学习靠日积月累,而不是突击。也许这是目前反主流的观点,但本系列目的一是讲东西,二就在于传播一些我认为有用的观念吧。

backbone文件夹中的__init__.py

from . import resnet
from . import mobilenetv2
from . import hrnetv2
from . import xception

1.简单明了,对外而言,确实就是这个四个模块。


hrnetv2.py的导入部分

#简简单单,torch的各种基本功能
import torch
from torch import nn
import torch.nn.functional as F
import os

1.简单明了,对外而言,确实就是这个四个模块。
2.传统的卷积神经网络模型常常存在多个下采样的过程,输入进来的图片利用卷积或者最大池化进行高和宽的压缩。HRNet则通过下采样以及上采样,在网络进行特征提取时融合不同形状的特征。HRNetV2可以适应不同任务的需要,语义分割就是其中之一。HRNet提取出来的特征极其丰富,包含各种的分辨率,理论上可以适应不同的CV需求(目标检测、语义分割、实例分割等)。整个HRNetV2由三部分组成,分别是主干部分、特征整合部分、预测头部分。详情后补链接。
3.理论不清楚的建议一定先高清楚,代码仅仅是对理论的实现,想真正搞清楚的必须看,切记切记!

hrnetv2.py的非函数非类代码


提示:hrnetv2.py包含4个类,4个函数,和其他可执行代码。先介绍非函数非类的代码。
1,文件开头的代码

__all__ = ['HRNet', 'hrnetv2_48', 'hrnetv2_32']   #一共有三种结构可选。

# Checkpoint path of pre-trained backbone (edit to your path). Download backbone pretrained model hrnetv2-32 @
# https://drive.google.com/file/d/1NxCK7Zgn5PmeS7W1jYLt5J9E0RRZ2oyF/view?usp=sharing .Personally, I added the backbone
# weights to the folder /checkpoints

model_urls = {
    'hrnetv2_32': './checkpoints/model_best_epoch96_edit.pth',   #源代码中保存hrnetv2_32模型的位置。
    'hrnetv2_48': None
}

2,文件结尾的代码

if __name__ == '__main__':      #单独运行本代码使用,被别的模块调用时不起作用。先学好python,切记!

    try:  #此段是检测要载入的模型文件是否存在。
        CKPT_PATH = os.path.join(os.path.abspath("."), '../../checkpoints/hrnetv2_32_model_best_epoch96.pth')
        print("--- Running file as MAIN ---")
        print(f"Backbone HRNET Pretrained weights as __main__ at: {CKPT_PATH}")
    except:
        print("No backbone checkpoint found for HRNetv2, please set pretrained=False when calling model")

    # Models
    model = hrnetv2_32(pretrained=True)  #使用与训练模型,详见hrnetv2_32函数。
    #model = hrnetv2_48(pretrained=False)

    if torch.cuda.is_available():   #GPU可用则用,不可用则用CPU。
        torch.backends.cudnn.deterministic = True
        device = torch.device('cuda')
    else:
        device = torch.device('cpu')
    model.to(device)
    in_ = torch.ones(1, 3, 768, 768).to(device)  #用全1输入测试输出。
    y = model(in_)
    print(y.shape)

    # Calculate total number of parameters:
    # pytorch_total_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
    # print(pytorch_total_params)

hrnetv2.py的4个函数


提示:hrnetv2.py包含4个函数,相对简单。
1,文件开头的函数

def check_pth(arch):      #检查路径。
    CKPT_PATH = model_urls[arch]  #从前文的model_urls字典中选择具体的模型路径。 
    if os.path.exists(CKPT_PATH):
        print(f"Backbone HRNet Pretrained weights at: {CKPT_PATH}, only usable for HRNetv2-32")
    else:
        print("No backbone checkpoint found for HRNetv2, please set pretrained=False when calling model")
    return CKPT_PATH
    # HRNetv2-48 not available yet, but you can train the whole model from scratch.

2,文件末尾的函数

def _hrnet(arch, channels, num_blocks, pretrained, progress, **kwargs):
    model = HRNet(channels, num_blocks, **kwargs)  #详见HRNet类。
    if pretrained:    #如使用预训练模型,则检验路径,载入模型。
        CKPT_PATH = check_pth(arch)   #详见上文check_pth函数。
        checkpoint = torch.load(CKPT_PATH)
        model.load_state_dict(checkpoint['state_dict'])
    return model


def hrnetv2_48(pretrained=False, progress=True, number_blocks=[1, 4, 3], **kwargs):
    w_channels = 48   #hrnetv2_48,即w_channels = 48。
    return _hrnet('hrnetv2_48', w_channels, number_blocks, pretrained, progress,
                  **kwargs)


def hrnetv2_32(pretrained=False, progress=True, number_blocks=[1, 4, 3], **kwargs):
    w_channels = 32  #hrnetv2_32,即w_channels = 32。
    return _hrnet('hrnetv2_32', w_channels, number_blocks, pretrained, progress,
                  **kwargs)

Tips

  1. 补充,很喜欢这位大佬的风格,个人推荐HRNetV2详解。

  2. 本节讲述了除了类代码以外的所有部分,是整体性的介绍。

  3. 下一个节介绍hrnetv2.py中的类。

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

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

相关文章

使用NRF52840 USB Dongle进行Wireshark蓝牙抓包

一、搭建软硬件环境 1.1、准备NRF52840 USB Dongle一个: 1.2、下载Wireshark软件 https://2.na.dl.wireshark.org/win64/Wireshark-win64-4.0.7.exe 1.3、下载Nodic官方解析工具包 nRF Sniffer for Bluetooth LE - Downloads - nordicsemi.com 1.4、下载Python P…

中文数据下载

研究AI离不开数据,数据库可以说是AI的半壁天下。有链接的数据库下载是很nice的。 语音数据集整理 目录 1.Mozilla Common Voice. 2 2.翻译和口语音频的大型数据库Tatoeba. 2 3.VOiCES Dataset 3 4. LibriSpeech. 4 5.2000 HUB5 English:... 4 6.…

Java文件流和网络流的原理以及流解析过程

流我们可以理解为水流,流的传输就相当于在水管里传输,本篇博客主要介绍流的原理和解析过程,学疏才浅,抛砖引玉,大佬勿喷。 文件流 假设我们收到了一个以Unicode编码的文件流,对于该文件流所表示的内容我们…

Java显示日期和时间中间的CST表示什么意思

例如,用Java代码System.out.println(new Date())语句打印出了当前的日期和时间信息,结果显示:Tue Jul 18 18:42:57 CST 2023 package com.thb;import java.util.Date; import java.util.Locale; import java.util.TimeZone;public class Tes…

Office史上最大升级!GPT-4接入Office全家桶!Excel到PPT动嘴就能做!

3月17日,微软宣布将GPT-4融入了Office全家桶。 这意味着,不管是Word、PPT、Excel,还是Outlook、Teams、Microsoft Viva、Power Platform,所有这些办公软件,通通都会得到GPT-4的加持! 直接改名吧&#xff0…

this指针/闭包及作用域(进阶)

一.作用域链 1.通过一个例子 let aglobalconsole.log(a);//globalfunction course(){let bjsconsole.log(b);//jssession()function session(){let cthisconsole.log(c);//Windowteacher()//函数提升function teacher(){let dstevenconsole.log(d);//stevenconsole.log(test1,…

Ae 效果:CC Kaleida

风格化/CC Kaleida Stylize/CC Kaleida 万花筒是一种装置或玩具,通过多次反射和镜像,将图像分割成多个对称和重复的图案。CC Kaleida(CC 万花筒) 效果通过类似的方式在图像上创建镜像和对称的视觉效果。 提示: 由于 CC…

SpringBoot项目中WEB页面放哪里--【JSB系列之008】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤【JSB系列之000】 文章目录 SpringBoot系列文章目录Resources目录Resources子目录实操一个helloworld!总结作业(难度★✰✰✰✰ )配套资源题外话 本系列环境 环境win11工具idea 2017jdk1.8数据库my…

AD导入封装以及器件(立创)

这里我们以立创商城为例 https://www.szlcsc.com/?cBD&sdclkidA5f6152zxrDiArD6A52&bd_vid12150450211089112893 1)先搜索,然后点击数据手册; ​ 2)出现如下界面,点击立即打开; ​ 3&#xff…

前端学习记录~2023.7.17~CSS杂记 Day9 浮动float 定位position 多列布局 响应式设计

前言一、浮动1、使盒子浮动起来2、清除浮动3、清除浮动元素周围的盒子(1)clearfix 小技巧(2)使用 overflow(3)display: flow-root 二、定位1、定位有哪些2、top、bottom、left 和 right3、定位上下文4、介绍…

宏下开展的#,##

宏下开展的#&#xff0c;## #表示字符串化 ##表示链接符号 #include <stdio.h>#define ABC(x) #x int main() {printf(ABC(abc));return 0; }#include <stdio.h>#define ABC(x) #x #define DAY(x) myday##x int main() {int myday1 10;int myday2 20;printf(AB…

Redis持久化(5)

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ 文章目录 Redis持久化1、持久化流程2、RDB2.1、优点2.2、缺点2.3、快照规…

VMware 安装 Centos7(超详细教程)

文章目录 &#x1f9d1;‍&#x1f393;前言&#x1f943;安装前准备&#x1f349;安装&#x1f91d; 总结 &#x1f9d1;‍&#x1f393;前言 大家好&#xff0c;本篇为本人在学习linux过程中所需要的软件以及安装过程&#xff0c;随手记录一下&#xff0c;写得不是很好&#…

JAVA多线程,为什么并发环境需要用到它?

目录 一、什么是并发环境 二、什么是多线程 三、如何在并发环境使用多线程 一、什么是并发环境 并发环境是指多个任务在同一时间段内同时执行的环境。在计算机领域中&#xff0c;指的是在同一个时间段内有多个线程或进程在执行。在并发环境下&#xff0c;多个任务可以同时进…

win11“你的internet安全设置阻止打开一个或多个文件”问题

“你的internet安全设置阻止打开一个或多个文件”问题解决记录 问题描述&#xff1a;部分程序出现无法下载或者无法打开的情况。 解决方法参考&#xff1a; 1.更改Internet安全设置&#xff08;仅限于由Internet安全设置出现的问题&#xff09;。 打开&#xff1a;控制表面&…

opencv实战--环境配置和文字识别

文章目录 前言一、环境配置二、文字识别2.1 文字单个识别2.2 文字单个带边框 总结 前言 一、环境配置 cmd输入python的时候跳转应用商店的解决方法。https://blog.csdn.net/qq_62294840/article/details/120623501 anaconda官方下载地址&#xff1a;https://www.anaconda.com…

Matplotlib grid()设置网格格式

通过 Matplotlib axes 对象提供的 grid() 方法可以开启或者关闭画布中的网格&#xff08;即是否显示网格&#xff09;以及网格的主/次刻度。除此之外&#xff0c;grid() 函数还可以设置网格的颜色、线型以及线宽等属性。 grid() 的函数使用格式如下&#xff1a; grid(colorb,…

C\C++ 使用exception类,抛出自定义异常并捕获

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 抛出异常&#xff0c;并捕获 exception 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <exception> #include <stdexcept&g…

学堂在线数据结构(上)(2023春)邓俊辉 课后题

The reverse number of a sequence is defined as the total number of reversed pairs in the sequence, and the total number of element comparisons performed by the insertion sort in the list of size n is: 一个序列的逆序数定义为该序列中的逆序对总数&#xff0c;…

Lesson3-4:OpenCV图像处理---直方图

直方图 学习目标 掌握图像的直方图计算和显示 了解掩膜的应用 熟悉直方图均衡化&#xff0c;了解自适应均衡化 1 灰度直方图 1.1 原理 直方图是对数据进行统计的一种方法&#xff0c;并且将统计值组织到一系列实现定义好的 bin 当中。其中&#xff0c; bin 为直方图中经常…