1. 程式人生 > >pytorch 從頭開始faster-rcnn(一):程式碼知識準備

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.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被儲存。