当前位置: 首页>Python>正文

深度卷積神經網絡原理與實踐,卷積神經網絡resent網絡實踐

深度卷積神經網絡原理與實踐,卷積神經網絡resent網絡實踐

文章目錄

    • 前言
    • 一、技術介紹
    • 二、實現途徑
    • 三、總結

前言

上篇文章,講了經典卷積神經網絡-resnet,這篇文章通過resnet網絡,做一些具體的事情。

一、技術介紹

深度卷積神經網絡原理與實踐?總的來說,第一步首先要加載數據集,對數據進行一些處理,第二步,調整學習率一些參數,訓練好resnet網絡模型,第三步輸入圖片或者視頻通過訓練好的模型,得到結果。

二、實現途徑

1.加載數據集,對數據進行處理,加載的圖片是(N,C,H,W )對圖片進行處理成(C,H,W),通過圖片名稱獲取標簽,進行分類。
在這里插入圖片描述

train_paper=r'E:\桌面\資料\cv3\數據集\罰拳_公開\train\paper'
train_rock=r'E:\桌面\資料\cv3\數據集\罰拳_公開\train\rock'
train_scissors=r'E:\桌面\資料\cv3\數據集\罰拳_公開\train\scissors'test_paper=r'E:\桌面\資料\cv3\數據集\罰拳_公開\test\paper'
test_rock=r'E:\桌面\資料\cv3\數據集\罰拳_公開\test\rock'
test_scission=r'E:\桌面\資料\cv3\數據集\罰拳_公開\test\scissors'
Batch_files=10transs=trans.Compose([trans.ToTensor(),trans.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
])
def read_img(batch_files):images=[]labels=[]for file in batch_files:image=Image.open(file)image=image.convert('RGB')image=image.resize((64,64))tensor=transs(image)images.append(tensor)if 'rock' in file :labels.append(torch.tensor(0,dtype=torch.int64))if 'paper' in file:labels.append(torch.tensor(1,dtype=torch.int64))if 'scissors' in file:labels.append(torch.tensor(2,dtype=torch.int64))return images,labels
if __name__ == '__main__':

2.寫入resnet模型:
這里用的是resnet18

class tiao(nn.Module):def __init__(self,shuru,shuchu):super(tiao, self).__init__()self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuchu,kernel_size=(3,3),padding=(1,1))self.bath=nn.BatchNorm2d(shuchu)self.relu=nn.ReLU()def forward(self,x):x1=self.conv1(x)x2=self.bath(x1)x3=self.relu(x2)x4=self.conv1(x3)x5=self.bath(x4)x6=self.relu(x5)x7=x6+xreturn x7class tiao2(nn.Module):def __init__(self,shuru):super(tiao2, self).__init__()self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuru*2,kernel_size=(3,3),stride=(2,2),padding=(1,1))self.conv11=nn.Conv2d(in_channels=shuru,out_channels=shuru*2,kernel_size=(1,1),stride=(2,2))self.batch=nn.BatchNorm2d(shuru*2)self.relu=nn.ReLU()self.conv2=nn.Conv2d(in_channels=shuru*2,out_channels=shuru*2,kernel_size=(3,3),stride=(1,1),padding=(1,1))def forward(self,x):x1=self.conv1(x)x2=self.batch(x1)x3=self.relu(x2)x4=self.conv2(x3)x5=self.batch(x4)x6=self.relu(x5)x11=self.conv11(x)x7=x11+x6return x7class resnet18(nn.Module):def __init__(self):super(resnet18, self).__init__()self.conv1=nn.Conv2d(in_channels=3,out_channels=64,kernel_size=(7,7),stride=(2,2),padding=(3,3))self.bath=nn.BatchNorm2d(64)self.relu=nn.ReLU()self.max=nn.MaxPool2d(2,2)self.tiao1=tiao(64,64)self.tiao2=tiao(64,64)self.tiao3=tiao2(64)self.tiao4=tiao(128,128)self.tiao5=tiao2(128)self.tiao6=tiao(256,256)self.tiao7=tiao2(256)self.tiao8=tiao(512,512)self.a=nn.AdaptiveAvgPool2d(output_size=(1,1))self.l=nn.Linear(512,3)def forward(self,x):x1=self.conv1(x)x2=self.bath(x1)x3=self.relu(x2)x4=self.tiao1(x3)x5=self.tiao2(x4)x6=self.tiao3(x5)x7=self.tiao4(x6)x8=self.tiao5(x7)x9=self.tiao6(x8)x10=self.tiao7(x9)x11=self.tiao8(x10)x12=self.a(x11)x13=x12.view(x12.size()[0],-1)x14=self.l(x13)return x14

