自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

一、前言

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

[[204495]]

UCloud推出了AI as a Service平臺,該平臺基于UCloud豐富的計(jì)算資源與分布式系統(tǒng)實(shí)踐經(jīng)驗(yàn),致力于提供廉價(jià)、高可靠、高彈性、高易用性的AI在線服務(wù),將客戶從繁雜的平臺系統(tǒng)開發(fā)和運(yùn)維工作中解放出來。 以在線人臉表情識別為例,說明如何借助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ù)。具體步驟如下:

1. 模型訓(xùn)練

(1) 安裝TensorFlow 1.1.0

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

  1. bash 
  2. pip install tensorflow=1.1.0 

(2) 選擇合適的數(shù)據(jù)庫

UCloud選擇使用目前較大的人臉表情識別公開數(shù)據(jù)庫fer2013,共包含35887張人臉圖片,其中訓(xùn)練集28709張、驗(yàn)證集3589張、測試集3589張。數(shù)據(jù)庫中各個(gè)樣本在年齡、面部方向等有比較大的差異性,具有一定的實(shí)際意義,也使表情識別更具挑戰(zhàn)性。

同時(shí),數(shù)據(jù)庫中的圖片均為灰度圖片,大小為48*48像素,樣本被分為生氣、厭惡、恐懼、開心、中性、傷心、驚訝七類,各種類型分布基本均勻。(該數(shù)據(jù)庫實(shí)際為kaggle一個(gè)比賽項(xiàng)目提供的數(shù)據(jù),官方給出的文件格式為csv,手動(dòng)將其轉(zhuǎn)換成了圖片格式。)

