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.h5 到snapshot/

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

此次训练起点是预训练过的 resnet50_coco_best_v2.1.0.h5,steps=6000,epochs=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. js尾巴

    js中根据id获取标签: /** * 根据id获取标签 * @param {string}id * @returns {object} */ function $(id) { return typeo ...

  2. 配置tomcat的用户名和密码

    <role rolename="manager-gui"/> <role rolename="manager-script"/> < ...

  3. 怎么在一台电脑上安装win7与centos7双系统

    对于用习惯windows系统的小伙伴们来说,好像Linux系统的命令操作感觉会比较神秘,进而有部分小伙伴就想说也学一学LInux操作系统.但是苦于资源的问题--就一台计算机,一块硬盘,担心说如果安装了 ...

  4. vue中的slot(插槽)

    vue中的插槽----slot 什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. ...

  5. navicat mysql 存储过程

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. 一.基本数据类型:略 二.变量: 自定义变量:DECLARE   a INT ; SET a=100; 可用以 ...

  6. ubuntu远程桌面

    用Linux已经有很长一段时间,但主要用于嵌入式开发(用交叉工具链进行版本编译),所以用命令行就可以了,而且敲的最多的命令就是make.最近开始搭建TensorFlow的开发环境,大部分工作都是命令行 ...

  7. BigData:值得了解的十大数据发展趋势

    当今,世界无时无刻不在发生着变化.对于技术领域而言,普遍存在的一个巨大变化就是为大数据(Big data)打开了大门,并应用大数据技相关技术来改善各行业的业务并促进经济的发展.目前,大数据的作用已经上 ...

  8. Oracle入门第六天(下)——高级子查询

    一.概述 主要内容: 二.子查询介绍 1.简单子查询(WHERE子查询) SELECT last_name FROM employees WHERE salary > (SELECT salar ...

  9. Oracle入门第四天(上)——表管理与数据处理

    一.常见数据库对象 1.基本对象 对应的对象英文名参考:https://docs.oracle.com/cd/B19306_01/server.102/b14220/intro.htm#sthref6 ...

  10. 20155236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155236 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 因为我用的是windo ...