DPM检测模型 训练自己的数据集 读取接口修改
(转载请注明作者和出处 楼燚(yì)航的blog :http://www.cnblogs.com/louyihang-loves-baiyan/ 未经允许请勿用于商业用途)
本文主要是针对上一篇基于DPM的VOC-release5的版本,matlab的版本进行训练。
训练自己的数据集主要是修改pascal_data这个文件,这个是负责读取参与训练的正负样本,以下是我的的读取文件,其中我的正样本的数据格式为
1.jpg 2 x1 y1 x2 y2 x2_1 y2_1 x2_2 y2_2
图片路径之后的数字代表其中的正样本个数,目前仍然以训练车样本为主:
如果是自己新建了个文件需要在pascal_train中修改相应的读取函数接口
以下是经过修改的pascal_data:
function [pos, neg, impos] = pascal_data(cls, year)%这里为了保持一致没有改变,读者也可以自己修改
% Get training data from my own dataset
% [pos, neg, impos] = pascal_data(cls, year)
%
% Return values
% pos Each positive example on its own
% neg Each negative image on its own
% impos Each positive image with a list of foreground boxes
%基地址路径
%added by yihanglou using my own img and txtinfo
PosImageFile = '/home/louyihang/Workspace/Dataset/DPM_TrainingData/ImageList_Version_S_GT.txt';
NegImageFile = '/home/louyihang/Workspace/Dataset/DPM_TrainingData/Neg_Imagelist.txt';
BasePath = '/home/louyihang/Workspace/Dataset/DPM_TrainingData';
pos = [];
impos = [];
numpos = 0;
numimpos = 0;
dataid = 0;
fin = fopen(PosImageFile,'r');%打开正样本文件
now = 1;
while ~feof(fin)
line = fgetl(fin);
S = regexp(line,' ','split');
count = str2num(S{2});
fprintf('%s: parsing positives (%s): %d\n', ...
cls, S{1}, now);
now = now + 1;
for i = 1:count;%挨个读取正样本
numpos = numpos + 1;
dataid = dataid + 1;
bbox = [str2num(S{i*4-1}),str2num(S{i*4}),str2num(S{i*4+1}),str2num(S{i*4+2})];
pos(numpos).im = [BasePath '/' S{1}]; %拼接地址
pos(numpos).x1 = bbox(1);
pos(numpos).y1 = bbox(2);
pos(numpos).x2 = bbox(3);
pos(numpos).y2 = bbox(4);
pos(numpos).boxes = bbox;
pos(numpos).flip = false;
pos(numpos).trunc = 0;%1 represent incomplete objects, 0 is complete
pos(numpos).dataids = dataid;
pos(numpos).sizes = (bbox(3)-bbox(1)+1)*(bbox(4)-bbox(2)+1);
img = imread([BasePath '/' S{1}]);
[height, width, depth] = size(img);%由于我的样本里没有标定大小所以我要读取以下图像尺寸才能翻转
% Create flipped example 创建翻转的正样本
numpos = numpos + 1;
dataid = dataid + 1;
oldx1 = bbox(1);
oldx2 = bbox(3);
bbox(1) = width - oldx2 + 1;
bbox(3) = width - oldx1 + 1;
pos(numpos).im = [BasePath '/' S{1}];
pos(numpos).x1 = bbox(1);
pos(numpos).y1 = bbox(2);
pos(numpos).x2 = bbox(3);
pos(numpos).y2 = bbox(4);
pos(numpos).boxes = bbox;
pos(numpos).flip = true;
pos(numpos).trunc = 0;% to make operation simple
pos(numpos).dataids = dataid;
pos(numpos).sizes = (bbox(3)-bbox(1)+1)*(bbox(4)-bbox(2)+1);%获得图像面积大小
end
% Create one entry per foreground image in the impos array,这里跟pos是一样的,相当于副本
numimpos = numimpos + 1;
impos(numimpos).im = [BasePath '/' S{1}];
impos(numimpos).boxes = zeros(count, 4);
impos(numimpos).dataids = zeros(count, 1);
impos(numimpos).sizes = zeros(count, 1);
impos(numimpos).flip = false;
for j = 1:count
dataid = dataid + 1;
bbox = [str2num(S{j*4-1}),str2num(S{j*4}),str2num(S{j*4+1}),str2num(S{j*4+2})];
impos(numimpos).boxes(j,:) = bbox;
impos(numimpos).dataids(j) = dataid;
impos(numimpos).sizes(j) = (bbox(3)-bbox(1)+1)*(bbox(4)-bbox(2)+1);
end
img = imread([BasePath '/' S{1}]);
[height, width, depth] = size(img);
% Create flipped example
numimpos = numimpos + 1;
impos(numimpos).im = [BasePath '/' S{1}];
impos(numimpos).boxes = zeros(count, 4);
impos(numimpos).dataids = zeros(count, 1);
impos(numimpos).sizes = zeros(count, 1);
impos(numimpos).flip = true;
unflipped_boxes = impos(numimpos-1).boxes;
for j = 1:count
dataid = dataid + 1;
bbox = unflipped_boxes(j,:);
oldx1 = bbox(1);
oldx2 = bbox(3);
bbox(1) = width - oldx2 + 1;
bbox(3) = width - oldx1 + 1;
impos(numimpos).boxes(j,:) = bbox;
impos(numimpos).dataids(j) = dataid;
impos(numimpos).sizes(j) = (bbox(3)-bbox(1)+1)*(bbox(4)-bbox(2)+1);
end
end
fclose(fin);
% Negative examples from the background dataset
fin2 = fopen(NegImageFile,'r');
neg = [];
numneg = 0;
negnow = 0;
while ~feof(fin2)%这里是循环读取副样本
line = fgetl(fin2);
fprintf('%s: parsing Negtives (%s): %d\n', ...
cls, line, negnow);
negnow = negnow +1;
dataid = dataid + 1;
numneg = numneg+1;
neg(numneg).im = [BasePath '/' line];
disp(neg(numneg).im);
neg(numneg).flip = false;
neg(numneg).dataid = dataid;
end
fclose(fin2);%存储为mat文件 包含训练样本的信息
save([cachedir cls '_' dataset_fg '_' year], 'pos', 'neg', 'impos');
DPM检测模型 训练自己的数据集 读取接口修改的更多相关文章
- 使用yolo3模型训练自己的数据集
使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlo ...
- K210,yolo,face_mask口罩检测模型训练及其在K210,kd233上部署
前段时间考研,再加上工作,时间很紧,一直没有更新博客,这几天在搞k210的目标检测模型,做个记录,遇到问题可以添加qq522414928或添加微信13473465975,共同学习 首先附上github ...
- DPM检测模型 VoC-release 5 linux 下编译运行
(转载请注明作者和出处 楼燚(yì)航的blog :http://www.cnblogs.com/louyihang-loves-baiyan/ 未经允许请勿用于商业用途) DPM目前使非神经网络方法 ...
- ssd物体检测模型训练和测试总结
参考网址:github:https://github.com/naisy/realtime_object_detection 2018.10.16ssd物体检测总结:切记粗略地看一遍备注就开始训练模型 ...
- gluoncv 目标检测,训练自己的数据集
https://gluon-cv.mxnet.io/build/examples_datasets/detection_custom.html 官方提供两种方案,一种是lst文件,一种是xml文件(v ...
- Fast RCNN 训练自己数据集 (2修改数据读取接口)
Fast RCNN训练自己的数据集 (2修改读写接口) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ http ...
- 【Tensorflow系列】使用Inception_resnet_v2训练自己的数据集并用Tensorboard监控
[写在前面] 用Tensorflow(TF)已实现好的卷积神经网络(CNN)模型来训练自己的数据集,验证目前较成熟模型在不同数据集上的准确度,如Inception_V3, VGG16,Inceptio ...
- TensorFlow学习笔记——LeNet-5(训练自己的数据集)
在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...
- 第三十二节,使用谷歌Object Detection API进行目标检测、训练新的模型(使用VOC 2012数据集)
前面已经介绍了几种经典的目标检测算法,光学习理论不实践的效果并不大,这里我们使用谷歌的开源框架来实现目标检测.至于为什么不去自己实现呢?主要是因为自己实现比较麻烦,而且调参比较麻烦,我们直接利用别人的 ...
随机推荐
- ZeroClipboard – 轻松实现复制文本到剪贴板功能
ZeroClipboard 库提供了一种把文本复制到剪贴板的简单方法.Zero 表示该库是不可见的,用户界面则完全取决于你. 该库完全兼容 Flash Player 10.0.0 或以上版本,这就要求 ...
- ScrollReveal.js – 帮助你实现超炫的元素运动效果
ScrollReveal.js 用于创建和管理元素进入可视区域时的动画效果,帮助你的网站增加吸引力.只需要给元素增加 data-scrollreveal 属性,当元素进入可视区域的时候会自动被触发设置 ...
- 值得 Web 开发人员收藏的16款 HTML5 工具
HTML5 正在迅速改变创建和管理网站的方式.HTML5 在不同的领域让网页设计更强大的.快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5 开发各种网站和应用程序. ...
- 【javascript实例】 具有立体效果的图片浏览器
此实例,直接粘贴代码即可运行,当然图片的路径不要忘记改了. 此实例是我一遍学习一边写出来的,希望能够帮到大家,一起学习.效果如图所示: html代码如下所示: <html xmlns=" ...
- vue安装
条件:已安装 node&npm 1.安装 cnpm : $ npm install -g cnpm --registry=https://regis ...
- 定制Eclipse IDE之功能篇(二)
上文回顾:定制Eclipse IDE之功能篇(一) 这一篇文章将记录一些Eclipse插件小功能,Smart but Useful. 一.设置工作空间 文本文件的编码 解决办法: 在org ...
- Hybrid框架UI重构之路:六、前端那点事儿(Javascript)
上文回顾 :Hybird框架UI重构之路:五.前端那点事儿(HTML.CSS) 这里讲述在开发的过程中,一些JS的关键点. 换肤 对于终端的换肤,我之前一篇文章有说了我的想法. 请查看:http:// ...
- HTML基础知识总结
经过这段时间的学习,对于html的一些基础知识有了一定的了解.所谓好记性不如烂笔头,唯有一点点累积,才能汇聚成知识的海洋.现在,我对这段时间的学习做一个总结. 一.HTML的定义 HTML,超文本标记 ...
- 计算DEM上的Profile图
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys, gdal, os from gdalconst import GA_ReadOnly ...
- yum源的配置(centos6.5)
# cd /etc/yum.repos.d/ # mv CentOS-Base.repo CentOS-Base.repo.bak # wget http://mirrors.163.com/.hel ...