最近看到一个巨牛的人工智能教程,分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。平时碎片时间可以当小说看,【点这里可以去膜拜一下大神的“小说”】。

1. 下载网络结构及模型

1.1 下载MobileNet V1定义网络结构的文件

MobileNet V1的网络结构可以直接从官方Github库中下载定义网络结构的文件,地址为:https://raw.githubusercontent.com/tensorflow/models/master/research/slim/nets/mobilenet_v1.py

1.2 下载MobileNet V1预训练模型

MobileNet V1预训练的模型文在如下地址中下载:
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md
打开以上网址,可以看到MobileNet V1官方预训练的模型,官方提供了不同输入尺寸和不同网络中通道数的多个模型,并且提供了每个模型对应的精度。可以根据实际的需要下载对应的模型,如下图所示。

这里以选择MobileNet_v1_1.0_192为例,表示网络中的所有卷积后的通道数为标准通道数(即1.0倍),输入图像尺寸为192X192。

2. 构建网络结构及加载模型参数

2.1 构建网络结构

在1.1小节中下载mobilenet_v1.py文件后,使用其中的mobilenet_v1函数构建网络结构静态图,如下代码所示。

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个类别及其对应概率output = tf.nn.top_k(scores, k=3, sorted=True)#indices为类别索引,values为概率值return output.indices,output.values

上面代码中,使用函数tf.nn.top_k取概率最大的3个类别机器对应概率。

2.2 加载模型参数

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,再通过函数build_model完成静态图的定义。接下来传入tf.Session对象到load_model函数中完成模型加载。

3. 模型测试

3.1 加载Label

网络输出结果为类别的索引值,需要将索引值转为对应的类别字符串。先从官网下载label数据,需要注意的是MobileNet V1使用的是ILSVRC-2012-CLS数据,因此需要下载对应的Label信息(本文后面附件中会提供)。解析Label数据代码如下。

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 测试结果

使用如下图片进行测试。

执行inference.py后,控制台输出结果如下所示。

识别 test_images/test1.png 结果如下:No. 0 类别: 军用飞机 概率: 0.9363691No. 1 类别: 飞机翅膀 概率: 0.032617383No. 2 类别: 炮弹 概率: 0.01853972识别 test_images/test2.png 结果如下:No. 0 类别: 小儿床 概率: 0.9455737No. 1 类别: 摇篮 概率: 0.044925883No. 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个类别及其对应概率output = tf.nn.top_k(scores, k=3, sorted=True)#indices为类别索引,values为概率值return output.indices,output.valuesdef 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.0return 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 labelinputs=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,'结果如下:')for j in range(3):#top 3idx = classes[0][j]score=scores[0][j]print('\tNo.',j,'类别:',label[idx],'概率:',score) 

5. 附件下载

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

MobileNet V1官方预训练模型的使用相关推荐

  1. Jetson Nano官方预训练模型百度网盘下载链接分享

    在做Jetson Nano开发板测试的时候,很多预训练模型需要下载,当运行官方给的教程下载时,发现即使使用了外网也没办法下载. 官方下载方式(方式一) $ cd jetson-inference/to ...

  2. PaddlePaddle预训练模型大合集,还有官方使用说明书

    PaddlePaddle在不断增加官方支持的模型的同时,也在关注预训练模型的丰富度. 在过去的版本中,我们已经发布了目标检测Faster-RCNN.MobileNet-SSD.PyramidBox和场 ...

  3. 最强中文NLP预训练模型艾尼ERNIE官方揭秘【附视频】

    "最近刚好在用ERNIE写毕业论文" "感觉还挺厉害的" "为什么叫ERNIE啊,这名字有什么深意吗?" "我想让艾尼帮我写作业& ...

  4. 直播回顾 | 最强中文NLP预训练模型艾尼ERNIE官方揭秘

    允中 发自 凹非寺 量子位 编辑 | 公众号 QbitAI "最近刚好在用ERNIE写毕业论文" 看了上面热火的讨论,你一定很好奇"艾尼"."ERNI ...

  5. 【视频】超越BERT的最强中文NLP预训练模型艾尼ERNIE官方揭秘

    分章节视频链接:http://abcxueyuan.cloud.baidu.com/#/course_detail?id=15076&courseId=15076 完整视频链接:http:// ...

  6. 公开课视频(七):最强中文NLP预训练模型艾尼ERNIE官方揭秘

    "最近刚好在用ERNIE写毕业论文" "感觉还挺厉害的" "为什么叫ERNIE啊,这名字有什么深意吗?" "我想让艾尼帮我写作业& ...

  7. 图像分类任务不用冷启动,PaddlePaddle一口气发布十大预训练模型

    https://www.toutiao.com/a6645090596073505293/ 2019-01-11 12:25:20 PaddlePaddle在不断增加官方支持的模型的同时,也在关注预训 ...

  8. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

  9. 腾讯老照片修复算法开源,细节到头发丝,3种预训练模型可下载 | GitHub热榜

    明敏 发自 凹非寺 量子位 | 公众号 QbitAI 还记得这个能将老照片修复到纤毫毕现的GFPGAN吗? 现在,它的代码正式开源了! 官方已经在GitHub上传了3个预训练模型,3个版本的效果区别如 ...

最新文章

  1. python 能干嘛-python能干嘛
  2. Jupyter notebook 运行环境创建和切换 (Win10+Anaconda)
  3. ROS探索总结(一)(二)(三):ROS总体框架 ROS总体框架 ROS新手教程
  4. c语言long a什么意思啊,英文long的中文是什么意思
  5. STM32之RTC例程
  6. DreamFactory 第9章 性能注意事项
  7. centos刻录工具_CentOS7.0 U盘刻录工具正式版
  8. json在线解析工具
  9. Qt信号与槽机制原理及优缺点
  10. h5混合开发框架初识
  11. ins图片视频批量下载
  12. JAVA语言程序设计 第十六章 (16.10、16.11、16.12、16.13、16.14、16.15、16.16)
  13. 1万字精讲,这你还学不废?Python爬取腾讯视频《斛珠夫人》弹幕,并转换成词云(单线程)——爬虫实例2
  14. 泰语翻译成中文,常用的入境交通类词汇有哪些?
  15. python更改进程名称_更改python脚本的进程名称 - python
  16. python实现经典密码学中列移位算法
  17. Python:enumerate函数
  18. 如何制作电子印章?电脑做印章最简单的方法是什么?
  19. 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路
  20. 计算机如何安装无线网络适配器,无线网络适配器是什么,无线网络适配器如何设置...

热门文章

  1. linux 异构 计算_在Linux(或异构)网络上共享计算机,第1部分
  2. SolidWorks Composer居然可以让医疗设备的开发时间缩短60%?!
  3. 链接分析算法PageRank和HITS
  4. Python--总结第一阶段
  5. 自动化基本策略及成熟度定义
  6. 能让你效率翻倍的文字扫描识别软件有哪些?这几款就很不错
  7. linux中链接怎么做,链接(一),链接怎么做
  8. 互联网开发之路(一):痛苦但去,快乐自来
  9. Maven搭建多子项目工程
  10. 微信图书馆开发——cnsoft总结