文章目录

  • 1.安装双系统
  • 2.ubuntu安装常用软件
    • 2.1 anaconda3
    • 2.2 flameshot(截图)
    • 2.3 SimpleScreenRecorder(录屏)
    • 2.4 teamview
    • 2.5 win_VMware_Ubuntu
  • 3.Win10系统有nvidia显卡后配深度学习环境:CUDA9.0、cudnn7.3、tensorflow_gpu1.12
    • 3.1 需要下载的安装包
    • 3.2 Net FrameWork4.6
    • 3.3 CUDA9.0(toolkit)
    • 3.4 cudnn7.3
    • 3.5 tensorflow_gpu1.12
    • 3.6 测试
  • 4.Ubuntu + CUDA9.0 + tensorflow-gpu安装过程:
    • 4.1 安装NVIDIA驱动
    • 4.2 CUDA
    • 4.3 CUDANN
    • 4.4 tensorflow-gpu
    • 4.5 调用gpu
  • 5.目标检测实战(Tensorflow_API_SSD)
    • 5.1 运行tensorflow官方示例
    • 5.2 proto文件转py文件
    • 5.3 下载模型并运行ipynb文件
    • 5.4 tf_SSD
    • 5.5 挑选图片
    • 5.6 缩小图片
    • 5.7 图片打标签
    • 5.8 xml转csv,csv转tfrecord
    • 5.9 编写pbtxt文件
    • 5.10 编写配置文件
    • 5.11 训练模型
      • 5.11.1 解决第一个报错
      • 5.11.2 解决第二个报错
        • 下载并安装Microsoft C++ build 14.0
        • 下载并安装pycocotools
      • 5.11.3 解决第三个报错
      • 5.11.4 解决第四个报错
      • 5.11.5 解决第五个报错
    • 5.12 模型测试
      • 5.12.1 导出训练好的模型
      • 5.12.2 下载并运行测试代码

1.安装双系统

Ubuntu镜像网站:http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/。

以下就只需要按两个按钮,其他默认。

如下图先删除所有,再在驱动1即固态上新建满存再应用,默认被分成4个区,选中分区4安装win10

此电脑右击管理到磁盘管理(或搜索磁盘管理选择创建并格式化分区),右击删除卷(或压缩卷)到未分配,右击新建简单卷再命名。压缩卷C盘分出50G装ubuntu,ubuntu自动识别未分配空间。

软碟通Ultraiso将从itellyou下载的win10镜像(用户customer版64位,复制链接迅雷下载)或ubuntu镜像写入U盘,Boot设置为UEFI启动U盘,legacy为老版本不用。下面两图都为f2。注意f12选择UEFI OPTIONS:USB1…启动,进入安装界面会提示与其他系统共存…

2.ubuntu安装常用软件

2.1 anaconda3

anaconda3镜像: https://mirrors.tuna.tsinghua.edu.cn

在.sh目录下打开命令行终端输入

bash Anaconda3........sh

不断按回车和yes,遇“Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]”,输入no

若是conda --version或anaconda-navigator未找到命令则解决如下:

echo 'export PATH="/home/yuta/anaconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

同理安装pycharm社区版不要激活: http://www.jetbrains.com/pycharm/download/#section=linux,选择linux版本
解压pycharm进入bin目录执行终端命令sh ./pycharm.sh(也是打开命令),跳出命令下一步。

2.2 flameshot(截图)

sudo apt-get install flameshot (sudo apt-get remove --purge 软件名称)
apt命令来安装软件,可能报“E:无法定位软件包”,解决:
使用apt新装软件的时候,会使用官方网站去下载软件,但是会因为国内的转接点太多,导致下载速度慢 ,可以通过换成一些中间的节点来进行下载,比如阿里源,中科大源,清华源等,这样的网站会定时和官方的源进行同步和更新,我们直接同步他们,速度就会比直接同步官方的源快

cd /etc/apt/
sudo cp sources.list sources.list.bak
sudo vi sources.list  # 删除里面内容,百度Ubuntu源粘贴
sudo apt-get update  # 执行了这句话后,会访问源列表中的每个网址,并读取软件列表,然后保存在我们的电脑上
sudo apt-get upgrade # 执行了这句话后,会与刚才下载的软件列表里面的软件进行对比,需要更新高版本的软件 就会下载与安装

2.3 SimpleScreenRecorder(录屏)

