摘要:機(jī)器學(xué)習(xí)的出現(xiàn)讓圖像識別技術(shù)有了突破性的進(jìn)展卷積神經(jīng)網(wǎng)絡(luò)的出現(xiàn)又使圖像識別更上了一次層次。與其他深度學(xué)習(xí)結(jié)構(gòu)相比,卷積神經(jīng)網(wǎng)絡(luò)在圖像和語音識別方面能夠給出更好的結(jié)果。這里我們使用卷積神經(jīng)網(wǎng)絡(luò)對人臉進(jìn)行性別識別項目中使用了機(jī)器學(xué)習(xí)庫。
原博地址https://laboo.top/2018/12/02/tfjs-face/#more
在傳統(tǒng)編程中, 圖像識別一直是一個難點, 雖然人能輕松做到, 但是用邏輯來描述這個過程, 并轉(zhuǎn)換成程序是很難的。機(jī)器學(xué)習(xí)的出現(xiàn)讓圖像識別技術(shù)有了突破性的進(jìn)展, 卷積神經(jīng)網(wǎng)絡(luò)的出現(xiàn), 又使圖像識別更上了一次層次。
卷積神經(jīng)網(wǎng)絡(luò)由一個或多個卷積層和頂端的全連通層組成, 這一結(jié)構(gòu)使得卷積神經(jīng)網(wǎng)絡(luò)能夠利用輸入數(shù)據(jù)的二維結(jié)構(gòu)。與其他深度學(xué)習(xí)結(jié)構(gòu)相比,卷積神經(jīng)網(wǎng)絡(luò)在圖像和語音識別方面能夠給出更好的結(jié)果。
這里我們使用卷積神經(jīng)網(wǎng)絡(luò)對人臉進(jìn)行性別識別, 項目中使用了TensorFlow機(jī)器學(xué)習(xí)庫。
項目地址face-gender-classification
數(shù)據(jù)收集與處理機(jī)器學(xué)習(xí)的基礎(chǔ)就是大量的數(shù)據(jù)。我以前從網(wǎng)上爬了一萬張證件照, 現(xiàn)在正好用上, 作為訓(xùn)練數(shù)據(jù)。
簡便的也可以從谷歌直接搜搜索 男(女)性證件照也可以得到并且有標(biāo)簽的數(shù)據(jù)。
由于我收集的照片沒有標(biāo)簽, 于是我花了一點時間從其中人工選出男女照片各200張并打上標(biāo)記。
為了使識別更加準(zhǔn)確, 項目中利用openCV裁剪出人臉部分的圖像, 并縮放至28*28大小。
recognizer = cv2.CascadeClassifier("model/haarcascade_frontalface_default.xml") crop(img_path): try: img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = recognizer.detectMultiScale(gray) if len(faces): x, y, w, h = faces[0] c_img = img[y:y + h, x:x + w] return cv2.resize(c_img, (28, 28), interpolation=cv2.INTER_AREA) except: pass return None
對所有的數(shù)據(jù)都進(jìn)行這樣處理, 結(jié)果如下:
最后我們還需要清理異常的數(shù)據(jù), 過一遍訓(xùn)練集, 把其中沒有定位到人臉的圖片去除掉。
讀取訓(xùn)練數(shù)據(jù)。
def read_img(files): arr = [] for file in files: img = Image.open("%s" % file) pix = img.load() view = np.zeros((IMAGE_H, IMAGE_W, 1), dtype=np.float) for x in range(IMAGE_H): for y in range(IMAGE_W): r, g, b = pix[y, x] view[x, y, 0] = (r + g + b) // 3 arr.append(view) return np.array(arr)
這里對訓(xùn)練圖像灰度化, 并且將訓(xùn)練數(shù)據(jù)中的一小部分作為驗證集。
開始創(chuàng)建模型。
model = keras.Sequential([ keras.layers.Conv2D(32, (3, 3), input_shape=(IMAGE_W, IMAGE_H, 1), strides=(1, 1), activation="relu"), keras.layers.MaxPool2D(pool_size=(2, 2)), keras.layers.Conv2D(64, (3, 3), strides=(1, 1), activation="relu"), keras.layers.MaxPool2D(pool_size=(2, 2)), keras.layers.Flatten(), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dropout(0.2), keras.layers.Dense(2, activation=tf.nn.softmax) ])
選擇適當(dāng)?shù)膬?yōu)化器和損失函數(shù)編譯模型。
model.compile(optimizer=tf.train.AdamOptimizer(learning_rate=0.001), loss="categorical_crossentropy", metrics=["accuracy"])
開始訓(xùn)練模型。
model.fit(x=train_x, y=train_y, batch_size=32, epochs=30, verbose=1, callbacks=my_callbacks, validation_split=0.05, shuffle=True )測試模型
這里使用matplotlib來顯示測試圖片及結(jié)果。
predictions = model.predict(test_x) class_names = ["Female", "Male"] plt.figure(figsize=(12, 6)) for i in range(min(9, len(test_y))): result = predictions[i] max_label = int(np.argmax(result)) correct_label = int(np.argmax(test_y[i])) plt.subplot(3, 6, 2 * i + 1) plt.grid(False) plt.xticks([]) plt.yticks([]) img = test_x.reshape(test_x.shape[0], IMAGE_W, IMAGE_H)[i] plt.imshow(img, cmap="gray") plt.xlabel("{} - prob:{:2.0f}%".format(class_names[max_label], 100 * np.max(result))) plt.subplot(3, 6, 2 * i + 2) plt.grid(False) plt.yticks([]) plt.ylim([0, 1]) bar = plt.bar(range(2), result) bar[max_label].set_color("red") bar[correct_label].set_color("green") plt.show()
臉部頭像右側(cè)的兩列分別代表女性概率和男性概率。
這里我們看到全都對了, 正確率非常高。
模型并不復(fù)雜, 大部分工作都在收集數(shù)據(jù)和調(diào)整訓(xùn)練參數(shù)上, 這也體現(xiàn)出了卷積神經(jīng)網(wǎng)絡(luò)對圖像強(qiáng)大的處理能力。
歡迎關(guān)注我的博客公眾號
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42731.html
摘要:本文內(nèi)容節(jié)選自由主辦的第七屆,分享的實錄。據(jù)美國紐約時報報道,人工智能的測試會根據(jù)膚色種族,出現(xiàn)不同的錯誤率。微軟在美國工時比較長,而在歐洲工作時間有嚴(yán)格的要求,我們需要花費時間磨合并找到共同的時間。 showImg(https://segmentfault.com/img/bVbm2f7?w=1080&h=720); 本文內(nèi)容節(jié)選自由msup主辦的第七屆TOP100summit,Mi...
摘要:的發(fā)布已經(jīng)有一些時日,其主要的提供的能力是給予前端直接可用的特征檢測的接口包括條形碼人臉文本檢測。本文將簡單的對其進(jìn)行介紹,對前端進(jìn)行人臉檢測進(jìn)行普適性的講解。 Shape Detection API 的發(fā)布已經(jīng)有一些時日,其主要的提供的能力是給予前端直接可用的特征檢測的接口(包括條形碼、人臉、文本檢測)。本文將簡單的對其進(jìn)行介紹,對前端進(jìn)行人臉檢測進(jìn)行普適性的講解。(本文不講算法~望...
閱讀 1514·2021-08-09 13:47
閱讀 2774·2019-08-30 15:55
閱讀 3499·2019-08-29 15:42
閱讀 1120·2019-08-29 13:45
閱讀 3012·2019-08-29 12:33
閱讀 1747·2019-08-26 11:58
閱讀 989·2019-08-26 10:19
閱讀 2414·2019-08-23 18:00