(转载请注明作者和出处 楼燚(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检测模型 训练自己的数据集 读取接口修改的更多相关文章

  1. 使用yolo3模型训练自己的数据集

    使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlo ...

  2. K210,yolo,face_mask口罩检测模型训练及其在K210,kd233上部署

    前段时间考研,再加上工作,时间很紧,一直没有更新博客,这几天在搞k210的目标检测模型,做个记录,遇到问题可以添加qq522414928或添加微信13473465975,共同学习 首先附上github ...

  3. DPM检测模型 VoC-release 5 linux 下编译运行

    (转载请注明作者和出处 楼燚(yì)航的blog :http://www.cnblogs.com/louyihang-loves-baiyan/ 未经允许请勿用于商业用途) DPM目前使非神经网络方法 ...

  4. ssd物体检测模型训练和测试总结

    参考网址:github:https://github.com/naisy/realtime_object_detection 2018.10.16ssd物体检测总结:切记粗略地看一遍备注就开始训练模型 ...

  5. gluoncv 目标检测,训练自己的数据集

    https://gluon-cv.mxnet.io/build/examples_datasets/detection_custom.html 官方提供两种方案,一种是lst文件,一种是xml文件(v ...

  6. Fast RCNN 训练自己数据集 (2修改数据读取接口)

    Fast RCNN训练自己的数据集 (2修改读写接口) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ http ...

  7. 【Tensorflow系列】使用Inception_resnet_v2训练自己的数据集并用Tensorboard监控

    [写在前面] 用Tensorflow(TF)已实现好的卷积神经网络(CNN)模型来训练自己的数据集,验证目前较成熟模型在不同数据集上的准确度,如Inception_V3, VGG16,Inceptio ...

  8. TensorFlow学习笔记——LeNet-5(训练自己的数据集)

    在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...

  9. 第三十二节,使用谷歌Object Detection API进行目标检测、训练新的模型(使用VOC 2012数据集)

    前面已经介绍了几种经典的目标检测算法,光学习理论不实践的效果并不大,这里我们使用谷歌的开源框架来实现目标检测.至于为什么不去自己实现呢?主要是因为自己实现比较麻烦,而且调参比较麻烦,我们直接利用别人的 ...

随机推荐

  1. Bootstrap源码分析之dropdown

    源码分析: Dropdowns.scss:下拉框模块 Javascripts/bootstrap/dropdown.js:实现下拉框响应 实现功能及原理: 下拉选项卡,默认不能实现显示选中项的功能 原 ...

  2. fontIconPicker – 优雅的 jQuery 字体图标选择

    jQuery fontIconPicker 是一个小的 jQuery 插件,它可以让你实现一个优雅的带有分类.搜索和分页功能的图标选择器.图标列表可手动从下拉列表框,图标数组或对象,或者从 Fonte ...

  3. Pexels Videos – 可以免费商业使用的短视频

    Pexels 是一个巨大的平台,提供免费的精美照片,很多设计师和博客每天用它来寻找他们的个人和商业项目的照片.现在我们想介绍 Pexels 视频,他是用来帮助你找到免费的视频.所有的 Pexels 视 ...

  4. babel 无法解析jsx (webpack react )

    webpack.config.js的配置如下图: 报错: 修改webpack.config.js文件,如下即可:

  5. go语言 类型:数组

    在go语言中数组array是一组特定长度的有序的元素集合. go的数组类型由两部分组成——类型和长度,二者缺一不可.数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定 ...

  6. 移动Web开发的bug及解决方案

    我目前移动Web开发遇到的bug以及解决方案(慢慢补充当中). 1.android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出 ...

  7. fullPage教程 -- 整屏滚动效果插件 fullpage详解

    1.引用文件 [html] view plain copy print?在CODE上查看代码片派生到我的代码片 <link rel="stylesheet" href=&qu ...

  8. ng-cordova 手机拍照或从相册选择图片

    1.需求描述 实现一个调用摄像头拍照,或者直接打开本地图库选择照片,然后替换App中图片的功能 2.准备 1) 安装ng-cordova 进入到ionic工程目录,使用bower工具安装, bower ...

  9. Ubuntu开机黑屏,无法进入系统

    今天早上起来开机发现Ubuntu进不去了,启动项选择之后长时间的black of screen,击键盘.点鼠标毫无反应,后来实在等不下去了就按了一下电源键,以平时的性格就是强制关机的,这次轻轻碰一下就 ...

  10. SharePoint Error - The SharePoint server was moved to a different location.

    错误 The SharePoint server was moved to a different location. ( Error from SharePoint site: HttpStatus ...