单例(One-Shot) | 仅需一张查询样本,即可实现新类别的目标检测

file Prometheus单例(One-Shot)目标检测 现代检测器依赖大量标注数据训练,目前已有人脸、行人、车辆等类别的大型数据集,但对于一些新类别、新样本,难以构建大型数据。单例检测可不需要对新类别、新样本进行额外训练,仅需要一张查询样本(query patch),就可以进行新类别的目标检测。 file 具体结果见视频: https://www.bilibili.com/video/BV1ku411D7de?spm_id_from=333.999.0.0 后面将分别介绍2种运行模式,1:独立运行,2:依托Prometheus运行

**1 独立运行

1.1 下载代码、安装依赖**

注意:首先确认是否安装好了cuda和pytorch

git clone https://gitee.com/jario-jin/One-Shot-Object-Detection.git cd One-Shot-Object-Detection pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ cd lib sudo python3 setup.py build develop cd ..

1.2 下载预训练模型

bash prepare_models.sh 1.2 定制自己的单例图像,运行单例检测 将需要检测的单例图像替换

  • One-Shot-Object-Detection/images/query.jpg
  • (可选)修改test_custom.py,447行cam_id = 0,(根据自己的摄像头id填写)
  • 运行:python3 test_custom.py

2 配合Prometheus运行

在命令行中执行如下代码:

cd bash compile_detection.sh

需保证编译不报错

bash Scripts/install_detection_one_shot.sh

等待下载、编译完成

cd Modules/object_detection_oneshot/ python3 test_custom_ros.py

稍等2秒,Ctrl+Alt+T打开一个新的命令行界面

source /devel/setup.bash roslaunch prometheus_detection oneshot_det.launch

检测结果参考话题 prometheus_msgs.msg 中的 DetectionInfo, MultiDetectionInfo

  • End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于匹配网络的one-shot样本分类代码示例,使用matlab的深度学习工具箱实现: ```matlab % 数据集准备 % 在这里,我们使用Omniglot数据集,其中包含来自50个不同语言的1623个字符类别(每个类别有20个样本)。 % 这里我们只使用其中的1200个类别进行训练,剩下的423个类别用于测试。 % 数据集已经预处理为一个.mat文件,包含了训练和测试数据,以及对应的标签信息。 % 加载数据集 load('omniglot.mat'); % 训练数据 train_data = train_data'; train_labels = train_labels'; % 测试数据 test_data = test_data'; test_labels = test_labels'; % 网络定义 input_dim = 105*105; % 输入维度 hidden_dim = 64; % 隐藏层维度 output_dim = 1; % 输出维度(二分类) % 定义网络结构 net = siamese_network(input_dim, hidden_dim, output_dim); % 训练网络 num_epochs = 50; % 训练轮数 batch_size = 32; % 批大小 learning_rate = 0.001; % 学习率 % 定义优化器 optimizer = adam_optimizer(learning_rate); % 训练网络 train_losses = zeros(num_epochs, 1); for epoch = 1:num_epochs epoch_loss = 0; for i = 1:batch_size:size(train_data, 1) % 获取当前批次数据及标签 batch_data = train_data(i:min(i+batch_size-1, end), :); batch_labels = train_labels(i:min(i+batch_size-1, end)); % 前向传播计算损失 [loss, grads] = compute_loss_and_grads(net, batch_data, batch_labels); epoch_loss = epoch_loss + loss; % 反向传播更参数 net = update_parameters(net, grads, optimizer); end train_losses(epoch) = epoch_loss / ceil(size(train_data, 1)/batch_size); fprintf('Epoch %d, Train Loss: %f\n', epoch, train_losses(epoch)); end % 测试网络 num_correct = 0; for i = 1:size(test_data, 1) % 对每个测试样本,找到它的最近邻(即与它距离最近的训练样本) distances = sum((train_data - repmat(test_data(i,:), size(train_data, 1), 1)).^2, 2); [~, nearest_idx] = min(distances); % 使用最近邻与当前测试样本进行匹配,并预测其类别 input1 = test_data(i,:); input2 = train_data(nearest_idx,:); output = forward(net, input1, input2); prediction = output > 0.5; % 计算准确率 if prediction == test_labels(i) num_correct = num_correct + 1; end end accuracy = num_correct / size(test_data, 1); fprintf('Test Accuracy: %f\n', accuracy); ``` 其中,`siamese_network`函数用于定义匹配网络的结构,`adam_optimizer`函数用于定义Adam优化器,`compute_loss_and_grads`函数用于计算损失和梯度,`update_parameters`函数用于更网络参数,`forward`函数用于前向传播计算输出。这些函数的实现可以参考深度学习工具箱的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值