添加源:sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
更新源:sudo apt-get update
安装:sudo apt-get install simplescreenrecorder

2.4 teamview

https://www.teamviewer.com/zhcn/download/linux/
安装依赖包,终端进入到下载路径中,执行命令:(64位系统没有执行这个命令也成功,32位的系统则需要执行)
sudo apt-get install libjpeg62:i386 libxinerama1:i386 libxrandr2:i386 libxtst6:i386 ca-certificates
安装deb软件包:sudo dpkg -i teamviewer_12.0.76279_i386.deb

再重新执行:sudo dpkg -i teamviewer_12.0.76279_i386.deb

2.5 win_VMware_Ubuntu

下载Ubuntu镜像文件:http://www.ubuntu.com,配置VMware,下载地址:www.linuxprobe.com/tools。创建新虚拟机—自定义(高级)

3.Win10系统有nvidia显卡后配深度学习环境:CUDA9.0、cudnn7.3、tensorflow_gpu1.12

查看CUDA版本号可以安装CUDA Toolkit(可分离cpu和gpu代码)。本文作者CUDA版本号为9.1可装CUDA Toolkit 9.0、CUDA Toolkit 9.1、CUDA Toolkit 8.0

帮助-系统信息

3.1 需要下载的安装包


1: 为4的解压
2:安装英伟达驱动程序,设备管理器中查看显卡型号,到官网选择对应驱动下载,可以先卸载所有驱动再进行安装
3:用于做并行计算的平台CUDA toolkit,版本为9.0,前提是电脑拥有Nvidia独立显卡,看显卡对应使用cuda版本号
4:用于做深度学习加速计算的cuDNN库,版本为7.3
5:Microsoft出品,在Windows操作系统运行所有软件都依赖的Net Framework库,版本为4.6
6:Google出品,提供给开发人员的深度学习开发框架TensorFlow。其有2个版本,cpu版和gpu版,本文要安装的是gpu版本,因为gpu版本是cpu版本运行速度的50倍

3.2 Net FrameWork4.6

在Windows操作系统运行所有软件都依赖的.Net Framework库。一般来说,安装Win10操作系统的时,会自动更新.Net Framework到较新版本,但是为了避免个别读者的软件版本较久,建议下载并安装.Net Framework4.6。进入Windows官网,链接:https://www.microsoft.com,进入后页面如下图所示:在搜索框搜索:Net Framework 4.6,Offline中文叫离线,需要下载Offline Installer版本,双击直接安装:

3.3 CUDA9.0(toolkit)

进入Nvidia官网,链接:https://www.nvidia.com,安装时不要修改默认安装位置,一般CUDA安装失败都是由于Visual Studio(VS) Intergration无法安装导致的,可以通过自定义方式取消Visual Studio(VS) Intergration进行安装。

Legacy Releases中文叫做遗留版本,即旧版本CUDA的下载页面需要从此处进入。

3.4 cudnn7.3

开发者-CUDA-Downloads。

cudnn中的cu是CUDA的简写,dnn是deep neural network的简写。

注册登陆下载,安装:使用解压软件将压缩文件cudnn-9.0-windows10-x64-v7.3.1.20.zip解压到当然文件夹。

打开压缩后的cuda文件夹,将这四个文件全部复制到:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0,即安装CUDA9.0默认路径。

3.5 tensorflow_gpu1.12

进入阿里云pypi镜像,链接:http://mirrors.aliyun.com/pypi/simple/
下载后对应文件夹打开命令行pip install+名称,考虑到部分读者可能没有安装运行tensorflow必需的msgpack库,在cmd中输入命令:pip install msgpack

3.6 测试

在文件夹中新建.txt文件,将代码写入.txt文件中,写入后改为test.py文件。

import tensorflow as tf
hello = tf.constant('hello, tensorflow!')
session = tf.Session()
print(session.run(hello))

运行py文件成功。

建议先将Nvidia相关驱动卸载干净后,重新安装Nvidia驱动,再实现本文当中的操作。如果一直出现找不到tensorflow库的错误,本文读者提示可以使用conda install tensorflow_gpu的方法先解决环境问题,然后再conda uninstall tensorflow_gpu再实现本文当中的操作。

4.Ubuntu + CUDA9.0 + tensorflow-gpu安装过程:


4.1 安装NVIDIA驱动

