“零基礎(chǔ)”實(shí)現(xiàn)人臉表情識(shí)別

前言

最近幾年骏啰,人工智能(AI)技術(shù)不斷發(fā)展节吮,從新聞智能推薦到聽歌識(shí)曲,再到被廣泛應(yīng)用的人臉識(shí)別技術(shù)判耕,處處可見人工智能的身影透绩。不得不說,人工智能已經(jīng)逐漸滲透大眾日常生活壁熄,成為不可或缺的一部分帚豪。那么如何從“零”開始去實(shí)現(xiàn)一個(gè)AI功能?讓UCloud來幫您草丧。

UCloud推出了AI as a Service平臺(tái)狸臣,該平臺(tái)基于UCloud豐富的計(jì)算資源與分布式系統(tǒng)實(shí)踐經(jīng)驗(yàn),致力于提供廉價(jià)昌执、高可靠烛亦、高彈性、高易用性的AI在線服務(wù)仙蚜,將客戶從繁雜的平臺(tái)系統(tǒng)開發(fā)和運(yùn)維工作中解放出來此洲。 以在線人臉表情識(shí)別為例,說明如何借助UAI-Service以及開源算法委粉,輕松實(shí)現(xiàn)在線服務(wù)呜师,“零基礎(chǔ)”入門使用AI。另外還對AI在線服務(wù)的性能進(jìn)行了評估贾节,將其與GPU性能進(jìn)行比對汁汗,使用戶更直觀的了解AI在線服務(wù)性能優(yōu)勢衷畦。

實(shí)現(xiàn)步驟

整個(gè)實(shí)現(xiàn)過程主要由兩部分組成,首先利用tensorflow1.1.0訓(xùn)練所需的模型文件知牌,其次按照UAI-SERVICE的使用說明部署在線服務(wù)祈争。具體步驟如下:

Step1 模型訓(xùn)練

Step1.0 安裝TensorFlow 1.1.0

安裝環(huán)境為ubuntu14.04.5, python版本為2.7.6,直接借助pip安裝tensorflow角寸,指令如下:

bash

pip install tensorflow=1.1.0?

Step1.1 選擇合適的數(shù)據(jù)庫

UCloud選擇使用目前較大的人臉表情識(shí)別公開數(shù)據(jù)庫fer2013菩混,共包含35887張人臉圖片,其中訓(xùn)練集28709張扁藕、驗(yàn)證集3589張沮峡、測試集3589張。數(shù)據(jù)庫中各個(gè)樣本在年齡亿柑、面部方向等有比較大的差異性邢疙,具有一定的實(shí)際意義,也使表情識(shí)別更具挑戰(zhàn)性望薄。 同時(shí)疟游,數(shù)據(jù)庫中的圖片均為灰度圖片,大小為48*48像素痕支,樣本被分為生氣颁虐、厭惡、恐懼采转、開心聪廉、中性瞬痘、傷心故慈、驚訝七類,各種類型分布基本均勻框全。(該數(shù)據(jù)庫實(shí)際為kaggle一個(gè)比賽項(xiàng)目提供的數(shù)據(jù)察绷,官方給出的文件格式為csv,手動(dòng)將其轉(zhuǎn)換成了圖片格式津辩。)

Step1.2 數(shù)據(jù)預(yù)處理

實(shí)際選用了tensorflow提供的TF-Slim實(shí)驗(yàn)庫拆撼。具體參見TF_Slim官方文檔說明。

TF-Slim是一個(gè)用于tensorflow定義喘沿、訓(xùn)練和評估復(fù)雜模型的新型輕量級API闸度,它提供了集中廣泛使用的卷積神經(jīng)網(wǎng)絡(luò)圖像分類模型代碼以及預(yù)訓(xùn)練模型,同時(shí)還包含了運(yùn)行腳本蚜印,借助它可以快速入門莺禁,既可以從頭開始訓(xùn)練模型,也可以對已經(jīng)訓(xùn)練好的網(wǎng)絡(luò)權(quán)重進(jìn)行微調(diào)窄赋。

TF-Slim提供了將數(shù)據(jù)集轉(zhuǎn)換成tfrecord格式的代碼哟冬,對代碼進(jìn)行調(diào)整后可以將所用的數(shù)據(jù)集fer2013轉(zhuǎn)成tfrecord格式楼熄。

數(shù)據(jù)形式如下所示,其中l(wèi)abels.txt中包含了類別的映射:

Step1.3 訓(xùn)練

本次訓(xùn)練選用了較大的模型inception_v3浩峡,對官方給出的預(yù)訓(xùn)練模型進(jìn)行微調(diào)可岂。由于訓(xùn)練模型的目的僅在于嘗試一下在線服務(wù),因而該訓(xùn)練過程并未過多涉及調(diào)參翰灾。

