PyTorch專欄(八):微調基於torchvision 0.3的目標檢測模型

2021-02-19 磐創AI

作者 | News

編輯 | 安可

出品 | 磐創AI團隊出品

【磐創AI 導讀】:本篇文章講解了PyTorch專欄的第四章中的微調基於torchvision 0.3的目標檢測模型。查看專欄歷史文章,請點擊下方藍色字體進入相應連結閱讀。查看關於本專欄的介紹:PyTorch專欄開篇。想要更多電子雜誌的機器學習,深度學習資源,大家歡迎點擊上方藍字關注我們的公眾號:磐創AI。

微調基於torchvision 0.3的目標檢測模型使用Sequence2Sequence網絡和注意力進行翻譯在這篇文章中,我們將微調在 Penn-Fudan 資料庫中對行人檢測和分割的已預先訓練的 Mask R-CNN 模型。它包含170個圖像和345個行人實例,我們 將用它來說明如何在 torchvision 中使用新功能,以便在自定義數據集上訓練實例分割模型。1.定義數據集對於訓練對象檢測的引用腳本,實例分割和人員關鍵點檢測要求能夠輕鬆支持添加新的自定義數據。數據集應該從標準的類torch.utils.data.Dataset 繼承而來,並實現_len和_getitem_我們要求的唯一特性是數據集的__getitem__應該返回:* 圖像:PIL圖像大小(H,W) * 目標:包含以下欄位的字典
<1> boxes(FloatTensor[N,4]):N邊框(bounding boxes)坐標的格式[x0,x1,y0,y1],取值範圍是0到W,0到H。
<2> labels(Int64Tensor[N]):每個邊框的標籤。
<3> image_id(Int64Tensor[1]):圖像識別器,它應該在數據集中的所有圖像中是唯一的,並在評估期間使用。
<4> area(Tensor[N]):邊框的面積,在使用COCO指標進行評估時使用此項來分隔小、中和大框之間的度量標準得分。
<5> iscrowed(UInt8Tensor[N,H,W]):在評估期間屬性設置為iscrowed=True的實例會被忽略。
<6> (可選)masks(UInt8Tesor[N,H,W]):每個對象的分段掩碼。
<7> (可選)keypoints (FloatTensor[N, K, 3]:對於N個對象中的每一個,它包含[x,y,visibility]格式的K個關鍵點,用 於定義對象。visibility = 0表示關鍵點不可見。請注意,對於數據擴充,翻轉關鍵點的概念取決於數據表示,您應該調整 reference/detection/transforms.py 以用於新的關鍵點表示。
如果你的模型返回上述方法,它們將使其適用於培訓和評估,並將使用 pycocotools 的評估腳本。此外,如果要在訓練期間使用寬高比分組(以便每個批次僅包含具有相似寬高比的圖像),則建議還實現get_height_and_width方法, 該方法返回圖像的高度和寬度。如果未提供此方法,我們將通過__getitem__查詢數據集的所有元素,這會將圖像加載到內存中,但比提供自定義方法時要慢。2.為 PennFudan 編寫自定義數據集2.1 下載數據集

PennFudanPed/
PedMasks/
FudanPed00001_mask.png
FudanPed00002_mask.png
FudanPed00003_mask.png
FudanPed00004_mask.png
...
PNGImages/
FudanPed00001.png
FudanPed00002.png
FudanPed00003.png
FudanPed00004.png


下面是一個圖像以及其分割掩膜的例子:  因此每個圖像具有相應的分割掩膜,其中每個顏色對應於不同的實例。讓我們為這個數據集寫一個torch.utils.data.Dataset類。2.2 為數據集編寫類

import os
import numpy as np
import torch
from PIL import Image


class PennFudanDataset(object):
    def __init__(self, root, transforms):
        self.root = root
        self.transforms = transforms
        
        
        self.imgs = list(sorted(os.listdir(os.path.join(root, "PNGImages"))))
        self.masks = list(sorted(os.listdir(os.path.join(root, "PedMasks"))))

    def __getitem__(self, idx):
        
        img_path = os.path.join(self.root, "PNGImages", self.imgs[idx])
        mask_path = os.path.join(self.root, "PedMasks", self.masks[idx])
        img = Image.open(img_path).convert("RGB")
        
        
        
        mask = Image.open(mask_path)
        
        mask = np.array(mask)
        
        obj_ids = np.unique(mask)
        
        obj_ids = obj_ids[1:]

        
        
        masks = mask == obj_ids[:, None, None]

        
        num_objs = len(obj_ids)
        boxes = []
        for i in range(num_objs):
            pos = np.where(masks[i])
            xmin = np.min(pos[1])
            xmax = np.max(pos[1])
            ymin = np.min(pos[0])
            ymax = np.max(pos[0])
            boxes.append([xmin, ymin, xmax, ymax])

        
        boxes = torch.as_tensor(boxes, dtype=torch.float32)
        
        labels = torch.ones((num_objs,), dtype=torch.int64)
        masks = torch.as_tensor(masks, dtype=torch.uint8)

        image_id = torch.tensor([idx])
        area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])
        
        iscrowd = torch.zeros((num_objs,), dtype=torch.int64)

        target = {}
        target["boxes"] = boxes
        target["labels"] = labels
        target["masks"] = masks
        target["image_id"] = image_id
        target["area"] = area
        target["iscrowd"] = iscrowd

        if self.transforms is not None:
            img, target = self.transforms(img, target)

        return img, target

    def __len__(self):
        return len(self.imgs)