1.卸载NVIDIA驱动:sudo apt-get remove --purge nvidia*
下面这步禁用我没用到,但记录下:

2.添加Graphic Drivers PPA:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
3.查看推荐驱动版本:ubuntu-drivers devices
4.安装驱动:sudo apt-get install nvidia-driver-430
5.安装完成后重启:sudo reboot
6.查看:watch nvidia-smi或者系统设置详细信息

4.2 CUDA

1..GCC降低版本:CUDA9.0要求GCC版本是5.x或者6.x,通过以下命令才对GCC版本进行修改:
版本安装,并通过命令替换掉之前的版本
g++ --version
sudo apt-get install gcc-5
sudo apt-get install g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
:gcc降级

$ gcc -v  #在此显示我的gcc版本为7
$ ls /usr/bin/gcc*  #查看安装有哪些版本的gcc
$ sudo apt-get install gcc-5 g++-5 #如果没有需要的版本,则需要安装指定版本
#配置gcc优先级,数值越低优先级越高
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 40
$ sudo update-alternatives --config gcc #确认配置
#同样也设置一下g++
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50
$ sudo update-alternatives --install /usr/bin/g++ gc++/usr/bin/g++-5 40
$ sudo update-alternatives --remove gcc /usr/bin/gcc-7 #想删除可选项
$ gcc -v

2.CUDA9.0下载地址:https://developer.nvidia.com/cuda-toolkit-archive
选择版本:linux–x86-64,Ubuntu–16.04,runfile(local),下载Base Installer并同级目录终端安装回车到底,accept后第一步输入n (不装nvidia驱动driver,因为已经装过)后面全y:
sudo sh cuda_9.0.176_384.81_linux.run
如果run文件出现问题,需要安装下面依赖,我没遇到过仅记录下:

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

3.添加环境变量(.bashrc就是环境配置文件):sudo vim ~/.bashrc ,按i进入插入模式,在末尾添加以下内容:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


按下ESC键后输入:wq 保存退出,然后刷新:source ~/.bashrc
4.重启后,测试CUDA是否成功:

cd ~/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery
make -j4
sudo ./deviceQuery

若会输出相应的显卡性能信息,Result = PASS,表明CUDA安装成功。
5.卸载CUDA:在计算机磁盘可以找到usr文件夹:sudo rm -rf /usr/local/cuda-9.0/

4.3 CUDANN

https://developer.nvidia.com/cudnn
注册登陆选择cudann7.0

解压下载的文件,可以看到cuda文件夹,在同级目录打开终端,拷贝文件并赋予权限,没有报错就是全部安装完成:

 sudo cp cuda/include/cudnn.h /usr/local/cuda/include/sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/sudo chmod a+r /usr/local/cuda/include/cudnn.hsudo chmod a+r /usr/local/cuda/lib64/libcudnn*

查看cudann版本:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2nvcc -V

4.4 tensorflow-gpu

1.创建一个python3X名为tf12的虚拟环境:conda create -n tf12 python=3.6或=3(最新)
2.激活虚拟环境:source/conda activate tf12source tf12/bin/activate
3.在虚拟环境里用conda安装:conda install tensorflow-gpu==1.12pip show tensorflowconda info --envs

在tf12环境中conda install jupyter notebook打开,不然默认打开base环境的jupyter
ubuntu16.04启动Anaconda Navigator 图形化界面,可以删除虚拟环境:

source ~/anaconda3/bin/activate root #进入base环境
anaconda-navigator

4.5 调用gpu

# 让Keras只使用GPU来进行训练
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""  #"0,1"
# 让显存不一次性占满
import tensorflow as tf
gpu_options = tf.GPUOptions(allow_growth=True)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
tf.test.is_gpu_available()

True

tf.test.gpu_device_name()

‘/gpu:0’

from tensorflow.python.client import device_lib
print (device_lib.list_local_devices())

5.目标检测实战(Tensorflow_API_SSD)

5.1 运行tensorflow官方示例

本文基于window10,python3.6 ,tensorflow1.12。在官网model里的research文件夹 :https://github.com/tensorflow/models/tree/master/research
1.window下载子目录: object_detection文件夹右击复制链接地址将/branches/branchname/替换成/trunk/,下载TortoiseSVN软件,桌面新建文件夹选中右击svn checkout。