第三步:調用讀取數據函數,讀取數據,打亂,開始訓練:

 train_rock=[os.path.join(train_rock,file) for file in os.listdir(train_rock)]train_paper= [os.path.join(train_paper, file) for file in os.listdir(train_paper)]train_scissors = [os.path.join(train_scissors, file) for file in os.listdir(train_scissors)]test_rock=[os.path.join(test_rock,file) for file in os.listdir(test_rock)]test_paper=[os.path.join(test_paper,file) for file in os.listdir(test_paper)]test_scission=[os.path.join(test_scission,file) for file in os.listdir(test_scission)]train=train_rock+train_paper+train_scissorstest=test_rock+test_paper+test_scissionrandom.shuffle(train)random.shuffle(test)model=resnet18().cuda()opt = torch.optim.ASGD(model.parameters(), lr=0.001, weight_decay=0.8)loss = nn.CrossEntropyLoss()print("開始訓練")

卷積神經網絡反向傳播的具體步驟?第四步:訓練模型,完成后保存模型:

  for i in range(5):running_loss=0for index in range(0,len(train),Batch_files):images,labels=read_img(train[index:index+Batch_files])inputs=torch.stack(images,0).cuda()labels=torch.stack(labels,0).cuda()inputs, labels = Variable(inputs), Variable(labels)opt.zero_grad()h=model(inputs)loss1=loss(h,labels)loss1.backward()opt.step()running_loss+=loss1.item()if index%41==40:avg_loos=running_loss/41running_loss=0print('avg_loss',avg_loos)if index%101==99:test_files=random.sample(test,100)test_image,test_label=read_img(test_files)test_images=torch.stack(test_image,0).cuda()test_labels=torch.stack(test_label,0).cuda()test_h=model(test_images)_,prediction=torch.max(test_h.data,1)total=test_labels.size(0)correct=(prediction==test_labels).sum()print('100張測試集準確率%d %%'%(100*correct/total))torch.save(model.state_dict(),'resnet_caiq猜拳.pth')

請添加圖片描述

第五步:加載模型,進行測試:

model.load_state_dict(torch.load('resnet_caiq猜拳.pth'))
labels={0:'rock',1:'paper',2:'scissors'}images=[]image=Image.open(r'E:\桌面\1.png')image=image.convert('RGB')image=image.resize((64,64))image=transs(image)images.append(image)image= torch.stack(images, 0).cuda()label=model(image)_,prediction=torch.max(label.data,1)print("預測類別",labels[prediction.item()])

在這里插入圖片描述
在這里插入圖片描述

三、總結

