Tensorflow Faster_rcnn记录
采用 tensorflow 1.15.0
第1步 下载模型
链接:https://pan.baidu.com/s/1Z9lGedq0-9Ow9uzhv-q7ng
提取码:mtu3
这里面的代码我已经做好适配了,可以直接按照下面的教程进行,原来的第二步、第三步不需要做。
第4步:anaconda配置
如果没有下载anaconda先下载然后修改anaconda的源为清华源
每当出现下载不了的情况下就先切换默认源然后修改下面一个可以使用的conda源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
清华源经常会挂掉,可以换成上交源
conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main/
如果也挂了换成中科大源
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
注意每次切换源之前都切要运行下面这句话先切回默认源在运行上面的设置源
conda config --remove-key channels
接下来安装下面这些需要的包,注意tensorflow版本亲测1.15.0可用,必须使用conda安装不要使用pip安装,因为使用conda安装gpu版本的会自动配置号cuda不需要单独安装cuda
conda create -n tensorflow1 pip python=3.6
activate tensorflow1
如果是CPU就输入 conda install tensorflow=1.15.0 如果是GPU 就输入 conda install tensorflow-gpu=1.15.0
conda install -c anaconda protobuf
pip install -i https://pypi.doubanio.com/simple pillow
pip install -i https://pypi.doubanio.com/simple lxml
pip install -i https://pypi.doubanio.com/simple jupyter
pip install -i https://pypi.doubanio.com/simple matplotlib
pip install -i https://pypi.doubanio.com/simple pandas
pip install -i https://pypi.doubanio.com/simple opencv-python
# 视频里面没有下面这句 也要执行 防止后面setup的时候连国外网不好不能自动安装cython
pip install -i https://pypi.doubanio.com/simple cython
第5步:设置运行的目录
(每次activate环境后都需要做这一步!!!)
set PYTHONPATH=C:\tensorflow1\models;C:\tensorflow1\models\research;C:\tensorflow1\models\research\slim
第6步:配置protobuf
然后再research文件夹下面执行下列命令,如果使用上面下载下来的文件不需要做这一步,我已经做过了
protoc --python_out=. .\object_detection\protos\anchor_generator.proto .\object_detection\protos\argmax_matcher.proto .\object_detection\protos\bipartite_matcher.proto .\object_detection\protos\box_coder.proto .\object_detection\protos\box_predictor.proto .\object_detection\protos\eval.proto .\object_detection\protos\faster_rcnn.proto .\object_detection\protos\faster_rcnn_box_coder.proto .\object_detection\protos\grid_anchor_generator.proto .\object_detection\protos\hyperparams.proto .\object_detection\protos\image_resizer.proto .\object_detection\protos\input_reader.proto .\object_detection\protos\losses.proto .\object_detection\protos\matcher.proto .\object_detection\protos\mean_stddev_box_coder.proto .\object_detection\protos\model.proto .\object_detection\protos\optimizer.proto .\object_detection\protos\pipeline.proto .\object_detection\protos\post_processing.proto .\object_detection\protos\preprocessor.proto .\object_detection\protos\region_similarity_calculator.proto .\object_detection\protos\square_box_coder.proto .\object_detection\protos\ssd.proto .\object_detection\protos\ssd_anchor_generator.proto .\object_detection\protos\string_int_label_map.proto .\object_detection\protos\train.proto .\object_detection\protos\keypoint_box_coder.proto .\object_detection\protos\multiscale_anchor_generator.proto .\object_detection\protos\graph_rewriter.proto
第7步:执行setup files
然后执行setup文件(再model/research目录下执行):
python setup.py build
python setup.py install
第8步:准备数据集
使用自己的数据集就使用https://github.com/tzutalin/labelImg 进行标注
第9步:生成CSV文件
在object_detection目录下执行
python xml_to_csv.py
生成的CSV是这个样子的:就是每张图片的名字以及标注的框的像素点的位置
如果是其他数据集可能没有XML文件,这个时候就需要将数据集的标注整理成CSV的文件,比如KITTI数据集可以使用:
python generate_csv.py --input=kitti_image/txt_labels/ --output=kitti_image/csv/annotations.csv
来转换成CSV文件格式,需要注意的是KITTI数据集只有train的数据有标记数据,转换完成之后还需要将CSV分割成对应train和test的部分,否则不能通过下一步。
第10步:设置要训练识别的类型
打开generate_tfrecord.py修改,把要识别的类型修改好,注意这里有一个坑,官方给的else后面是None,必须修改成return 0
def class_text_to_int(row_label):
if row_label == 'class1':
return 1
elif row_label == 'class2':
return 2
elif row_label == 'class3':
return 3
elif row_label == 'class4':
return 4
elif row_label == 'class5':
return 5
elif row_label == 'class6':
return 6
else:
return 0
然后在training/labelmap.pbtxt也要修改成一致的:
item {
id: 1
name: 'class1'
}
item {
id: 2
name: 'class2'
}
item {
id: 3
name: 'class3'
}
item {
id: 4
name: 'class4'
}
item {
id: 5
name: 'class5'
}
然后配置好训练的路径,注意下面csv的路径以及训练图片的路径
python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record
第11步:模型训练的配置
对C:\tensorflow1\models\research\object_detection\training\faster_rcnn_inception_v2_pets.config文件做出如下修改(如果是严格按照之前的步骤来的那么路径类的不需要修改):
第9行: 输入有多少个种类
第110行:是模型的路径以ckpt表示,比如:
C:/tensorflow1/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt
注意在windows下复制下来的路径斜杠是\,必须换成/
第126行,是train.record的路径
input_path : "C:/tensorflow1/models/research/object_detection/train.record"
第128行是label.pbtxt的路径:
label_map_path: "C:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt"
第132行
有多少张图片在images/test文件夹里面
第140行和142行:
C:/tensorflow1/models/research/object_detection/test.record
C:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt
第12步:开始训练
运行下面这句话就可以开始训练了
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
如果需要查看tensorboard那么再开一个anaconda在object_detection文件夹下面执行(记得先执行的第五步!!!):
tensorboard --logdir=training
查看tensorboard的时候如果打不开的话使用conda list命令查看tensorboard是不是1.15.0,如果不是的话直接运行conda install tensorboard=1.15.0安好之后运行上面那句话就好了
第13步:创建训练结果
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
其中xxxx是最后要使用的checkpoint
第14步:运行结果
打开Obeject_detection_image.py然后修改NUM_CLASSES为识别的种类数,然后修改测试的图片路径后运行就可以了。
python Object_detection_image.py