調(diào)用指令示例如下:

bash

TRAIN_DIR=./train_log

DATASET_DIR=./fer2013

PRETRAINED_CHECKPOINT_DIR=./pretrain_model

python train_image_classifier.py \

—train_dir=${TRAIN_DIR}\

-dataset_name=fer2013\

-dataset_split_name=train\

-dataset_dir=${DATASET_DIR} \

—model_name=inception_v3 \

—checkpoint_path=${PRETRAINED_CHECKPOINT_DIR}/inception_v3.ckpt \

—checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \

—trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \

—max_number_of_steps=1000 \

—batch_size=32 \

—learning_rate=0.01 \

—learning_rate_decay_type=fixed \

—save_interval_secs=60 \

—save_summaries_secs=60 \

—log_every_n_steps=100 \

—optimizer=rmsprop \ —weight_decay=0.00004

?

?

進(jìn)行模型微調(diào)時(shí)缕粹,系統(tǒng)自動(dòng)保留最新的五個(gè)生成模型,如果發(fā)生中斷纸淮,過后會(huì)在最新模型基礎(chǔ)上繼續(xù)微調(diào)致开。

訓(xùn)練模型文件如下:

Step2 部署在線服務(wù)

模型訓(xùn)練完成之后,就準(zhǔn)備上手部署萎馅!

按照官方文檔的提示(AI在線服務(wù) UAI-Service)双戳,在線部署的主要步驟如下(因個(gè)人喜好,本次選擇用命令行部署糜芳,官方也給出了使用Console部署的操作說明)飒货。

Step2.0 安裝UCloud UFile SDK以及UAI SDK

