基于自制数据集的MobileNet-SSD模型训练

SSD与MobileNet详解 1.概述 本文档阐述SSD检测算法原理,及以MobileNet为Backbone的网络搭建方式。 Why SSD? 无论是机器学习或是深度学习一般都可分为两个部分:特征提取与分类任务。 在传统的机器学习方法中,特征提取需要依据图像以及特有的检测目的抓取特有特征,如偏重物体轮廓的HOG特征,注重明暗对比的Haar特征等,特征被描述之后送入机器学习算法分类,如SVM、Adaboost等,进而判断物... 阅读详情

基于自制数据集的MobileNet-SSD模型训练

来源:QQ快报  责任编辑:小易  

“本文主要内容:基于自制的仿VOC数据集,利用caffe框架下的MobileNet-SSD模型训练。”

本文的base是https://github.com/chuanqi305/MobileNet-SSD,这个project又是基于https://github.com/weiliu89/caffe/tree/ssd,因此项目编译和数据库生成大多同 weiliu89的base。以下从环境搭建、数据集制作、模型训练、模型测试四个环节介绍整个过程。

01

—

环境搭建

weiliu89的caffe框架下SSD环境搭建过程参见https://github.com/weiliu89/caffe/tree/ssd和网络相关资料,这里不再赘述,主要流程包括下载代码、修改配置文件、编译源代码等。编译通过之后就可以玩模型啦。

02

—

数据集制作

网络上大多数资料都是在介绍如何利用VOC2007和VOC2012数据集开始训练,本文介绍的是制作自己的仿VOC数据集,对接工程实际。

准备数据集

在caffe根目录/data下新建一个文件夹(下文以VOCdevkit2文件夹名为例),该文件夹下新建子文件夹Annotations、ImageSets和JPEGImages。JPEGImages文件夹存放图片,Annotations文件夹下存放与JPEGImages中图片一一对应的xml文件,ImageSets文件夹下包含Main子文件夹,Main里面存有train.txt和test.txt两个文本文件,这两个文件里面的每一行分别是预作为训练集和测试集的文件名。以上的文件结构参考了VOCdevkit,但是去除了2007和2012两个子文件夹的设计,简化了后续数据处理的代码编写。

xml标注文件通过labelImg工具获取,前提是制定好将要分类的类别,以及投入人力标注图片。

制作map.prototxt

在caffe根目录/data/VOC0712下创建一个自己的labelmap.prototxt文件,该文件中的类别为“准备数据集”部分的类别数+1(background)。笔者的数据集共9类,加上background共计10类,下图展示了前5类。

创建lmdb数据库

参考weiliu89的caffe框架下SSD项目,可将caffe根目录/data/VOC0712下原先的create_list.sh和create_data.sh两个脚本复制一份,修改名称后修改脚本文件内容。create_list.sh需要修改root_dir为自己的路径,同时去掉原先2007和2012两个子文件夹的处理逻辑;create_data.sh需要修改data_root_dir、mapfile为自己的路径。

修改完成后,在caffe根目录下运行:

./data/VOC0712/create_list.sh

./data/VOC0712/create_data.sh

创建完成后,应该在caffe根目录/data/VOCdevkit2/VOC0712/lmdb下产生VOC0712_test_lmdb和VOC0712_train_lmdb两个文件夹,内置生成的数据库文件。

03

—

模型训练

直到“模型训练”环节,我们才开始接触 chuanqi305的MobileNet-SSD里的code。按照 chuanqi305的readme,将MobileNet-SSD文件夹放入caffe根目录/examples,并使用fanqiang技术下载预训练模型,做好模型训练的准备工作。

生成prototxt文件

weiliu89的caffe框架下SSD是利用python脚本ssd_pascal.py自动生成prototxt文件并开始训练的,而chuanqi305的MobileNet-SSD则是利用gen_model.sh脚本生成prototxt文件,使用train.sh脚本开始训练。

在caffe根目录/examples/MobileNet-SSD下运行

./gen_model.sh NUM(NUM为你自己的类别数,同labelmap.prototxt,笔者这里NUM=10)

