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

原文地址

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

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

@TOC
</font>
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

一、项目简介

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

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

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

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

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

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

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

本次项目涉及2个步骤:

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

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

<font color=#999AAA >不多废话,直接进入正题!

二、项目检测结果

[图片上传失败...(image-b0f6b5-1649984110815)]
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

[图片上传失败...(image-53b7-1649984110815)]
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

[图片上传失败...(image-4ed13d-1649984110815)]

三、环境安装

1.环境要求

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

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

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

2.环境安装示例

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

<font color=#999AAA >如果没使用过pycharm通过pip安装包的同学可以参考如下:

[图片上传失败...(image-62112a-1649984110815)]
点开“终端”,然后通过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为无异物的正常图片。

完成数据增强后数量:
[图片上传失败...(image-b6ddf3-1649984110815)]

1.2 分类模型训练

[图片上传失败...(image-7efeb1-1649984110815)]

1.3 分类模型评估

[图片上传失败...(image-69c0db-1649984110815)]

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查看训练进度:
[图片上传失败...(image-9982e1-1649984110815)]

3.目标检测结果

[图片上传失败...(image-2390f5-1649984110815)]

五、训练自己的数据

1.项目目录如下

[图片上传失败...(image-e6978e-1649984110815)]

2.分类模型训练

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

./data/img/

下目录设置,一个类别的图片放入一个文件夹中,如下:
[图片上传失败...(image-1208f1-1649984110815)]
然后执行

1分类识别模型训练.ipynb

即可开始分类模型训练

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

3.目标检测模型训练

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

./data/yolo_data/

[图片上传失败...(image-46aaa3-1649984110815)]
其中:

  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

六、完整代码地址

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容