3.定義模型現在我們需要定義一個可以上述數據集執行預測的模型。在本教程中,我們將使用 Mask R-CNN, 它基於 Faster R-CNN。Faster R-CNN 是一種模型,可以預測圖像中潛在對象的邊界框和類別得分。 Mask R-CNN 在 Faster R-CNN 中添加了一個額外的分支,它還預測每個實例的分割蒙版。有兩種常見情況可能需要修改torchvision modelzoo中的一個可用模型。第一個是我們想要從預先訓練的模型開始,然後微調最後一層。另一種是當我們想要用不同的模型替換模型的主幹時(例如,用於更快的預測)。
3.1 PennFudan 數據集的實例分割模型在我們的例子中,我們希望從預先訓練的模型中進行微調,因為我們的數據集非常小,所以我們將遵循上述第一種情況。這裡我們還要計算實例分割掩膜,因此我們將使用 Mask R-CNN:

import torchvision
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.models.detection.mask_rcnn import MaskRCNNPredictor


def get_model_instance_segmentation(num_classes):
    
    model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)

    
    in_features = model.roi_heads.box_predictor.cls_score.in_features
    
    model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)

    
    in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels
    hidden_layer = 256
    
    model.roi_heads.mask_predictor = MaskRCNNPredictor(in_features_mask,
                                                       hidden_layer,
                                                       num_classes)

    return model

就是這樣,這將使模型準備好在您的自定義數據集上進行訓練和評估。
4.整合在references/detection/中,我們有許多輔助函數來簡化訓練和評估檢測模型。在這裡,我們將使用 references/detection/engine.py,references/detection/utils.py和references/detection/transforms.py。只需將它們複製到您的文件夾並在此處使用它們。4.1 為數據擴充/轉換編寫輔助函數:

import transforms as T

def get_transform(train):
    transforms = []
    transforms.append(T.ToTensor())
    if train:
        transforms.append(T.RandomHorizontalFlip(0.5))
    return T.Compose(transforms)


4.2 編寫執行訓練和驗證的主要功能

from engine import train_one_epoch, evaluate
import utils


def main():
    
    device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')

    
    num_classes = 2
    
    dataset = PennFudanDataset('PennFudanPed', get_transform(train=True))
    dataset_test = PennFudanDataset('PennFudanPed', get_transform(train=False))

    
    indices = torch.randperm(len(dataset)).tolist()
    dataset = torch.utils.data.Subset(dataset, indices[:-50])
    dataset_test = torch.utils.data.Subset(dataset_test, indices[-50:])

    
    data_loader = torch.utils.data.DataLoader(
        dataset, batch_size=2, shuffle=True, num_workers=4,
        collate_fn=utils.collate_fn)

    data_loader_test = torch.utils.data.DataLoader(
        dataset_test, batch_size=1, shuffle=False, num_workers=4,
        collate_fn=utils.collate_fn)

    
    model = get_model_instance_segmentation(num_classes)

    
    model.to(device)

    
    params = [p for p in model.parameters() if p.requires_grad]
    optimizer = torch.optim.SGD(params, lr=0.005,
                                momentum=0.9, weight_decay=0.0005)
    
    lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer,
                                                   step_size=3,
                                                   gamma=0.1)

    
    num_epochs = 10

    for epoch in range(num_epochs):
        
        train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
        
        lr_scheduler.step()
        
        evaluate(model, data_loader_test, device=device)

    print("That's it!")


