Detectron2-寫模型(Write Models)官方文件中文翻譯
寫模型
如果您試圖做一些全新的事情,您可能希望完全從頭開始實現一個模型。但是,在很多情況下,你也許會對修改或者擴充現有模型中的一些內容有興趣。因此, 我們還提供了一些機制,讓使用者可以重寫標準模型的某些內部元件的行為。
註冊新的內容
對於使用者經常想要定製的常見概念,如 “backbone feature extractor” ,“box head” ,我們提供了一個序號產生器制,讓使用者注入定製實現,將立即在配置檔案中使用。
例如,為了新增新的 backbone ,import 這些程式碼到你的程式碼中:
from detectron2.modeling import BACKBONE_REGISTRY, Backbone, ShapeSpec
@BACKBONE_REGISTRY.register()
class ToyBackbone(Backbone):
def __init__(self, cfg, input_shape):
super().__init__()
# create your own backbone
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=16, padding=3)
def forward(self, image):
return {"conv1": self.conv1(image)}
def output_shape(self):
return {"conv1": ShapeSpec(channels=64, stride=16)}
在這個程式碼中,我們在 Backbone 類介面後面實現一個新的 backbone ,在 import 完這些程式碼,detectron2 能夠將 class 的名字連線到它的實現中。因此你能寫如下的程式碼:
cfg = ... # read a config
cfg.MODEL.BACKBONE.NAME = 'ToyBackbone' # or set it in the config file
model = build_model(cfg) # it will find `ToyBackbone` defined above
作為另一個例子,在廣義的R-CNN元架構中向 ROI heads 新增新的能力,你能實現一個新的 ROI Heads 並把它放進 ROI_HEADS_REGISTRY 。DensePose 和 MeshRCNN是兩個例子,這兩個例子實現了新的 ROIHeads 去完成新的任務。projects包含了更多例子,例子實現了不同的架構。
在API文件中可以找到登錄檔的完整列表。您可以在這些註冊中心中註冊元件,以定製模型的不同部分或整個模型。
用明確的引數構建模型
登錄檔是連線配置檔案中的名稱到實際程式碼的橋樑。它們旨在涵蓋使用者經常需要替換的幾個主要元件,但是,基於文字的配置檔案的功能有時是有限的,一些更深層次的定製可能只能通過編寫程式碼來實現。
detectron2中的大多數模型元件都有一個清晰的剩餘 init 介面,用來記錄它需要的輸入引數。使用自定義引數呼叫它們將為您提供模型的自定義變體。
舉個例子,在一個更快的 R-CNN 的 box head 中使用自定義損失函式,我們可以做到以下幾點:
- Losses 當前在 FastRCNNOutputLayers我們需要實現它的一個變體或子類,使用自定義損失函式,名為 MyRCNNOutput。
- 用 box_predictor=MyRCNNOutput() 呼叫 StandardROIHeads 而不是內建的 FastRCNNOutputLayers 。如果所有其他引數應該保持不變,這能通過使用 可配置的( init)獲得:
roi_heads = StandardROIHeads(
cfg, backbone.output_shape(),
box_predictor=MyRCNNOutput(...)
)
- (可選)如果我們想從配置檔案中啟用這個新模型,需要註冊:
@ROI_HEADS_REGISTRY.register()
class MyStandardROIHeads(StandardROIHeads):
def __init__(self, cfg, input_shape):
super().__init__(cfg, input_shape,
box_predictor=MyRCNNOutput(...))
相關文章
- HTTPie 官方文件中文翻譯版HTTP
- Matlab最新的官方文件中文翻譯Matlab
- kotlinx協程官方文件中文翻譯版本Kotlin
- Moya官方文件翻譯
- docker官方文件翻譯3Docker
- docker官方文件翻譯4Docker
- rabbitmq 官方文件翻譯-2MQ
- docker官方文件翻譯5Docker
- docker官方文件翻譯2Docker
- docker官方文件翻譯1Docker
- Core Foundation 官方文件翻譯
- logback官方文件中文翻譯第七章:FiltersFilter
- Dapr 官方文件中文翻譯 v1.5 版本正式釋出
- BBNorm官方指導文件翻譯ORM
- [翻譯]ElasticSearch官方文件-簡介Elasticsearch
- Redis-py官方文件翻譯Redis
- Akka官方文件翻譯:Cluster Specification
- ReactiveCocoa 4 官方文件翻譯React
- SnapKit 中文文件翻譯APK
- Laravel Baum 巢狀集合模型中文文件翻譯-部分Laravel巢狀模型
- Python heapq模組官方文件翻譯Python
- Gin 框架中文文件(翻譯)框架
- ExoPlayer的使用與解析(官方文件翻譯)
- [翻譯]ElasticSearch官方文件-資料的修改Elasticsearch
- [翻譯]ElasticSearch官方文件-查詢語言Elasticsearch
- 【Tomcat 6.0官方文件翻譯】—— 簡介Tomcat
- 怎麼把Excel文件翻譯成中文?Excel文件翻譯方法介紹Excel
- Laravel view models [翻譯]LaravelView
- SQLAlchemy 2.0 中文文件翻譯完成SQL
- 歡迎參與 KubeVela 官方文件翻譯活動
- Kotlin 官方參考文件翻譯完畢Kotlin
- WebSocket 協議 RFC 文件(全中文翻譯)Web協議
- 【翻譯】fancyBox3 中文文件
- 文件翻譯軟體怎麼用?怎麼把Excel文件翻譯成中文版Excel
- voltDB官方文件第三章翻譯
- PendingIntent 是個啥?官方文件描述的很到位。我給翻譯翻譯Intent
- 不錯的Oracle文件中文翻譯網站Oracle網站
- PDF英語文件怎麼翻譯成中文?