即可在caffe根目录/examples/MobileNet-SSD/example下生成MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt和MobileNetSSD_deploy.prototxt。

三个prototxt文件生成之后,需要做如下修改:

MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt中,将data_param层里的source字段改写成项目实际lmdb的路径(按理说加了软链接后的路径不必修改,但保险起见这里可以修改为绝对路径),同时可修改batch_size的大小(可使用默认值)。

检查所有prototxt文件的num_classes是否为你的分类数。num_classes是脚本读取labelmap.prototxt生成的,这里可以查看一下是否被修改正确。

prototxt很长,可以使用caffe根目录/python/drawnet.py画出模型,这里先挖个坑,争取看懂算法模型后再叙。

训练模型

接下来进入正题,在caffe根目录/examples/MobileNet-SSD下运行

./train.sh

开启训练的大幕。./train.sh里面的内容比较简单:

第2行是train.prototxt的路径,第7行是snapshot保存中间模型的路径,第8行是slover文件的路径,第9行是预训练权重,第10行是用到的gpu编号,这些都可以按需修改。笔者将最后一行的gpu从0修改为0,1,可利用双GPU训练。

solver_train.prototxt文件内容大多同SSD中的solver.prototxt,读者可根据需要调整:

train_net:”example/MobileNetSSD_train.prototxt” #训练用的网络文件

test_net:”example/MobileNetSSD_test.prototxt” #测试用的网络文件

test_iter: 673 #测试时的迭代次数

test_interval: 1000 #每训练1000次迭代一次

base_lr: 0.0005 #基准学习率

display: 5 #每5次迭代屏幕显示一次信息

max_iter: 20000 #最大迭代次数

lr_policy: “multistep” #学习率调整策略

gamma: 0.5

weight_decay: 0.00005 #权重衰减

snapshot: 1000 #每1000次迭代抓取一次快照

snapshot_prefix:”snapshot_power/mobilenet” #快照保存的前缀

solver_mode: GPU #这里一定要GPU

debug_info: false

snapshot_after_train: true

test_initialization: false #不做测试初始化

average_loss: 10 #每10次迭代平均下loss

stepvalue: 10000

stepvalue: 20000

iter_size: 1

type: “RMSProp” #一种优化方法,挖坑,以后填

eval_type: “detection” #这里一定要写检测,默认为classification

ap_version: “11point” #计算AP的方法

如果运气好的话,运行./train.sh脚本后就可以愉快地训练了,不过假如和笔者一样点背的话,可能在训练中遇到如下的错误:

OpenCV Error: Assertion failed ((scn == 3 scn == 4) && (depth == CV_8U depth == CV_32F)) in ipp_cvtColor,file /home/user1/opencv-3.1.0/modules/imgproc/src/color.cpp, line 7646

terminate called after throwing an instanceof ‘cv::Exception’

what(): /home/user1/opencv-3.1.0/modules/imgproc/src/color.cpp:7646:error: (-215) (scn == 3 scn == 4) && (depth == CV_8U depth ==CV_32F) in function ipp_cvtColor

或者

16:07:24.865304 12717data_transformer.cpp:621] Check failed: mean_values_.size() == 1 mean_values_.size() == img_channels Specify either 1 mean_value or as many aschannels: 1

或者

18:12:50.348572 40896annotated_data_layer.cpp:205] Check failed: std::equal(top_shape.begin() + 1,top_shape.begin() + 4, shape.begin() + 1)

解决方案:

MobileNetSSD_train.prototxt和MobileNetSSD_test.prototxt中找到transform_param层,添加force_color:true。

参考资料http://blog.youkuaiyun.com/u013250416/article/details/78676784?locationNum=7&fps=1

解决上述问题后,就可以愉快地训练了。贴一张训练初期的截图。

从笔者电脑来看,数据集大小为11.2G,11000+张图片,训练速度还是挺慢的。训练速度较慢的原因有待研究。

04

—

模型测试

笔者认为“测试”的含义有两种,一种是利用数据集中的测试数据检测模型效果,叫test,另一种是利用数据集外实际应用中的数据集检测模型效果,叫deploy。以下分别介绍。

