windows10 tensorflow_(object_detection) 实现三(快速上手)
2019.11.11日,由于之前的conda环境遭到破坏,重头开始装环境,并运行tf官方目标检测示例;
1.下载Anaconda3-2019.10-Windows-x86_64.exe并安装。
安装完成之后,并不想将其添加到系统环境变量,点击左下侧的windows开始按钮,点击Anaconda Prompt
2.创建用于实现tf的目标检测的虚拟环境:tf_object_detection
运行如下命令:
conda create --name tf_object_detection python=3.6.8
如下图:
输入y:
如上即安装完成。
3.**虚拟环境安装依赖包:
执行activate tf_object_detection
3.1 安装pycocotools 2.0
(注意:之前电脑里已经安装了Visual C++ 2015 build tools
如果你没有安装,请参考https://github.com/philferriere/cocoapi提供的下载接口,即:
https://go.microsoft.com/fwlink/?LinkId=691126 下载visualcppbuildtools_full.exe,然后运行该exe,并选择默认选项。
并且也安装了git, version 2.22.0.windows.1)
3.1.1 pip install Cython (编译的时候,依赖这个三方包)
3.1.2 安装pycocotools
使用pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI成功,如下:
请特别耐心等待,上面的过程慢得吐血!
如果你下载了cocoapi-master.zip,手动解压,重复上诉过程1,**虚拟环境activate tf_object_detection 然后cd 进入解压文件夹cocoapi-master\PythonAPI
通过以下两种方式安装:
# install pycocotools locally
python setup.py build_ext --inplace
# install pycocotools to the Python site-packages
python setup.py build_ext install
3.2 安装支持avx2的tesorflow:
参见以下网站:
https://github.com/fo40225/tensorflow-windows-wheel
例如以下是tensorflow版本1.12.0,支持python36,支持CPU指令集avx2;
如果你安装失败,你可以通过先安装pypi上的官方tensorflow-1.12.0-cp36-cp36m-win_amd64.whl,安装成功之后,在卸载pip uninstall tensorflow;然后再安装编译的支持AVX2指令集的whl文件。已经在python3.6.8、3.6.9环境中成功安装了支持AVX2的TF。
4 下载TF目标检测源码
使用TF官方提供的object_detection进行目标检测,比较方便,请进入官网下载相关代码,地址:https://github.com/tensorflow/models
使用git 下载:
或者直接点击官网的Clone or download下载,将下载的models-master.zip解压并命令为20191112_models-master,文件放置D:\class5_project文件夹下。即:D:\class5_project\20191112_models-master
5.下载protoc-3.3.0-win32.zip(支持64bit)
网址:https://github.com/protocolbuffers/protobuf/releases
将下载protoc-3.3.0-win32.zip文件解压并至D:\class5_project\20191112_ObjectDetection_demo文件夹下,即:D:\class5_project\20191112_ObjectDetection_demo\protoc-3.3.0-win32
6.将*.proto文件转成*.py文件
在D:\class5_project\20191112_models-master\research\object_detection\protos文件夹下有32个*.proto文件,需要将其转换成*.py文件
6.1 将D:\class5_project\20191112_models-master\research下的object_detection文件夹剪切至D:\class5_project\20191112_ObjectDetection_demo\protoc-3.3.0-win32\bin目录下;
6.2 cmd 执行转换
windows+r-->cmd 打开操作系统的终端,分别如下操作:
D:
cd D:\class5_project\20191112_ObjectDetection_demo\protoc-3.3.0-win32\bin
protoc object_detection/protos/*.proto --python_out=.
如下图:
运行结束后,所有的*.proto文件转成*.py文件,如下图:
6.3 将D:\class5_project\20191112_ObjectDetection_demo\protoc-3.3.0-win32\bin文件夹下的object_detection文件夹拷贝或剪切回 D:\class5_project\20191112_models-master\research文件夹下;
7.关于三方包导出:
pip freeze > .\tf_object_detection_20191113.txt
即:
absl-py==0.8.1
astor==0.8.0
certifi==2019.3.9
chardet==3.0.4
cycler==0.10.0
Cython==0.29.14
decorator==4.4.0
defusedxml==0.6.0
gast==0.3.2
grpcio==1.25.0
h5py==2.10.0
idna==2.8
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
kiwisolver==1.1.0
Markdown==3.1.1
matplotlib==3.1.1
numpy==1.16.3
Pillow==6.2.1
protobuf==3.10.0
pycocotools==2.0
pyparsing==2.4.5
python-dateutil==2.8.1
PyYAML==5.1
requests==2.21.0
six==1.12.0
tensorboard==1.12.2
tensorflow==1.12.0
termcolor==1.1.0
test-generator==0.1.1
urllib3==1.24.2
Werkzeug==0.16.0
wincertstore==0.2
你可以通过pip install tf_object_detection_20191113.txt安装上诉的大部分python三方包;
8.演示ssd_mobilents
8.1 创建演示文件夹20191113__(train_ssd_mobilenet)
即:D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)
8.2 将nets文件夹拷贝
即将D:\class5_project\20191112_models-master\research\slim文件夹下的nets拷贝至
D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)文件夹下,即:D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\nets
8.3 准备图片以及标签数据
8.3-a 推荐使用开源工具labelimg对图片进行打标,注意:标签文件与图片文件同名,后缀分别为JPG、xml。将打标完的图片以及标签数据按照以下比例进行划分:
train_set(训练集):val_set(交叉验证集合):test_set(测试集)=6:2:2
注意,以上为建议,模型的调优过程,请阅读相关文献,调优。
将划分好的train_set、val_set、test_set分别剪切至:
D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\data_set文件夹下。
8.3-b 将训练集和交叉验证集的图片、xml转成csv
需要安装三方包:
pip install pandas
分别运行D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\data_set文件夹下的train_xml_to_csv.py、val_xml_to_csv.py
注:可以运行以下代码读取csv文件,并将csv文件所有的类别提取出来:
import csv
import sys
path=r".\labels_train.csv"
csv_reader=csv.reader(open(path,encoding='utf-8'))
list1=[]
for row in csv_reader:
if row[3] !="class":
list1.append(row[3])
set_class=set(list1)
print(set_class)
#{'Empty', 'Cap_Side_B_OK', 'Cap_Side_A', 'Cap_Side_B_NG'}
8.3-c 将csv(labels_train.csv、labels_val.csv) 转化成record
分别运行D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\data_set文件夹下的train_generate_tfrecord.py、train_xml_to_csv.py。
最后得到训练需要的train.record、val.record文件。
8.3-d 生成pbtxt文件
运行D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\data_set文件夹下的generate_label_map.pbtxt.py生成label_map.pbtxt
8.4 创建output_model文件夹
在data_set的同级目录下创建output_model文件夹,即D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\output_model
备注:此文件夹的作用是训练模型过程输出的模型
8.5-a 创建pre_model文件夹
在data_set的同级目录下创建pre_model文件夹,即
D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)\pre_model
备注:此文件夹的作用是加载tensorflow在COCO dataset, Kitti dataset,Open Images dataset上的预训练模型。重要提示: 需要在Tensorflow 1.5 以上!!!
8.5-b 下载预训练的模型
下载链接:
比如下载一个ssd_mobilenet_v1在coco数据集训练的模型,即ssd_mobilenet_v1_coco_2018_01_28.tar.gz,将其解压后的文件剪切至pre_model文件夹,如下:
8.5-c 配置pipline.config参数
pre_model文件夹下的pipline.config对应ssd_mobilenet_v1_coco_2018_01_28.tar.gz训练的模型,与D:\class5_project\20191112_models-master\research\object_detection\samples\configs\ssd_mobilenet_v1_coco.config是一致的,其参数的配置可以参考ssd_mobilenet_v1_coco.config的内容:
# SSD with Mobilenet v1 configuration for MSCOCO Dataset.
# Users should configure the fine_tune_checkpoint field in the train config as
# well as the label_map_path and input_path fields in the train_input_reader and
# eval_input_reader. Search for "PATH_TO_BE_CONFIGURED" to find the fields that
# should be configured.
分别更改如下:
更改1:
更改2-3:
更改4-5:
9. 训练(IDE运行)
运行model_main.py执行fine_tune微调训练。
具体步骤:
9.1将
D:\class5_project\20191112_models-master\research\object_detection\ model_main.py
拷贝至D:\class5_project\20191112_ObjectDetection_demo\20191113__(train_ssd_mobilenet)文件夹下。
9.2 修改model_main.py中参数
9.2–A、event and checkpoint files文件的输出文件夹:
9.2–B、config路径:
9.2–C、训练迭代步数
9.2–D、计算训练数据的损失
9.2–E、其他
tf.logging.set_verbosity(tf.logging.INFO)
import sys
sys.path.append(r"D:\class5_project\20191112_models-master\research")
sys.path.append(r"D:\class5_project\20191112_models-master\research\object_detection\protos")
增加后如下图:
9.3 运行model_main.py,训练的部分截图如下:
注意:以上步骤较为详细,条条道路通罗马,以上可实现TF目标检测的演示,欢迎评论~