pytorch 从头开始faster-rcnn(一):代码知识准备

本文代码是参考github上的simple-faster-rcnn-pytorch:https://github.com/zylhub/simple-faster-rcnn-pytorch

有需要的可以自行下载参考,就不放上自己写的,上面的已经写的很详细了!!!

一:

class config:
    def _parse(self, kwargs):
        state_dict = self._state_dict()
        for k, v in kwargs.items():
            if k not in state_dict:
                raise ValueError('UnKnown Option: "--%s"' % k)
            setattr(self, k, v)

类中函数前面带_  代表:

从意思上,告诉你这个函数是受保护的函数,只有类本身和其子类才能调用。从代码上来说,没有任何意义。。。因为Python没有那些关键字,是不是子类都可以调用,只是作者希望你只在子类中调用。。。

二:

2 文件组织架构

首先来看程序文件的组织结构:

├── checkpoints/
├── data/
│   ├── __init__.py
│   ├── dataset.py
│   └── get_data.sh
├── models/
│   ├── __init__.py
│   ├── AlexNet.py
│   ├── BasicModule.py
│   └── ResNet34.py
└── utils/
│   ├── __init__.py
│   └── visualize.py
├── config.py
├── main.py
├── requirements.txt
├── README.md

其中:

  • checkpoints/: 用于保存训练好的模型,可使程序在异常退出后仍能重新载入模型,恢复训练
  • data/:数据相关操作,包括数据预处理、dataset实现等
  • models/:模型定义,可以有多个模型,例如上面的AlexNet和ResNet34,一个模型对应一个文件
  • utils/:可能用到的工具函数,在本次实验中主要是封装了可视化工具
  • config.py:配置文件,所有可配置的变量都集中在此,并提供默认值
  • main.py:主文件,训练和测试程序的入口,可通过不同的命令来指定不同的操作和参数
  • requirements.txt:程序依赖的第三方库
  • README.md:提供程序的必要说

三. 关于__init__.py

可以看到,几乎每个文件夹下都有__init__.py,一个目录如果包含了__init__.py 文件,那么它就变成了一个包(package)。__init__.py可以为空,也可以定义包的属性和方法,但其必须存在,其它程序才能从这个目录中导入相应的模块或函数。例如在data/文件夹下有__init__.py,则在main.py 中就可以

from data.dataset import DogCat

而如果在data/__init__.py中写入

from .dataset import DogCat

则在main.py中就可以直接写为:

from data import DogCat

或者

import data;
dataset = data.DogCat

相比于from data.dataset import DogCat更加便捷。

四.visdom

具体细节可以看visdom使用讲解:https://ptorch.com/news/77.html

1、基本

vis.image

这个函数绘制一个img。它将 包含图像的CxHxW张量作为输入img

以下opts是支持的:

  • opts.jpgqualityJPG质量(number0-100;默认= 100
  • opts.caption:图像的标题

vis.images

这个函数绘制一个列表images。它需要一个输入B x C x H x W张量或list of images全部相同的大小。它使大小的图像(B / Nrow,Nrow)的网格。

以下参数和opts支持:

  • nrow:连续的图像数量
  • padding:在图像周围填充,四边均匀填充
  • opts.jpgqualityJPG质量(number0-100;默认= 100
  • opts.caption:图像的标题

vis.text

这个功能在一个盒子里打印文本。你可以使用它来嵌入任意的HTML。它需要输入一个text字符串。opts目前没有具体的支持。

vis.video

此功能播放视频。它输入视频的文件名videofile或一个LxCxHxW尺度的tensor(在Lua)或或LxHxWxC尺度的tensor包含视频作为输入的所有帧(在Python)。该功能不支持任何情节特定opts

以下opts是支持的:

  • opts.fps:视频的FPSinteger>0;默认= 25

注意:使用tensor输入需要安装并运行ffmpeg。您播放视频的能力可能取决于您使用的浏览器:您的浏览器必须支持OGG容器中的Theano编解码器(Chrome支持此功能)。

vis.svg

这个函数绘制一个SVG对象。它将SVG字符串svgstr或SVG文件的名称作为输入svgfile。该功能不支持任何特定的 opts。

vis.save

这个功能保存envs在visdom服务器上的活动。它需要输入一个列表(在Python中)或表(在lua中)env id被保存。

你可能感兴趣的:(目标检测,faster-rcnn)