2.ubuntu下载子目录: 安装svn:sudo apt-get install subversion,同上改为trunk,新文件夹里命令$svn checkout +改后地址。
3.ubuntu下载单文件: wget+含raw的新地址

5.2 proto文件转py文件

Protobuf是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。它和XML和Json数据差不多,把数据以某种形式保存起来。不同之处,它是一种二进制的数据格式,具有更高的传输,打包和解包效率。下载Protobuf网址:https://github.com/google/protobuf/releases 下载压缩文件protoc-3.7.0-win64.zip,解压后将bin文件夹中protoc.exe复制到c/window,在工程object_detection文件夹中,进入文件夹protos,文件夹中有很多以proto为后缀的文件,把这些proto文件转换为py文件。与工程object_detection文件夹同级目录中,打开cmd,不进入object_detection文件夹,运行jupyter notebook,新建一个ipynb文件,即点击选择New->Python3,复制下面一段代码运行:

import os
file_list = os.listdir('object_detection/protos/')
proto_list = [file for file in file_list if '.proto' in file]
print('object_detection/proto文件夹中共有%d个proto文件' %len(proto_list))
for proto in proto_list:execute_command = 'protoc object_detection/protos/%s --python_out=.' %protoos.popen(execute_command) # 相当于cmd直接打开路径
file_list = os.listdir('object_detection/protos/')
py_list = [file for file in file_list if '.py' in file]
print('通过protoc命令产生的py文件共有%d个' %(len(py_list) - 1))

重进入文件夹object_detection/protos,文件夹中每个proto文件后都有一个py文件,即将proto文件转py文件成功。

5.3 下载模型并运行ipynb文件

object_detection_tutorial.ipynb中有下载预训练好的模型的代码语句。代码可以运行,但是无法得到结果,因为代码中的下载链接是国外的网址,所以下文删除代码中Download Model块,本人提供百度云盘:链接:https://pan.baidu.com/s/1a4u-Xeu8KDKABlE6DfmM3Q 提取码:ek3n 。将下载好的压缩文件放到工程object_detection文件夹中并解压:文件夹ssd_mobilenet_v1_coco_2017_11_17中有文件夹saved_model文件夹和6个文件
在工程object_detection文件夹中运行cmd,打开jupter notebook,运行下面文件:

删除代码块,再run all 模块:

本人在运行时出现两个报错:1.删除红色框中内容,运行成功。

2.pillow库版本之前-U升级过,版本过高,按提示安装旧版:先pip uninstall,再用阿里云镜像安装:

5.4 tf_SSD

桌面新建目标检测2文件夹,以下为本次项目会用到的文件:

本文作者给读者演示的图片数据是来自ImageNet中的鲤鱼分类
链接:https://pan.baidu.com/s/17iI62gt9HyRbQ-Wr8h28jw 提取码:4swb

5.5 挑选图片

此数据集中大部分图片都较为清晰,但极少数图片像素点少不清晰。像素点少的图片不利于模型训练或模型测试,在目标检测2文件夹中cmd,打开jupyter notebook,新建重命名为:get_some_qualified_images,运行下一段代码后会在目标检测2文件夹下多出selected_images文件夹

import os
import random
from PIL import Image
import shutil#获取1000张图片中随机选出数量为sample_number*2的一部分图片的路径
def get_some_imagePath(dirPath, sample_number):fileName_list = os.listdir(dirPath)all_filePath_list = [os.path.join(dirPath, fileName) for fileName in fileName_list]#绝对路径all_imagePath_list = [filePath for filePath in all_filePath_list if '.jpg' in filePath] #获得.jpg后缀的绝对路径some_filePath_list = random.sample(all_filePath_list, k=sample_number*2)#随机获取k个元素还是返回列表return some_filePath_list#获取一部分像素足够,即长,宽都大于300的图片放入new_dirPath文件夹中
def get_some_qualified_images(dirPath, sample_number, new_dirPath):some_imagePath_list = get_some_imagePath(dirPath, sample_number)if not os.path.isdir(new_dirPath):os.mkdir(new_dirPath)i = 0for imagePath in some_imagePath_list:image = Image.open(imagePath)width, height = image.sizeif width > 300 and height > 300:i += 1new_imagePath = 'selected_images/%03d.jpg' %ishutil.copy(imagePath, new_imagePath)if i == sample_number:break#获取数量为100的合格样本存放到selected_images文件夹中
get_some_qualified_images('n01440764', 100, 'selected_images')

