(转载请注明作者和出处 楼燚(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. Spirit - 腾讯移动 Web 整体解决方案

    Spirit 并不是一个具体的框架或者工具,但是她是移动端一系列解决方案的整合与聚拢.她是腾讯 Alloyteam 开发团队在移动开发项目中通过大量实践.归纳.总结提炼而成,最终沉淀下来的一个体系,真 ...

  2. 20款风格独特的搜索框 PSD 设计素材免费下载

    搜索框是网站中的最常用的组件一直,但有时候,搜索框因为设计不够新颖容易被访客忽视.通过提高一个搜索框的外观设计,最终对整体的网页设计带来好的变化.这份列表将是一个很好的资源,尤其是对设计师.希望你会喜 ...

  3. Javascript到PHP加密通讯的简单实现

    其实内容主要来源于上一篇博文,只是重新组织了语言,并做了原理性的阐述,更容易理解:P ----------------------------------------- 华丽的分割线 -------- ...

  4. Office 365 - SharePoint 2013 Online 在应用商店中添加应用

    1.在使用应用程序商店的时候,先点击配置应用商店设置,如下图: 2.发现SharePoint要求我们创建应用程序目录,用来分发SharePoint App的一个网站,不过不创建的话,依然可以在应用商店 ...

  5. JSON解析实例——使用Json-lib

    JSON解析实例——使用Json-lib Json-lib下载及使用 本文介绍用一个类库进行JSON解析. 工具下载地址:http://sourceforge.net/projects/json-li ...

  6. android调试工具DDMS的使用详解

    具体可见http://developer.android.com/tools/debugging/ddms.html. DDMS为IDE和emultor.真正的android设备架起来了一座桥梁.开发 ...

  7. Mac系统如何编辑hosts文件

    Mac系统如何编辑hosts文件 Hosts 是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系 统会首先 ...

  8. OC NSSet

    OC NSSet 数组的特点: 有序的 Set的特点: 无序的,存储元素无重复(例:set中有两个元素'a' 输出时只输出一个a) NSSet初始化 NSSet * set = [[NSSet all ...

  9. iOS 学习 - 10下载(3) NSURLSession 音乐 篇

    使用 NSURLSession 下载,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中 // // ViewController.m // Web ...

  10. npm常用命令小结

    目录(更新于2016.09.23): 1.认识和使用NPM 2.npm包安装模式 3.npm包管理(package的安装.卸载.升级.查看.搜索.发布,其他等) npm install [-g] 本地 ...