deeplabv3+源码之慢慢解析33 第五章utils文件夹(8)visualizer.py--Visualizer类(完结)

系列文章目录(共五章33节已完结)

第一章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文件夹(b1)mobilenetv2.py–2个类和2个函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(b2)mobilenetv2.py–MobileNetV2类和mobilenet_v2函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(c1)resnet.py–2个基础函数,BasicBlock类和Bottleneck类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(c2)resnet.py–ResNet类和10个不同结构的调用函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d1)xception.py–SeparableConv2d类和Block类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d2)xception.py–Xception类和xception函数
第四章deeplabv3+源码之慢慢解析 network文件夹(2)_deeplab.py–ASPP相关的4个类和1个函数
第四章deeplabv3+源码之慢慢解析 network文件夹(3)_deeplab.py–DeepLabV3类,DeepLabHeadV3Plus类和DeepLabHead类
第四章deeplabv3+源码之慢慢解析 network文件夹(4)modeling.py–5个私有函数(4个骨干网,1个模型载入)
第四章deeplabv3+源码之慢慢解析 network文件夹(5)modeling.py–12个调用函数
第四章deeplabv3+源码之慢慢解析 network文件夹(6)utils.py–_SimpleSegmentationModel类和IntermediateLayerGetter类

第五章deeplabv3+源码之慢慢解析 utils文件夹(1)ext_transforms.py.py–2个翻转类和ExtCompose类
第五章deeplabv3+源码之慢慢解析 utils文件夹(2)ext_transforms.py.py–2个裁剪类和2个缩放类
第五章deeplabv3+源码之慢慢解析 utils文件夹(3)ext_transforms.py.py–旋转类,填充类,张量转化类和标准化类
第五章deeplabv3+源码之慢慢解析 utils文件夹(4)ext_transforms.py.py–ExtResize类,ExtColorJitter类,Lambda类和Compose类
第五章deeplabv3+源码之慢慢解析 utils文件夹(5)loss.py–FocalLoss类
第五章deeplabv3+源码之慢慢解析 utils文件夹(6)scheduler.py–PolyLR类
第五章deeplabv3+源码之慢慢解析 utils文件夹(7)utils.py–去标准化,momentum设定,标准化层锁定和路径创建
第五章deeplabv3+源码之慢慢解析 utils文件夹(8)visualizer.py–Visualizer类(完结)


说明

提示:本节介绍visualizer.py文件,主要是画直线,表格,文本。重点在于Visdom的调用。

导入部分

from visdom import Visdom
import json 

Visualizer类

class Visualizer(object):
    """ Visualizer
    """
    def __init__(self, port='13579', env='main', id=None):   #visdom启动后,在浏览器查看,设置端口号,如这里用http://localhost:13579
        #self.cur_win = {}
        self.vis = Visdom(port=port, env=env)
        self.id = id
        self.env = env
        # Restore
        #ori_win = self.vis.get_window_data()
        #ori_win = json.loads(ori_win)
        #print(ori_win)
        #self.cur_win = { v['title']: k for k, v in ori_win.items()  }

    def vis_scalar(self, name, x, y, opts=None):
        if not isinstance(x, list): #如果不是列表数据,转为列表。
            x = [x]
        if not isinstance(y, list):
            y = [y]
        
        if self.id is not None:
            name = "[%s]"%self.id + name   #如果id不为空,则在name中加入id
        default_opts = { 'title': name }
        if opts is not None:
            default_opts.update(opts)   #更新字典

        #win = self.cur_win.get(name, None)
        #if win is not None:
        self.vis.line( X=x, Y=y, win=name, opts=default_opts, update='append') # 使用line函数绘制直线。update使用“append”追加数据,“replace”使用新数据,“remove”用于删除“name”中指定的跟踪。
        #else:
        #    self.cur_win[name] = self.vis.line( X=x, Y=y, opts=default_opts)

    def vis_image(self, name, img, env=None, opts=None):
        """ vis image in visdom
        """
        if env is None:
            env = self.env 
        if self.id is not None:
            name = "[%s]"%self.id + name
        #win = self.cur_win.get(name, None)
        default_opts = { 'title': name }
        if opts is not None:
                default_opts.update(opts)
        #if win is not None:
        self.vis.image( img=img, win=name, opts=opts, env=env )  # 绘制图片
        #else:
        #    self.cur_win[name] = self.vis.image( img=img, opts=default_opts, env=env )
    
    def vis_table(self, name, tbl, opts=None):  #绘制表格。
        #win = self.cur_win.get(name, None)

        tbl_str = "<table width=\"100%\"> "  #对应的HTML标签。
        tbl_str+="<tr> \
                 <th>Term</th> \
                 <th>Value</th> \
                 </tr>"
        for k, v in tbl.items():
            tbl_str+=  "<tr> \
                       <td>%s</td> \
                       <td>%s</td> \
                       </tr>"%(k, v)       #用(k,v)替换字符串显示。

        tbl_str+="</table>"            #table结束HTML代码。

        default_opts = { 'title': name }
        if opts is not None:
            default_opts.update(opts)
        #if win is not None:
        self.vis.text(tbl_str, win=name, opts=default_opts)  #绘制文本。
        #else:
        #self.cur_win[name] = self.vis.text(tbl_str, opts=default_opts)

本文件的测试代码

if __name__=='__main__':
    import numpy as np
    vis = Visualizer(port=35588, env='main')  #端口号35588,这里用http://localhost:35588
    tbl = {"lr": 214, "momentum": 0.9}
    vis.vis_table("test_table", tbl)  #查看{"lr": 214, "momentum": 0.9}的test_table
    tbl = {"lr": 244444, "momentum": 0.9, "haha": "hoho"}
    vis.vis_table("test_table", tbl)    #查看{"lr": 244444, "momentum": 0.9, "haha": "hoho"}的test_table

    vis.vis_scalar(name='loss', x=0, y=1)  #查看(name='loss', x=0, y=1)的line
    vis.vis_scalar(name='loss', x=2, y=4)
    vis.vis_scalar(name='loss', x=4, y=6)

Tips

1.补充:Visdom简介
2.补充:Visdom示例
3. 至此,utils文件夹完毕。全部源码分析完毕。

全文总结

1.deeplab v3+慢慢学系列,至此五章33节全部结束。原计划单独列一节总结,还是觉得有些形式化了,就在这里简单总结一下吧。
2.本系列的目的在于完整的梳理代码,从每一句的角度理解。但涉及的全部理论知识和论文细节,最好能完全理解后再看代码。B站存在很多讲解视频,核心讲解甚好,但细枝末节没说清楚,对入门同学可能有点小门槛。故此,全文巨细都补充了链接,挑选了网络上免费讲解非常不错的资源链接。没有重复的必要,直接点击过去看即可。
3.原本的目的,是给自己的学生写着看的,也督促一下进度。因线下见面的缘故,有些实际的操作细节没有在此赘述。
4.欢迎看到此系列文章的朋友交流和指点,提出宝贵的意见。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值