13 計算機視覺-代碼詳解

13.2 微調

為了防止在訓練集上過擬合,有兩種辦法,第一種是擴大訓練集數量,但是需要大量的成本;第二種就是應用遷移學習,將源數據學習到的知識遷移到目標數據集,即在把在源數據訓練好的參數和模型(除去輸出層)直接復制到目標數據集訓練。

# IPython魔法函數,可以不用執行plt .show()
%matplotlib inline
import os
import torch
import torchvision
from torch import nn
from d2l import torch as d2l

13.2.1 獲取數據集

#@save
d2l.DATA_HUB['hotdog'] = (d2l.DATA_URL + 'hotdog.zip','fba480ffa8aa7e0febbb511d181409f899b9baa5')data_dir = d2l.download_extract('hotdog')
train_imgs = torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train'))
test_imgs = torchvision.datasets.ImageFolder(os.path.join(data_dir, 'test'))
hotdogs = [train_imgs[i][0] for i in range(8)]
not_hotdogs = [train_imgs[-i-1][0] for i in range(8)]
# 展示2行8列矩陣的圖片,共16張
d2l.show_images(hotdogs+not_hotdogs,2,8,scale=1.5)
# 使用RGB通道的均值和標準差,以標準化每個通道
normalize = torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
# 圖像增廣
train_augs = torchvision.transforms.Compose([torchvision.transforms.RandomResizedCrop(224),torchvision.transforms.RandomHorizontalFlip(),torchvision.transforms.ToTensor(),normalize])
test_augs = torchvision.transforms.Compose([torchvision.transforms.Resize([256, 256]),torchvision.transforms.CenterCrop(224),torchvision.transforms.ToTensor(),normalize])

?13.2.2 初始化模型

# 自動下載網上的訓練模型
finetune_net = torchvision.models.resnet18(pretrained=True)
# 輸入張量的形狀還是源輸入張量大小,輸入張量大小改為2
finetune_net.fc = nn.Linear(finetune_net.fc.in_features, 2)
nn.init.xavier_uniform_(finetune_net.fc.weight);

13.2.3?微調模型

# 如果param_group=True,輸出層中的模型參數將使用十倍的學習率
# 如果param_group=False,輸出層中模型參數為隨機值
# 訓練模型
def train_fine_tuning(net, learning_rate, batch_size=128, num_epochs=5,param_group=True):train_iter = torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train'), transform=train_augs),batch_size=batch_size, shuffle=True)test_iter = torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(os.path.join(data_dir, 'test'), transform=test_augs),batch_size=batch_size)devices = d2l.try_all_gpus()loss = nn.CrossEntropyLoss(reduction="none")if param_group:params_1x = [param for name, param in net.named_parameters()if name not in ["fc.weight", "fc.bias"]]# params_1x的參數使用learning_rate學習率, net.fc.parameters()的參數使用0.001的學習率trainer = torch.optim.SGD([{'params': params_1x},{'params': net.fc.parameters(),'lr': learning_rate * 10}],lr=learning_rate, weight_decay=0.001)else:trainer = torch.optim.SGD(net.parameters(), lr=learning_rate,weight_decay=0.001)d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,devices)
train_fine_tuning(finetune_net, 5e-5)

13.3 目標檢測和邊界框

有時候不僅要識別圖像的類別,還需要識別圖像的位置。在計算機視覺中叫做目標識別或者目標檢測。這小節是介紹目標檢測的深度學習方法。

