設(shè)計一個基于深度學(xué)習(xí)的生活垃圾分類機器人軟件系統(tǒng),針對現(xiàn)實社會中產(chǎn)生的垃圾照片進行自動識別分類,對不同類別的垃圾,干垃圾,濕垃圾,可回收垃圾,有害垃圾等進行分類統(tǒng)計處理,減輕人工針對垃圾分類的工作量,提高垃圾分類的效率。
原文地址
一、程序設(shè)計
本基于深度學(xué)習(xí)的生活垃圾分類機器人軟件,系統(tǒng)基礎(chǔ)建設(shè)功能是垃圾的收集分類,因此需要針對垃圾數(shù)據(jù)的同圖片采集的方式通過深度學(xué)習(xí)訓(xùn)練垃圾識別模型,進而實現(xiàn)從不同垃圾圖片樣本中識別垃圾種類。因此在針對垃圾數(shù)據(jù)識別訓(xùn)練之前,需要準備訓(xùn)練使用的樣本數(shù)據(jù)圖片集合,此部分采用網(wǎng)絡(luò)爬蟲的技術(shù)手段收集互聯(lián)網(wǎng)中存在的垃圾圖片樣本,進行歸類整理。垃圾數(shù)據(jù)圖片收集的爬取過程邏輯,具體如圖所示。
二、效果實現(xiàn)
分類統(tǒng)計
垃圾管理
垃圾識別
其他效果省略
三、算法實驗
本次畢設(shè)系統(tǒng)在設(shè)計中,主要采用ResNext101_32x16d_WSL網(wǎng)絡(luò)作為基本的網(wǎng)絡(luò)結(jié)構(gòu)進行遷移學(xué)習(xí),將CBAM注意力機制模塊添加在首層卷積層,來增強圖像特征表征能力,關(guān)注圖像的重要特征抑制不必要的特征,固定除全連接層之外的其他層的權(quán)重。為降低過擬合,在模型全連接層添加了Dropout層,損失函數(shù)采用交叉熵損失函數(shù),優(yōu)化函數(shù)對比了SGD和Adam,Adam在起始收斂速度快,但最終SGD精度高,所以采用了SGD。最終模型結(jié)構(gòu)如圖所示。文章來源:http://www.zghlxwxcb.cn/news/detail-650844.html
核心實現(xiàn)源碼文章來源地址http://www.zghlxwxcb.cn/news/detail-650844.html
import numpy as np
import scipy.io
import matplotlib.pyplot as plt
class Pegasos:
def init(self, train_path, test_path, C, T, loss):
self.__dataprocess(train_path, test_path)
self.n = len(self.train_x)
self.C = C
self.T = T
self.lam = 1/(self.n*self.C)
self.loss = loss
self.W = np.random.randn(1899, 1)
self.b = np.random.randn(1, 1)
self.choose = np.random.choice(self.n, self.T, replace = True)
self.__Pegasos()
def __dataprocess(self, train_path, test_path):
''' 數(shù)據(jù)處理函數(shù)'''
train_set = scipy.io.loadmat(train_path)
test_set = scipy.io.loadmat(test_path)
self.train_x = train_set['X']
self.test_x = test_set['Xtest']
self.train_y = train_set['y'].astype(np.int16) * 2 - 1
self.test_y = test_set['ytest'].astype(np.int16) * 2 - 1
def __Pegasos(self):
''' 通過 Pegasos 算法訓(xùn)練模型, st為 y * (wx + b)'''
cost = []
for t in range(1, self.T + 1):
eta = 1 / (self.lam * t)
st = self.train_y[self.choose[t-1]][0] * self.classifier(self.train_x[self.choose[t-1]])
self.W, self.b = self.loss.gradDes(self.W, self.b,
np.swapaxes([self.train_x[self.choose[t-1]]], 0, 1),
self.train_y[self.choose[t-1]][0], st,
self.lam, eta)
cost.append(self.loss.loss(self.W, self.lam, st))
self.__plot(cost)
def classifier(self, x):
'''分類器, 當前 W, b 下模型計算結(jié)果'''
return np.matmul(x, self.W) + self.b
def classify(self):
'''
分類: 使用訓(xùn)練后的模型對訓(xùn)練集、測試集分類, 并將正確分類的數(shù)量存儲在數(shù)組 num 中
使用數(shù)組? 因為懶得為兩個數(shù)據(jù)集合起兩個名字了
'''
num = [0, 0]
for i in range(len(self.train_y)):
num[0] += 1 if self.classifier(self.train_x[i]) * self.train_y[i][0] >= 1 else 0
for i in range(len(self.test_y)):
num[1] += 1 if self.classifier(self.test_x[i]) * self.test_y[i][0] >= 1 else 0
self.__print(num)
def __print(self, num):
''' 打印模型在訓(xùn)練集和測試集上的測試結(jié)果'''
print('支持向量機')
print('C = ', self.C)
print('T = ', self.T)
print('訓(xùn)練集acc = {}, {}/{}'.format(num[0]/len(self.train_y), num[0], len(self.train_y)))
print('測試集acc = {}, {}/{}'.format(num[1]/len(self.test_y), num[1], len(self.test_y)))
def __plot(self, cost):
''' 繪制目標函數(shù)梯度下降的圖像'''
t = np.arange(self.T)
plt.plot(t, cost, 'r')
plt.title("C = {}, T = {}, loss: {}".format(self.C, self.T, self.loss.__name__))
plt.legend()
plt.savefig('../output/{}/{}_{}.png'.format(self.loss.__name__, self.C, self.T))
class hinge:
@staticmethod
def gradDes(W, b, x, y, st, lam, eta):
if st < 1 :
W -= eta * (lam * W - y * x)
b += eta * y
else:
W -= eta * lam * W
return W, b
@staticmethod
def loss(W, lam, st):
return np.linalg.det(lam / 2 * np.matmul(np.swapaxes(W,0,1), W) + np.max([0, 1-st]))
class exponential:
@staticmethod
def gradDes(W, b, x, y, st, lam, eta):
if st < -8: st = -8
exp = np.exp(-st)
W -= eta * (lam * W - y * x * exp)
b += eta * y * exp
return W, b
@staticmethod
def loss(W, lam, st):
return np.linalg.det(lam / 2 * np.matmul(np.swapaxes(W,0,1), W) + np.exp(-st))
class logistic:
@staticmethod
def gradDes(W, b, x, y, st, lam, eta):
exp = np.exp(-st)
W -= eta * (lam * W - y * x * exp / (1 + exp))
b += eta * y * exp / (1 + exp)
return W, b
@staticmethod
def loss(W, lam, st):
return np.linalg.det(lam / 2 * np.matmul(np.swapaxes(W,0,1), W) + np.log(1 + np.exp(-st)))
設(shè)計一個基于深度學(xué)習(xí)的生活垃圾分類機器人軟件系統(tǒng),針對現(xiàn)實社會中產(chǎn)生的垃圾照片進行自動識別分類,對不同類別的垃圾,干垃圾,濕垃圾,可回收垃圾,有害垃圾等進行分類統(tǒng)計處理,減輕人工針對垃圾分類的工作量,提高垃圾分類的效率。
原文地址
一、程序設(shè)計
本基于深度學(xué)習(xí)的生活垃圾分類機器人軟件,系統(tǒng)基礎(chǔ)建設(shè)功能是垃圾的收集分類,因此需要針對垃圾數(shù)據(jù)的同圖片采集的方式通過深度學(xué)習(xí)訓(xùn)練垃圾識別模型,進而實現(xiàn)從不同垃圾圖片樣本中識別垃圾種類。因此在針對垃圾數(shù)據(jù)識別訓(xùn)練之前,需要準備訓(xùn)練使用的樣本數(shù)據(jù)圖片集合,此部分采用網(wǎng)絡(luò)爬蟲的技術(shù)手段收集互聯(lián)網(wǎng)中存在的垃圾圖片樣本,進行歸類整理。垃圾數(shù)據(jù)圖片收集的爬取過程邏輯,具體如圖所示。
二、效果實現(xiàn)
分類統(tǒng)計
垃圾管理
垃圾識別
其他效果省略
三、算法實驗
本次畢設(shè)系統(tǒng)在設(shè)計中,主要采用ResNext101_32x16d_WSL網(wǎng)絡(luò)作為基本的網(wǎng)絡(luò)結(jié)構(gòu)進行遷移學(xué)習(xí),將CBAM注意力機制模塊添加在首層卷積層,來增強圖像特征表征能力,關(guān)注圖像的重要特征抑制不必要的特征,固定除全連接層之外的其他層的權(quán)重。為降低過擬合,在模型全連接層添加了Dropout層,損失函數(shù)采用交叉熵損失函數(shù),優(yōu)化函數(shù)對比了SGD和Adam,Adam在起始收斂速度快,但最終SGD精度高,所以采用了SGD。最終模型結(jié)構(gòu)如圖所示。
核心實現(xiàn)源碼
import numpy as np
import scipy.io
import matplotlib.pyplot as plt
到了這里,關(guān)于【轉(zhuǎn)載】基于Python+深度學(xué)習(xí)+神經(jīng)網(wǎng)絡(luò)實現(xiàn)高度可用的生活垃圾分類機器人程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!