宠物识别咱们使用到了tensorflow object-detection API (https://github.com/tensorflow/models/tree/master/research/object_detection)python
其中的Quick Start 2向咱们介绍了这个项目(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pets.md)linux
安装建议直接下载一份tensorflow/models文件夹的所有内容git
为了下降机器学习的时间成本和训练须要的金钱成本(毕竟不是全部人都会为机器学习购买昂贵的的显卡和内存),各家公司都推出了云机器学习的服务,如阿里云的机器学习PAI(华东2是免费的,可是我确实看不懂怎么用......)和GOOGLE的ML Engine等,这里咱们使用到了Google的ML Engine,试用Google Cloud Platform(如下简称GCP)须要Visa或者Master Card的认证,认证完成能够得到300美圆的试用机会,可在谷歌云平台的全部产品中使用。这里过验证我申请了一张建设银行的e付卡(Visa版)成功经过了验证,下面开始正式的ML Engine使用(详细的过程能够跟随running_pets.md中的步骤进行):github
1.建立GCP项目 这里我建立了名为My First Project的项目shell
2.安装Cloud SDK,这里我选择安装了Windows版并全选了全部选项,以后使用gcloud auth login在浏览器中登陆谷歌帐号或使用gcloud init完成初始化,即可以在console中使用google SDKapi
不过在设置中我遇到了设置代理错误的问题,提示浏览器
Network diagnostic detects and fixes local network connection issues. Checking network connection...failed. ERROR: gcloud crashed (TypeError): setproxy() takes at most 7 arguments (8 given) If you would like to report this issue, please run the following command: gcloud feedback To check gcloud for common problems, please run the following command: gcloud info --run-diagnostics
gcloud version机器学习
Google Cloud SDK 186.0.0 bq 2.0.28 core 2018.01.22 gsutil 4.28
查了下Stack Overflow ,发现是谷歌本身的问题.......解决方案是下载185版本(https://console.cloud.google.com/storage/browser/cloud-sdk-release?authuser=0&prefix=google-cloud-sdk-185)学习
这周的187版本中会修复本问题,程序要求Python2.7环境,因此先下了一个捆绑python的版本凑合用吧,须要手动配置环境变量才能在powershell中使用,我相信这应该不是问题。测试
(由于后面要配置本地环境,又换回了linux,安装过程大同小异,使用交互式的安装后再下载185版本安装便可)
3.启用机器学习API,在打开的网页中选择须要启用API的项目 点继续等待完成。
4.建立用于存储的Bucket,这里我建立了takefetter_pets_detector的Bucket,以后即可以向此Bucket上传文件,记住这个Bucket的名字,以后咱们会使用屡次。
或者是使用以下方法进行定义(相似win下使用set命令)
export YOUR_GCS_BUCKET=${takefetter_pets_detector}
5.接下来配置本地的环境过程(这里我一开始使用到了WSL Ubuntu进行配置,分区目录挂载在/mnt/下,更换国内源......而后发现竟然连不上网,github上的issue里的解决方案用了也没用,又回到了机械硬盘安装的deepin上)
根据https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md的步骤安装所需的库和配置环境并测试
6.接下来在tensorflow/models/research/目录下执行
wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz tar -xvf images.tar.gz tar -xvf annotations.tar.gz
7.运行
python object_detection/dataset_tools/create_pet_tf_record.py \ --label_map_path=object_detection/data/pet_label_map.pbtxt \ --data_dir=`pwd` \ --output_dir=`pwd`
这里很容易遇到
Traceback (most recent call last): File "object_detection/dataset_tools/create_pet_tf_record.py", line 41, in <module> from object_detection.utils import dataset_util ModuleNotFoundError: No module named 'object_detection'
缘由是中间配置环境过程当中其实输入了这么一步,可是重开shell以后便失效了
解决方法是输入 以下命令
Linux:
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
Windows:
set PYTHONPATH=<PATH_TO_MODELS>;<PATH_TO_MODELS>\slim
再次执行python就行了,执行中可能会遇到一些warnings,直接忽略就行.
在research目录下能够获得如下两个文件,如图所示,在object_detection/data下会生成pb.txt文件
8.以后即是将文件上传到bucket中,不要忘记
export YOUR_GCS_BUCKET=${takefetter_pets_detector}
运行
1
2
3
|
gsutil cp pet_train.record gs:
/
/
${YOUR_GCS_BUCKET}
/
data
/
pet_train.record
gsutil cp pet_val.record gs:
/
/
${YOUR_GCS_BUCKET}
/
data
/
pet_val.record
gsutil cp object_detection
/
data
/
pet_label_map.pbtxt gs:
/
/
${YOUR_GCS_BUCKET}
/
data
/
pet_label_map.pbtxt
|
等了半天没有相应,因此我经过浏览器建了data文件夹把这三个文件传上去了.....200多k的上传和下载真的难受
9.从头开始培训最早进的物体探测器可能须要数天时间,即便使用多个GPU也是如此! 为了加速训练,咱们将在不一样的数据集(COCO)上训练一个对象检测器,并从新使用它的一些参数来初始化咱们的新模型。
wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz gsutil cp faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* gs://${YOUR_GCS_BUCKET}/data/
下载tar文件并上传其中model.ckpt开头的三个文件到data目录下.
10.以后需将sample中的文件faster_rcnn_resnet101_pets.config文件中带有gs::///data/的部分所有替换为gs://${YOUR_GCS_BUCKET}/data/,如
gs://takefetter_pets_detector/data/
并上传
至此,咱们的bucket/data目录下文件如图所示
接下来就能够训练数据集了
11.在research目录下使用
python setup.py sdist (cd slim && python setup.py sdist)
打包tfslim和object detection API,以后运行
gcloud ml-engine jobs submit training `whoami`_object_detection_`date +%s` \
--runtime-version 1.4 \
--job-dir=gs://takefetter_pets_detector/train \
--packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz \
--module-name object_detection.train \
--region us-central1 \
--config object_detection/samples/cloud/cloud.yml \
-- \
--train_dir=gs://takefetter_pets_detector/train \
--pipeline_config_path=gs://takefetter_pets_detector/data/faster_rcnn_resnet101_pets.config
开始训练,训练过程当中会遇到日志中显示ImportError: No module named matplotlib.pyplot的错误,须要在research目录下生成的setup.py中的REQUIRED_PACKAGES中添加
'matplotlib',(方法来自https://stackoverflow.com/questions/47196673/import-error-matplotlib-pyplot)可是又出现了其余的错误,最终在
https://github.com/tensorflow/models/issues/2739下找到了andersskog的方法,改了好多文件终因而跑起来了.
经过
tensorboard --logdir=gs://takefetter_pets_detector
启动tensorboard服务,能够打开127.0.0.1:6006查看相关的信息.
最终通过2个小时的训练..... tensorboard上并无显示和例程中同样的结果...... 所以我决定先作本身的数据集吧,改天再作 毕竟Google ML Engine收费仍是很贵的.......
确实不知道错在哪,欢迎在评论中指教。