简介

  • FLIR在2022.1.19发布了新版的FLIR_ADAS_v2,相较于上一代的FLIR_1_3,新版有着更多的类别和数量更丰富的图像。但现有的博客中关于新版FLIR的使用教学少只有少,加上暑假期间曾使用FLIR_ADAS_v2来训练模型以提高其对红外热图像的识别能力,便决定记录分享一下。
  • 本文章主要介绍如何使用FLIR_ADAS_v2中的thermal image来训练基于pytorchFaster RCNN模型
  • 若有不足,也欢迎大家指正批评

FLIR_ADAS_v2数据集下载

  • 官方下载链接:FREE - FLIR Thermal Dataset for Algorithm Training | Teledyne FLIR
  • 如果官方下载失败可以使用笔者上传的百度云
    • 链接: https://pan.baidu.com/s/1ooLmEm39Y_LSinU860Zj1w?pwd=3cp3 提取码: 3cp3 复制这段内容后打开百度网盘手机App,操作更方便哦

Faster RCNN模型下载

  • 在此使用的Faster RCNN模型链接为:GitHub - bubbliiiing/faster-rcnn-pytorch: 这是一个faster-rcnn的pytorch实现的库,可以利用voc数据集格式的数据进行训练。

数据集的预处理

将json文件转换为xml文件

  • 本文章使用的是FLIR_ADAS_v2数据集中的thermal image
  • FLIR_ADAS_v2提供的annotation文件是coco.json
  • 我们需要将json文件转换为Faster RCNN所需要的xml文件
  • 网上将json文件转换为xml文件的代码很多,我在此展示我所借鉴的,仅供参考
# translate coco_json to xml
import os
import time
import json
import pandas as pd
from tqdm import tqdm
from pycocotools.coco import COCOdef trans_id(category_id):names = []namesid = []for i in range(0, len(cats)):names.append(cats[i]['name'])namesid.append(cats[i]['id'])# print('id:{1}\t {0}'.format(names[i], namesid[i]))index = namesid.index(category_id)return indexroot = r''  # 你下载的 COCO 数据集所在目录
dataType = '2019'
anno = r'' # annotation文件所在的位置
xml_dir = r'' # 生成的xml文件的储存位置coco = COCO(anno)  # 读文件
cats = coco.loadCats(coco.getCatIds())  # 这里loadCats就是coco提供的接口,获取类别# Create anno dir
dttm = time.strftime("%Y%m%d%H%M%S", time.localtime())
# if os.path.exists(xml_dir):
#     os.rename(xml_dir, xml_dir + dttm)
# os.mkdir(xml_dir)with open(anno, 'r') as load_f:f = json.load(load_f)imgs = f['images']  # json文件的img_id和图片对应关系 imgs列表表示多少张图cat = f['categories']
df_cate = pd.DataFrame(f['categories'])  # json中的类别
df_cate_sort = df_cate.sort_values(["id"], ascending=True)  # 按照类别id排序
categories = list(df_cate_sort['name'])  # 获取所有类别名称
print('categories = ', categories)
df_anno = pd.DataFrame(f['annotations'])  # json中的annotationfor i in tqdm(range(len(imgs))):  # 大循环是images所有图片xml_content = []file_name = imgs[i]['file_name']  # 通过img_id找到图片的信息height = imgs[i]['height']img_id = imgs[i]['id']width = imgs[i]['width']# xml文件添加属性xml_content.append("<annotation>")xml_content.append(" <folder>VOC2007</folder>")xml_content.append("    <filename>" + file_name.split('/')[1].split('.')[0] + '.jpg' + "</filename>")xml_content.append("  <size>")xml_content.append("        <width>" + str(width) + "</width>")xml_content.append("       <height>" + str(height) + "</height>")xml_content.append("    </size>")xml_content.append("   <segmented>0</segmented>")# 通过img_id找到annotationsannos = df_anno[df_anno["image_id"].isin([img_id])]  # (2,8)表示一张图有两个框for index, row in annos.iterrows():  # 一张图的所有annotation信息bbox = row["bbox"]category_id = row["category_id"]# cate_name = categories[trans_id(category_id)]cate_name = cat[category_id-1]['name']# add new objectxml_content.append("<object>")xml_content.append("<name>" + cate_name + "</name>")xml_content.append("<pose>Unspecified</pose>")xml_content.append("<truncated>0</truncated>")xml_content.append("<difficult>0</difficult>")xml_content.append("<bndbox>")xml_content.append("<xmin>" + str(int(bbox[0])) + "</xmin>")xml_content.append("<ymin>" + str(int(bbox[1])) + "</ymin>")xml_content.append("<xmax>" + str(int(bbox[0] + bbox[2])) + "</xmax>")xml_content.append("<ymax>" + str(int(bbox[1] + bbox[3])) + "</ymax>")xml_content.append("</bndbox>")xml_content.append("</object>")xml_content.append("</annotation>")x = xml_contentxml_content = [x[i] for i in range(0, len(x)) if x[i] != "\n"]### list存入文件xml_path = os.path.join(xml_dir, file_name.replace('.jpg', '.xml'))with open(xml_path, 'w+', encoding="utf8") as f:f.write('\n'.join(xml_content))xml_content[:] = []
  • 也可以直接使用笔者转换好的xml文件

    • 链接: https://pan.baidu.com/s/1hCqC1tYXbynEKVGDwg4Jvw?pwd=fves 提取码: fves 复制这段内容后打开百度网盘手机App,操作更方便哦

