pytorch 從頭開始faster-rcnn(一):程式碼知識準備
一:
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
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被儲存。