全卷積神經網絡,本文只是簡單介紹了,通過pytorch訓練resnet模型。調用訓練好的模型,對圖片,視頻,攝像頭進行檢測。
本文只是簡單對圖片進行檢測,得到預測結果。
在這里運用了resnet18模型進行訓練,其實還有更好的模型,得到更好的訓練結果。
在目標檢測領域,最著名的是YOLO,檢測速度非常快,在實時檢測領域很受歡迎,在一些游戲上,可以通過YOLO腳本,實現自動鎖定,追蹤之類的,比如現在歡迎的吃雞游戲,玩家通過腳本,實現自動識別人,進行射擊操作。在yolov3中,作者提到過yolo已經運用到軍事中,出于道德層面的考慮,作者暫停了yolo的更新,在這之后v4,v5,v6以及之后的版本都是一些大佬接棒的。
在實時檢測中,現在AI在一些方面已經超越人類了,在準確率上雖然人腦的高層次演繹歸納能力是遠勝于AI的,但是在低級信息處理速度和精確度上,人類就很難比得過專精某個功能的AI了。

https://www.nshth.com/python/338748.html
>

相关文章:

  • 深度卷積神經網絡原理與實踐
  • 卷積神經網絡反向傳播的具體步驟
  • 全卷積神經網絡
  • 卷積神經網絡設計
  • 卷積神經網絡例子
  • 常見卷積神經網絡
  • 自適應卷積神經網絡
  • 卷積神經網絡原理
  • 國二python難嗎,python字符串(二)
  • 電腦軟件下載app,在電腦上體驗了 16 款手機 App 后,我很失望
  • elasticsearch中文文檔,Elastic安全分析新利器 —— Event Query Language (EQL) 介紹
  • 數據結構與算法python,[FreeCodeCamp筆記] Python 數據結構和算法1 二分搜索 Binary Search
  • 黑蘋果macOS系統鏡像工具,MacOS Monterey 12.2.1 (21D62) OC 0.7.8 / Cl 5144 / PE 三分區原版黑蘋果鏡像
  • 51單片機畢業設計論文,【畢業設計】基于單片機無線充電的4軸飛行器 -物聯網 嵌入式 stm32
  • 數據庫基礎知識整理,數據庫筆記整理
  • python運行不報錯又無任何結果輸出,linux 正確錯誤輸出_報告錯誤的正確方法
  • 計算機組成原理第六版課后答案,杭電計算機組成原理實驗九R-I,杭電計組實驗9-實現R-I型指令的CPU設計實驗.doc
  • python面向對象,Python零基礎速成班-第10講-Python面向對象編程(下),Property屬性、特殊方法、設計模式、鏈表應用
  • 數據庫視圖是什么,【SpringMVC】SpringMVC模型數據+視圖解析器
  • mp3格式轉換器,FFmpeg支持的音頻和視頻編解碼格式
  • 音樂學校招生要求,學校的音樂樓
  • c語言輸入兩個數輸出較大數,C語言求兩個數的較大值
  • 定義一個函數求三個數的最大值,輸入兩個整數,要求輸出其中值較大者。要求用函數求出最大值
  • MySQL學習 DAY1
  • 一個眼神一個微笑就讓人滿足,看得到的微笑
  • centos7安裝MySQL,centos7下載spark連接mysql數據庫提取數據(pyspark,Scala,python獨立執行)
  • node.js開發,從零開始nodejs系列文章-nodejs到底能干什么
  • python控制軟件自動化,Python實現網站自動登錄---傻瓜教程
  • get all of,resent = msg.get_all('Resent-Date') AttributeError: 'str' object h
  • opencv人體動作識別,torchvision使用keypoint rcnn 進行人體關鍵點定位
  • 深度卷積神經網絡原理與實踐,卷積神經網絡resent網絡實踐
  • 服務器,win服務器系統路由器,Windows server 2012 之路由功能
  • 小青蛙走迷宮的問題
  • 漢諾塔-小青蛙
  • 小青蛙oracle跟蹤,在小青蛙TOAD中用oracle語句寫
  • 音頻頻譜分析儀安卓版,[Android]自定義繪制一個簡易的音頻條形圖,附上對MP3音頻波形數據的采集與展現
  • 連乘符號∏的運算法則,∏這個是什么符號?
  • 用例失敗jenkins卻構建成功,jenkins 構建異常_jenkins構建失敗的原因是什么?