5.6 缩小图片

选出了100张像素足够的图片存放在selected_images文件夹中,本章中用代码实现将像素过大的图片做缩小:新建文件get_small_images.ipynb,运行下段代码:

import os
from PIL import Imagedef get_smaller_images(dirPath, new_dirPath): #参数自己传入与上文无关fileName_list = os.listdir(dirPath)filePath_list = [os.path.join(dirPath, fileName) for fileName in fileName_list]imagePath_list = [filePath for filePath in filePath_list if '.jpg' in filePath]if not os.path.isdir(new_dirPath):os.mkdir(new_dirPath)for imagePath in imagePath_list:image = Image.open(imagePath)width, height = image.sizeimageName = imagePath.split('\\')[-1]save_path = os.path.join(new_dirPath, imageName)if width >= 600 and height >= 600:minification = min(width, height) // 300 #此变量表示缩小倍数new_width = width // minificationnew_height = height // minificationresized_image = image.resize((new_width, new_height), Image.ANTIALIAS)print('图片%s原来的宽%d,高%d, 图片缩小后宽%d,高%d' %(imageName, width, height, new_width, new_height))resized_image.save(save_path)else:image.save(save_path)get_smaller_images('selected_images', 'smaller_images')

图片经过PIL库打开再保存,保持图片质量的情况下,能够缩小图片文件大小3倍左右。

5.7 图片打标签

LabelImg链接:https://pan.baidu.com/s/1YT_s0Ef95fOJAsiG69Bmkw 提取码:6epi
把压缩文件windows_v1.8.0.zip放到D盘根目录中,选择解压到当前文件夹。解压后D盘根目录下会有windows_v1.8.0文件夹,LabelImg软件在文件夹中。选择D盘根目录的原因:如果windows_v1.8.0文件夹路径中带有中文,打开LabelImg软件会闪退

按W画框,voc格式为xml,ctrl+s保存,A和D上下张 ,ctrl+d复制

已经打标签好的文件夹smaller_images做成压缩文件smaller_images.zip,链接:https://pan.baidu.com/s/13-fRksSjUeEii54gClA3Pw 提取码:57lz

5.8 xml转csv,csv转tfrecord

目标检测2文件夹中新建代码文件xml_to_csv.ipynb,cmd——>运行jupyter notebook——>新建代码文件——>代码文件重命名,复制下面一段代码到代码文件xml_to_csv.ipynb并运行:

import os
import pandas as pd
import xml.etree.ElementTree as ET
from sklearn.model_selection import train_test_splitdef xmlPath_list_to_df(xmlPath_list):xmlContent_list = []for xmlPath in xmlPath_list:tree = ET.parse(xmlPath)root = tree.getroot()for member in root.findall('object'):value = (root.find('filename').text,int(root.find('size')[0].text),int(root.find('size')[1].text),member[0].text,int(member[4][0].text),int(member[4][1].text),int(member[4][2].text),int(member[4][3].text))xmlContent_list.append(value)column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']xmlContent_df = pd.DataFrame(xmlContent_list, columns=column_name)   return xmlContent_dfdef dirPath_to_csv(dirPath):fileName_list = os.listdir(dirPath)all_xmlPath_list = [os.path.join(dirPath, fileName) for fileName in fileName_list if '.xml' in fileName]train_xmlPath_list, test_xmlPath_list = train_test_split(all_xmlPath_list, test_size=0.1, random_state=1)train_df = xmlPath_list_to_df(train_xmlPath_list)train_df.to_csv('train.csv')print('成功产生文件train.csv,训练集共有%d张图片' %len(train_xmlPath_list))test_df = xmlPath_list_to_df(test_xmlPath_list)test_df.to_csv('test.csv')print('成功产生文件test.csv,测试集共有%d张图片' %len(test_xmlPath_list))dirPath_to_csv('smaller_images')

为了使读者与本文作者的复现结果一致,本文作者将函数train_test_split的参数random_state的值设为1,这样每次划分的训练集和测试集总是相同。如果不设置此参数,则每次划分的训练集和测试集不同。上面一段代码的运行结果如下:

成功产生文件train.csv,训练集共有89张图片
成功产生文件test.csv,测试集共有10张图片

