MobileNet V1官方預(yù)訓(xùn)練模型的使用

最近看到一個巨牛的人工智能教程,分享一下給大家豆同。教程不僅是零基礎(chǔ)番刊,通俗易懂,而且非常風(fēng)趣幽默影锈,像看小說一樣芹务!覺得太牛了,所以分享給大家鸭廷。平時碎片時間可以當(dāng)小說看枣抱,【點(diǎn)這里可以去膜拜一下大神的“小說”】

1. 下載網(wǎng)絡(luò)結(jié)構(gòu)及模型

1.1 下載MobileNet V1定義網(wǎng)絡(luò)結(jié)構(gòu)的文件

MobileNet V1的網(wǎng)絡(luò)結(jié)構(gòu)可以直接從官方Github庫中下載定義網(wǎng)絡(luò)結(jié)構(gòu)的文件辆床,地址為:https://raw.githubusercontent.com/tensorflow/models/master/research/slim/nets/mobilenet_v1.py

1.2 下載MobileNet V1預(yù)訓(xùn)練模型

MobileNet V1預(yù)訓(xùn)練的模型文在如下地址中下載:
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md
打開以上網(wǎng)址佳晶,可以看到MobileNet V1官方預(yù)訓(xùn)練的模型,官方提供了不同輸入尺寸和不同網(wǎng)絡(luò)中通道數(shù)的多個模型讼载,并且提供了每個模型對應(yīng)的精度轿秧。可以根據(jù)實(shí)際的需要下載對應(yīng)的模型咨堤,如下圖所示菇篡。

MobileNet V1不同輸入和不同通道數(shù)的官方預(yù)訓(xùn)練模型

這里以選擇MobileNet_v1_1.0_192為例,表示網(wǎng)絡(luò)中的所有卷積后的通道數(shù)為標(biāo)準(zhǔn)通道數(shù)(即1.0倍)一喘,輸入圖像尺寸為192X192驱还。

2. 構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)及加載模型參數(shù)

2.1 構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)

在1.1小節(jié)中下載mobilenet_v1.py文件后,使用其中的mobilenet_v1函數(shù)構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)靜態(tài)圖凸克,如下代碼所示议蟆。

import tensorflow as tf
from mobilenet_v1 import mobilenet_v1,mobilenet_v1_arg_scope
slim = tf.contrib.slim
def build_model(inputs):   
    with slim.arg_scope(mobilenet_v1_arg_scope(is_training=False)):
        logits, end_points = mobilenet_v1(inputs, is_training=False, depth_multiplier=1.0, num_classes=1001)
    scores = end_points['Predictions']
    print(scores)
    #取概率最大的3個類別及其對應(yīng)概率
    output = tf.nn.top_k(scores, k=3, sorted=True)
    #indices為類別索引,values為概率值
    return output.indices,output.values

上面代碼中萎战,使用函數(shù)tf.nn.top_k取概率最大的3個類別機(jī)器對應(yīng)概率咐容。

2.2 加載模型參數(shù)

CKPT = 'mobilenet_v1_1.0_192.ckpt' 
def load_model(sess):
    loader = tf.train.Saver()
    loader.restore(sess,CKPT)
 
inputs=tf.placeholder(dtype=tf.float32,shape=(1,192,192,3))
classes_tf,scores_tf = build_model(inputs) 
with tf.Session() as sess:
    load_model(sess)

先定義placeholder輸入inputs,再通過函數(shù)build_model完成靜態(tài)圖的定義撞鹉。接下來傳入tf.Session對象到load_model函數(shù)中完成模型加載疟丙。

3. 模型測試

3.1 加載Label

網(wǎng)絡(luò)輸出結(jié)果為類別的索引值颖侄,需要將索引值轉(zhuǎn)為對應(yīng)的類別字符串。先從官網(wǎng)下載label數(shù)據(jù)享郊,需要注意的是MobileNet V1使用的是ILSVRC-2012-CLS數(shù)據(jù)览祖,因此需要下載對應(yīng)的Label信息(本文后面附件中會提供)。解析Label數(shù)據(jù)代碼如下炊琉。

def load_label():
    label=['其他']
    with open('label.txt','r',encoding='utf-8') as r:
        lines = r.readlines()
        for l in lines:
            l = l.strip()
            arr = l.split(',')
            label.append(arr[1])
    return label

3.2 測試結(jié)果

使用如下圖片進(jìn)行測試展蒂。


測試圖片

執(zhí)行inference.py后,控制臺輸出結(jié)果如下所示苔咪。

識別 test_images/test1.png 結(jié)果如下:
        No. 0 類別: 軍用飛機(jī) 概率: 0.9363691
        No. 1 類別: 飛機(jī)翅膀 概率: 0.032617383
        No. 2 類別: 炮彈 概率: 0.01853972

