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

系列文章

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

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

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

@

一、项目简介

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

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

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

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

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

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

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

本次项目涉及2个步骤:

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

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

二、项目检测结果

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

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

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

三、环境安装

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查看训练进度:

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

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。分别代表标注矩形框左上角坐标和右下角坐标。


    异物
    abnormal (1).jpg

        Unknown

        720
        720
        3

    0

        Plastic board
        Unspecified
        0
        0

            268
            422
            536
            536

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

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

六、完整代码地址

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

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

Original: https://www.cnblogs.com/dawudexiaowu/p/16147477.html
Author: 小屋打AI
Title: 手把手教你:铁路异物侵入的目标检测系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/596487/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球