本文目錄一覽:
MMsegmentation教程 6: 自定義運行設定
我們已經支持 PyTorch 自帶的所有優化器,唯一需要修改的地方是在配置文件里的 optimizer 域里面。
例如,如果您想使用 ADAM (注意如下操作可能會讓模型表現下降),可以使用如下修改:
為了修改模型的學習率,使用者僅需要修改配置文件里 optimizer 的 lr 即可。
使用者可以參照 PyTorch 的 API 文檔
直接設置參數。
一個自定義的優化器可以按照如下去定義:
假如您想增加一個叫做 MyOptimizer 的優化器,它的參數分別有 a , b , 和 c 。
您需要創建一個叫 mmseg/core/optimizer 的新文件夾。
然后再在文件,即 mmseg/core/optimizer/my_optimizer.py 里面去實現這個新優化器:
為了讓上述定義的模塊被框架發現,首先這個模塊應該被導入到主命名空間 (main namespace) 里。
有兩種方式可以實現它。
mmseg.core.optimizer.my_optimizer 模塊將會在程序運行的開始被導入,并且 MyOptimizer 類將會自動注冊。
需要注意只有包含 MyOptimizer 類的包 (package) 應當被導入。
而 mmseg.core.optimizer.my_optimizer.MyOptimizer 不能 被直接導入。
事實上,使用者完全可以用另一個按這樣導入方法的文件夾結構,只要模塊的根路徑已經被添加到 PYTHONPATH 里面。
之后您可以在配置文件的 optimizer 域里面使用 MyOptimizer
在配置文件里,優化器被定義在 optimizer 域里,如下所示:
為了使用您自己的優化器,這個域可以被改成:
有些模型可能需要在優化器里有一些特別參數的設置,例如 批歸一化層 (BatchNorm layers) 的 權重衰減 (weight decay)。
使用者可以通過自定義優化器的構造器去微調這些細粒度參數。
默認的優化器構造器的實現可以參照 這里 ,它也可以被用作新的優化器構造器的模板。
優化器沒有實現的一些技巧應該通過優化器構造器 (optimizer constructor) 或者鉤子 (hook) 去實現,如設置基于參數的學習率 (parameter-wise learning rates)。我們列出一些常見的設置,它們可以穩定或加速模型的訓練。
如果您有更多的設置,歡迎在 PR 和 issue 里面提交。
我們根據默認的訓練迭代步數 40k/80k 來設置學習率,這在 MMCV 里叫做 PolyLrUpdaterHook 。
我們也支持許多其他的學習率計劃表: 這里 ,例如 CosineAnnealing 和 Poly 計劃表。下面是一些例子:
工作流是一個專門定義運行順序和輪數 (running order and epochs) 的列表 (phase, epochs)。
默認情況下它設置成:
意思是訓練是跑 1 個 epoch。有時候使用者可能想檢查模型在驗證集上的一些指標(如 損失 loss,精確性 accuracy),我們可以這樣設置工作流:
于是 1 個 epoch 訓練,1 個 epoch 驗證將交替運行。
注意 :
如果鉤子已經在 MMCV 里被實現,如下所示,您可以直接修改配置文件來使用鉤子:
以下的常用的鉤子沒有被 custom_hooks 注冊:
在這些鉤子里,只有 logger hook 有 VERY_LOW 優先級,其他的優先級都是 NORMAL 。
上述提及的教程已經包括了如何修改 optimizer_config , momentum_config 和 lr_config 。
這里我們展示我們如何處理 log_config , checkpoint_config 和 evaluation 。
MMCV runner 將使用 checkpoint_config 去初始化 CheckpointHook .
使用者可以設置 max_keep_ckpts 來僅保存一小部分檢查點或者通過 save_optimizer 來決定是否保存優化器的狀態字典 (state dict of optimizer)。 更多使用參數的細節請參考 這里 。
log_config 包裹了許多日志鉤 (logger hooks) 而且能去設置間隔 (intervals)。現在 MMCV 支持 WandbLoggerHook , MlflowLoggerHook 和 TensorboardLoggerHook 。
詳細的使用請參照 文檔 。
evaluation 的配置文件將被用來初始化 EvalHook 。
除了 interval 鍵,其他的像 metric 這樣的參數將被傳遞給 dataset.evaluate() 。