object_detection官网文件分享:链接:https://pan.baidu.com/s/19T5KCZxEKjzYJLQoWIc2qA 提取码:2zk3 ,桌面的目标检测2文件夹中新建代码文件csv_to_tfrecord.ipynb,打开cmd——>运行jupyter notebook——>新建代码文件——>代码文件重命名csv_to_tfrecord.ipynb,复制下代码运行:

import os
import pandas as pd
import tensorflow as tf
from object_detection.utils import dataset_util
import shutildef csv2tfrecord(csv_path, imageDir_path, tfrecord_path):objectInfo_df = pd.read_csv(csv_path)tfrecord_writer = tf.python_io.TFRecordWriter(tfrecord_path)for filename, group in objectInfo_df.groupby('filename'):height = group.iloc[0]['height']width = group.iloc[0]['width']filename_bytes = filename.encode('utf-8')image_path = os.path.join(imageDir_path, filename)with open(image_path, 'rb') as file:encoded_jpg = file.read()image_format = b'jpg'xmin_list = list(group['xmin'] / width)xmax_list = list(group['xmax'] / width)ymin_list = list(group['ymin'] / height)ymax_list = list(group['ymax'] / height)classText_list = [classText.encode('utf-8') for classText in group['class']]classLabel_list = [classText_to_classLabel(classText) for classText in group['class']]tf_example = tf.train.Example(features = tf.train.Features(feature = {'image/height': dataset_util.int64_feature(height),'image/width': dataset_util.int64_feature(width),'image/filename': dataset_util.bytes_feature(filename_bytes),'image/source_id': dataset_util.bytes_feature(filename_bytes),'image/encoded': dataset_util.bytes_feature(encoded_jpg),'image/format': dataset_util.bytes_feature(image_format),'image/object/bbox/xmin': dataset_util.float_list_feature(xmin_list),'image/object/bbox/xmax': dataset_util.float_list_feature(xmax_list),'image/object/bbox/ymin': dataset_util.float_list_feature(ymin_list),'image/object/bbox/ymax': dataset_util.float_list_feature(ymax_list),'image/object/class/text': dataset_util.bytes_list_feature(classText_list),'image/object/class/label': dataset_util.int64_list_feature(classLabel_list),}))tfrecord_writer.write(tf_example.SerializeToString())tfrecord_writer.close()print('成功产生tfrecord文件,保存在路径:%s' %tfrecord_path)#如果训练自己的模型,目标检测的类别不同,需要修改此处
def classText_to_classLabel(row_label):if row_label == 'fish':return 1elif row_label == 'human_face':return 2else:return Nonedir_name = 'training'
if not os.path.isdir(dir_name):os.mkdir(dir_name)
csv2tfrecord('train.csv', 'smaller_images', 'training/train.tfrecord')
csv2tfrecord('test.csv', 'smaller_images', 'training/test.tfrecord')

运行结果:

成功产生tfrecord文件,保存在路径:training/train.tfrecord
成功产生tfrecord文件,保存在路径:training/test.tfrecord

成功运行后产生training文件夹:

5.9 编写pbtxt文件

在桌面文件夹目标检测2的文件夹training中,创建文本文件my_label_map.pbtxt。复制下面一段内容到文本文件my_label_map.pbtxt中。

item {name : "fish"id : 1
}
item {name : "human_face"id : 2
}


一个细节需注意,文本fish_label.pbtxt在Windows系统下默认编码格式是ANSI格式,工程中需要的就是此格式。但是本人认为python3对utf-8编码支持较好,所以把fish_label.pbtxt的编码改成了utf-8格式,导致报错。

5.10 编写配置文件



ssdlite_mobilenet_v2_coco.config复制1份到目标检测2的文件夹training中,修改的部分为:
第9行的num_classes,对于本文来说,此数设置为2。
第143行的batch_size,对于本文来说,此数设置为5,读者根据自己的电脑配置,可以调高或者调低。
第177行input_path设置成"training/train.tfrecord"。
第179行label_map_path设置成"training/my_label_map.pbtxt"。
第191行input_path设置成"training/test.tfrecord"。
第193行label_map_path设置成"training/my_label_map.pbtxt"。
第158、159这2行需要删除。
修改保存后在training文件夹下有以下4个文件:

5.11 训练模型

5.11.1 解决第一个报错

在桌面文件夹目标检测2中cmd,运行程序:python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr
结果如下报错:

解决:新建环境变量。

