Keras-RetinaNet

在自标数据集 alidq 上训练 detection model RetinaNet

模型部署与环境配置

参考README

数据预处理

数据统计信息:

  • 类别:gun1, gun2
  • 有效数据量:23216
  • 测试集大小:1000
  • 训练验证集大小:22216

由于此次 detection 任务比较简单,为了实验 fine tuning 对模型的影响,我们将训练数据分为 3 个部分,实验在第 1 部分数据上完成。

Part 1 训练数据统计量:

  • gun1 数量:2826
  • gun2 数量:3170
  • 预处理需要将标注数据文件格式转换为固定格式的 csv 文件,schema 为:

    path/to/imagefile,xmin,ymin,xmax,ymax,classname
  • 我们标注的 Raw data 中包含的信息量是足够的,但需要一些针对模型的数据格式调整;
  • 除了 Bounding Box 的坐标和类别名,我们还需要定义类别名到类别ID 映射(class name to class ID mapping),ID 从 0 开始。在这次的例子里很简单,在数据集目录新建一个 csv 文件,其内容为:

    gun1,0

    gun2,1
  • 需要提出的一点是:如果没有特殊要求,我们交付的数据中,Bounding Box 的坐标最好按照普遍通用的顺序处理好,即xmin,ymin,xmax,ymax
  • 预处理完成后,可以使用 keras-retinanet 中的调试工具 debug.py 检查 csv 是否有效且观察标注框在图中的效果:
$ python keras-retinanet/bin/debug.py csv
/path/to/annotations /path/to/class_label_mapping

$ retinanet-debug csv /path/to/annotations /path/to/class_label_mapping

注:无效标注的框呈红色,有效标注为绿色。

训练

下载在 coco 数据集上训练好的模型 resnet50_coco_best_v2.1.0.h5snapshot/

数据准备完成且确认无误后就可以开始训练了。

此次训练起点是预训练过的 resnet50_coco_best_v2.1.0.h5steps=6000epochs=5,在 K80 显卡训练的时间大概是 5-6 小时。

$ python keras-retinanet/bin/train.py --weights snapshots/resnet50_coco_best_v2.1.0.h5 --steps 6000 --epochs 5 --gpu 0 csv /path/to/annotations /path/to/class_label_mapping
$ retinanet-train --weights snapshots/resnet50_coco_best_v2.1.0.h5 --steps 6000 --epochs 5 --gpu 0 csv /path/to/annotations /path/to/class_label_mapping

评价

训练完成后,我们需要用 1000 条测试数据对模型的 performance 做出评价。我在准备评价数据时,发现标注数据(我们标注的 Ground Truth)存在大约 5% 的错误分类。这些错误分类是我通过人工辨识 model 预测的结果与 GT 的差别而得到的。也就是说,刚刚训练好的 model 帮助我找到了很多标注数据的错误标注!

虽然这些错误标注在训练的时候不会产生太大影响(否则也不会帮我找错),但在做评价时会严重影响模型的 performance。可能需要借助刚训练好的 model 对 1000 个测试数据做清洗。


Written with StackEdit.

RetinaNet 迁移学习到自标数据集的更多相关文章

  1. 【47】迁移学习(Transfer Learning)

    迁移学习(Transfer Learning) 如果你要做一个计算机视觉的应用,相比于从头训练权重,或者说从随机初始化权重开始,如果你下载别人已经训练好网络结构的权重,你通常能够进展的相当快,用这个作 ...

  2. NASNet学习笔记——   核心一:延续NAS论文的核心机制使得能够自动产生网络结构;    核心二:采用resnet和Inception重复使用block结构思想;    核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。

    from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...

  3. 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)

    基于深度学习和迁移学习的识花实践(转)   深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...

  4. PyTorch迁移学习-私人数据集上的蚂蚁蜜蜂分类

    迁移学习的两个主要场景 微调CNN:使用预训练的网络来初始化自己的网络,而不是随机初始化,然后训练即可 将CNN看成固定的特征提取器:固定前面的层,重写最后的全连接层,只有这个新的层会被训练 下面修改 ...

  5. 使用deeplabv3+训练自己数据集(迁移学习)

    概述 在前边一篇文章,我们讲了如何复现论文代码,使用pascal voc 2012数据集进行训练和验证,具体内容可以参考<deeplab v3+在pascal_voc 2012数据集上进行训练& ...

  6. 《A Survey on Transfer Learning》迁移学习研究综述 翻译

    迁移学习研究综述 Sinno Jialin Pan and Qiang Yang,Fellow, IEEE 摘要:   在许多机器学习和数据挖掘算法中,一个重要的假设就是目前的训练数据和将来的训练数据 ...

  7. 迁移学习-Transfer Learning

    迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...

  8. [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习

    机器学习策略-多任务学习 Learninig from multiple tasks 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.7 迁移学习 Transfer Learninig 神 ...

  9. Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合)

    这是在kaggle上的一个练习比赛,使用的是ImageNet数据集的子集. 注意,mxnet版本要高于0.12.1b2017112. 下载数据集. train.zip test.zip labels ...

随机推荐

  1. Linux 内核版本号查看

    简要:1,lsb_release -a 查看linux系统版本 2,uname -a 查看内核版本

  2. Intellij IDEA 2018.2.2 SpringBoot热启动 (Maven)

    一.IDEA 工具配置 1. 打开IDEA 设置界面,选择编译,按图打勾. 2 . 然后 Shift+Ctrl+Alt+/,选择Registry 3 . compiler.automake.allow ...

  3. SpringMVC中controller的几种返回值

    String :跳转到对应的返回值中. return “/index”: ModelAndView: 控制页面跳转方式: 1. ModelAndView modelAndView = new Mode ...

  4. WAPM环境配置(PHP入门2)

    WAMP介绍 W:Window:开源免费 A:Apache:开源免费 M:MySQL:开源免费 P:PHP:开源免费 Apache下载 Apache下载地址:https://www.apachehau ...

  5. ansible批量修改用户密码

    实现批量修改目标主机多个用户密码: --- - hosts: testchanange passwd gather_facts: false tasks: - name: change you pas ...

  6. .net core 实践笔记(三)--封装底层

    前言: 有了前面的工作,简单的架子基本搭建起来了,因为条件有限,只能先测试SqlServer的了,源码放出来,也希望有兴趣的伙伴可以一起改善,相信可以成为未来进阶架构师的第一步,自己有小项目的时候可以 ...

  7. iOS 封装一个带复制功能的UILabel

    我们发现UILabel不在为我们提供长按弹出复制等操作了, 我们来继承UILabel自己写一个带复制功能的UILabel. 代码: #import "CopyLabel.h" @i ...

  8. Hadoop启动dataNode失败,却没有任何报错

    问题描述: centos7,伪分布模式下,启动datanode后,通过JPS查看发现没有相关进程,在日志文件里也没有任何提示.通过百度,网上一堆说什么vesion 的ID不一致,不能解决我的问题. 经 ...

  9. Delphi调用爷爷类的方法

    Delphi通过inherited 可以调用父类的方法,但是没有提供直接调用父类的父类的方法(爷爷类),通过变通的方式实现如下: 假设父类是TFather,爷爷类TGrand,调用爷爷类的Write方 ...

  10. UART学习之路(一)基本概念

    第一篇博客,首先记录一下这一个多星期来的学习内容. UART学习之路第一篇,是UART的基本概念介绍.后续会用STM32F103的串口与PC机通信.最后使用Verilog HDL写出串口发送模块和接收 ...