利用数据集中的测试集测试

在caffe根目录/examples/MobileNet-SSD下运行

./test.sh

开始测试,test.sh脚本的构造同train.sh,会调用solver_test.prototxt文件测试。测试结束后在屏幕打印detection_eval值和loss值。

利用数据集外的图片测试

这项测试的前提条件是,拥有属于自己的caffemodel。在caffe根目录/examples/MobileNet-SSD下运行

python merge_bn.py

即可生成指定名称的caffemodel。merge_bn.py文件中需要编辑的变量为:

train_proto =’/home/wluo/DeepLearning/CaffeLearning-weiliu89/caffe/examples/MobileNet-SSD/example/MobileNetSSD_train.prototxt’ #train.prototxt路径

train_model = ‘mobilenet_power_iter_25000.caffemodel’ #should be your snapshot caffemodel

deploy_proto =’/home/wluo/DeepLearning/CaffeLearning-weiliu89/caffe/examples/MobileNet-SSD/example/MobileNetSSD_deploy.prototxt’ #test.prototxt路径

save_model =’MobileNetSSD_deploy_20171226_iter25000.caffemodel’ #指定生成的caffemodel名称

caffemodel生成之后,可以在caffe根目录/examples/MobileNet-SSD/执行

python demo.py

开始测试,在运行demo.py之前,可能需要做一些修改:

net_file=’/home/wluo/DeepLearning/CaffeLearning-weiliu89/caffe/examples/MobileNet-SSD/example/MobileNetSSD_deploy.prototxt’ #deploy.prototxt路径

caffe_model=’MobileNetSSD_deploy_20171226_iter25000.caffemodel’ #caffemodel名称

test_dir = “images_power” #测试图片文件夹名

CLASSES修改为自己数据集的类别和background。

如果一切顺利,运行demo.py后就可以看到每张测试图片的目标检测结果了,包括类别和概率。检测结果示例如下图所示。

 

 

相关阅读

 

<iframe scrolling="no" src="http://pos.baidu.com/s?hei=120&amp;wid=580&amp;di=u3155176&amp;ltu=http%3A%2F%2Fwww.xue63.com%2Ftoutiaojy%2F20171230G0BQC800.html&amp;cmi=2&amp;dri=0&amp;pis=-1x-1&amp;dis=0&amp;ant=0&amp;cdo=-1&amp;ti=%E5%9F%BA%E4%BA%8E%E8%87%AA%E5%88%B6%E6%95%B0%E6%8D%AE%E9%9B%86%E7%9A%84MobileNet-SSD%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83-%E5%AD%A6%E8%B7%AF%E7%BD%91-%E5%AD%A6%E4%B9%A0%E8%B7%AF%E4%B8%8A%20%E6%9C%89%E6%88%91%E7%9B%B8%E4%BC%B4&amp;dai=4&amp;pss=1641x6345&amp;cpl=1&amp;ccd=24&amp;tpr=1536301360219&amp;exps=119017&amp;cfv=30&amp;tcn=1536301361&amp;drs=1&amp;tlm=1533380708&amp;chi=37&amp;ari=2&amp;psr=1920x1080&amp;pcs=1641x817&amp;col=en-US&amp;dtm=HTML_POST&amp;par=1855x1056&amp;cja=false&amp;ps=6344x336&amp;dc=3&amp;cce=true&amp;cec=GBK" width="580" height="120"></iframe>

 

 

