用迁移学习做回归,预测待检测目标的位置
Object Tracking using ‘Transfer Learning for Regression’
一、题目要求
1.具有两个bar分别位于canvas的水平方向和垂直方向作为拟合位置输出。
2.训练模型,能够令标定方块在二维平面内移动,并且实现跟踪待识别物体位置的功能。
二、设计思路
1. 首先进行一维水平的物体跟踪
(1)将分类(classification)问题变为回归(regression)问题
featureExtractor = ml5.featureExtractor('MobileNet', modelReady);
classifier = featureExtractor.regression(capture, captureReady);
classifier.predict(capture, GetResult); // predict
(2)加入一个slider用来帮助我们显示位置信息
// slider参数含义:最小值,最大值,初始位置,步长
slider = createSlider(0, 1, 0.5, 0.01);
(3)添加一个button,每当点击按钮时,添加训练样本
addButton = createButton('Add');
addButton.mousePressed(function(){
classifier.addImage(slider.value());
});
(4)使用一个方块来显示移动物体的位置
rectMode(CENTER); // 图形为矩形且位于中心位置
fill(255, 0, 255); // 填充颜色
rect(name * width, height / 2 , 50 , 50); // 位置信息:水平位置,垂直位置(中间),长,宽
2. 修改变为物体的二维追踪
(1)添加模型
// 声明两个模型分别对x轴和y轴
featureExtractorx = ml5.featureExtractor('MobileNet', modelReady);
featureExtractory = ml5.featureExtractor('MobileNet', modelReady);
(2)响应都修改为二维
// 当每次点击Add就添加一次训练样本
select('#addSample').mousePressed(function(){
classifierx.addImage(sliderx.value());
classifiery.addImage(slidery.value());
select('#amountOfSamples').html(samples++);
console.log("添加样本(x,y):(" + sliderx.value() + "," + slidery.value() + ")");
});
// 训练样本按钮
select('#train').mousePressed(function(){
classifierx.train(whileTrainingx);
classifiery.train(whileTrainingy);
});
classifierx.predict(capture, GetResultx); // predict
classifiery.predict(capture, GetResulty); // predict
rect(namex * width, namey * height , 30 , 30);
(3)页面样式优化
slidery.elt.style.transform = "rotate(90deg)"; // 转化为垂直
slidery.elt.style.marginLeft = "-150px";
slidery.elt.style.height = "400px";
slidery.elt.style.width = "340px"
三、实验结果
滑动条滑动到不同位置,添加样本,尽可能多加入一些样本,保证预测的准确性。之后点击train开始训练
等loss都为NULL时,点击predict按钮开始测试,并实时输出预测坐标值
四、总结提升
本次实验完成了用迁移学习做回归,预测待检测目标的位置,横轴和纵轴使用两个模型进行预测。为了保证预测结果的准确性,在添加训练样本时,物体尽量小(远离摄像头);保证背景尽可能为纯色;尽可能多的在不同位置添加多个训练样本。进一步改进措施:添加背景去除。