DPM检测模型 训练自己的数据集 读取接口修改

时间:2022-09-14 22:14:17

(转载请注明作者和出处 楼燚(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. SpringMVC注解汇总(一)-定义

    本文根据开涛哥学习SpringMVC汇总而成,方便更好查阅! 网址:http://jinnianshilongnian.iteye.com/blog/1752171 注解式控制器简介 @Control ...

  2. 关于placeholder中 文字添加换行 用转义字符
代替<br>

    今天遇到一个问题 UI给的效果图中 文本域的提示文字 是两行显示, 于是就想到placeholder中能否解析html标签, 尝试后发现并无卵用, 经过调查后发现 可以用转义字符代替<br&gt ...

  3. 11 Clever Methods of Overfitting and how to avoid them

    11 Clever Methods of Overfitting and how to avoid them Overfitting is the bane of Data Science in th ...

  4. UIView不接受触摸事件的三种情况

    1.不接收用户交互 userInteractionEnabled = NO 2.隐藏 hidden = YES 3.透明 alpha = 0.0 ~ 0.01 4. 如果子视图的位置超出了父视图的有效 ...

  5. 循序渐进Python3(三) -- 3 -- 内置函数

    上一篇我们又介绍了26个Python内置函数.现回忆一下吧: 1.all 2.any 3.ascii 4.bin 5.bool 6.bytes 7.bytearray 8.callable 9.chr ...

  6. 论职务犯罪案件侦查 z

    1996年3月17日八届人大四次会议修订的<刑事诉讼法>第96条    第一款中有规定:犯罪嫌疑人在被侦查机关第—次讯问后或者采取强制措施之日起,可以聘请律师为其提供法律咨询.代理申诉.控 ...

  7. UltraEdit中文乱码的解决方法

    现象问题: 同样的一个文件 UltraEdit 打开是乱码,显示文件的编码是U8-DOS,可是用EditPlus .记事本,打开,就是正常的,编码显示是ANSI. 即使在UltraEdit打开文件的时 ...

  8. EF6调用存储过程,返回多个结果集处理

    链接:http://www.codeproject.com/Articles/675933/Returning-Multiple-Result-Sets-from-an-Entity-Fram 案例: ...

  9. empty函数PHP

    empty译为: adj.空的,空虚的,空洞的;空闲的,无效的,徒劳的;无聊的,愚蠢的;言语或行动空洞的 vt.(使)成为空的, 把…弄空;把…腾出来 vi.成为空的;流空 n.空车;空的东西 是PH ...

  10. 生成md5密码

    mysql> select md5(concat((select md5("admin123") from test limit 1),'`xx')) from test; ...