<iframe scrolling="no" src="//pos.baidu.com/s?hei=120&amp;wid=580&amp;di=u3155180&amp;ltu=http%3A%2F%2Fwww.xue63.com%2Ftoutiaojy%2F20171230G0BQC800.html&amp;dc=3&amp;cmi=2&amp;drs=1&amp;dis=0&amp;col=en-US&amp;cpl=1&amp;tlm=1533380708&amp;ccd=24&amp;pcs=1641x817&amp;cce=true&amp;ant=0&amp;tpr=1536301360219&amp;cja=false&amp;psr=1920x1080&amp;dtm=HTML_POST&amp;cfv=30&amp;pss=1641x6480&amp;pis=-1x-1&amp;exps=111000&amp;dai=5&amp;chi=37&amp;cdo=-1&amp;ps=6479x336&amp;cec=GBK&amp;tcn=1536301361&amp;dri=0&amp;par=1855x1056&amp;ari=2&amp;ti=%E5%9F%BA%E4%BA%8E%E8%87%AA%E5%88%B6%E6%95%B0%E6%8D%AE%E9%9B%86%E7%9A%84MobileNet-SSD%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83-%E5%AD%A6%E8%B7%AF%E7%BD%91-%E5%AD%A6%E4%B9%A0%E8%B7%AF%E4%B8%8A%20%E6%9C%89%E6%88%91%E7%9B%B8%E4%BC%B4" width="580" height="120"></iframe>

 

 

<iframe scrolling="no" src="http://pos.baidu.com/s?hei=250&amp;wid=580&amp;di=u3155171&amp;ltu=http%3A%2F%2Fwww.xue63.com%2Ftoutiaojy%2F20171230G0BQC800.html&amp;cja=false&amp;cmi=2&amp;dai=6&amp;ti=%E5%9F%BA%E4%BA%8E%E8%87%AA%E5%88%B6%E6%95%B0%E6%8D%AE%E9%9B%86%E7%9A%84MobileNet-SSD%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83-%E5%AD%A6%E8%B7%AF%E7%BD%91-%E5%AD%A6%E4%B9%A0%E8%B7%AF%E4%B8%8A%20%E6%9C%89%E6%88%91%E7%9B%B8%E4%BC%B4&amp;pcs=1641x817&amp;ps=6614x336&amp;col=en-US&amp;chi=37&amp;cce=true&amp;drs=1&amp;cpl=1&amp;dri=0&amp;par=1855x1056&amp;pis=-1x-1&amp;pss=1641x6615&amp;tlm=1533380708&amp;exps=111000&amp;tpr=1536301360219&amp;cdo=-1&amp;ant=0&amp;tcn=1536301361&amp;dc=3&amp;cec=GBK&amp;ccd=24&amp;ari=2&amp;dtm=HTML_POST&amp;psr=1920x1080&amp;dis=0&amp;cfv=30" width="580" height="250"></iframe>

Mobilenet-SSD的Caffe系列实现 先引出题目,占个坑,以后慢慢填。 mobilenet 也算是提出有一段时间了,网上也不乏各种实现版本,其中,谷歌已经开源了Tensorflow的全部代码,无奈自己几乎不熟悉Tensorflow,还是比较钟爱Caffe平台,因而一直在关心这方面。 单纯的Mobilenet分类不是关注重点,如何将其应用到目标检测网络才是关键,目前基本看好的思路就是Mobilenet+SSD,github上已经有至 阅读详情

相关推荐

MobileNet SSD 训练自己的数据集

记录下mobilnet-ssd如何跑自己的数据集。默认环境已经配置好,并且demo.py已经可以成功运行了。 mobilenet-ssd下载路径(需要注意的点:需要以Git的方式下载,不要以zip的方式下载,否则后面训练时可能报错) $ git clone https://github.com/chuanqi305/MobileNet-SSD.git 步骤记录:1、制作VOC数据集    ...

小猫猫的博客 1万+

详解MobileNet-SSD

本文对MobileNet-SSD进行了详细介绍,包括其结构、原理和实现。MobileNet-SSD的引入有效地解决了传统目标检测方法的问题,并在实时目标检测任务中取得了良好的效果。MobileNet-SSD的成功为轻量级目标检测提供了新的方向,也启发了更多针对计算和存储资源有限的场景的研究和应用。

牛肉胡辣汤 4733

【Jetson目标检测SSD-MobileNet应用实战教程】(一)训练环境:win11中配置SSD-MobileNet网络训练境搭建

基于TensorFlow-Object-Detection-API搭建在win11上的MobileNet网络模型训练环境。

拨雪寻春,烧灯续昼 4342

使用MobileNet_SSD进行目标检测