Epoch: [0] [ 0/60] eta: 0:01:18 lr: 0.000090 loss: 2.5213 (2.5213) loss_classifier: 0.8025 (0.8025) loss_box_reg: 0.2634 (0.2634) loss_mask: 1.4265 (1.4265) loss_objectness: 0.0190 (0.0190) loss_rpn_box_reg: 0.0099 (0.0099) time: 1.3121 data: 0.3024 max mem: 3485
Epoch: [0] [10/60] eta: 0:00:20 lr: 0.000936 loss: 1.3007 (1.5313) loss_classifier: 0.3979 (0.4719) loss_box_reg: 0.2454 (0.2272) loss_mask: 0.6089 (0.7953) loss_objectness: 0.0197 (0.0228) loss_rpn_box_reg: 0.0121 (0.0141) time: 0.4198 data: 0.0298 max mem: 5081
Epoch: [0] [20/60] eta: 0:00:15 lr: 0.001783 loss: 0.7567 (1.1056) loss_classifier: 0.2221 (0.3319) loss_box_reg: 0.2002 (0.2106) loss_mask: 0.2904 (0.5332) loss_objectness: 0.0146 (0.0176) loss_rpn_box_reg: 0.0094 (0.0123) time: 0.3293 data: 0.0035 max mem: 5081
Epoch: [0] [30/60] eta: 0:00:11 lr: 0.002629 loss: 0.4705 (0.8935) loss_classifier: 0.0991 (0.2517) loss_box_reg: 0.1578 (0.1957) loss_mask: 0.1970 (0.4204) loss_objectness: 0.0061 (0.0140) loss_rpn_box_reg: 0.0075 (0.0118) time: 0.3403 data: 0.0044 max mem: 5081
Epoch: [0] [40/60] eta: 0:00:07 lr: 0.003476 loss: 0.3901 (0.7568) loss_classifier: 0.0648 (0.2022) loss_box_reg: 0.1207 (0.1736) loss_mask: 0.1705 (0.3585) loss_objectness: 0.0018 (0.0113) loss_rpn_box_reg: 0.0075 (0.0112) time: 0.3407 data: 0.0044 max mem: 5081
Epoch: [0] [50/60] eta: 0:00:03 lr: 0.004323 loss: 0.3237 (0.6703) loss_classifier: 0.0474 (0.1731) loss_box_reg: 0.1109 (0.1561) loss_mask: 0.1658 (0.3201) loss_objectness: 0.0015 (0.0093) loss_rpn_box_reg: 0.0093 (0.0116) time: 0.3379 data: 0.0043 max mem: 5081
Epoch: [0] [59/60] eta: 0:00:00 lr: 0.005000 loss: 0.2540 (0.6082) loss_classifier: 0.0309 (0.1526) loss_box_reg: 0.0463 (0.1405) loss_mask: 0.1568 (0.2945) loss_objectness: 0.0012 (0.0083) loss_rpn_box_reg: 0.0093 (0.0123) time: 0.3489 data: 0.0042 max mem: 5081
Epoch: [0] Total time: 0:00:21 (0.3570 s / it)
creating index...
index created!
Test: [ 0/50] eta: 0:00:19 model_time: 0.2152 (0.2152) evaluator_time: 0.0133 (0.0133) time: 0.4000 data: 0.1701 max mem: 5081
Test: [49/50] eta: 0:00:00 model_time: 0.0628 (0.0687) evaluator_time: 0.0039 (0.0064) time: 0.0735 data: 0.0022 max mem: 5081
Test: Total time: 0:00:04 (0.0828 s / it)
Averaged stats: model_time: 0.0628 (0.0687) evaluator_time: 0.0039 (0.0064)
Accumulating evaluation results...
DONE (t=0.01s).
Accumulating evaluation results...
DONE (t=0.01s).
IoU metric: bbox
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.606
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.984
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.780
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.313
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.582
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.612
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.270
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.672
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.672
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.650
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.755
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.664
IoU metric: segm
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.704
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.979
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.871
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.325
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.488
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.727
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.316
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.748
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.749
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.650
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.673
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.758

因此,在一個epoch訓練之後,我們獲得了COCO-style mAP為60.6,並且mask mAP為70.4。

