系列文章
手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类
@
- 系列文章
- 一、项目简介
- 二、项目检测结果
- 三、环境安装
- 1.环境要求
- 2.环境安装示例
- 四、重要代码介绍
- 1.图像分类
- 2.图像检测
- 五、训练自己的数据
- 1.项目目录如下
- 2.分类模型训练
- 3.目标检测模型训练
- 六、完整代码地址
一、项目简介
本文主要介绍如何使用python搭建:一个基于YOLOv3的铁路异物侵入的 图像目标检测系统。
项目只是用铁路异物检测作为抛砖引玉,其中包含了图像分类图像检测的相关代码。
如各位童鞋需要更换训练数据,完全可以根据源码将图像和标注文件更换即可直接运行。
博主也参考过网上图像检测和图像分类的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个预测系统即可。
本文只会告诉你如何快速搭建一个基于yolov3的图像分类系统并运行,原理的东西可以参考其他博主。
也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。
如果您有以上想法,那就找对地方了!
本次项目涉及2个步骤:
- 第一步通过一个cnn的分类器,区分出哪些是异常图片哪些是正常图片。
- 第二步针对异常图片进行目标检测。
不多废话,直接进入正题!
二、项目检测结果
三、环境安装
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/
其中:
- Annotations:放入图像标注的xml文件,命名方式为:图片名.xml
- ImageSets:图像预处理后生成的文件,放数据时不用管它。
- 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/
转载文章受原作者版权保护。转载请注明原作者出处!