本文代码是参考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没有那些关键字,是不是子类都可以调用,只是作者希望你只在子类中调用。。。
二:
首先来看程序文件的组织结构:
├── 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
其中:
三. 关于__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.jpgquality
:JPG
质量(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.jpgquality
:JPG
质量(number0-100;
默认= 100
)opts.caption
:图像的标题vis.text
这个功能在一个盒子里打印文本。你可以使用它来嵌入任意的HTML
。它需要输入一个text
字符串。opts
目前没有具体的支持。
vis.video
此功能播放视频。它输入视频的文件名videofile
或一个LxCxHxW
尺度的tensor
(在Lua
)或或LxHxWxC
尺度的tensor
包含视频作为输入的所有帧(在Python
)。该功能不支持任何情节特定opts
。
以下opts
是支持的:
opts.fps
:视频的FPS
(integer>0
;默认= 25
)注意:使用tensor输入需要安装并运行ffmpeg。您播放视频的能力可能取决于您使用的浏览器:您的浏览器必须支持OGG容器中的Theano编解码器(Chrome支持此功能)。
vis.svg
这个函数绘制一个SVG对象。它将SVG字符串svgstr或SVG文件的名称作为输入svgfile。该功能不支持任何特定的 opts。
vis.save
这个功能保存envs在visdom服务器上的活动。它需要输入一个列表(在Python中)或表(在lua中)env id被保存。