首页 > 其他分享 >demosaicnet-master的包代码阅读笔记

demosaicnet-master的包代码阅读笔记

时间:2023-06-08 23:38:14浏览次数:58  
标签:SUBSET demosaicnet LOG self 笔记 master path import os


init.py
我在学init用法时候的笔记 该文件里面都是导入模块,其中从dataset.py是导入所有模块,因为模糊导入的__all__没有定义。

from .modules import BayerDemosaick
 from .modules import XTransDemosaick
 from .mosaic import xtrans
 from .mosaic import bayer
 from .mosaic import xtrans_cell
 from .dataset import *dataset.py文件,这个文件里面很多代码和download_dataset.py里面一样[download_dataset.py的阅读笔记]
 “”“Dataset loader for demosaicnet.”""
 import os
 import platform
 import subprocess#用来复制和删除文件的模块
 import shutil#hash值,md5值
 import hashlibimport numpy as np
#图像读写模块
 from imageio import imread
 from torch.utils.data import Dataset as TorchDataset
 import wget#作者写的一个模块好像,但是在torch的包下面有
ttools的资料ttools的阅读笔记
 import ttools#文件夹下面的包里面的模块
 from .mosaic import bayer, xtrans

python list 或者tensor 代码后最后 加了一个逗号(,)就变成了元组。为什么Python在列表和元组的末尾允许使用逗号?

__all__的用法 因为在init里面是from .dataset import *,所以导入的是all列表里面的这些东西
all = [“BAYER_MODE”, “XTRANS_MODE”, “Dataset”,
“TRAIN_SUBSET”, “VAL_SUBSET”, “TEST_SUBSET”]

#输入ttools找到它的安装路径,在pycharm中打开,用全局查找找到定义处
pycharm全局搜索方法

def get_logger(name):
    """Get a named logger.

    Args:
        name(string): name of the logger
    """
    return logging.getLogger(name)

#私有属性__name__ 就是当前模块名
LOG = ttools.get_logger(name)

def set_logger(debug=False):
    """Set the default logging level and log format.

    Args:
        debug(bool): if True, enable debug logs.
    """

    log_level = logging.INFO
    prefix = "[%(process)d] %(levelname)s %(name)s"
    suffix = " | %(message)s"
    if debug:
        log_level = logging.DEBUG
        prefix += " %(filename)s:%(lineno)s"
    if HAS_COLORED_LOGS:
        coloredlogs.install(
            level=log_level,
            format=prefix+suffix)
    else:
        logging.basicConfig(
            level=log_level,
            format=prefix+suffix)
#设置logger属性
 ttools.set_logger(True)#设置几个量
 BAYER_MODE = “bayer”
 “”“Applies a Bayer mosaic pattern.”""XTRANS_MODE = “xtrans”
 “”“Applies an X-Trans mosaic pattern.”""TRAIN_SUBSET = “train”
 “”“Loads the ‘train’ subset of the data.”""VAL_SUBSET = “val”
 “”“Loads the ‘val’ subset of the data.”""TEST_SUBSET = “test”
 “”“Loads the ‘test’ subset of the data.”""class Dataset(TorchDataset):
 “”"Dataset of challenging image patches for demosaicking.
Args:
    download(bool): if True, automatically download the dataset.
    mode(:class:`BAYER_MODE` or :class:`XTRANS_MODE`): mosaic pattern to apply to the data.
    subset(:class:`TRAIN_SUBET`, :class:`VAL_SUBSET` or :class:`TEST_SUBSET`): subset of the data to load.
