赞
踩
1、labelImg标注工具的下载及安装:
下载软件: tzutalin /labelImg
安装:参看作者的项目文档,找到Installation,选择window+anaconda的安装方式:
1、打开labelimg软件
打开解压缩后的labelimg文件存放地址:
运行labelImg.py程序
则打开labelImg软件界面:
2、设置导入、导出操作地址
将待标记图像集存放在data-picture文件夹中,选择opendir命令,打开data-picture中的数据集并完成标记。
打开change save dir,将导出地址选择为data-xml文件夹。如果未做修改保持默认,则会将.xml文件输出在data-picture文件夹中
3、标记图像
至此,完成了图片集的标记,软件其他的详细命令请参考手把手教你图片打标。
查看生成的.xml文件:因为选择了Change Save Dir命令,所以输出.xml在data-xml的train文件夹中:
4、YOLO数据集的标注格式的annotation
在labelImg的项目文档中如下说明:
标注的生成格式:1、ImageNet数据集使用PASCAL VOC格式
2、YOLO使用的格式
生成的yolo标注格式:
生成的.csv文件内容如下:
其中,xml_to_csv.py程序内容,里面有2项内容需要根据自己的实际情况更改:
import os import glob import pandas as pd import xml.etree.ElementTree as ET def xml_to_csv(path): xml_list = [] print(path+'1') a = glob.glob(path + '/*.xml') print(a) for xml_file in glob.glob(path + '/*.xml'): print(path + '2') print(path + '/*.xml') tree = ET.parse(xml_file) root = tree.getroot() for member in root.findall('object'): value = (root.find('filename').text, int(root.find('size')[0].text), int(root.find('size')[1].text), member[0].text, int(member[4][0].text), int(member[4][1].text), int(member[4][2].text), int(member[4][3].text) ) xml_list.append(value) column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax'] xml_df = pd.DataFrame(xml_list, columns=column_name) return xml_df def main(): image_path = r'D:\labelimg\labelImg-master\data-xml\train' # 第1处修改:标注图像集后生成的.xml文件地址 xml_df = xml_to_csv(image_path) xml_df.to_csv('raccoon_labels.csv', index=None) # 第2处修改:生成的.csv文件的存放名称。 print('Successfully converted xml to csv.') # 生成的.csv文件存放地址为image_path main()
1、安装tensorflow1.5版本
2、下载slim
pip install --upgrade tf_slim
3、安装依赖库
slim的许多功能已经移入tf-slim中,所以tf-slim也需要安装。cocoapi是训练coco数据集使用,此处不需要安装。
4、下载models,下载文档文件名字为:models-master.zip,更改为models。此处将models放入D盘中。
5、Protobuf编译
Tensorflow Object Detection API 使用Protobuf配置模型和训练参数。
可以用protoc --version查看自己安装的protoc版本,如果没有,则需要根据以下步骤进行安装:
检查protoc,models的安装文档文档建议使用protoc3.0的版本。
打开protoc的下载地址: protocolbuffers /protobuf
找到3.0的版本:
这里只有win32的release版本:
下载后复制到与models同名的文件夹下,解压,生成:bin、include。将bin文件夹下的protoc.exe复制到C:\Windows\System32文件夹下。
cmd打开命令行界面,输入命令protoc,出现如下界面说明安装成功:
在models/researc/object_detection/protos/目录下有很多以“.proto”结尾的文件,这些文件需要使用protoc程序编译成python文件。
在models/research下运行Windows PowerShell(注意,这里必须是PowerShell,运行cmd会报错),输入如下命令:
Get-ChildItem object_detection/protos/*.proto | Resolve-Path -Relative | %{ protoc $_ --python_out=. }
可以检查moels/research/object_detection/protos/文件夹,如果每个proto文件都成了对应的以py为后缀的python源码,就说明编译成功了。
或者
切换目录到 tensorflow/models/research/下,激活tensorflow的运行环境,执行命令:
# From tensorflow/models/research/
protoc object_detection/protos/*.proto --python_out=.
可以在protos/文件夹下看到每个.proto文件生成了对应的.py文件,说明编译成功。
6、配置环境路径
将 tensorflow/models/research/和slim路径添加到 PYTHONPATH ,切换至tensorflow/models/research/路径下,运行命令:
# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
或者
添加一个名为PYTHONPATH的系统环境变量: 右击【我的电脑】-【属性】-【高级系统设置】-【环境变量】-【新建】,变量名写PYTHONPATH,变量值就是要导入模块的路径。
7、运行models/research下的setup.py
python setup.py build
python setup.py install
8、测试安装
如果上述步骤没有出现问题,激活tensorflow的运行环境,执行以下命令:
# If using Tensorflow 1.X:
python object_detection/builders/model_builder_tf1_test.py
输出ok,表面安装成功了。
8、用API调用现成的模型直接测试图片和视频
在research文件夹下运行命令:jupyter notebook,接着在jupyter中打开object_detection文件夹,并单击object_detection_tutorial.ipynb运行试例文件。
运行中报错:matplotlib.use() must be called before pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
查询解决办法关于python中用matplotlib画图遇到的一些问题。
将.csv文件和图片集拷贝到generate_tfrecord文件夹中。
其中有3处根据实际情况进行修改的地方:
""" Usage: # From tensorflow/models/ # Create train data: python generate_tfrecord.py --csv_input=data/train_labels.csv --output_path=train.record # Create test data: python generate_tfrecord.py --csv_input=data/test_labels.csv --output_path=test.record """ # 第1处修改,此处都使用相对地址: # --csv_input=raccoon_labels.csv # --output_path=train.record # --image_dir=data-picture from __future__ import division from __future__ import print_function from __future__ import absolute_import import os import io import pandas as pd import tensorflow as tf from PIL import Image from object_detection.utils import dataset_util from collections import namedtuple, OrderedDict flags = tf.app.flags flags.DEFINE_string('csv_input', '', 'Path to the CSV input') flags.DEFINE_string('output_path', '', 'Path to output TFRecord') flags.DEFINE_string('image_dir', '', 'Path to images') FLAGS = flags.FLAGS # TO-DO replace this with label map def class_text_to_int(row_label): if row_label == 'dog': # 第2处修改:需要更换为自己label标签中的名称:dog!!!! return 1 else: None '''如果有多个标签类别则参照如下修改: # 第2‘处修改:如果有多个标签类别,则仿照修改 def class_text_to_int(row_label): if row_label == 'nine': return 1 elif row_label == 'ten': return 2 elif row_label == 'jack': return 3 elif row_label == 'queen': return 4 elif row_label == 'king': return 5 elif row_label == 'ace': return 6 else: None ''' def split(df, group): data = namedtuple('data', ['filename', 'object']) gb = df.groupby(group) return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(), gb.groups)] def create_tf_example(group, path): with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid: encoded_jpg = fid.read() encoded_jpg_io = io.BytesIO(encoded_jpg) image = Image.open(encoded_jpg_io) width, height = image.size filename = group.filename.encode('utf8') image_format = b'jpg' # 第3处修改:图片类型为.jpg!!! xmins = [] xmaxs = [] ymins = [] ymaxs = [] classes_text = [] classes = [] for index, row in group.object.iterrows(): xmins.append(row['xmin'] / width) xmaxs.append(row['xmax'] / width) ymins.append(row['ymin'] / height) ymaxs.append(row['ymax'] / height) classes_text.append(row['class'].encode('utf8')) classes.append(class_text_to_int(row['class'])) tf_example = tf.train.Example(features=tf.train.Features(feature={ 'image/height': dataset_util.int64_feature(height), 'image/width': dataset_util.int64_feature(width), 'image/filename': dataset_util.bytes_feature(filename), 'image/source_id': dataset_util.bytes_feature(filename), 'image/encoded': dataset_util.bytes_feature(encoded_jpg), 'image/format': dataset_util.bytes_feature(image_format), 'image/object/bbox/xmin': dataset_util.float_list_feature(xmins), 'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs), 'image/object/bbox/ymin': dataset_util.float_list_feature(ymins), 'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs), 'image/object/class/text': dataset_util.bytes_list_feature(classes_text), 'image/object/class/label': dataset_util.int64_list_feature(classes), })) return tf_example def main(_): writer = tf.python_io.TFRecordWriter(FLAGS.output_path) path = os.path.join(FLAGS.image_dir) examples = pd.read_csv(FLAGS.csv_input) grouped = split(examples, 'filename') for group in grouped: tf_example = create_tf_example(group, path) writer.write(tf_example.SerializeToString()) writer.close() output_path = os.path.join(os.getcwd(), FLAGS.output_path) print('Successfully created the TFRecords: {}'.format(output_path)) if __name__ == '__main__': tf.app.run()
改为相对路径:
将.csv 和图片集拷贝到generate_tfrecord文件夹中:
cpppython generate_tfrecord.py --csv_input=raccoon_labels.csv --output_path=train.record --image_dir=data-picture
第2中方法:
os.chdir() 方法用于改变当前工作目录到指定的路径。
os.chdir('D:\labelimg\labelImg-master')
python generate_tfrecord.py --csv_input=data-xml\train\raccoon_labels.csv --output_path=data-xml\train\train.record --image_dir=data-picture
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。