使用MobileNet_SSD进行目标检测

Keep_Trying_Go的博客 5553

MobileNet-SSD训练自己的数据集

一、配置 ubuntu18.04 ,显卡驱动,cuda10.1,cudnn7.6.5 查看cuda版本: cat /usr/local/cuda/version.txt 查看cudnn版本: cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 二、安装配置Caffe-SSD-GPU annaconda下创建caffe环境 conda create -n caffe2 python=2.7 opencv安装:pip install ope

Sunhansong的博客 2062

MobileNet-SSD训练

在caffe-ssd环境搭建好的情况下 1.下载MobileNet-SSD cd /home/**/caffe/examples/ git clone https://github.com/chuanqi305/MobileNet-SSD 2.准备数据集,我直接下载的VOC数据集,也可以仿制VOC,使用自己的数据集 a.直接用VOC数据集 cd /home/ mkdir data cd dat...

nimo_cap的博客 2286

SSD和Mobilenet SSD模型的训练,量化以及在海思芯片上的部署

本课程手把手讲解Caffe SSD框架代码编译和安装过程,并详细介绍如何基于一个无人零售商品数据集来成功训练出SSD和Mobilenet SSD模型,然后将它们量化且移植到海思开发板上正确运行。课程主要内容有:1. caffe SSD框架代码下载及其编译2.基于无人零售商品数据集训练SSD  a)无人零售数据集介绍   b)模型训练3 SSD模型原理及其default box概念介绍4 SSD wk模型生成及其仿真验证  a)3519av100 sdk010提供  b)模型的量化  c)仿真代码讲解及其运行5 量化模型在板载上运行6 caffe mobilenet ssd框架下载及其编译7 深度可分离卷积运算概念8 基于无人零售商品数据集的Mobilenet SSD模型训练9 Mobilenet SSD模型量化及其仿真10 Mobilenet SSD量化模型板载运行

tensorflow 1.14 ssd_mobilenet_v1 模型训练

tensorflow ssd_mobilenet 模型训练 1 工具版本 序号 软件名称 版本 安装命令 1 操作系统 ubuntu 18.04 2 python 3.6.9 3 tensorflow 1.14 sudo pip3 install tensorflow 4 protobuf 3.12.3 2 下载 tensorflow/models 2.1 下载 git clone https://github.com/tensorflow/models.git 2.

bibo1984的博客 3829

OpenCV之MobileNet-SDD目标检测

OpenCV DNN部署 MobileNet-SSD CUDA加速,最高帧率可以达到300帧,不使用CUDA加速最高帧率可以到达60帧左右。

风间琉璃的博客 2782

Mobilenet-ssd 目标检测(详细讲解)

配置及运行MobileNetSSDgithub资源:Caffe for SSD:https://github.com/weiliu89/caffe/tree/ssdMobileNet-SSD:https://github.com/chuanqi305/MobileNet-SSD配置及运行MobileNetSSD如果你需要用MobileNetSSD进行训练自己的数据集,你可能额外需要阅读一下其他参考...

shan19930117的博客 3万+

MobileNet SSD框架解析

该文档详细的描述了MobileNet-SSD的网络模型,可以实现目标检测功能,适用于移动设备设计的通用计算机视觉神经网络,如车辆车牌检测、行人检测等功能。它具有速度快,模型小,效率高等优点。

使用SSD mobilenet训练自己的数据集

使用SSD MobileNet训练自己的数据集

weixin_45817307的博客 3029

MobileNetSSD模型.rar

基于OpencvSharp的深度学习,实现目标实时检测Mobilenet-ssd caffe,可检测静态图像或动态视频中的目标

Mobilenet-SSD训练VOC数据集

Mobilenet-SSD网络训练:VOC数据集 首先,用 Mobilenet-SSD网络进行训练,需要配置好自己的cuda环境,跑 Mobilenet-SSD的前提是要使用SSD框架,所以要编译安装caffe的ssd分支,caffe-ssd下载地址:https:/...

Danbinbo的博客 3415

微信小程序真机HTTPS证书链失效排查与修复指南