識別 test_images/test2.png 結(jié)果如下:
        No. 0 類別: 小兒床 概率: 0.9455737
        No. 1 類別: 搖籃 概率: 0.044925883
        No. 2 類別: 板架 概率: 0.007288801

4 完整代碼

inference.py完整的代碼如下所示锰悼。

import tensorflow as tf
from mobilenet_v1 import mobilenet_v1,mobilenet_v1_arg_scope
import cv2
import os
import numpy as np
slim = tf.contrib.slim
CKPT = 'mobilenet_v1_1.0_192.ckpt' 
dir_path = 'test_images'

def build_model(inputs):   
    with slim.arg_scope(mobilenet_v1_arg_scope(is_training=False)):
        logits, end_points = mobilenet_v1(inputs, is_training=False, depth_multiplier=1.0, num_classes=1001)
    scores = end_points['Predictions']
    print(scores)
    #取概率最大的5個類別及其對應(yīng)概率
    output = tf.nn.top_k(scores, k=3, sorted=True)
    #indices為類別索引,values為概率值
    return output.indices,output.values

def load_model(sess):
    loader = tf.train.Saver()
    loader.restore(sess,CKPT)
 
def get_data(path_list,idx): 
    img_path = images_path[idx]
    img = cv2.imread(img_path)
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    img = cv2.resize(img,(192,192))
    img = np.expand_dims(img,axis=0)
    img = (img/255.0-0.5)*2.0
    return img_path,img
def load_label():
    label=['其他']
    with open('label.txt','r',encoding='utf-8') as r:
        lines = r.readlines()
        for l in lines:
            l = l.strip()
            arr = l.split(',')
            label.append(arr[1])
    return label

inputs=tf.placeholder(dtype=tf.float32,shape=(1,192,192,3))
classes_tf,scores_tf = build_model(inputs) 
images_path =[dir_path+'/'+n for n in os.listdir(dir_path)]
label=load_label()
with tf.Session() as sess:
    load_model(sess)
    for i in range(len(images_path)):
        path,img = get_data(images_path,i)
        classes,scores = sess.run([classes_tf,scores_tf],feed_dict={inputs:img})
        print('\n識別',path,'結(jié)果如下:')
        for j in range(3):#top 3
            idx = classes[0][j]
            score=scores[0][j]
            print('\tNo.',j,'類別:',label[idx],'概率:',score) 
    

5. 附件下載

https://download.csdn.net/download/huachao1001/10737491

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末团赏,一起剝皮案震驚了整個濱河市箕般,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舔清,老刑警劉巖丝里,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異体谒,居然都是意外死亡杯聚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門抒痒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幌绍,“玉大人,你說我怎么就攤上這事故响】悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵彩届,是天一觀的道長主儡。 經(jīng)常有香客問我,道長惨缆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任丰捷,我火速辦了婚禮坯墨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘病往。我一直安慰自己捣染,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布停巷。 她就那樣靜靜地躺著耍攘,像睡著了一般榕栏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕾各,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天扒磁,我揣著相機(jī)與錄音,去河邊找鬼式曲。 笑死妨托,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吝羞。 我是一名探鬼主播兰伤,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钧排!你這毒婦竟也來了敦腔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤恨溜,失蹤者是張志新(化名)和其女友劉穎符衔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筒捺,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柏腻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了系吭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片五嫂。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肯尺,靈堂內(nèi)的尸體忽然破棺而出沃缘,到底是詐尸還是另有隱情,我是刑警寧澤则吟,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布槐臀,位于F島的核電站,受9級特大地震影響氓仲,放射性物質(zhì)發(fā)生泄漏水慨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一敬扛、第九天 我趴在偏房一處隱蔽的房頂上張望晰洒。 院中可真熱鬧,春花似錦啥箭、人聲如沸谍珊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砌滞。三九已至侮邀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贝润,已是汗流浹背绊茧。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留题暖,地道東北人按傅。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像胧卤,于是被迫代替她去往敵國和親唯绍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理枝誊,服務(wù)發(fā)現(xiàn)况芒,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 操作系統(tǒng):Centos7.4 (Tensorflow Object Detection API學(xué)習(xí))介紹了Tens...
    下里巴人也閱讀 15,663評論 10 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評論 25 707
  • 離開更是是一種借口叶撒,面對很多人質(zhì)問绝骚,我疲憊甚至懷疑。 是爸爸說的祠够,參軍压汪,回家體檢。就在這個十月古瓤,十月止剖,我回到家里,...
    谷子閱讀 240評論 0 0
  • 遇見你落君,以為你會是對的人穿香,但是相處越久就越發(fā)現(xiàn)我們真的不適合。思想高度不在同一個層面绎速,喜好不同皮获,越來越?jīng)]有話題聊,...
    七分醉三分醒閱讀 185評論 0 0