对数据集进行分组

  • model_data文件夹下新建flir.txt文件,将所需识别的class键入

    • 因为笔者的项目需求,所以键入了FLIR_ADAS_v2的category中提到的80个类。如有需要,可直接下载笔者所用的txt文件

      • 链接: https://pan.baidu.com/s/1TU5OBbMX_5wvSOLscrLTdA?pwd=6yae 提取码: 6yae 复制这段内容后打开百度网盘手机App,操作更方便哦
  • 将生成的xml文件放入VOCdevkit -> Annotations文件夹下

  • 将对应的图片放入VOCdevkit -> JPEGImages文件夹下

  • 生成模型所需的训练文件
    • 检查VOCdevkit -> ImageSets->Main文件夹下及VOCdevkit文件夹下是否有txt文件,若有请删去

  • 点击 voc_annotation.py 文件,将 class_path 更改为类文件路径,即 model_data/flir.txt

    • 根据自己的项目需求对trainval_percenttrain_percent进行更改,若无特殊需求,可保持默认

  • 运行 voc_annotation.py 即可生成刚才所删除的txt文件,并会生成每个类所包含的数量 

开始训练

  • 点击 train.py 文件,将 classes_path 设置为类文件所在路径,即 model_data/flir.txt
  • 根据自己的需求和设备性能对Epochbatch_size等参数进行修改
  • 运行 train.py 文件即可开始训练啦!

训练结果分析

  • logs 文件夹下会生成权重文件 pth 和 报告文件

打开tfevents文件

  • 将以下代码中的event-dir换为tfevents所属文件夹的绝对路径(不是tfevents的相对路径!!!),并在命令行输入(如果环境为anaconda则在对应环境下输入)

    • 若失败请先导入tensorboard库
tensorboard --logdir=event-dir
  • 示例

  • 复制链接到浏览器中,一般为 http://localhost:6006/
  • 即可查看详细数据

使用训练权重进行图像识别

导入需要进行识别的图像并新建图像输出路径

  • 新建 img 文件夹,并导入需要进行识别的图像

  • 新建 img_out 文件夹用于储存输出图片

修改 frcnn.py 文件

  • 修改权重文件和类文件  

修改 predict.py 文件

  • 将模式修改为批量识别  
  • 修改图像的输入路径和输出路径  

运行 predict.py 文件

  • 控制台 
  • 输出图片

参考:

  • 本文章参考了CSDN博主 Fighting_1997 大佬的原创文章​​​​​
  • 祝大佬身体健康,万事如意!