HTTPS证书信任链是保障Web通信安全的基础机制,其核心在于客户端能否通过服务器提供的证书及其上级签发者,逐级回溯至自身预置的可信根证书。在微信小程序场景中,由于客户端不复用系统根证书库,而是采用固化、精简且更新滞后的自研CA白名单,导致大量符合浏览器标准的证书(如Let’s Encrypt新版ISRG Root X1、TrustAsia等)在真机环境下触发net::ERR_CERT_AUTHORITY_INVALID错误。该问题本质是证书链断裂或签名算法/密钥长度不合规,而非域名配置或CORS策略异常。

weixin_33935636的博客 678

机器学习实例(预测房价中位数)(附代码)

1、下载数据: 下载一个压缩文件housing.tgz即可,其包含housing.csv(已经包含书有数据。),用 tax xzf housing.tgz 来解压提取CSV文件。 import os import tarfile import urllib.request DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/" HOUSING_PATH = os.path.join("datasets",

qq_51153436的博客 2758

Mobilenet-SSD在widerface数据集上训练人脸检测模型

最近一段时间一直忙着实习和在研究insightface人脸识别模型的相关事宜,上次说更新mobilenet-ssd的人脸检测,结果一拖再拖,非常抱歉。最近我也会将自己跑Insightface的实践写出来,并将以前和进后的项目上传个人Github仓库,这里先给出链接:https://github.com/Danbinabo VOC数据集包含20个类别的物体和1个背景,分别是——ae...

Danbinbo的博客 2924

在Ultralytics YOLO中添加/更换模块详细指南

使用参数继承 my_module_args: &my_args [64, 3, 0.5] # 定义参数模板 backbone: - [-1, 1, MyModule, *my_args] # 引用参数。

MR_Colorful的博客 2583

自定义数据集训练SSD-MobileNet模型

利用SSD-MobileNet模型训练自己标注的数据集 (ubuntu16.04+caffe+python2.7)

WSNjiang的博客 1609

保姆级教程:用GPU-Burn给你的NVIDIA Tesla服务器做个“压力体检”(附温度功耗监控脚本)

本文提供了一份详细的GPU服务器压力测试指南,重点介绍如何使用GPU-Burn工具对NVIDIA Tesla服务器进行全面的性能测试和温度功耗监控。从环境部署、多GPU测试策略到专业级监控指标解析,帮助运维人员构建标准化的GPU健康评估体系,确保AI训练和科学计算等关键业务的稳定性。

weixin_30619101的博客 395

AutoSAR配置与实践(实践篇)13.1 如何添加一个NVM BLOCK

解决办法:如下红框选项都不要自定义,否则无法自动生成对应RAM/ROM映射接口函数。传送门–AUTOSAR配置与实践—总目录传送门–AUTOSAR配置与实践—总目录。

nihaoljq2010的博客 3036

训练自己的数据--基于ssd_mobilenet模型实现目标检测

训练数据(在我下载中,大家可以自行下载) 最近在做反光检测的时候,使用vGG的时候效果可以,但是c++没有调起来,所以使用SSD-mobilenet来训练。 我的系统win10;python3.6 1. 在GitHub上下载所需的models文件,地址:https://github.com/tensorflow/models(这是tensorflow提供训练好的model) 2. 安装p...

zhouguangfei0717的博客 5601

STM32实现简单的智能电梯控制

上述代码实现了一个简单的智能电梯控制器。电梯的状态包括IDLE(停止)、UP(向上移动)和DOWN(向下移动)三种状态。通过向上和向下按钮的按下,可以控制电梯移动到指定的楼层。在主循环中,不断读取当前楼层的按钮状态,并根据电梯状态决定执行的动作。具体的楼层数量和按钮的GPIO引脚可以根据实际情况进行调整。要实现简单的智能电梯控制,我们可以使用STM32微控制器来实现。

2401_85258012的博客 336
上一篇: cifar10训练 test 0.894
下一篇: 安装caffe /usr/bin/ld: cannot find -lhdf5
LBJ_qin
博客等级 码龄9年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值