强烈推荐使用python3 + tensorflow2.x 进行搭建环境。便于以后的训练以及移植到android 平台。
一. 准备环境:
(1)下载安装 python2 pip2 python3 pip3:
参考博客:
1)(4条消息) ubuntu20.10 安装低版本tensorflow1.8 或者 tensorflow2.5 步骤_Navy的博客-CSDN博客
2)(4条消息) ubuntu20.10 版本安装python2.7 pip2 以及 python3.8 pip3_Navy的博客-CSDN博客
(2)下载安装并使用labelimg 对图形进行处理:
主要功能:labelimg 可以对要训练的图形进行处理,使其产生xml 文件,给训练模型使用。
参考博客:(4条消息) 下载安装并使用labelimg 对图形进行处理_Navy的博客-CSDN博客
(3)下载安装tensorflow1.8 或者 tensorflow2.5:
参考博客:(4条消息) ubuntu20.10 安装低版本tensorflow1.8 或者 tensorflow2.5 步骤_Navy的博客-CSDN博客
(4)下载Tensorflow object detection API:
主要功能:含有各种训练模型用的python 文件,用来生成 .csv .pd .tflite 等训练模型文件。
1)Ubuntu中直接下载 models :
git clone https://github.com/tensorflow/models.git
设定环境变量:
export TENSORFLOW=$TENSORFLOW:/tensorflow2.0/models/research:/tensorflow2.0/models/research/slim:/tensorflow2.0/models/research/object_detection
执行:
source /etc/profile
使环境变量生效。
(5)接下来需要将目录:models/research/object_detection/protos/ 下的*.proto 文件转换成python文件。下载安装 protoc :https://github.com/protocolbuffers/protobuf/releases
选择版本:protoc-3.17.3-linux-x86_64.zip
解压protoc-3.17.3-linux-x86_64.zip:
unzip -o protoc-3.17.3-linux-x86_64.zip -d protoc/
解压出三个文件:bin include readme.txt ,详情请看readme.txt。
将protoc 设定成全局可用:
#bin 目录下
mv protoc /usr/local/bin
#include 目录下
mv google/ /usr/local/include
#查看版本号
protoc --version
执行命令,将*.proto 文件转换成python文件:
#在顶层目录下执行会出错:object_detection/protos/flexible_grid_anchor_generator.proto: File not found.
protoc models/research/object_detection/protos/*proto --python_out=.
#在models/research 目录下执行即可
protoc object_detection/protos/*proto --python_out=.
执行结束,查看protos 目录下的*.proto 文件都对应一个.py 文件。
(6)测试环境是否配置好:
#python2
python2 object_detection/builders/model_builder_test.py
#python3
python3 object_detection/builders/model_builder_test.py
a. 出现错误:ImportError: No module named compat.v1
解决问题:由于tensorflow1.8版本过低不支持 compat.v1(tf早期版本没有compat这个模块)
下载安装tensorflow1.14(同样的方式):
参考博客:https://mp.csdn.net/mp_blog/creation/editor/118379066
安装结束别忘记添加环境变量到:/etc/profile 并且 source /etc/profile
b. 出现错误:ImportError: No module named scipy.io,安装scipy:
pip2 install scipy
c. 出现错误:from tensorflow.python.keras.applications import resnet
ImportError: cannot import name resnet
解决问题:到resnet_v1.py 文件中将from tensorflow.python.keras.applications import resnet屏蔽
d. 出现错误:ImportError: No module named matplotlib,安装matplotlib:
pip2 install matplotlib
e. 出现错误:ImportError: No module named PIL.Image,安装pillow:
pip2 install pillow
直到执行 python2 object_detection/builders/model_builder_test.py 没有任何错误出现为止。
f. 出现错误:ImportError: No module named nets
目录:/tensorflow2.0/models/research/ 执行:
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
(6) 下载预训练模型
1)tensorflow1.x 下载地址:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md
下载两个预训练模型:ssd_mobilenet_v1_coco_2018_01_28 和 ssd_mobilenet_v2_coco_2018_03_29 ,将其放入目录:models/research/object_detection/ 下。
1)tensorflow2.x 下载地址:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md
下载一个预训练模型:ssd_mobilenet_v2_320x320_coco17_tpu-8 将其放入目录:models/research/object_detection/ 下。
二. 开始训练数据
1.使用 xml_to_csv.py 将labelimg 处理图片后产生的xml 文件转换成 .csv 文件
1)将labelimg 处理图片后产生的xml 文件
放入路径:models/research/object_detection/test_images/cup
将 xml_to_csv.py 放入models/research/object_detection下,修改文件xml路径(
path = '/tensorflow2.0/models/research/object_detection/test_images/cup'
)以及文件输出名(cup_train.csv),执行:
python xml_to_csv.py
遇到错误:ImportError: No module named pandas
安装 pandas :
pip2 install pandas
更改文件输出名为(cup_test.csv),再次执行xml_to_csv.py
xml_to_csv.py 文件链接:https://download.csdn.net/download/Chhjnavy/19994793
于是得到两个文件:cup_train.csv 和 cup_test.csv。
2.生成TF Record。使用 generate_tfrecord.py 将 cup_train.csv 和 cup_test.csv 文件转换成cup_train.record 和curtain_test.record 文件。
1)将 generate_tfrecord.py 放入路径:models/research/object_detection/ ,修改文件路径(
os.chdir('/tensorflow2.0/models/research/object_detection')
),修改 row_label :
# TO-DO replace this with label map
def class_text_to_int(row_label):
if row_label == 'cup':
return 1
else:
None
2)将路径:/tensorflow2.0/models/research/object_detection/test_images/cup下所有图片,xml文件,csv文件拷贝到路径:/tensorflow2.0/models/research/object_detection/data/下。
在路径:/tensorflow2.0/models/research/object_detection
运行两次:
#python2
python generate_tfrecord.py --csv_input=data/cup_train.csv --output_path=data/cup_train.record
python generate_tfrecord.py --csv_input=data/cup_test.csv --output_path=data/cup_test.record
#python3
python3 generate_tfrecord.py --csv_input=data2/cup_train.csv --output_path=data2/cup_train.record
python3 generate_tfrecord.py --csv_input=data2/cup_test.csv --output_path=data2/cup_test.record
generate_tfrecord.py 文件链接:https://download.csdn.net/download/Chhjnavy/20004624
3. 利用预训练模型来训练自己的模型
1) 在路径:/tensorflow2.0/models/research/object_detection/data/ 下创建 cup.pbtxt 文件,写入:
item {
id: 1
name: 'cup'
}
2)配置 pipeline.config 参数
首先在路径:/tensorflow2.0/models/research/object_detection/
下创建 training_tf1 文件夹用来保存训练所产生的数据。
选择 ssd_mobilenet_v1_coco_2018_01_28 作为训练模型,将该目录下的 pipeline.config 移动到文件夹 training_tf1 下并修改名称为 ssd_mobilenet_v1_coco_2018_01_28.config 。
配置参数,修改以下参数:
a. num_classes: 1(为训练的图片分类,目前就cup一个,所以设定为1);
b. batch_size:2 (一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小,太大会引起内存爆掉);
c. fine_tune_checkpoint: "/tensorflow2.0/models/research/object_detection/ssd_mobilenet_v1_coco_2018_01_28/model.ckpt"(fine_tune_checkpoint的地址);
d. train_input_reader:{}中input_path和label_map_path的路径;
e. eval_input_reader:{}中input_path和label_map_path的路径;
f. initial_learning_rate: 0.004 不能太小,否则容易陷入局部过拟合;
g. num_steps: 50000 设定太大,训练时间特别久;
tensorflow1.x pipeline.config 文件链接:https://download.csdn.net/download/Chhjnavy/20028145
tensorflow2.x pipeline.config 文件链接:https://download.csdn.net/download/Chhjnavy/20060896
3)目录/tensorflow2.0/models/research/object_detection/
下开始训练:
#--pipeline_config_path 训练配置文件路径
#--model_dir 训练输出数据的路径
#python2 tensorflow1.x
python2 model_main.py --pipeline_config_path=training_tf1/ssd_mobilenet_v1_coco_2018_01_28.config --model_dir=training_tf1 --alsologtostderr
#python3 tensorflow2.x
python3 model_main_tf2.py --pipeline_config_path=training_tf2/ssd_mobilenet_v2_320x320_coco17_tpu-8.config --model_dir=training_tf2 --alsologtostderr
遇到问题:ImportError: No module named lvis
解决方法:将目录 /usr/local/lib/python3.8/dist-packages/lvis 赋值到 /usr/local/lib/python2.7/dist-packages 目录下。
将 from lvis.lvis import LVIS 改成 from lvis import LVIS 或者屏蔽掉,类似的也是这样修改。
遇到问题:ImportError: No module named
request
解决方法:将 from urllib.request import urlretrieve 换成 from urllib import urlretrieve
tensorflow1.x 训练结束后会出现如下文件:
tensorflow2.x 训练结束后会出现如下文件:
4)使用Tensorboard来可视化训练过程
tensorboard --logdir training_tf1 --bind_all
将产生的网址:http://navy-virtual-machine:6006/ 输入到浏览器,即可查看
4)导出训练模型
a. model.ckpt 选择训练目录中最大的数值
#--pipeline_config_path 训练配置文件路径
#--trained_checkpoint_prefix 训练产生的数据的路径
#--output_directory 导出模型的文件夹
#python2 tensorflow1.x
python2 export_inference_graph.py --input_type image_tensor --pipeline_config_path training_tf1/ssd_mobilenet_v1_coco_2018_01_28.config --trained_checkpoint_prefix training_tf1/model.ckpt-20000 --output_directory training_tf1/train_export
#python3 tensorflow2.x
python3 exporter_main_v2.py --input_type image_tensor --pipeline_config_path=training_tf2/ssd_mobilenet_v2_320x320_coco17_tpu-8.config --trained_checkpoint_dir=training_tf2 --output_directory=training_tf2/train_export
tensorflow1.x 导出文件如下:
tensorflow2.x 导出文件如下:
5)使用图片测试模型效果
#python2 tensorflow1.x
python2 my_model_tf1_v1.py
#python3 tensorflow2.x
python3 my_model_tf2_v1.py
tensorflow1.x 测试文件链接:https://download.csdn.net/download/Chhjnavy/20062396
tensorflow2.x 测试文件链接:https://download.csdn.net/download/Chhjnavy/20062433
注意:本文搭建的tensorflow1.x 结果测试图片无效果(可能环境问题),并未深究其原因。tensorflow2.x 结果测试图片正常。
官方推荐使用TF2.X 版本,可以更好的训练并移植!!!!!
请关注下一篇博客:(5条消息) ubuntu20.10 tensorflow2.5 将训练后的模型移植到android 平台之官网demo 运行(二)_Navy的博客-CSDN博客