前者是UCloud對象存儲(chǔ)的SDK(http://sdk.ufile.ucloud.com.cn/python_sdk.tar.gz),主要用于將部署服務(wù)需要的模型和代碼文件上傳到UCloud的對象存儲(chǔ)空間中峭竣,這就涉及到首先創(chuàng)建一個(gè)屬于自己的私有空間塘辅,具體步驟在此不贅述。

后者是UAI在線服務(wù)的SDK(https://gitlab.ucloudadmin.com/uai-service/uai-sdk/tree/master)皆撩,提供了部署在線服務(wù)的命令行工具扣墩。

Step2.1 依據(jù)SDK工具包內(nèi)的代碼框架編寫inference代碼

代碼如下:

python

# ferinference.pyimport numpy as np

import tensorflow as tf


from PIL import Image

from inceptionv3 import *

from uai.arch.tfmodel import TFAiUCloudModel


class FerModel(TFAiUCloudModel):

def _init(self, conf):

super(FerModel, self).__init(conf)


def load_model(self):

sess = tf.Session()

input_tensor = tf.placeholder(tf.float32, [None, 299, 299, 3])

arg_scope = inception_v3_arg_scope()

with slim.arg_scope(arg_scope):

logits, end_points = inception_v3(input_tensor,

is_training=False,

num_classes=7)

saver = tf.train.Saver()

params_file = tf.train.latest_checkpoint(self.model_dir)


saver.restore(sess, params_file)

self.output[‘sess’] = sess

self.output[‘input_tensor’] = input_tensor

self.output[‘logits’] = logits

self.output[‘end_points’] = end_points


def execute(self, data, batch_size):

sess = self.output[‘sess’]

input_tensor = self.output[‘input_tensor’]

logits = self.output[‘logits’]

end_points = self.output[‘end_points’]

ims = []

for i in range(batch_size):

im = Image.open(data[i]).resize((299, 299))

im = np.array(im) / 255.0

im = im.reshape(299, 299, 3)

ims.append(im)

ims = np.array(ims)

predict_values, logit_values = sess.run(

[end_points[‘Predictions’], logits], feed_dict={input_tensor: ims})

ret = []

for val in predict_values:

ret_val = np.array_str(np.argmax(val)) + ‘\n’

ret.append(ret_val)

return ret

?

?

Step2.2 打包上傳需要的模型及代碼文件

文件目錄結(jié)構(gòu):

打包目錄

模型文件目錄(checkpoint_dir目錄下)

打包上傳文件:

bash
python tf_deploy.py pack --public_key=MY_PUBLIC_KEY --private_key=MY_PRIVATE_KEY --bucket=MY_BUCKET --pack_file_path=/Users/littleape1022/Desktop/fer_uaiservice --main_file=fer_inference --main_class=FerModel --model_dir=checkpoint_dir --code_files=fer_inference.py,inception_v3.py,inception_utils.py --upload_name=fer_uaiservice.tar --ai_arch_v=tensorflow-1.1.0

?

Step2.3 創(chuàng)建署服務(wù)

創(chuàng)建服務(wù):

bash
python tf_deploy.py create --public_key=MY_PUBLIC_KEY --private_key=MY_PRIVATE_KEY --service_name=fer_uaiservice --cpu=8 --memory=8

?

創(chuàng)建服務(wù)后返回如下:

Step2.4 部署服務(wù)

部署服務(wù):

bash
python tf_deploy.py deploy --service_id=uaiservice-av4p1c --public_key=MY_PUBLIC_KEY --private_key=MY_PRIVATE_KEY --ai_arch_v=tensorflow-1.1.0 --ufile_url="MY_UFILE_URL" --pip=pillow

?

部署成功后返回如下:

可以看到已經(jīng)返回服務(wù)的URL了,但注意到狀態(tài)是“ToStart”扛吞,啟動(dòng)之后就可以借助URL來訪問服務(wù)呻惕。

Step2.5 啟動(dòng)服務(wù)

啟動(dòng)服務(wù):

bash
python tf_deploy.py start --public_key=MY_PUBLIC_KEY --private_key=MY_PRIVATE_KEY --service_name=fer_uaiservice --service_version=SERVICE_VERSION --paas_id=Srv_PAAS_ID

?

啟動(dòng)成功后返回如下:

測試

上述步驟完成之后,表明人臉表情識(shí)別在線服務(wù)已經(jīng)部署成功滥比,可以實(shí)現(xiàn)在線人臉表情識(shí)別亚脆!

URL測試

通過云主機(jī)即可訪問該URL,具體情況如下:

上述結(jié)果表明盲泛,通過UAI部署在線服務(wù)后給出的URL是通的濒持,可以借助它對輸入圖片進(jìn)行情感分類。

圖中將輸入圖片“happy.jpg”分成了類別“4”寺滚,對應(yīng)“neutral”類柑营,說明模型的識(shí)別率有待提升(^_^)。

在線服務(wù)性能測試

借助ab測試評估了服務(wù)的性能村视,并與本地測試以及GPU(K80)做了比對官套。(關(guān)于本地測試的方法官網(wǎng)有介紹,有興趣的可以戳TensorFlow 本地代碼測試方法

測試結(jié)果如下,觀察可以發(fā)現(xiàn):

1)在并發(fā)數(shù)增加到8時(shí)虏杰,AI在線服務(wù)的性能基本和GPU性能接近讥蟆,即UAI-Service 8個(gè)節(jié)點(diǎn)的性能相當(dāng)于一塊K80單核的性能。

2)在有并發(fā)的前提下纺阔,AI在線服務(wù)的性能普遍高于8核8G云主機(jī)的性能瘸彤。

人工智能(AI)將是UCloud“CBA”戰(zhàn)略的重要一環(huán)。使用UCloud推出的AI as a Service平臺(tái)笛钝,可以助力人工智能公司快速將人工智能算法產(chǎn)品化质况,同時(shí)也在資源管理、資源調(diào)度方面提供了全方位保障玻靡。

本文由UCloud應(yīng)用創(chuàng)新部原創(chuàng)结榄,轉(zhuǎn)載請私聊大U君~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市囤捻,隨后出現(xiàn)的幾起案子臼朗,更是在濱河造成了極大的恐慌,老刑警劉巖蝎土,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件视哑,死亡現(xiàn)場離奇詭異,居然都是意外死亡誊涯,警方通過查閱死者的電腦和手機(jī)挡毅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暴构,“玉大人跪呈,你說我怎么就攤上這事∪∮猓” “怎么了耗绿?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菌赖。 經(jīng)常有香客問我缭乘,道長沐序,這世上最難降的妖魔是什么琉用? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮策幼,結(jié)果婚禮上邑时,老公的妹妹穿的比我還像新娘。我一直安慰自己特姐,他們只是感情好晶丘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般浅浮。 火紅的嫁衣襯著肌膚如雪沫浆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天滚秩,我揣著相機(jī)與錄音专执,去河邊找鬼。 笑死郁油,一個(gè)胖子當(dāng)著我的面吹牛本股,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桐腌,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拄显,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了案站?” 一聲冷哼從身側(cè)響起躬审,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蟆盐,沒想到半個(gè)月后盒件,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舱禽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年炒刁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誊稚。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翔始,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出里伯,到底是詐尸還是另有隱情城瞎,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布疾瓮,位于F島的核電站脖镀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狼电。R本人自食惡果不足惜蜒灰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肩碟。 院中可真熱鬧强窖,春花似錦、人聲如沸削祈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咙崎,卻和暖如春优幸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背褪猛。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工劈伴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人握爷。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓跛璧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親新啼。 傳聞我的和親對象是個(gè)殘疾皇子追城,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容