RetinaNet 迁移学习到自标数据集
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 迁移学习到自标数据集的更多相关文章
- 【47】迁移学习(Transfer Learning)
迁移学习(Transfer Learning) 如果你要做一个计算机视觉的应用,相比于从头训练权重,或者说从随机初始化权重开始,如果你下载别人已经训练好网络结构的权重,你通常能够进展的相当快,用这个作 ...
- NASNet学习笔记—— 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; 核心二:采用resnet和Inception重复使用block结构思想; 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。
from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...
- 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)
基于深度学习和迁移学习的识花实践(转) 深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...
- PyTorch迁移学习-私人数据集上的蚂蚁蜜蜂分类
迁移学习的两个主要场景 微调CNN:使用预训练的网络来初始化自己的网络,而不是随机初始化,然后训练即可 将CNN看成固定的特征提取器:固定前面的层,重写最后的全连接层,只有这个新的层会被训练 下面修改 ...
- 使用deeplabv3+训练自己数据集(迁移学习)
概述 在前边一篇文章,我们讲了如何复现论文代码,使用pascal voc 2012数据集进行训练和验证,具体内容可以参考<deeplab v3+在pascal_voc 2012数据集上进行训练& ...
- 《A Survey on Transfer Learning》迁移学习研究综述 翻译
迁移学习研究综述 Sinno Jialin Pan and Qiang Yang,Fellow, IEEE 摘要: 在许多机器学习和数据挖掘算法中,一个重要的假设就是目前的训练数据和将来的训练数据 ...
- 迁移学习-Transfer Learning
迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...
- [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
机器学习策略-多任务学习 Learninig from multiple tasks 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.7 迁移学习 Transfer Learninig 神 ...
- Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合)
这是在kaggle上的一个练习比赛,使用的是ImageNet数据集的子集. 注意,mxnet版本要高于0.12.1b2017112. 下载数据集. train.zip test.zip labels ...
随机推荐
- js尾巴
js中根据id获取标签: /** * 根据id获取标签 * @param {string}id * @returns {object} */ function $(id) { return typeo ...
- 配置tomcat的用户名和密码
<role rolename="manager-gui"/> <role rolename="manager-script"/> < ...
- 怎么在一台电脑上安装win7与centos7双系统
对于用习惯windows系统的小伙伴们来说,好像Linux系统的命令操作感觉会比较神秘,进而有部分小伙伴就想说也学一学LInux操作系统.但是苦于资源的问题--就一台计算机,一块硬盘,担心说如果安装了 ...
- vue中的slot(插槽)
vue中的插槽----slot 什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. ...
- navicat mysql 存储过程
存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. 一.基本数据类型:略 二.变量: 自定义变量:DECLARE a INT ; SET a=100; 可用以 ...
- ubuntu远程桌面
用Linux已经有很长一段时间,但主要用于嵌入式开发(用交叉工具链进行版本编译),所以用命令行就可以了,而且敲的最多的命令就是make.最近开始搭建TensorFlow的开发环境,大部分工作都是命令行 ...
- BigData:值得了解的十大数据发展趋势
当今,世界无时无刻不在发生着变化.对于技术领域而言,普遍存在的一个巨大变化就是为大数据(Big data)打开了大门,并应用大数据技相关技术来改善各行业的业务并促进经济的发展.目前,大数据的作用已经上 ...
- Oracle入门第六天(下)——高级子查询
一.概述 主要内容: 二.子查询介绍 1.简单子查询(WHERE子查询) SELECT last_name FROM employees WHERE salary > (SELECT salar ...
- Oracle入门第四天(上)——表管理与数据处理
一.常见数据库对象 1.基本对象 对应的对象英文名参考:https://docs.oracle.com/cd/B19306_01/server.102/b14220/intro.htm#sthref6 ...
- 20155236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155236 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 因为我用的是windo ...