IoU metric: bbox
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.799
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.969
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.935
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.349
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.592
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.831
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.324
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.844
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.844
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.400
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.777
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.870
IoU metric: segm
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.761
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.969
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.919
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.341
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.464
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.788
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.303
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.799
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.799
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.400
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.769
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.818


但預測結果如何呢?讓我們在數據集中拍攝一張圖像並進行驗證。 訓練的模型預測了此圖像中的9個人物,讓我們看看其中的幾個,由下圖可以看到預測效果很好。 5.總結在本教程中,您學習了如何在自定義數據集上為實例分段模型創建自己的訓練管道。為此,您編寫了一個torch.utils.data.Dataset類, 它返回圖像以及地面實況框和分割掩碼。您還利用了在COCO train2017上預訓練的Mask R-CNN模型,以便對此新數據集執行傳輸學習。有關包含multi-machine / multi-gpu training的更完整示例,請檢查 torchvision 存儲庫中的references/detection/train.py。 下方點擊 |   | 了解更多

相關焦點

  • 視覺工具包torchvision重大更新:支持分割模型、檢測模型
    慄子 發自 凹非寺量子位 出品 | 公眾號 QbitAIPyTorch宣布了視覺工具包torchvision的重大更新。終於來到torchvision 0.3了。至於這些算子怎麼用,官方給出了一些例子:哪些模型是新來的?既然,目標檢測、實例分割,以及人物關鍵點檢測模型的支持,全部是最新加入的。
  • 【小白學PyTorch】5.torchvision預訓練模型與數據集全覽
    文章目錄:1 torchvision.datssets2 torchvision.models模型比較本文建議複製代碼去跑跑看,增加一下手感。如果有些數據需要科學上網,公眾號回復【torchvision】獲取代碼和數據。
  • 小白學PyTorch | 5 torchvision預訓練模型與數據集全覽
    文章目錄:1 torchvision.datssets2 torchvision.models模型比較本文建議複製代碼去跑跑看,增加一下手感。公眾號回復【torchvision】獲取代碼和數據。翻譯過來就是:torchvision包由流行的數據集、模型體系結構和通用的計算機視覺圖像轉換組成。
  • 福利,PyTorch中文版官方教程來了
    教程作者來自 pytorchchina.com。教程網站:http://pytorch123.com教程裡有什麼教程根據 PyTorch 官方版本目錄,完整地還原了所有的內容。教程的一部分內容,使用 torch.view 改變 tensor 的大小或形狀用教程設計一個聊天機器人,以上為部分對話。
  • PyTorch專欄(十二):一文綜述圖像對抗算法
    查看關於本專欄的介紹:PyTorch專欄開篇。想要更多電子雜誌的機器學習,深度學習資源,大家歡迎點擊上方藍字關注我們的公眾號:磐創AI。微調基於torchvision 0.3的目標檢測模型使用Sequence2Sequence網絡和注意力進行翻譯本教程將提高您對ML(機器學習)模型的安全漏洞的認識,並將深入了解對抗性機器學習的熱門話題。
  • PyTorch 中文教程最新版
    官方教程包含了 PyTorch 介紹,安裝教程;60 分鐘快速入門教程,可以迅速從小白階段完成一個分類器模型;計算機視覺常用模型,方便基於自己的數據進行調整,不再需要從頭開始寫;自然語言處理模型,聊天機器人,文本生成等生動有趣的項目。總而言之:如果你想了解一下 PyTorch,可以看介紹部分。
  • [Pytorch]教程-使用 torchvision 進行語義分割
    語義分割的應用3. 使用 torchvision 進行語義分割4. FCN vs DeepLabv3 模型比較1. 什麼是語義分割?語義分割是一種圖像分析過程中要用到的技術,我們通過該技術將圖像中的每個像素歸為哪一類。
  • TorchVision官方文檔翻譯為中文-示例庫可視化實用程序-004
    在這裡插入圖片描述當然,我們也可以繪製由torchvision檢測模型生成的邊界框。下面是從fasterrcnn_resnet50_fpn()模型加載的更快的R-CNN模型的演示。您還可以嘗試使用DeepLabv3(DeepLabv3_resnet50())或lraspp mobilenet模型(lraspp_mobilenet_v3_large())。讓我們先看看模型的輸出。請記住,一般來說,圖像在傳遞到語義分割模型之前必須進行規範化。
  • onnx實現對pytorch模型推理加速
    3.torch.nn.Module.load_state_dict:使用反序列化狀態字典加載model's參數字典保存加載模型2種方式,在保存模型進行推理時,只需要保存訓練過的模型的學習參數即可,一個常見的PyTorch約定是使用.pt或.pth文件擴展名保存模型。
  • python深度學習目標檢測自學全框架!
    完成後,推薦再花3天時間二刷。 目標檢測培訓嗶哩嗶哩上有很多目標檢測的入門培訓視頻。我更喜歡百度提供的目標檢測培訓視頻,非常系統地講解了目標檢測的所有主流算法。學習目標:理解單、雙階段目標檢測的原理,明白主流算法的種類。
  • PyTorch模型訓練特徵圖可視化(TensorboardX)
    0、前言本文所有代碼解讀均基於PyTorch 1.0,Python3;本文為原創文章,初次完成於2019.03,最後更新於2019.09;最近復現的一篇論文一直都難以work,上了特徵圖可視化後一下子就找到了問題所在,所以今天想梳理一下PyTorch裡面的特徵圖可視化。
  • PyTorch 源碼解讀之 torch.autograd
    torch.autograd.function (函數的反向傳播)torch.autograd.functional (計算圖的反向傳播)torch.autograd.gradcheck (數值梯度檢查)torch.autograd.anomaly_mode (在自動求導時檢測錯誤產生路徑)torch.autograd.grad_mode (設置是否需要梯度)model.eval() 與 torch.no_grad
  • 一行代碼即可調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性
    model = torch.hub.load('pytorch/vision', 'deeplabv3_resnet101', pretrained=True)在此之外,我們還需要了解一些其它的相對比較複雜的事情,包括探索已加載的模型、復現別人成果的工作流,以及如何快速發布自己的模型。
  • PyTorch 中Datasets And DataLoaders的使用 | PyTorch系列(十二)
    可以這樣做:注意,torchvision API從版本0.2.1開始進行了更改。參見GitHub上的發布說明。> https://github.com/pytorch/vision/releases/tag/v0.2.2# Before torchvision 0.2.2> train_set.train_labelstensor([9, 0, 0, ..., 3, 0, 5])
  • Transformers2.0讓你三行代碼調用語言模型,兼容TF2.0和PyTorch
    近日 HuggingFace 公司開源了最新的 Transformer2.0 模型庫,用戶可非常方便地調用現在非常流行的 8 種語言模型進行微調和應用,且同時兼容 TensorFlow2.0 和 PyTorch 兩大框架,非常方便快捷。
  • 使用Detectron2分6步進行目標檢測
    然而,重要的是我們需要從頭開始構建一個模型,以理解其背後的數學原理。如果我們想使用自定義數據集快速訓練對象檢測模型,Detectron 2就可以提供幫助。Detectron 2庫的模型庫中存在的所有模型都在COCO Dataset上進行了預訓練。我們只需要在預先訓練的模型上微調我們的自定義數據集。
  • 新版PyTorch 1.2 已發布:功能更多、兼容更全、操作更快!
    ,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。(https://pytorch.org/docs/stable/jit.html)而現在,我們很高興地宣布我們已經成功開發了四個新版本,包括 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。
  • 教你使用torchlayers 來構建PyTorch 模型(附連結)
    torchlayers(見下面連結) 旨在為PyTorch做Keras給TensorFlow所做的事情。這個項目的開發者簡潔地定義了它:torchlayers是一個基於PyTorch的庫,提供了torch.nn層的形狀和維度的自動推斷以及當前最好的網絡結構(例如Efficient-Net)中的構建塊。
  • 新版 PyTorch 1.2 已發布:功能更多、兼容更全、操作更快!
    雷鋒網 AI 開發者按:近日,PyTorch 社區又添入了「新」工具,包括了更新後的 PyTorch 1.2,torchvision 0.4,torchaudio 0.3 和 torchtext 0.4。每項工具都進行了新的優化與改進,兼容性更強,使用起來也更加便捷。
  • 【乾貨】史上最全的PyTorch學習資源匯總
    這個庫是在PyTorch中實現的Seq2seq模型的框架,該框架為Seq2seq模型的訓練和預測等都提供了模塊化和可擴展的組件,此github項目是一個基礎版本,目標是促進這些技術和應用程式的開發。CV&PyTorch實戰    · pytorch vision(https://github.com/pytorch/vision):Torchvision是獨立於pytorch的關於圖像操作的一些方便工具庫。