%matplotlib inline
import torch
from d2l import torch as d2l
#@save
def box_corner_to_center(boxes):"""從(左上,右下)轉換到(中間,寬度,高度)"""x1, y1, x2, y2 = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]# cx,xy,w,h的維度是ncx = (x1 + x2) / 2cy = (y1 + y2) / 2w = x2 - x1h = y2 - y1# torch.stack()沿著新維度對張量進行鏈接。boxes最開始維度是(n,4),axis=-1表示倒數第一個維度# torch.stack()將(cx, cy, w, h)的維度n將其沿著倒數第一個維度拼接在一起,又是(n,4)boxes = torch.stack((cx, cy, w, h), axis=-1)return boxes#@save
def box_center_to_corner(boxes):"""從(中間,寬度,高度)轉換到(左上,右下)"""cx, cy, w, h = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]x1 = cx - 0.5 * wy1 = cy - 0.5 * hx2 = cx + 0.5 * wy2 = cy + 0.5 * hboxes = torch.stack((x1, y1, x2, y2), axis=-1)return boxes

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37861.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺談現代醫院手術室IT供配電系統的設計與研究

安科瑞 華楠 [摘要] 隨著人們的生活水平的不斷提高,醫療條件的不斷改善,人們對健康越來越重視同時對醫療條件的要求也越來越高,對醫院手術室醫療設施提出了新的要求。以往醫院普通手術室狀況已不能滿足人們的要求&…

GPT的第一個創作

嗨,大家好,我是賴興泳!今天,我要和大家聊一聊前端開發,就像我用音符創造音樂一樣,前端開發也是創造美麗的用戶界面的過程。 前端開發是構建網站和應用程序用戶界面的關鍵部分。就像音樂家需要精心編排音符…

騰訊云CVM服務器端口在安全組中打開!

騰訊云服務器CVM端口怎么開通?騰訊云服務器端口是通過配置安全組規則來開通的,騰訊云服務器網以開通80端口為例來詳細說下騰訊云輕量應用服務器開啟端口的方法,其他的端口的開通如8080、1433、443、3306、8888等端口也適用于此方法&#xff0…

基于Yolov5與LabelMe訓練自己數據的圖像分割完整流程

基于Yolov5與LabelMe訓練自己數據的實例分割完整流程 1. Yolov5配置2. 創建labelme虛擬環境4. 接下來開始使用labelme繪制分割數據集4.1 json to txt4.2 劃分數據集(可分可不分) 5. 訓練 1. Yolov5配置 參照這邊文章: https://blog.csdn.net/ruotianxia/article/de…

okcc對接ASR平臺,okcc客戶投訴的安全問題

客戶投訴: 客戶為什么要投訴?實際上分為兩種情況,一是客戶被冒犯到不能容忍導致的投訴,二是惡意投訴。降低客戶被冒犯投訴的概率,無非就是選擇客戶、規范用語、降低頻度;減少惡意投訴,回避是實踐證明最有效…

前端= 結構(HTML)+ 樣式(CSS)+ 行為(JavaScript)

前端開發確實涵蓋了行為(JavaScript)、樣式(CSS)和結構(HTML)這三個主要方面。這三個方面在前端開發中密切協作,共同構建用戶界面和用戶體驗。 結構(Structure)&#xff…

java # Servlet

一、什么是Servlet? Servlet是javaEE規范之一。規范就是接口。JavaWeb三大組件分別是:Servlet程序、Filter過濾器、Listener監聽器。Servlet是運行在服務器上的一個Java小程序,它可以接收客戶端發送來的請求,并響應數據給客戶端。…

Django筆記之中間件介紹

這一節介紹一下 Django 的中間件。 關于中間件,官方文檔的解釋為:中間件是一個嵌入 Django 系統的 request 和 response 的鉤子框架,是一個能夠全局改變 Django 輸入/輸出的系統。 我們可以這樣理解,一個 request 請求發送到 Dj…

《C語言深度解剖》.pdf

🐇 🔥博客主頁: 云曦 📋系列專欄:深入理解C語言 💨吾生也有涯,而知也無涯 💛 感謝大家👍點贊 😋關注📝評論 C語言深度解剖.pdf 提取碼:yunx

KCC@深圳開源讀書會即將舉辦,來與行業大咖面對面交流

KCC,全稱 KAIYUANSHE City Community(中文:開源社城市社區)是由開源社發起,旨在讓開源社區在每個城市落地生根的地域性開源組織。 自2023年2月份發起以來,我們已經在南京、上海、深圳、北京、硅谷、新加坡、…