新建变量名为:PYTHONPATH,全部点确定按钮。

5.11.2 解决第二个报错

成功添加环境变量后,需要在桌面的目标检测文件夹中重新打开cmd。在cmd中运行命令:python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr,运行结果如下图所示:

缺少pycocotools库,在linux系统中安装pycocotools库只需要运行命令:pip install pycocotools,但是在Windows上安装则复杂得多

下载并安装Microsoft C++ build 14.0

首先下载Microsoft C++ build 14.0,链接:https://go.microsoft.com/fwlink/?LinkId=691126

下载并安装pycocotools

打开git页面,链接:https://github.com/philferriere/cocoapi


对压缩文件cocoapi-master.zip选择解压到当前文件夹。进入文件夹cocoapi-master中的文件夹PythonAPI,在此文件夹下打开cmd运行指令:python setup.py build_ext install

5.11.3 解决第三个报错

进行完上面后,需要在桌面的目标检测文件夹中重新打开cmd。在cmd中运行命令:python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr,运行结果如下图所示:

解决此报错,需要阅读上文《proto文件转py文件》就是把object_detection/protos文件夹中将proto文件转py文件。

5.11.4 解决第四个报错

进行完第3章后,使用第3章中的cmd即可。在cmd中运行命令:python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr,运行结果如下图所示:

将models-master/research/slim文件夹中的nets文件夹移动到桌面的目标检测2文件夹中,即文件夹object_detection同级目录。因为models-master.zip大小为439M,但我们其实只要nets文件夹。
本文作者提供nets文件夹压缩后的压缩文件nets.zip: 链接:https://pan.baidu.com/s/18c4Ec6wfLRs-1RitxFQMzg 提取码:658j

5.11.5 解决第五个报错

在cmd中运行命令:python object_detection/model_main.py --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --model_dir=training --alsologtostderr,运行结果如下图所示:

修改工程文件夹object_detection中的代码文件model_lib.py,如下图所示,找到第418行,将category_index.values()修改为list(category_index.values())

5.12 模型测试

模型训练稳定地进行后,在桌面的目标检测文件夹中重新打开cmd。在cmd中运行命令:tensorboard --logdir=training,出现下图,复制到浏览器中打开。

将如下三个文件合并做了压缩 链接:https://pan.baidu.com/s/18c4Ec6wfLRs-1RitxFQMzg 提取码:658j,解压后含以下三个文件夹,training文件夹里含已经训练好的20万次模型,将自己的目标检测2文件夹里object-detection和training替换成下载好的。

5.12.1 导出训练好的模型

在目标检测2文件夹中打开cmd,运行python object_detection/export_inference_graph.py --input_type=image_tensor --pipeline_config_path=training/ssdlite_mobilenet_v2_coco.config --trained_checkpoint_prefix=training/model.ckpt-200000 --output_directory=fish_inference_graph

运行正常需要安装PYQT5这个库,pip install pyqt5即可安装好,此时目标检测2文件夹里多出了红色框出的文件夹。

如下图红色框出是测试图片数据集。

5.12.2 下载并运行测试代码

检测代码文件:链接:https://pan.baidu.com/s/1wKrqnQCGfnHTS5n9nqZ_gw 提取码:vdj7
代码文件fish_detection.ipynb下载完成后,复制到桌面的文件夹目标检测2中,在目标检测2中打开cmd
输入jupyter notebook 并打开fish_detection.ipynb,如下图所示:

n01440764文件夹中共有1300张图片,测试图片是随机选的10张图片:

