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数据集)
前面已经介绍了几种经典的目标检测算法,光学习理论不实践的效果并不大,这里我们使用谷歌的开源框架来实现目标检测.至于为什么不去自己实现呢?主要是因为自己实现比较麻烦,而且调参比较麻烦,我们直接利用别人的 ...
随机推荐
- react实例之todo,做一个实时响应的列表操作
react实例之todo, 做一个实时响应的列表操作 在所有的mvc框架中,最常见的例子不是hello world,而是todo,由于reactjs的简单性,在不引用flux和redux的情况下,我们 ...
- 定制Eclipse IDE之功能篇(二)
上文回顾:定制Eclipse IDE之功能篇(一) 这一篇文章将记录一些Eclipse插件小功能,Smart but Useful. 一.设置工作空间 文本文件的编码 解决办法: 在org ...
- Hybrid框架UI重构之路:二、事出有因
上文回顾:Hybird框架UI重构之路:一.师其长技以自强 一切的重构都是有原因的,或许为了更快速度.更好体验.更快捷开发等,于是就有了自己的开发目标,简单看看未重构前UI("中国移动式&q ...
- iOS 使用AFNetworking遇到错误 Request failed: unacceptable content-type: text/html
错误日志: Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacc ...
- PHP美元符和花括号组合那些事—${${}}
双美元符+{}:${${variable}}是一种比较常见的用法,但是它的实现原理是什么呢?今天来探究一下: 提及这种用法,还得先说一下PHP的String类型php.net上指出,一个字符串可以用4 ...
- Asp.net web hosting
start /D "C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0" /B WebDev.WebSe ...
- Windows 上的 Jetty 小工具
做项目经常遇到需要开发Java应用,我喜欢用Jetty进行开发.部署,主要是由于Jetty的轻量级. Jetty 项目主页:http://www.eclipse.org/jetty/, 最新版9.30 ...
- [读书笔记] Head First 设计模式
OO基础 抽象 封装 多态 继承 OO原则 原则 描述 封装变化 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混合在一起. 把会变化的部分取出来并“封装”起来,好让其他部分不 ...
- iOS通讯录开发
场景一:直接选择一个联系人的电话号码 这里不需要先获取所有的联系人自己做联系人列表,直接使用系统自带的AddressBookUI/ABPeoplePickerNavigationController. ...
- 设计模式 之 策略(Strategy)模式
最近看了<head first 设计模式>一书,便总结了里面的一些内容,今天就简单介绍一下策略模式. 策略模式:定义了算法族,分别封装起来,让他们能够相互替换,此模式让算法的变化独立于使用 ...