ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

手把手教你:铁路异物侵入的目标检测系统

2022-04-15 09:03:26  阅读:296  来源: 互联网

标签:手把手 检测 异物 classes FLAGS 图像 侵入 data 图片


系列文章

手把手教你:图像识别的垃圾分类系统

手把手教你:人脸识别考勤系统

手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类


@

目录


一、项目简介

本文主要介绍如何使用python搭建:一个基于YOLOv3的铁路异物侵入的图像目标检测系统

项目只是用铁路异物检测作为抛砖引玉,其中包含了图像分类图像检测的相关代码。

如各位童鞋需要更换训练数据,完全可以根据源码将图像和标注文件更换即可直接运行。

博主也参考过网上图像检测和图像分类的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个预测系统即可。

本文只会告诉你如何快速搭建一个基于yolov3的图像分类系统并运行,原理的东西可以参考其他博主

也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。

如果您有以上想法,那就找对地方了!

本次项目涉及2个步骤:

  1. 第一步通过一个cnn的分类器,区分出哪些是异常图片哪些是正常图片。
  2. 第二步针对异常图片进行目标检测。

不多废话,直接进入正题!

二、项目检测结果

检测结果1


检测结果2


检测结果3

三、环境安装

1.环境要求

本项目开发IDE使用的是:Anaconda中的jupyter notebook,大家可以直接csdn搜索安装指南非常多,这里就不再赘述。

因为本项目基于TensorFlow因此需要以下环境:

  • tensorflow >= 2.0
  • pandas
  • scikit-learn
  • numpy
  • OpenCV2
  • matplotlib

2.环境安装示例

环境都可以通过pip进行安装。如果只是想要功能跑起来,这边建议tensorflow安装cpu版的。

如果没使用过pycharm通过pip安装包的同学可以参考如下:

环境安装方法
点开“终端”,然后通过pip进行安装tensorflow,其他环境包也可以通过上面的方法安装。

四、重要代码介绍

环境安装好后就可以打开jupyter notebook开始愉快的执行代码了。由于代码众多,博客中就不放入最终代码了,有需要的童鞋可以在博客最下方找到下载地址。

1.图像分类

本项目涉及2个步骤并有一定对比,第一步是根据给定的图像对图像进行分类,找出有异物的图像。

1.1 加载图像数据,预处理,图像数据增强

#数据预处理
#图片加载
# 读取图片+数据处理函数
def read_img(path):
    print("数据集地址:"+path)
    imgs = []
    labels = []
    for root, dirs, files in os.walk(path):
        for file in tqdm(files):
            # print(path+'/'+file+'/'+folder)
            # 读取的图片
            img = cv2.imread(os.path.join(root, file))
            # skimage.transform.resize(image, output_shape)改变图片的尺寸
            img = cv2.resize(img, (w, h))
            # 将读取的图片数据加载到imgs[]列表中
            imgs.append(img)
            # 将图片的label加载到labels[]中,与上方的imgs索引对应
            labels.append(str(os.path.basename(root)))
    return imgs,labels
# 调用读取图片的函数,得到图片和labels的数据集
data1, label1 = read_img(train_img_url)

原始图片数量:
1: 1090, 0: 572
其中0为有异物的图片,1为无异物的正常图片。

完成数据增强后数量:
图像数量

1.2 分类模型训练

分类模型训练

1.3 分类模型评估

分类模型评估

2.图像检测

完成图像分类后,我们可以使用图像检测的结果做个对比,验证同样数据集情况下,分类和检测哪个效果更好。

1.目标检测数据构建

"""
设置相关文件位置
"""
data_dir = 'data/yolo_data'
# 生成训练数据
split = 'train'
output_file = 'data/tf_data/my_train_dlsb.tfrecord'
classes = 'data/yolo_data/ImageSets/my_class.names'
FLAGS = flags.FLAGS
FLAGS([sys.argv[0]])
FLAGS.data_dir = data_dir
FLAGS.split = split
FLAGS.output_file = output_file
FLAGS.classes = classes
# 生成tf数据集
create_data()

2.目标检测模型训练

# 预训练权重
weights = 'function/yolov3/checkpoints/yolov3.tf'
weights_num_classes = 80
# flags设置
FLAGS.dataset = dataset
FLAGS.val_dataset = val_dataset
FLAGS.classes = classes
FLAGS.num_classes = num_classes
FLAGS.mode = mode
FLAGS.transfer = transfer
FLAGS.batch_size = batch_size
FLAGS.epochs = epochs
FLAGS.weights = weights
FLAGS.weights_num_classes = weights_num_classes

try:
    history,model = run_model_train()
except SystemExit:
    pass

训练过程中我们可以打开tensorboard查看训练进度:
tensorboard:目标检测模型训练

3.目标检测结果

目标检测结果

五、训练自己的数据

1.项目目录如下

项目目录

2.分类模型训练

需要将自己的数据集整理后放入以下项目目录中:

./data/img/

下目录设置,一个类别的图片放入一个文件夹中,如下:
分类图片路径
然后执行

1分类识别模型训练.ipynb

即可开始分类模型训练


3.目标检测模型训练

需要将自己的数据集整理后放入以下项目目录中:

./data/yolo_data/

图像检测目录
其中:

  1. Annotations:放入图像标注的xml文件,命名方式为:图片名.xml
  2. ImageSets:图像预处理后生成的文件,放数据时不用管它。
  3. JPEGImages:图像数据,命名方式:图片名.jpg

需要注意的是Annotations中xml文件需要和JPEGImages中图片文件名一一对应。
图片标注的xml文件格式如下:

object中:
name为标注的名称
矩形框为:xmin,ymin,xmax,ymax。分别代表标注矩形框左上角坐标和右下角坐标。

<annotation>
	<folder>异物</folder>
	<filename>abnormal (1).jpg</filename>
	<path></path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>720</width>
		<height>720</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>Plastic board</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>268</xmin>
			<ymin>422</ymin>
			<xmax>536</xmax>
			<ymax>536</ymax>
		</bndbox>
	</object>
</annotation>

按格式整理好数据后执行:

3目标检测数据预处理.ipynb

六、完整代码地址

由于项目代码量和数据集较大,感兴趣的同学可以下载完整代码,使用过程中如遇到任何问题可以在评论区评论或者私信我,我都会一一解答。

完整代码下载:
【代码分享】手把手教你:铁路异物侵入的目标检测系统

标签:手把手,检测,异物,classes,FLAGS,图像,侵入,data,图片
来源: https://www.cnblogs.com/dawudexiaowu/p/16147477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有