iTOP-3568開發板使用OpenCV處理圖像-顏色轉換

本小節代碼在配套資料“iTOP-3568 開發板\03_【iTOP-RK3568 開發板】指南教程 \04_OpenCV 開發配套資料\05”目錄下,如下圖所示: cv2.cvtColor()函數功能: 將一幅圖像從一個色彩空間轉換到另一個色彩空間。 函數原型: cv2.cvt…

日常BUG—— maven編譯報錯

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 一個maven項目在由于在代碼中書寫了如下代碼&#xff1a; public static ConcurrentMap<…

DatenLord X Segmentfault直播預告 l CURP協議的工業化實踐

CURP協議 傳統單數據中心解決方案無法滿足跨數據中心的場景對性能和一致性的需求。DatenLord推出開源的分布式KV存儲Xline&#xff0c;針對多數據中心場景&#xff0c;實現數據的高性能跨云、跨數據中心共享訪問&#xff0c;并且保證數據的一致性&#xff0c;方便業務系統實現…

Nginx之lnmp架構

目錄 一.什么是LNMP二.LNMP環境搭建1.Nginx的搭建2.安裝php3.安裝數據庫4.測試Nginx與PHP的連接5.測試PHP連接數據庫 一.什么是LNMP LNMP是一套技術的組合&#xff0c;Llinux&#xff0c;Nnginx&#xff0c;Mmysql&#xff0c;Pphp 首先Nginx服務是不能處理動態資源請求&…

Android app專項測試之耗電量測試

前言 耗電量指標 待機時間成關注目標 提升用戶體驗 通過不同的測試場景&#xff0c;找出app高耗電的場景并解決 01、需要的環境準備 1、python2.7(必須是2.7&#xff0c;3.X版本是不支持的) 2、golang語言的開發環境 3、Android SDK 此三個的環境搭建這里就不詳細說了&am…

如何使用CSS實現一個純CSS的滾動條樣式?

聚沙成塔每天進步一點點 ? 專欄簡介? 使用CSS實現自定義滾動條樣式? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&#xff01;這個專欄是為那些對Web開發感興趣…

【數理知識】三維空間旋轉矩陣的歐拉角表示法,四元數表示法,兩者之間的轉換,Matlab 代碼實現

序號內容1【數理知識】自由度 degree of freedom 及自由度的計算方法2【數理知識】剛體 rigid body 及剛體的運動3【數理知識】剛體基本運動&#xff0c;平動&#xff0c;轉動4【數理知識】向量數乘&#xff0c;內積&#xff0c;外積&#xff0c;matlab代碼實現5【數理知識】最…

用Node.js吭哧吭哧擼一個運動主頁

簡單嘮嘮 某乎問題&#xff1a;人這一生&#xff0c;應該養成哪些好習慣&#xff1f; 問題鏈接&#xff1a;https://www.zhihu.com/question/460674063 如果我來回答肯定會有定期運動的字眼。 平日里也有煅練的習慣&#xff0c;時間久了后一直想把運動數據公開&#xff0c;…

火山引擎DataLeap的Data Catalog系統公有云實踐

更多技術交流、求職機會&#xff0c;歡迎關注字節跳動數據平臺微信公眾號&#xff0c;回復【1】進入官方交流群 Data Catalog是一種元數據管理的服務&#xff0c;會收集技術元數據&#xff0c;并在其基礎上提供更豐富的業務上下文與語義&#xff0c;通常支持元數據編目、查找、…

自然數的拆分問題

題目描述 任何一個大于 11 的自然數 n&#xff0c;總可以拆分成若干個小于 n 的自然數之和。現在給你一個自n&#xff0c;要求你求出 n 的拆分成一些數字的和。每個拆分后的序列中的數字從小到大排序。然后你需要輸出這些序列&#xff0c;其中字典序小的序列需要優先輸出。 輸…