ubuntu20.10 tensorflow1.8 (后改为1.14版)或者tensorflow2.x 训练模型识别图像(一)

9 篇文章 1 订阅
8 篇文章 0 订阅

强烈推荐使用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 :Releases · protocolbuffers/protobuf · GitHub

选择版本: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(同样的方式):

参考博客:CSDN

安装结束别忘记添加环境变量到:/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.recordcurtain_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博客

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值