deeplabv3+源码之慢慢解析根目录(1)main.py--get_argparser函数

news2024/11/15 21:34:20

系列文章目录(更新中)

`
第一章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类]

文章目录

  • 系列文章目录(更新中)
    • deeplab v3+源码 慢慢解析系列
    • 前期准备和说明
    • 总体目录
    • main.py导入
    • 参数解析,get_argparser函数


deeplab v3+源码 慢慢解析系列

  1. 本带着一些孩子们做,但本硕能独立看下来的学生不多。
  2. 和孩子们一起再学一遍吧。
  3. 希望孩子们和我自己都能坚持写下去吧。
  4. 网上资料太多了,但不够慢,都是速成,没有足够的解释和补充,希望这次够慢,够清楚吧。

前期准备和说明

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

  1. 已经会python了(有编写代码的基础)。
  2. 了解深度学习和语义分割都是什么,特别是卷积核、填充等基本概念都已明确。
  3. 本次尽量不讲原理,尽量只说代码。
  4. 每次只说一个函数,进度足够慢,尽量足够简单。

总体目录

提示:下载解压后,总体结构如下,计划是一次说一个代码的一个函数。
在这里插入图片描述

  1. 总体上readme.md说的挺详细的,没必要就翻译一事浪费言语,请自行解决。
  2. requirements.txt的环境,也可自行选择版本吧,具备基本工程经验可以调整即可。
  3. 第一篇从main.py开始。拿到代码,想运行,下载完数据,配置好datasets文件夹,按readme.md操作即可(网络或者b站视频众多,不重复进行这些了)。直接进入代码。

main.py导入

提示:你过去写得最好的一段代码是什么? 请用代码块贴出来
例如:

#以下是基本操作
from tqdm import tqdm
import network
import utils
import os
import random
import argparse   #这个是本篇所讲重点
import numpy as np

#以下是数据部分所需
from torch.utils import data
from datasets import VOCSegmentation, Cityscapes
from utils import ext_transforms as et
from metrics import StreamSegMetrics

#以下是神经网络所需
import torch
import torch.nn as nn

#以下是可视化和图片操作所需
from utils.visualizer import Visualizer
from PIL import Image
import matplotlib
import matplotlib.pyplot as plt
  1. 导入部分,大致分块注释,按此理解即可。
  2. 关于argparse这个包,这篇说的很清楚,建议先看,不再赘述。
  3. main.py中一共由4个函数组成(get_argparser, get_dataset,validate,main),按源码顺序每个函数分开说。

参数解析,get_argparser函数

提示:看完上个部分所说的argparse包的相关介绍,再看下面的内容。此函数说到底就是解析控制台(Bash命令行)命令。

def get_argparser():
    parser = argparse.ArgumentParser()

    # Datset Options
    #指定数据集位置,'./datasets/data',后期可以根据自己数据集位置修改。
    parser.add_argument("--data_root", type=str, default='./datasets/data',
                        help="path to Dataset")       
                        
    #指定使用的数据集数据集,此处是['voc', 'cityscapes'],默认'voc',可以改为自己的数据集                    
    parser.add_argument("--dataset", type=str, default='voc',
                        choices=['voc', 'cityscapes'], help='Name of dataset') 
                        
     #数据类别,如VOC默认21类
    parser.add_argument("--num_classes", type=int, default=None,
                        help="num classes (default: None)")              

    # Deeplab Options
    #在network.modeling中提供可选择的模型,如本套代码提供deeplab V3和V3+每种6个具体模型,都是基于4类骨干网的选择(hrnetv2的2个,resnet的2个,mobilenet的1个,xception的1个)。
    available_models = sorted(name for name in network.modeling.__dict__ if name.islower() and \
                              not (name.startswith("__") or name.startswith('_')) and callable(
                              network.modeling.__dict__[name])
                              )                       
    
    # 具体特征提取的(骨干网)模型,此处可选'model' (choose from 'deeplabv3_hrnetv2_32', 'deeplabv3_hrnetv2_48', 'deeplabv3_mobilenet', 'deeplabv3_resnet101', 'deeplabv3_resnet50', 'deeplabv3_xception', 
                    #'deeplabv3plus_hrnetv2_32', 'deeplabv3plus_hrnetv2_48', 'deeplabv3plus_mobilenet', 'deeplabv3plus_resnet101', 'deeplabv3plus_resnet50', 'deeplabv3plus_xception')
    parser.add_argument("--model", type=str, default='deeplabv3plus_mobilenet',
                        choices=available_models, help='model name')    
                    
    #部署剪枝会用到,一开始不用看。ASPP层卷积用
    parser.add_argument("--separable_conv", action='store_true', default=False,
                        help="apply separable conv to decoder and aspp")      
    parser.add_argument("--output_stride", type=int, default=16, choices=[8, 16])

    # Train Options
    #要使用训练,不选
    parser.add_argument("--test_only", action='store_true', default=False) 
    #保存则开启   
    parser.add_argument("--save_val_results", action='store_true', default=False,
                        help="save segmentation results to \"./results\"")  
    #迭代次数                       
    parser.add_argument("--total_itrs", type=int, default=30e3,
                        help="epoch number (default: 30k)")  
    #学习率   
    parser.add_argument("--lr", type=float, default=0.01,
                        help="learning rate (default: 0.01)")    
    parser.add_argument("--lr_policy", type=str, default='poly', choices=['poly', 'step'],
                        help="learning rate scheduler policy")
    parser.add_argument("--step_size", type=int, default=10000)
    #裁剪验证集
    parser.add_argument("--crop_val", action='store_true', default=False,
                        help='crop validation (default: False)')        
    parser.add_argument("--batch_size", type=int, default=16,
                        help='batch size (default: 16)')
    parser.add_argument("--val_batch_size", type=int, default=4,
                        help='batch size for validation (default: 4)')
    #限制图像输入的大小,此处裁剪为513.                    
    parser.add_argument("--crop_size", type=int, default=513)     
    parser.add_argument("--ckpt", default=None, type=str,
                        help="restore from checkpoint")
    parser.add_argument("--continue_training", action='store_true', default=False)
     #focal_loss是一个动态缩放的交叉熵损失,通过一个动态缩放因子,可以动态降低训练过程中易区分样本的权重,从而将重心快速聚焦在那些难区分的样本
    parser.add_argument("--loss_type", type=str, default='cross_entropy',
                        choices=['cross_entropy', 'focal_loss'], help="loss type (default: False)")
                       
    parser.add_argument("--gpu_id", type=str, default='0',
                        help="GPU ID")
    #权重衰减
    parser.add_argument("--weight_decay", type=float, default=1e-4,
                        help='weight decay (default: 1e-4)')      
    parser.add_argument("--random_seed", type=int, default=1,
                        help="random seed (default: 1)")
    parser.add_argument("--print_interval", type=int, default=10,
                        help="print interval of loss (default: 10)")
    parser.add_argument("--val_interval", type=int, default=100,
                        help="epoch interval for eval (default: 100)")
    parser.add_argument("--download", action='store_true', default=False,
                        help="download datasets")

    # PASCAL VOC Options
    parser.add_argument("--year", type=str, default='2012',
                        choices=['2012_aug', '2012', '2011', '2009', '2008', '2007'], help='year of VOC')

    # Visdom options                    #可视化选项,默认不用,但挺好用的。
    parser.add_argument("--enable_vis", action='store_true', default=False,
                        help="use visdom for visualization")
    parser.add_argument("--vis_port", type=str, default='13570',
                        help='port for visdom')
    parser.add_argument("--vis_env", type=str, default='main',
                        help='env for visdom')
    parser.add_argument("--vis_num_samples", type=int, default=8,
                        help='number of samples for visualization (default: 8)')
    return parser

Tips

  1. 解析参数函数很有用,尤其是初期只运行代码时,让你能快速理解readme中第3部分的那些命令。逐一对照参数名字理解即可,如下:
python main.py --model deeplabv3plus_mobilenet --enable_vis --vis_port 28333 --gpu_id 0 --year 2012_aug --crop_val --lr 0.01 --crop_size 513 --batch_size 16 --output_stride 16
  1. 函数中很多参数,在验证性尝试中可能用不上,但没关系,入门学习,要有耐心,第一个函数也就结束了。
  2. 下一个函数是数据集函数get_dataset。

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

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

相关文章

王学岗机载开发(一)———————系统配置

1,安装VMware Workstation,然后安装虚拟机 VMware下载地址 Ubuntu镜像 2, 点击虚拟机,设置按钮 选择处理器,勾选虚拟化Intel VT-x/EPT或AMD-V/RVI(V)选项(因为我们是再虚拟机里跑虚拟机) 3,Linux的交换分区…

Django搭建图书管理系统04:View视图初探

数据库虽然已经有了,但是用户通常只需要这个庞大数据库中的很小一部分进行查看、修改等操作。为此还需要代码来恰当的取出并展示数据,这一部分代码就被称为视图。 Django 中视图的概念是**「一类具有相同功能和模板的网页的集合」**。 Hello World! 首…

SpringBoot—统一功能处理

SpringBoot—统一功能处理 🔎小插曲(通过一级路由调用多种方法)🔎使用拦截器实现用户登录权限的统一校验自定义拦截器将自定义拦截器添加至配置文件中拦截器的实现原理统⼀访问前缀添加 🔎统一异常的处理🔎统一数据格式的返回统一…

linux中grep命令的常见用法

作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。 首先谈一下grep命令的常用格式为:grep [选项] ”模式“ [文件] grep家族总共有三个:grep&#xff…

leetcode 686. 重复叠加字符串匹配(KMP算法-java)

重复叠加字符串匹配 leetcode 686. 重复叠加字符串匹配题目描述KMP 算法代码演示 KMP 算法 leetcode 686. 重复叠加字符串匹配 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/repeated-string-match 题目描述 给定两个字…

MySql存储引擎介绍——InnoDB、MyISAM、Memory

文章目录 1.MySql体系结构2.存储引擎简介3.存储引擎的特点3.1 InnoDB存储引擎特点3.2 MyISAM存储引擎介绍3.3 Memory存储引擎介绍 4.三种存储引擎的特点5.存储引擎的选择6.小结 1.MySql体系结构 2.存储引擎简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式…

python接口自动化(二十四)--unittest断言——中(详解)

简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言。这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京的天气,一个是查询 南京为例&#xf…

剑指offer55.二叉树的深度

这道题只要想到一棵树的最大深度 max(左子树的最大深度, 右子树的最大深度) 1;就能做出来,利用这个规律递归就出来了。 class Solution {int max,k 1;public int maxDepth(TreeNode root) {if(root null) return 0;return dfs(root);}pr…

【大数据趋势】7月9日 汇率,美澳,恒指期货的大数据趋势概率分析。

1. 数据源头之一 : 美元汇率 美元国债利息持续上行,美元承压,阶段性弱势是明显的。行情这个位置震荡许久,比较大概率能力不佳,有破位可能。从中期趋势来看,正在一个阶段性一层一层往下走的形态下,处于一次…

使用Gradio库创建交互式散点图

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【二分查找】367. 有效的完全平方数

367. 有效的完全平方数 解题思路 使用二分查找查找区间是[1,num]针对mid * mid和num进行比较 然后更改查找区间 class Solution {public boolean isPerfectSquare(int num) {// 二分查找 // 区间就是[1,num.length]long left 1;long right num;long mid 0;while(left <…

高薪Offer收割机之Redis的数据持久化

Redis的数据持久化有两种方式:RDB和AOF 先来看第一种方式RDB持久化: RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照,简单的说就是把内存中所有的数据都记录到磁盘中,当Redis服务器重启以后,从磁盘中读取文件恢复内存中的数据。 有两…

Windows平台软件工程关键路径PDM图

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来聊聊Windows平台下软件工程实践中涉及关键路径问题时常用的PDM图。 PDM图 我们用工程实例来完整讲解PDM图的节点表示&#xff0c; ES(最早开始时间) 、 LS(最迟开始时间)、EF(最早完成时间)、LF(最迟…

12 Java选择语句(switch)

1 选择语句常规用法 switch语法如下&#xff1a; swicth(输入的变量){ case 1 : //如果变量等于1 System.out.println("星期一"); break; case 2 : //如果变量等于2 System.out.println("星期二"); break; default: // 如果变量不是1和2 System.out.pr…

【Python】Python项目打包发布(五)(制作Windows安装包)

Python项目打包发布汇总 【Python】Python项目打包发布&#xff08;一&#xff09;&#xff08;基于Pyinstaller打包多目录项目&#xff09; 【Python】Python项目打包发布&#xff08;二&#xff09;&#xff08;基于Pyinstaller打包PyWebIO项目&#xff09; 【Python】Pytho…

学生成绩管理系统实现(CSS+JQuery+PHP+MySQL)

学生成绩管理系统实现&#xff08;CSSJQueryPHPMySQL&#xff09; 一、项目背景 本项目基于学校教务系统的背景&#xff0c;根据大学生选课以及学校对学生成绩的管理&#xff0c;实现了一个学校的学生成绩管理网站。另外在学生功能模块实现了选课系统&#xff0c;可供学生选课…

Ext4文件系统介绍 - 理论篇

Overview ext4文件系统分割成多个block groups&#xff0c;为了解决碎片化问题&#xff0c;block allocator尽量将一个文件的block放在一个group中。block groups的size通过sb.s_blocks_per_group指定&#xff0c;同样也可以通过8*block_size_in_bytes计算得到。block默认大小…

【Zookeeper】终端操作常用命令

文章目录 服务端常用命令客户端常用命令 zookeeper版本3.7.1 Zookeeper是一个开源的分布式协调服务。 Zookeeper是Apache软件基金会的一个项目&#xff0c;它提供了分布式应用程序协调的通用服务&#xff0c;如分布式同步、命名服务、集群维护等&#xff0c;以简化分布式应用协…

【计算机组成与体系结构Ⅰ】实验6 熟悉Vivado及MINISYS-1实验系统

一、实验目的 1&#xff1a;熟悉Vivado的开发环境及开发流程&#xff0c;掌握Vivado中Verilog HDL文本输入设计方法&#xff0c;包括仿真、综合、实现与下载。熟悉Minisys开发板的功能和使用方法。 2&#xff1a;学会可配置IP核的设计与封装方法&#xff0c;深入理解与门逻辑…

Linux驱动入门(五)——简单的字符设备驱动程序

文章目录 前言字符设备驱动程序框架字符设备和块设备主设备号和次设备号申请和释放设备号 初识cdev结构cdev结构体file_operations结构体cdev和file_operation结构体的关系inode结构体 字符设备驱动的组成字符设备加载和卸载函数file_operations结构体和其他成员函数驱动程序与…