"""

def __init__(self, root, download=False,
             mode=BAYER_MODE, subset="train"):

    super(Dataset, self).__init__()

    self.root = os.path.abspath(root)

    if subset not in [TRAIN_SUBSET, VAL_SUBSET, TEST_SUBSET]:
        raise ValueError("Dataset subet should be '%s', '%s' or '%s', got"
                         " %s" % (TRAIN_SUBSET, TEST_SUBSET, VAL_SUBSET,
                                  subset))

    if mode not in [BAYER_MODE, XTRANS_MODE]:
        raise ValueError("Dataset mode should be '%s' or '%s', got"
                         " %s" % (BAYER_MODE, XTRANS_MODE, mode))
    self.mode = mode

    listfile = os.path.join(self.root, subset, "filelist.txt")
    LOG.debug("Reading image list from %s", listfile)

    if not os.path.exists(listfile):
        if download:
            _download(self.root)
        else:
            LOG.error("Filelist %s not found", listfile)
            raise ValueError("Filelist %s not found" % listfile)
    else:
        LOG.debug("No need no download the data, filelist exists.")

    self.files = []
    with open(listfile, "r") as fid:
        for fname in fid.readlines():
            self.files.append(os.path.join(self.root, subset, fname.strip()))

def __len__(self):
    return len(self.files)

def __getitem__(self, idx):
    """Fetches a mosaic / demosaicked pair of images.

    Returns
        mosaic(np.array): with size [3, h, w] the mosaic data with separated color channels.
        img(np.array): with size [3, h, w] the groundtruth image.
    """
    fname = self.files[idx]
    img = np.array(imread(fname)).astype(np.float32) / (2**8-1)
    img = np.transpose(img, [2, 0, 1])

    if self.mode == BAYER_MODE:
        mosaic = bayer(img)
    else:
        mosaic = xtrans(img)

    return mosaic, img
CHECKSUMS = {
 ‘datasets.z01’: ‘da46277afe85d3a91c065e4751fb8175’,
 ‘datasets.zip’: ‘3434f60f5e9b263ef78e207b54e9debe’,
 }def _download(dst):
 dst = os.path.abspath(dst)
 files = CHECKSUMS.keys()
 fullzip = os.path.join(dst, “datasets.zip”)
 joinedzip = os.path.join(dst, “joined.zip”)
URL_ROOT = "https://data.csail.mit.edu/graphics/demosaicnet"

if not os.path.exists(joinedzip):
    LOG.info("Dowloading %d files to %s (This will take a while, and ~80GB)", len(
        files), dst)

    os.makedirs(dst, exist_ok=True)
    for f in files:
        fname = os.path.join(dst, f)
        url = os.path.join(URL_ROOT, f)

        do_download = True
        if os.path.exists(fname):
            checksum = md5sum(fname)
            if checksum == CHECKSUMS[f]:  # File is is and correct
                LOG.info('%s already downloaded, with correct checksum', f)
                do_download = False
            else:
                LOG.warning('%s checksums do not match, got %s, should be %s',
                            f, checksum, CHECKSUMS[f])
                try:
                    os.remove(fname)
                except OSError as e:
                    LOG.error("Could not delete broken part %s: %s", f, e)
                    raise ValueError

        if do_download:
            LOG.info('Downloading %s', f)
            wget.download(url, fname)

        checksum = md5sum(fname)

        if checksum == CHECKSUMS[f]:
            LOG.info("%s MD5 correct", f)
        else:
            LOG.error('%s checksums do not match, got %s, should be %s. Downloading failed',
                      f, checksum, CHECKSUMS[f])

    LOG.info("Joining zip files")
    cmd = " ".join(["zip", "-FF", fullzip, "--out", joinedzip])
    subprocess.check_call(cmd, shell=True)

    # Cleanup the parts
    for f in files:
        fname = os.path.join(dst, f)
        try:
            os.remove(fname)
        except OSError as e:
            LOG.warning("Could not delete file %s", f)

# Extract
wd = os.path.abspath(os.curdir)
os.chdir(dst)
LOG.info("Extracting files from %s", joinedzip)
cmd = " ".join(["unzip", joinedzip])
subprocess.check_call(cmd, shell=True)

try:
    os.remove(joinedzip)
except OSError as e:
    LOG.warning("Could not delete file %s", f)

LOG.info("Moving subfolders")
for k in ["train", "test", "val"]:
    shutil.move(os.path.join(dst, "images", k), os.path.join(dst, k))
images = os.path.join(dst, "images")
LOG.info("removing '%s' folder", images)
shutil.rmtree(images)
def md5sum(filename, blocksize=65536):
 hash = hashlib.md5()
 with open(filename, “rb”) as f:
 for block in iter(lambda: f.read(blocksize), b""):
 hash.update(block)
 return hash.hexdigest()


标签:SUBSET,demosaicnet,LOG,self,笔记,master,path,import,os
From: https://blog.51cto.com/u_16131692/6444143

相关文章

  • 《人件》读书笔记
    概要:社会的复杂性远比技术上的挑战难处理得多,并且很多时候社会因素比技术因素更重要。而团队是一个非常重要的因素,如何管理团队,项目、改善工作环境,形成高效团队这是不可避免和忽略的。1、管理团队:一个项目的失败,可能是技术导致、也有可能是团队因素导致,也可能两者都有。在工作......
  • 神经网络的k和b初始化方式问题笔记
    初始化是为了防止梯度消失和爆炸编写代码,假设输入是512的行向量,经过10个512x512的矩阵,计算输出的平均值和标准差。输入行向量,每个矩阵,都是标准正态分布importtorch#随机生成一个512的输入值,服从正态分布x=torch.randn(512)y=xforiinrange(10):a=torch.rand......
  • 《人件》读书笔记2
    改善工作环境:工作环境的质量直接关系开发者的效率。一般来说,除了新手,经验对产出效率影响不大。反倒是,和身边的人有关;如果他们表现好,你也会自然表现好。这也就是环境同化,好的工作环境真的很重要。好的工作环境:工作空间宽敞、光亮、安静、具有私密性、不容易受到打扰并且具有窗户(不......
  • 阅读笔记之《构建之法》四
    第八章需求分析8.1软件需求①获取和引导需求:软件团队需要找到软件的利益相关者,了解和挖掘他们对软件的需求,引导他们表达出对软件的需求;需求还可以来自各种管理机构;需求不仅来自外界,还可以来自软件企业本身;需求还可以来自技术团队本身;有些需求的目的是要更好地了解用户的行为和......
  • 阅读笔记之《构建之法》三
    第六章敏捷流程6.1敏捷的流程①敏捷开发原则:(1)尽早并持续地交付有价值的软件以满足顾客需求(2)敏捷流程欢迎需求的变化,并利用这些变化来提高用户的竞争优势(3)经常发布可用的软件,发布间隔可以从几周到几个月,能短则短(4)业务人员和开发人员在项目开发过程中应该每天共同工作(5)以有......
  • 读书笔记——人件1
     对于考虑改换工作的人而言,其理由与所涉及的个性一样纷繁复杂。对于病态的、人员流动率高(很高的大于 50% )的公司而言,有以下一些理由解释大多数人离开的原因: 1、一种混日子的思想:一起工作的人产生不想长期投入工作的想法。2、 一种任意处置的感觉:管理层认为它的员工只......
  • 读书笔记——人件2
    工作的度量对方法的改进、动机、提高工作的满意度方面是有用的工具,但是它几乎从没有用于这些目的。相反的是,度量方案有成为威胁和包袱的趋势。 为了让管理概念真正可行,管理本身必须有足够的洞察力和安全性以便让它自己脱离困境。这意味着有关个人的数据不能用于管理,公司......
  • 《人件》读书笔记
    感谢计算机,正因为有了它,我们不需要真的有水果,就能玩切水果的游戏。如果你是一个水果罐头制造商,那么你需要操心的是从哪里购买水果原料、怎样运输、怎样建造厂房、购买机器、怎样推广销售你的罐头以及最后的——招人,通过培训使他们成为流水线上合格的标准的零件。如果你是水果......
  • 路由学习笔记
    路由的基本概念和类型路由的几种类型:静态路由,动态路由动态路由又分为:距离矢量路由(RIP),链路状态路由(OSPF,IS-IS,BGP)路由的几个概念路由选路路由器收到数据包后,会根据数据包中的目的IP地址选择一条最优的路径,并将数据包转发到下一个路由器,路径上最后的路由器负责将数据包送交目......
  • 2023年4月阅读笔记1
    为什么巴比伦塔会失败巴比伦塔的制造是一个神话故事,但是其中的道理却对今天人们的协作有着重要的启示。软件系统的开发完全通过计算机执行,为什么还是很少有远程协作的企业,这是因为远程协作很容易导致交流的缺失。大型的软件项目开发需要团队中的每个人能及时了解到整个团队在做些......