(3) 數(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中包含了類別的映射:

labels.txt中包含了類別的映射

(4) 訓(xùn)練

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

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

  1. bash 
  2. TRAIN_DIR=./train_log 
  3. DATASET_DIR=./fer2013 
  4. PRETRAINED_CHECKPOINT_DIR=./pretrain_model 
  5.  
  6. python train_image_classifier.py \ 
  7.   --train_dir=${TRAIN_DIR} \ 
  8.   --dataset_name=fer2013 \ 
  9.   --dataset_split_name=train \ 
  10.   --dataset_dir=${DATASET_DIR} \ 
  11.   --model_name=inception_v3 \ 
  12.   --checkpoint_path=${PRETRAINED_CHECKPOINT_DIR}/inception_v3.ckpt \ 
  13.   --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \ 
  14.   --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \ 
  15.   --max_number_of_steps=1000 \ 
  16.   --batch_size=32 \ 
  17.   --learning_rate=0.01 \ 
  18.   --learning_rate_decay_type=fixed \ 
  19.   --save_interval_secs=60 \ 
  20.   --save_summaries_secs=60 \ 
  21.   --log_every_n_steps=100 \ 
  22.   --optimizer=rmsprop \ 
  23.   --weight_decay=0.00004 

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

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

訓(xùn)練模型文件

2. 部署在線服務(wù)

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

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

(1) 安裝UCloud UFile SDK以及UAI SDK

  • 前者是UCloud對象存儲的SDK(http://sdk.ufile.ucloud.com.cn/python_sdk.tar.gz),主要用于將部署服務(wù)需要的模型和代碼文件上傳到UCloud的對象存儲空間中,這就涉及到首先創(chuàng)建一個(gè)屬于自己的私有空間,具體步驟在此不贅述。
  • 后者是UAI在線服務(wù)的SDK(https://gitlab.ucloudadmin.com/uai-service/uai-sdk/tree/master),提供了部署在線服務(wù)的命令行工具。

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

代碼如下:

  1. python 
  2. # fer_inference.py 
  3. import numpy as np 
  4. import tensorflow as tf 
  5.  
  6. from PIL import Image 
  7. from inception_v3 import * 
  8. from uai.arch.tf_model import TFAiUCloudModel 
  9.  
  10. class FerModel(TFAiUCloudModel): 
  11.   def __init__(self, conf): 
  12.       super(FerModel, self).__init__(conf) 
  13.  
  14.   def load_model(self): 
  15.       sess = tf.Session() 
  16.       input_tensor = tf.placeholder(tf.float32, [None, 299, 299, 3]) 
  17.       arg_scope = inception_v3_arg_scope() 
  18.       with slim.arg_scope(arg_scope): 
  19.           logits, end_points = inception_v3(input_tensor, 
  20.                                             is_training=False
  21.                                             num_classes=7
  22.           saver = tf.train.Saver() 
  23.       params_file = tf.train.latest_checkpoint(self.model_dir) 
  24.  
  25.       saver.restore(sess, params_file) 
  26.       self.output['sess'] = sess 
  27.       self.output['input_tensor'] = input_tensor 
  28.       self.output['logits'] = logits 
  29.       self.output['end_points'] = end_points 
  30.  
  31.   def execute(self, data, batch_size): 
  32.       sess = self.output['sess'] 
  33.       input_tensor = self.output['input_tensor'] 
  34.       logits = self.output['logits'] 
  35.       end_points = self.output['end_points'] 
  36.       ims = [] 
  37.       for i in range(batch_size): 
  38.           im = Image.open(data[i]).resize((299, 299)) 
  39.           im = np.array(im) / 255.0 
  40.           imim = im.reshape(299, 299, 3) 
  41.           ims.append(im) 
  42.       ims = np.array(ims) 
  43.       predict_values, logit_values = sess.run( 
  44.           [end_points['Predictions'], logits], feed_dict={input_tensor: ims}) 
  45.       ret = [] 
  46.       for val in predict_values: 
  47.           ret_val = np.array_str(np.argmax(val)) + '\n' 
  48.           ret.append(ret_val) 
  49.       return ret 

(3) 打包上傳需要的模型及代碼文件

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

  • 打包目錄
  • 模型文件目錄(checkpoint_dir目錄下)

打包上傳文件:

  1. bash 
  2. 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 

(4) 創(chuàng)建署服務(wù)

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

  1. bash 
  2. 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ù)后返回如下:

(5) 部署服務(wù)

部署服務(wù):

  1. bash 
  2. 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ù)。

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

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

  1. bash 
  2. 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)成功后返回如下:

三、測試

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

1. URL測試

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

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

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

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

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

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

  • 在并發(fā)數(shù)增加到8時(shí),AI在線服務(wù)的性能基本和GPU性能接近,即UAI-Service 8個(gè)節(jié)點(diǎn)的性能相當(dāng)于一塊K80單核的性能。
  • 在有并發(fā)的前提下,AI在線服務(wù)的性能普遍高于8核8G云主機(jī)的性能。

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

【本文是51CTO專欄機(jī)構(gòu)作者“大U的技術(shù)課堂”的原創(chuàng)文章,轉(zhuǎn)載請通過微信公眾號(ucloud2012)聯(lián)系作者】

 戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-11-11 07:25:08

人臉識別AI人工智能

2016-11-25 13:05:18

2022-03-15 09:31:17

ESLint工作原理前端

2012-02-22 10:33:36

Wi-Fi

2021-05-10 11:08:00

人工智能人臉識別

2024-01-16 08:09:28

PythonMongoDB數(shù)據(jù)存儲

2020-11-20 09:36:43

Java對象

2021-01-13 14:55:54

JavaPython開發(fā)

2019-11-11 14:09:17

Swift數(shù)據(jù)科學(xué)語言

2021-03-23 17:21:48

Java編程開發(fā)

2020-04-09 14:02:33

NginxHttps前端

2023-07-03 07:40:13

VueGolangweb

2024-05-31 08:53:56

2021-03-09 09:20:09

人臉識別人工智能智能手機(jī)

2020-03-19 14:11:35

人臉識別人工智能無人零售

2017-09-18 10:48:06

深度學(xué)習(xí)零基礎(chǔ)入門

2022-02-17 18:11:53

PostCSS流程API

2017-09-18 16:13:59

前端圖像處理人臉識別

2018-01-31 13:09:35

Pythonface_recogn人臉識別

2022-10-20 09:33:35

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號