技术标签: Object Detection 人工智能 DeepLearning Faster R-CNN
上次使用 Faster R-CNN 训练了一个 VGG-16 的网络,为了再提升识别的准确率,利用 ResNet 网络在同样的数据上面训练了多一次。
基本的过程和在训练 VGG-16 网络时差不多,可参照 使用自己的数据训练 Faster R-CNN 的 VGG-16 模型
在我的 Github 上面可以下载我使用的文件,当然你也可以使用不同的 ResNet 网络结构。
1. cd $FRCN_ROOT/lib/rpn/generate_anchors.py
# 在 37 行:
def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2**np.arange(3, 6)):
# 修改为:
def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2**np.arange(1, 6)):
2. cd $FRCN_ROOT/lib/rpn/anchor_target_layer.py
# 在 28 行:
anchor_scales = layer_params.get('scales', (8, 16, 32))
# 修改为:
anchor_scales = layer_params.get('scales', (2, 4, 8, 16, 32))
3. cd $FRCN_ROOT/lib/rpn/proposal_layer.py
# 在 29 行:
anchor_scales = layer_params.get('scales', (8, 16, 32))
# 修改为:
anchor_scales = layer_params.get('scales', (2, 4, 8, 16, 32))
4. pascal_voc.py、imdb.py、train.prototxt、test.prototxt、.pt文件
的修改参考 使用自己的数据训练 Faster R-CNN 的 VGG-16 模型 。
5. 因为我们使用了 5 个尺度的 anchors,所以之前的 9 个 anchors 变成了 3*5=15 个。
修改 prototxt 和 pt文件
,将其中的 18 换成 30。
layer {
name: "rpn_cls_score"
type: "Convolution"
bottom: "rpn/output"
top: "rpn_cls_score"
param {
lr_mult: 1.0 }
param {
lr_mult: 2.0 }
convolution_param {
num_output: 30 # 2(bg/fg) * 9(anchors) ///将 18 换成 30
kernel_size: 1 pad: 0 stride: 1
weight_filler {
type: "gaussian" std: 0.01 }
bias_filler {
type: "constant" value: 0 }
}
下载 ImageNet 预训练文件:ResNet-50.v2.caffemodel
删除缓存文件:
$FRCN_ROOT/data/VOCdevkit2007/annotations_cache/annots.pkl
和
$FRCN_ROOT/data/cache
下的 pkl
文件
如果不清除缓存可能会报错。
参照 VGG16 的训练命令:
cd $FRCN_ROOT
./experiments/scripts/faster_rcnn_end2end.sh 0 ResNet-50 pascal_voc
注意:第三个参数 ‘ResNet-50’,一定要和你的文件夹名字对应,比如我的文件放在$FRCN_ROOT/models/pascal_voc/ResNet-50
里面,所以我的第三个参数就为我目录的名称。
由于 ResNet-50 的网络更深,训练的时间也需要更久,每一次迭代大约需要 0.5s ,训练这个网络我用了大概 10 个小时,但效果会比用 VGG 16 的好,主要是对小尺度的物体检测更加准确了。
这是我训练时各类的 AP :
文章浏览阅读913次。调度中心的代码启动源码是从:XxlJobAdminConfig 入口;直接进入: xxlJobScheduler.init();第一个: initI18n() 处理国际化;第二个:JobRegistryMonitorHelper.getInstance().start(); 创建启动后台线程来维护在线的执行器组下的机器列表,从上篇学习笔记—分布式调度之xxlJob执行器的启动源码解析可以..._xxl 调度失败:执行器地址为空
文章浏览阅读1.3w次,点赞3次,收藏72次。之前贴出了代码,但是源码已经找不到了;鉴于很多同学私信想要参考,找时间重新写了一个工程一、参考代码1.不方便下载的同学可以参考贴出来的源代码链接:RS485二、基本知识1.RS485通信讲解:读30001、30002两个寄存器,假设从机地址为1上位机(主机)发送下行报文:01 03 00 03 00 02 34 0B从机地址功能码寄存器起始地址读取寄存器个数CRC校验010300 0300 0285 ca010300 0400 0285 ca上_485代码
文章浏览阅读1k次。http://www.sina.com.cn 2005年04月07日 11:19 新浪科技 文/李开复 人才:微软的立业之本 微软公司把重视人才的管理理念视为公司的核心财富。在信息时代里,人才的价值尤为重要。在工业时代里,一个优秀技工和一个普通技工的效率差异可能是30%,但在信息时代里,一个高级程序员和一个普通程序员的效率差异可能高达10倍以上。 ad1= "打造校_在微软许多人都像我一样主动从事发现人才、跟踪人才和吸引人才的工作....
文章浏览阅读836次,点赞21次,收藏19次。大家好,小编为大家解答python量化交易教程电子书的问题。很多人还不知道python量化交易pdf书籍微盘,现在让我们一起来看看吧!_python 量化交易 pdf 百度网盘
在前面的文章中讲解了卷积编码和删余,实现了1/2、2/3、3/4编码速率的输出。数据域在编码之后,下一个部分就是交织。今天对交织进行具体实现。
文章浏览阅读648次。移动硬盘在目前工作和学习中都是一个比较重要的工具。如果遇到移动硬盘无法读取的情况,应该如何解决呢?小编给大家总结了几个简单有效的操作方法,记得收藏起来哦!_新硬盘无法识别
文章浏览阅读2.8k次,点赞12次,收藏90次。权当学习笔记吧_黑马微信小程序笔记
采用Spring Boot框架进行后端开发,结合前端技术(如Vue.js、React等)进行页面设计,数据库采用MySQL进行数据存储,确保系统的稳定性和性能。本项目旨在设计并实现一个基于Spring Boot的旅游网站,为用户提供便捷的旅游信息查询、预订服务,以及旅游资讯分享功能,提升用户旅游体验。通过市场调研和用户需求分析,了解用户对旅游网站的需求和偏好,明确系统的功能和特点,确保系统能够满足用户的旅游需求。进行全面的系统测试,包括功能测试、性能测试、安全性测试和用户体验测试,确保系统的质量和可靠性。
文章浏览阅读88次。首先解说一下源码包和rpm包的区别,虽然不是全面的的但是是绝对正确的。源码包mysql的安装rpm包与源码包的区别1.linux运行效率,高很多功能模块针对linux开发,在windos上并没有标准化得编程接口,很多功能并不能实现,并且mysql apache php最早也是在linux上开发的发展的,第三方软件多2.软件的选择 不一定最新当时要选最稳定的rpm与源代码rpm...
另外,如果你想要在项目级别配置Python解释器,你可以在项目的根目录下创建一个.vscode文件夹(如果还没有的话),然后在这个文件夹中创建一个settings.json文件。在settings.json文件中,你可以添加类似于"python.pythonPath": "/path/to/python39"的设置来指定Python解释器的路径。这样,当你在VSCode中打开这个项目时,它会自动使用你在settings.json文件中指定的Python解释器。在弹出的对话框中,点击“环境变量”按钮。
文章浏览阅读129次。根据报错提示先安装dkms包[root@OS4 ~]# rpm-ivh dkms-2.2.0.3-3.2.noarch.rpm warning: dkms-2.2.0.3-3.2.noarch.rp..._vboxheadless: error -1908 in suplibosinit! vboxheadless: kernel driver not i
文章浏览阅读90次。手脚架是什么?众所周知,现在的前端项目发展得越渐越大,我们前端程序员要从0开始去搭建一套完整的项目很费时,所以这时候前端工程的手脚架就出现了。我用得vue-cli也是其中之一,还有其他的我也说不清,我就说一下我接触比较多的这款vue-cli,但是所有手脚架的核心:都是为了能够快速搭建一个完整的项目的结构,开发者只需要在生成的项目结构的基础上进行开发即可,非常简单高效。然后..._如何上线vue-cli手脚架项目到服务器