【Python1】双系统安装,深度学习环境搭建,目标检测(Tensorflow_API_SSD)相关推荐

  1. win10下双硬盘做深度linux,win10+ubuntu18双硬盘双系统安装记录+深度学习环境搭建...

    工作需要,在已经预装了Windows10的工作站,需要再安装ubuntu.因为工作站本身有两块硬盘,所以准备空出一个装ubuntu,这样两个系统互不干扰,不使用对方的硬盘空间.工作站装里有两块Nvid ...

  2. ubuntu22从双系统开始到深度学习环境搭建+必备软件安装

    ubuntu从双系统开始到深度学习环境搭建及生活软件安装大合集!!! (一)本机环境 (二)双系统安装 1.前期了解 1.1.查看[BIOS](https://so.csdn.net/so/searc ...

  3. 台式机Ubuntu系统安装Tesla系列显卡+深度学习环境搭建

    1.前言 Tesla系列的显卡主要是作为计算显卡来使用的,常用在服务器.工作站等设备上,并不适用于普通台式机主板上.与常用的Nvidia显卡系列相比,其内部的电源供电结构.散热功能都是不一样的.因此要 ...

  4. 深度学习双显卡配置_linux(manjaro) tensorflow2.1 conda cuda10 双显卡笔记本深度学习环境搭建...

    linux(manjaro) tensorflow2.1 conda cuda10 双显卡笔记本深度学习环境搭建 下学期要学tensorflow,看着我可怜的1050ti,流下了贫穷的泪水,但无奈要做 ...

  5. 深度学习环境搭建之SFA3D目标检测

    一.前言     由于公司项目支撑,近期需要做雷达图像的目标检测后融合.本篇博客详细介绍深度学习环境搭建,并跑通SFA3D.由于本机第一次搭建环境,这里先全部手动搭建,实际上在用Ananconda创建 ...

  6. 腾讯云GPU服务器深度学习环境搭建

    Author:ZERO-A-ONE Date:2021-2-20 ​ 因为本人的电脑没有带有NVIDIA公司的独立显卡,所以需要用到GPU进行大规模运算加速训练的时候,就萌生了购买云服务进行计算的念头 ...

  7. Ubuntu16.04深度学习环境搭建

    Ubuntu16.04深度学习环境搭建(anaconda3+cuda10.0+cudnn7.6+pytorch1.2) 文章目录 Ubuntu16.04深度学习环境搭建(anaconda3+cuda1 ...

  8. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)...

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  9. Miniconda3+PyTorch1.7.1(GPU版)+Win10_x64+GTX1060深度学习环境搭建

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 硬件信息: 系统:win10家庭中文版 CPU:i7-7700HQ 内存:16GB 显卡:GTX1060 目录 一.确定 ...

  10. 深度学习环境搭建(从卸载CUDA到安装,以及Pytorch与torchvision的安装。你从未见过的全有版本)

    深度学习环境搭建(从卸载CUDA到安装,以及Pytorch与torchvision的安装.你从未见过的全有版本) 先来点头疼的:在深度学习的过程中,环境搭建是必须要经过的一个关卡,由于版本对应麻烦,很 ...

最新文章

  1. unittest框架执行用例
  2. 古巴雪茄高希霸世纪1.2.3.4.5.6.半世纪7款雪茄的区别?
  3. Python基础教程(三):运算符、条件语句
  4. JS----JavaScript中防抖和节流知识概述
  5. html怎么引入圆角插件,jQuery圆角插件demo页面 张鑫旭-鑫空间-鑫生活
  6. Java运算符(Operator)之 算数运算符(ArithmeticOperator)
  7. java wifi类_Java 接口——面向对象的精髓
  8. (TI xDM)SSCR Module—Shared Scratch Memory
  9. Windows XP操作系统中的禁忌
  10. Android异步加载全解析之引入二级缓存
  11. Linux内核部件分析 连通世界的list
  12. mysql中如何将一个表中的部分记录合并,mysql - 如何从一个表中获取所有产品并从另一个包含多行的表中合并一行? - SO中文参考 - www.soinside.com...
  13. Python:批量修改图片的后缀名(模板)
  14. 网易面经(内含腾讯ieg/IOS一面面经)
  15. 码流、码率、比特率、帧速率、分辨率、 高清的区别 基础知识
  16. Ant Design of Vue去掉加载遮罩
  17. 电脑主板各部件详细图解
  18. ArcHydroTools 10.5版本的安装与使用(附下载链接与教程)
  19. 微信域名防封系统-微信域名预拦截预防封
  20. 帧间预测--AMVP模式理论部分

热门文章

  1. linux ps aux 结果解释
  2. 室外建筑表现3Dmax和vray常用材质参数设置
  3. quilleditor 字体大小设置_vue-quill-editor如何设置字体默认大小?
  4. java 压缩汉字字节_java中计算汉字的字节数
  5. python中transpose函数_对numpy中的transpose和swapaxes函数详解
  6. 2013年人人校园招聘笔试题
  7. cassandra连不上,报Stop listening for CQL clients, Failed managing commit log segments
  8. 虚拟机下CentOS7开启SSH连接
  9. BPM实例方案分享:表单子表自动填入数据
  10. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)