使用新版FLIR (FLIR_ADAS_v2) 训练Faster RCNN模型相关推荐

  1. faster R-CNN模型实现过程

    faster R-CNN=RPN+fast R-CNN ①将fm送入RPN(region proposal network),RPN也是一个卷积神经网络,它对于input feature map的每个 ...

  2. 人工智能:物体检测之Faster RCNN模型

    人工智能:物体检测之Faster RCNN模型 物体检测 Faster RCNN模型 简介 卷积层 RPN Roi Pooling Classifier 物体检测 什么是物体检测 物体检测应用场景 物 ...

  3. Python视觉深度学习系列教程 第三卷 第14章 从头开始训练Faster R-CNN

            第三卷 第十四章 从头开始训练Faster R-CNN 本章的目的是达到以下四点: 1.在您的系统上安装和配置 TensorFlow Object Detection API. 2.在 ...

  4. 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD

    为什么80%的码农都做不了架构师?>>>    Faster R-CNN.R-FCN 和 SSD 是三种目前最优且应用最广泛的目标检测模型,其他流行的模型通常与这三者类似.本文介绍了 ...

  5. [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法

    最近用到Faster RCNN进行目标检测,前前后后两周把RCNN,SPPNet,Fast RCNN和Faster RCNN大体调查了一遍,准备写一个RCNNs系列,后面还要加上今年最新的Mask R ...

  6. Faster RCNN代码理解(Python) ---训练过程

    最近开始学习深度学习,看了下Faster RCNN的代码,在学习的过程中也查阅了很多其他人写的博客,得到了很大的帮助,所以也打算把自己一些粗浅的理解记录下来,一是记录下自己的菜鸟学习之路,方便自己过后 ...

  7. faster rcnn在自己的数据集上训练

    本文是一个总结,参考了网上的众多资料,汇集而成,以供自己后续参考. 一般说来,训练自己的数据,有两种方法:第一种就是将自己的数据集完全改造成VOC2007的形式,然后放到py-faster-rcnn/ ...

  8. maskrcnn用于目标检测_用自己的数据训练Mask R-CNN目标检测/分割模型

    摘要: 本文讲述了如何使用Mask-CNN对图像中的大量数据进行目标识别与目标分割. 计算机非常擅长数字运算,但对分析图像中的大量数据束手无策.直到最近找到了解决方法,即创建图像处理单元库,利用数千个 ...

  9. 将faster RCNN从github上下载的frozen模型转换为tflite时候报错

    转换代码如下: tflite_convert   --graph_def_file=/home/sir/project/models/faster/frozen_inference_graph.pb  ...

最新文章

  1. Django_前端显示Matplotlib画的图(亲测)
  2. 写了一阵子多线程之后需要注意的几点
  3. oracle dbms_profiler,Oracle数据库中使用DBMS_PROFILER进行调优
  4. Web框架——Flask系列之json、jsonify模块的使用(十四)
  5. PHP在线无人值守源码交易网站源码,集成支付宝微信接口
  6. allure-pytest 测试报告分享给大家
  7. python null怎么表示_[Python] @NotNull装饰器如何写比较好?
  8. 软件企业通常会犯近视和远视两个错误
  9. 【优化求解】基于matlab粒子群算法求解函数极值问题【含Matlab源码 1202期】
  10. 【第二章 | 进程的描述与控制】《操作系统 慕课版》课后答案 + 复习
  11. 向量积和数量积常用知识
  12. 猫哥教你写爬虫 045--协程
  13. 电脑如何安装无线网卡?
  14. 液晶显示器偏光膜的基本原理
  15. 使用ConnectBot开源项目在android设备上管理你的linux系统
  16. 在线CAD图纸批注功能方案比较与实现
  17. 安装Imatest出现的bug及解决方案
  18. 构建宽带城域网的基本技术与方案
  19. SWPUCTF2022 校内赛道部分 wp
  20. Esxi下建vm磁盘共享

热门文章

  1. 解决WIN10系统电脑右下角网络图标不见网络无法连接的方法总结(2021.1030)
  2. 一文熟悉 Go 的循环结构 —— for 循环
  3. 高德地图 去掉左下角logo
  4. 慧据价值 链接未来丨第八届数据技术嘉年华大会全议程精彩呈现
  5. 解决webpack打包css时CssSyntaxError的问题
  6. 电磁元件(电阻,电容与电感)
  7. mysql的字段空格是null_空字符与空格字符、NULL、空字符串
  8. 用递归法实现多重网格法——MATLAB
  9. FMG首席执行官被控误导股市
  10. php 图片印章_PHP实现中文圆形印章特效