慢走絲程序要用的一些代碼?
G代碼
G00 快速移動 G00 X___Y___U___V___
G01 直線加工 G01 X___Y___U___V___
G02 順時針圓弧加工 G02 X___Y___ I___ J____
G03 逆時針圓弧加工 G03 X___Y____I___J____
G04
G40 補正取消 G40 X____Y____
G41 向左補正 G41 X____Y____
G42 向右補正 G42 X____Y____
G90 絕對值數據模式 G90 (指定絕對坐標值)
G91 相對值數據模式 G91 (指定相對坐標值)
G92 程式原點數據模式 G92 X___Y____I____J____U____V____
M代碼
M00 無條件停止工作 M00 (當程式執行到M00單節時,機臺將自動停止)
M01 選擇性停止工作 M01 (假如M01STOP按鍵按亮時,和M00功能相同)
M02 程式結束 M02 (指定主程式結束)
三菱(MITSU)線割機臺代碼
A 錐度 A____ (角度)
L 程式編號 L_____(正整數)
N 程式中加工孔號 N_____(正整數)
R 圓弧半徑 R_____(常數)
K 旋轉角度 K_____(角度)
S 縮放比例 S_____(常數)
H 補正編號 H_____(常數)
E 加工條件 E_____(正整數)
F 加工速度 F_____(正數)
G22 呼喚副程式 G22L__(正整數)
G23 返回主程式 G23
G87 主程式與副程式圓角設定 G87
G88 自動化清角 G88
G89 取消自動化清角 G89
M20 自動穿線 M20
M21 自動剪線 M21
M80 噴水打開 M80
M81 噴水關閉 M81
M82 送線開始 M82
M83 送線結束 M83
M84 放電開始 M84
M85 放電結束 M85
M90 最適利進給打開 M90
M91 最適利進給結束 M91
慶鴻線割機臺代碼
A 錐度 A____ (角度)
L(O) 程式編號 L_____(正整數)
N 程式中加工孔號 N_____(正整數)
R 圓弧半徑 R_____(常數)
K 旋轉角度 K_____(角度)
H(D) 補正編號 H_____(常數)
E(S) 加工條件 E_____(正整數)
F 加工速度 F_____(正數)
G22 呼喚副程式 G22L__(正整數)
G23 返回主程式 G23
G87 主程式與副程式圓角設定 G87
G94 定速切割 G94
G95 伺服切割 G95
M20 自動穿線 M20
M21 自動剪線 M21
M80 噴水打開 M80
M81 噴水關閉 M81
M82 送線開始 M82
M83 送線結束 M83
M84 放電開始 M84
M85 放電結束 M85
M90 最適利進給打開 M90
M91 最適利進給結束 M91
M98 呼喚副程式 M98L(P)__ (正整數)
M99 返回主程式 M99
沙迪克(SODICK) 線割機臺代碼
G05 X軸鏡象 G05
G06 Y軸鏡象 G06
G07 Z軸鏡象 G07
G08 X.Y軸交換 G08
G09 取消鏡象與軸交換 G09
G26 圖形旋轉打開 G26K___(角度)
G27 圖形旋轉取消 G27
G50 取消錐度 G50
G51 向左側傾斜 G51
G52向右側傾斜 G52
G74 打開四軸補正 G74
G75 關閉四軸補正 G75
G81 回歸機械原點 G81
G82 X或者Y方向分中 G82
G84 自動測垂直 G84X-
G97 設定所有坐標系歸零 G97XY
T80 送線打開 T80
T81 送線關閉 T81
T82 加工液打開 T82
T83 加工液關閉 T83
T84 泵流打開 T84
T85 泵流關閉 T85
T86 噴流打開 T86
T87 噴流關閉 T87
T88 浸油加工 T88
T89 噴水加工 T89
T94 浸水加工 T94
M05 忽視接觸(短路)感知 M05
M06 不放電 M06
M98 呼喚副程式 M98L(P)__ (正整數)
M99 返回主程式 M99
法蘭克(富士通FANUC) 線割機臺代碼
G10 設定補正值或者加工條件 G10P__R__(補正值設定)
G10P__X__Y__Z__U__V__W__I__J_K_(加工條件設定 )
G48 轉角R性能打開 G48
G49 轉角R性能關閉 G49
G50 取消錐度 G50 X__Y__
G51 向左側傾斜 G51 X__Y__
G52 向右側傾斜 G52 X__Y__
G94 定速切割 G94X__Y__F__
G95 伺服切割 G95X__Y__
夏米爾(CHARMILL) 線割機臺代碼
Aa 錐度 A____ (角度)
Cc 輔助平面旋轉角度 C_____(角度)
Ee 加工模式的選擇 E____(正整數)
Ff 多少秒閉鎖時間 F____(常數)
Hh 工件的厚度 H____(常數)
Rr 基準面與輔助平面之間的間隔 R____(常數)
Ww 基準面與下部表面之間的間隔
G27 正常模式[取消模式 G28,G29,G30和G32]
G28 錐形模式,旋轉主軸類型[不變角]
G29 尖角的錐形模式
G30 恒定半徑的錐形模式
G32 扭轉模式的約定和定義
M03 起用電極絲進給
M05 停用電極絲進給
M06 自動穿絲
M07 起用上部沖洗
M08 起用下部沖洗
M09 停用上部與下部沖洗
M12 自動線切割
M20 起用加工
M21 停用加工
易語言編輯框特殊符號
可以實現的,你可以先自己把一些特殊符號加到一個文本型變量中:下面是一些思路 自己看下
..版本 2
.程序集 窗口程序集1
.子程序 _按鈕1_被單擊
.局部變量 文本變量, 文本型
.局部變量 臨時文本, 文本型
.局部變量 a, 整數型
文本變量 = “#%^*()!~”
.計次循環首 (取文本長度 (編輯框1.內容), a)
臨時文本 = 取文本中間 (編輯框1.內容, a, 1)
.如果真 (尋找文本 (文本變量, 臨時文本, , 假) ≠ -1)
編輯框1.內容 = 文本替換 (編輯框1.內容, a, 1, “?”)
.如果真結束
.計次循環尾 ()
Delphi問題
代表按下了“上翻鍵”或者“下翻鍵”這兩個鍵。
是的,鍵盤上的每一個按鈕都有一個對應的KEY號碼,你可以編寫一個程序來查看每一個鍵的號碼,或者到以下文件中查看:等號前面是DELPHI設定的鍵常數,后面就是這個常數代表的實際數字:
[delphi目錄]\source\rtl\win\windows.pas
...
{ Virtual Keys, Standard Set }
{$EXTERNALSYM VK_LBUTTON}
VK_LBUTTON = 1;
{$EXTERNALSYM VK_RBUTTON}
VK_RBUTTON = 2;
{$EXTERNALSYM VK_CANCEL}
VK_CANCEL = 3;
{$EXTERNALSYM VK_MBUTTON}
VK_MBUTTON = 4; { NOT contiguous with L RBUTTON }
{$EXTERNALSYM VK_BACK}
VK_BACK = 8;
{$EXTERNALSYM VK_TAB}
VK_TAB = 9;
{$EXTERNALSYM VK_CLEAR}
VK_CLEAR = 12;
{$EXTERNALSYM VK_RETURN}
VK_RETURN = 13;
{$EXTERNALSYM VK_SHIFT}
VK_SHIFT = $10;
{$EXTERNALSYM VK_CONTROL}
VK_CONTROL = 17;
{$EXTERNALSYM VK_MENU}
VK_MENU = 18;
{$EXTERNALSYM VK_PAUSE}
VK_PAUSE = 19;
{$EXTERNALSYM VK_CAPITAL}
VK_CAPITAL = 20;
{$EXTERNALSYM VK_KANA }
VK_KANA = 21;
{$EXTERNALSYM VK_HANGUL }
VK_HANGUL = 21;
{$EXTERNALSYM VK_JUNJA }
VK_JUNJA = 23;
{$EXTERNALSYM VK_FINAL }
VK_FINAL = 24;
{$EXTERNALSYM VK_HANJA }
VK_HANJA = 25;
{$EXTERNALSYM VK_KANJI }
VK_KANJI = 25;
{$EXTERNALSYM VK_CONVERT }
VK_CONVERT = 28;
{$EXTERNALSYM VK_NONCONVERT }
VK_NONCONVERT = 29;
{$EXTERNALSYM VK_ACCEPT }
VK_ACCEPT = 30;
{$EXTERNALSYM VK_MODECHANGE }
VK_MODECHANGE = 31;
{$EXTERNALSYM VK_ESCAPE}
VK_ESCAPE = 27;
{$EXTERNALSYM VK_SPACE}
VK_SPACE = $20;
{$EXTERNALSYM VK_PRIOR}
VK_PRIOR = 33;
{$EXTERNALSYM VK_NEXT}
VK_NEXT = 34;
{$EXTERNALSYM VK_END}
VK_END = 35;
{$EXTERNALSYM VK_HOME}
VK_HOME = 36;
{$EXTERNALSYM VK_LEFT}
VK_LEFT = 37;
{$EXTERNALSYM VK_UP}
VK_UP = 38;
{$EXTERNALSYM VK_RIGHT}
VK_RIGHT = 39;
{$EXTERNALSYM VK_DOWN}
VK_DOWN = 40;
{$EXTERNALSYM VK_SELECT}
VK_SELECT = 41;
{$EXTERNALSYM VK_PRINT}
VK_PRINT = 42;
{$EXTERNALSYM VK_EXECUTE}
VK_EXECUTE = 43;
{$EXTERNALSYM VK_SNAPSHOT}
VK_SNAPSHOT = 44;
{$EXTERNALSYM VK_INSERT}
VK_INSERT = 45;
{$EXTERNALSYM VK_DELETE}
VK_DELETE = 46;
{$EXTERNALSYM VK_HELP}
VK_HELP = 47;
{ VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) }
{ VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) }
{$EXTERNALSYM VK_LWIN}
VK_LWIN = 91;
{$EXTERNALSYM VK_RWIN}
VK_RWIN = 92;
{$EXTERNALSYM VK_APPS}
VK_APPS = 93;
{$EXTERNALSYM VK_NUMPAD0}
VK_NUMPAD0 = 96;
{$EXTERNALSYM VK_NUMPAD1}
VK_NUMPAD1 = 97;
{$EXTERNALSYM VK_NUMPAD2}
VK_NUMPAD2 = 98;
{$EXTERNALSYM VK_NUMPAD3}
VK_NUMPAD3 = 99;
{$EXTERNALSYM VK_NUMPAD4}
VK_NUMPAD4 = 100;
{$EXTERNALSYM VK_NUMPAD5}
VK_NUMPAD5 = 101;
{$EXTERNALSYM VK_NUMPAD6}
VK_NUMPAD6 = 102;
{$EXTERNALSYM VK_NUMPAD7}
VK_NUMPAD7 = 103;
{$EXTERNALSYM VK_NUMPAD8}
VK_NUMPAD8 = 104;
{$EXTERNALSYM VK_NUMPAD9}
VK_NUMPAD9 = 105;
{$EXTERNALSYM VK_MULTIPLY}
VK_MULTIPLY = 106;
{$EXTERNALSYM VK_ADD}
VK_ADD = 107;
{$EXTERNALSYM VK_SEPARATOR}
VK_SEPARATOR = 108;
{$EXTERNALSYM VK_SUBTRACT}
VK_SUBTRACT = 109;
{$EXTERNALSYM VK_DECIMAL}
VK_DECIMAL = 110;
{$EXTERNALSYM VK_DIVIDE}
VK_DIVIDE = 111;
{$EXTERNALSYM VK_F1}
VK_F1 = 112;
{$EXTERNALSYM VK_F2}
VK_F2 = 113;
{$EXTERNALSYM VK_F3}
VK_F3 = 114;
{$EXTERNALSYM VK_F4}
VK_F4 = 115;
{$EXTERNALSYM VK_F5}
VK_F5 = 116;
{$EXTERNALSYM VK_F6}
VK_F6 = 117;
{$EXTERNALSYM VK_F7}
VK_F7 = 118;
{$EXTERNALSYM VK_F8}
VK_F8 = 119;
{$EXTERNALSYM VK_F9}
VK_F9 = 120;
{$EXTERNALSYM VK_F10}
VK_F10 = 121;
{$EXTERNALSYM VK_F11}
VK_F11 = 122;
{$EXTERNALSYM VK_F12}
VK_F12 = 123;
{$EXTERNALSYM VK_F13}
VK_F13 = 124;
{$EXTERNALSYM VK_F14}
VK_F14 = 125;
{$EXTERNALSYM VK_F15}
VK_F15 = 126;
{$EXTERNALSYM VK_F16}
VK_F16 = 127;
{$EXTERNALSYM VK_F17}
VK_F17 = 128;
{$EXTERNALSYM VK_F18}
VK_F18 = 129;
{$EXTERNALSYM VK_F19}
VK_F19 = 130;
{$EXTERNALSYM VK_F20}
VK_F20 = 131;
{$EXTERNALSYM VK_F21}
VK_F21 = 132;
{$EXTERNALSYM VK_F22}
VK_F22 = 133;
{$EXTERNALSYM VK_F23}
VK_F23 = 134;
{$EXTERNALSYM VK_F24}
VK_F24 = 135;
{$EXTERNALSYM VK_NUMLOCK}
VK_NUMLOCK = 144;
{$EXTERNALSYM VK_SCROLL}
VK_SCROLL = 145;
{ VK_L VK_R - left and right Alt, Ctrl and Shift virtual keys.
Used only as parameters to GetAsyncKeyState() and GetKeyState().
No other API or message will distinguish left and right keys in this way. }
{$EXTERNALSYM VK_LSHIFT}
VK_LSHIFT = 160;
{$EXTERNALSYM VK_RSHIFT}
VK_RSHIFT = 161;
{$EXTERNALSYM VK_LCONTROL}
VK_LCONTROL = 162;
{$EXTERNALSYM VK_RCONTROL}
VK_RCONTROL = 163;
{$EXTERNALSYM VK_LMENU}
VK_LMENU = 164;
{$EXTERNALSYM VK_RMENU}
VK_RMENU = 165;
{$EXTERNALSYM VK_PROCESSKEY}
VK_PROCESSKEY = 229;
{$EXTERNALSYM VK_ATTN}
VK_ATTN = 246;
{$EXTERNALSYM VK_CRSEL}
VK_CRSEL = 247;
{$EXTERNALSYM VK_EXSEL}
VK_EXSEL = 248;
{$EXTERNALSYM VK_EREOF}
VK_EREOF = 249;
{$EXTERNALSYM VK_PLAY}
VK_PLAY = 250;
{$EXTERNALSYM VK_ZOOM}
VK_ZOOM = 251;
{$EXTERNALSYM VK_NONAME}
VK_NONAME = 252;
{$EXTERNALSYM VK_PA1}
VK_PA1 = 253;
{$EXTERNALSYM VK_OEM_CLEAR}
VK_OEM_CLEAR = 254;
VB ASCLL碼表
ASCII碼記住常用的就行了,比如回車 13 。ASCII從0到127代表不同的常用符號,其中有的是可以推算出來的,不用記。例如大寫A的ASCII碼是65,小寫a則是97,0是48,后面的只要遞增推算即可。(B是66,C是67……;b是98,c是99)
特殊的:
7 響鈴
8 退格
9 制表符
10 換行符
32 空格符
33 !
34 "
35 #
36 $
37 %
38
39 '
40 (
41 )
42 *
43 +
44 ,
45 -
46 .
47 /
58 :
59 ;
60
61 =
62
63 ?
64 @
91 [
92 \
93 ]
94 ^
95 _
96 `
123 {
124 |
125 }
126 ~
127 del鍵

