p2p大豆计数模型

news2024/11/28 0:57:13

前面学习了一下论文:Improved Field-Based Soybean Seed Counting and Localization with Feature Level Considered

论文链接:https://spj.science.org/doi/10.34133/plantphenomics.0026

解读链接:论文阅读--考虑特征水平的改进的基于田间的大豆种子计数和定位_追忆苔上雪的博客-CSDN博客

下面开始着手复现p2p大豆计数模型

(一)p2p人群计数源码以及复现

由于p2p大豆计数模型建立在p2p人群计数,这里提供一下p2p人群计数代码

<1>p2p人群计数源码:https://github.com/TencentYoutuResearch/CrowdCounting-P2PNet

<2>p2p人群计数源码复现过程:

crowdcountingp2p代码复现_追忆苔上雪的博客-CSDN博客

crowdcountingp2p代码复现(续)_追忆苔上雪的博客-CSDN博客

(二)p2p大豆计数代码复现

<1>p2p大豆计数源码

源码地址:https://github.com/UTokyo-FieldPhenomics-Lab/P2PNet-Soy

由于该开源代码是用jupyter写的,不能利用pycharm和pytorch直接进行复现,下面开始介绍利用自己pycharm复现的方法

<2>植物计数方法的拓展

在复现代码之前,先介绍一下植物计数过程需要使用到的方法,大家按需自取,链接附上:

作物计数方法汇总_追忆苔上雪的博客-CSDN博客

作物计数方法之合并信息生成json标签的方法_追忆苔上雪的博客-CSDN博客

这里再拓展一个将标签中提到搭配点的列表完整存入txt文本的方法,方便将p2p大豆计数方法拓展至其他植物

import scipy.io as sio
import numpy as np
import os
mat_filename_list = os.listdir(r"D:\P2P_plant_counting\P2P_watermelon\watermelon_dataset\data_root\test_data\label_mat")
mat_filename_list2 = os.listdir(r"D:\P2P_plant_counting\P2P_watermelon\watermelon_dataset\data_root\train_data\label_mat")
# print(mat_filename_list)
# 批量转化 mat 文件为 txt 文件并保存在 txt_file 文件夹中
for mat_filename in mat_filename_list:
    # print(mat_filename)
    matdata = sio.loadmat("D:/P2P_plant_counting/P2P_watermelon/watermelon_dataset/data_root/test_data/label_mat/" + mat_filename)
    # print(matdata)
    data = matdata["image_info"]
    array1 = data[0][0][0][0][0]
    # print(array1)
    for i in array1:
        # print(i)
        a1 = i[0]
        b1 = i[1]
        # print(list1)
        txt_filename = mat_filename.split('.')[0]
        # print(txt_filename)
        with open(r'D:\P2P_plant_counting\P2P_watermelon\watermelon_dataset\data_root\test_data\label\{}.txt'.format(txt_filename), 'a') as fp:  # a 防止覆盖循环写入
            fp.write('['+str(a1)+','+str(b1)+']'+'\n')
            fp.close()
for mat_filename2 in mat_filename_list2:
    matdata2 = sio.loadmat("D:/P2P_plant_counting/P2P_watermelon/watermelon_dataset/data_root/train_data/label_mat/" + mat_filename2)
    # print(matdata)
    data2 = matdata2["image_info"]
    array2 = data2[0][0][0][0][0]
    # print(array1)
    for j in array1:
        # print(i)
        a2 = j[0]
        b2 = j[1]
        # print(list1)
        txt_filename2 = mat_filename2.split('.')[0]
        # print(txt_filename)
        with open(r'D:\P2P_plant_counting\P2P_watermelon\watermelon_dataset\data_root\train_data\label\{}.txt'.format(txt_filename2), 'a') as fp:  # a 防止覆盖循环写入
            fp.write('['+str(a2)+','+str(b2)+']'+'\n')
            fp.close()

则可以将mat标签中提取到点的信息存到txt文本中方便后续训练所需

<3>p2p大豆计数框架

p2p大豆计数框架如下图所示,其中数据集在源码中的链接中有下载链接,这里不多做介绍

若是需要自己将p2p计数框架用于其作物,数据制作可以参考上文链接中所介绍的方法

vgg16的权重文件也可自己下载:这里提供链接:

https://download.pytorch.org/models/vgg16_bn-6c64b313.pth

https://download.pytorch.org/models/vgg16-397923af.pth

<4>关键代码介绍

其中数据处理代码相比源码,这里做了一点改变,详见下图

训练代码参数解释

parser.add_argument('--point_loss_coef', default=0.0002, type=float)  # default = 0.0002 # 0.5
# the final classification loss = -(the sum of positive confidence score + eos_coef * the sum of negative confidence score)/M, M is total proposed points
parser.add_argument('--eos_coef', default=0.05, type=float,  # 0.05
                    help="Relative classification weight of the no-object class")  # default = 0.5

# a threshold during evaluation for counting and visualization
parser.add_argument('--threshold', default=0.5, type=float,
                    help="threshold in evalluation: evaluate_crowd_no_overlap")
parser.add_argument('--row', default=2, type=int,
                    help="row number of anchor points")
parser.add_argument('--line', default=2, type=int,
                    help="line number of anchor points")

# dataset parameters
parser.add_argument('--dataset_file', default='SOYBEAN')
parser.add_argument('--data_root', default='/home/king/Projects/LiuHuaiyang/p2p_plant_counting/p2p_Soybean/soybean_datasets/SOYBEAN/data_root',
                    help='path where the dataset is')

parser.add_argument('--output_dir', default='output_dir',   # 存放输出日志
                    help='path where to save, empty for no saving')
parser.add_argument('--checkpoints_dir',
                    default='checkpointds_dir',       # 存放权重路径
                    help='path where to save checkpoints, empty for no saving')    # ckpt_5n was not bad, default 2 X 2
parser.add_argument('--tensorboard_dir',
                    default='tensorboard_dir',       # 存放训练阶段和评估阶段loss值
                    help='path where to save, empty for no saving')

parser.add_argument('--data_root用于存放数据集路径

parser.add_argument('--output_dir用于存放 输出日志

parser.add_argument('--checkpoints_dir',用于存放训练的权重路径

parser.add_argument('--tensorboard_dir',用于存放训练阶段和评估阶段loss值

推理代码参数解释

parser = argparse.ArgumentParser(description="Object Counting Framework")
# * Backbone
parser.add_argument('--backbone', default='vgg16', type=str,
                    help="Name of the convolutional backbone to use")
#vgg16_bn
# a threshold during evaluation for counting and visualization
parser.add_argument('--threshold', default=0.5, type=float,
                    help="threshold in evalluation: evaluate_crowd_no_overlap")
parser.add_argument('--row', default=2, type=int,
                    help="row number of anchor points")
parser.add_argument('--line', default=2, type=int,
                    help="line number of anchor points")
parser.add_argument('--data_root', default='/home/king/Projects/LiuHuaiyang/p2p_plant_counting/p2p_Soybean/soybean_datasets/SOYBEAN/data_root/',
                    help='path where the dataset is')
parser.add_argument('--seed', default=42, type=int)
parser.add_argument('--resume', default="/home/king/Projects/LiuHuaiyang/p2p_plant_counting/p2p_Soybean/checkpointds_dir/best_mae.pth", help='resume from checkpoint')  # 训练好的权重位置
parser.add_argument('--vis_dir', default='/media/king/DATA/LiuHuaiyang/p2p_plant_counting/p2p_Soybean/vis_p2pnetSoy_out')    # 预测输出路径
parser.add_argument('--eval', action='store_true')
parser.add_argument('--num_workers', default=1, type=int)
parser.add_argument('--gpu_id', default=0, type=int, help='the gpu used for training')
parser.add_argument('--half', default=True, type=bool)

parser.add_argument('--resume'用于存放训练好的权重位置

parser.add_argument('--vis_dir'为预测输出路径

<5>p2p大豆计数框架训练与推理

按照上述框架和参数设置好以后,就可以开始训练了,温馨提示,epoch很大的时候不要用自己的电脑训练,最好用服务器训练

推理效果如图所示,下图是使用训练200epoch的权重预测的图,可以看到有部分豆荚是没有预测到,可以加大训练epoch达到自己想要的效果

同样的方法预测西瓜苗和玉米苗,会发现预测不准,这个后续再想办法改进模型解决

p2p大豆计数模型pycharm源码已经上传

https://download.csdn.net/download/m0_73832962/88058077?spm=1001.2014.3001.5503

声明:未经本人允许不得转载,搬运或用于其他用途

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL语句GROUP BY、HAVING、EXISTS、SQL函数(Null判断、日期相关、计算数值和字符串操作 )

目录 GROUP BY HAVING EXISTS SQL函数 Null判断函数 日期数据类型及函数 计算数值和字符串操作函数 AVG(平均值) COUNT(数据条数) FIRST/LAST(第一条数据) MAX/MIN(最大值) SUM(列总和) UCASE/ LCASE (转换大小写) MID(截取字符串) LEN(字符值的长度) ROUND(数…

Java版知识付费-轻松拥有知识付费平台

Java版知识付费-轻松拥有知识付费平台 多种直播形式&#xff0c;全面满足直播场景需求 公开课、小班课、独立直播间等类型&#xff0c;满足讲师个性化直播场景需求&#xff1b;低延迟、双向视频&#xff0c;亲密互动&#xff0c;无论是互动、答疑&#xff0c;还是打赏、带货、…

开放式耳机别人能听到吗?开放式蓝牙耳机的优缺点?

​开放式耳机在近几年越来越受欢迎&#xff0c;而市面上的不入耳开放式耳机就分为气传导和骨传导两大类。开放式耳机不入耳设计&#xff0c;佩戴上耳更加稳固舒适&#xff0c;长时间没有压力&#xff0c;而传统入耳式耳机则在封闭情况下听音会容易闷耳&#xff0c;长时间佩戴还…

Linux中文件系统详解——关于loop

都是nvme0n1p3——第三分区的内存分出去的&#xff0c;第二分区为微软的保留分区。 -------------------------------------------------------------------------------------------------------------------------------- 1&#xff0c;4&#xff0c;5&#xff0c;6分区已经…

Windows下 创建 FTP 服务器及相关设置

Windows 创建 FTP 服务器 1. 示例功能说明 FTP 服务器根路径下的目录&#xff1a; C:\USERS\SQQIAN\DESKTOP\FTP └─localuser├─FTP1 # 只有用户名为FTP1可以访问&#xff0c;读写均可│ FTP11.txt│├─FTP2 # 只有用户名为FTP2…

排序算法第四辑——归并排序与计数排序

目录 一&#xff0c;归并排序算法 二&#xff0c;归并排序的非递归版本 三&#xff0c;计数排序 一&#xff0c;归并排序算法 归并排序算法是一个特别经典的算法了。这个算法采用的思想就是一个分治的思想&#xff0c;也就是将大问题化为子问题的思想。这个思想其实我们经常…

如何用双指针法解决力扣“反转单词前缀”问题

本篇博客会讲解力扣“2000. 反转单词前缀”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a;先调用strchr函数&#xff0c;在字符串word中查找字符ch&#xff0c;若找到了&#xff0c;则会返回一个非空指针p&#xff0c;指向ch在word中的位置。为了反转从word到…

下一个更大元素 I 力扣 HashMap + Deque栈 JAVA

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 < i < nums1.length &#xff0c;找出…

2023年北京/上海/深圳CSPM-3中级国标项目管理认证报名

CSPM-3中级项目管理专业人员评价&#xff0c;是中国标准化协会&#xff08;全国项目管理标准化技术委员会秘书处&#xff09;&#xff0c;面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系&#xff0c;建立健全人才职业能力评价和激励机制的要…

基于ESP32-S3-BOX-Lite的语音合成与播报系统(esp-idf+WiFi+HTTPS+TTS)

目录 项目介绍硬件介绍项目设计开发环境及工程目录硬件初始化WiFiHTTPS请求TTS语音合成与播报cJSON解析TTS初始化语音合成与播报 附加功能按键回调LVGL数据可视化显示 功能展示项目总结 &#x1f449; 【Funpack2-3】基于ESP32-S3-BOX-LITE的B站粉丝数语音播报系统 &#x1f44…

ThinkPHP 远程一对多关联

用远程一对多关联的前提 如果模型 A 想远程一对多关联模型 C&#xff0c;前提是中间模型 B 对应的数据库表必须有模型 A 对应的数据表的外键&#xff0c;模型 C 对应的数据库表必须有模型 B 对应数据库表的外键。&#xff08;套娃&#xff09; 举例&#xff0c;商品获取商品评…

《世纪桥》期刊简介及投稿邮箱

《世纪桥》期刊简介及投稿邮箱 一、《世纪桥》期刊简介&#xff1a; 《世纪桥》以服务党史研究、总结执政经验、关注改革实践、透析时代热点、展现党员风采、传播先进文化、繁荣学术事业为宗旨&#xff0c;以发展和培养学术新人为已任&#xff0c;倡导学术的当代性、应用性和…

C# WPF编辑时显示图片,运行时不显示图片的解决方案

1、WPF语法 <Image Source"/ObjectName;component/Images/graph.png"/>2、设置图片属性 复制到输出目录设为&#xff1a;始终复制 生成操作设置为&#xff1a;资源

Spring-AOP(面向切面)

Spring-AOP(面向切面) 场景模拟(计算器) 功能接口 public interface Calculator {int add(int i, int j);int minus(int i, int j);int multiply(int i, int j);int div(int i, int j); }实现类 public class CalculateLogImpl implements Calculator {Overridepublic int …

PerfView 洞察那些 C# 代码中的短命线程

一&#xff1a;背景 1. 讲故事 这篇文章源自于分析一些疑难dump的思考而产生的灵感&#xff0c;在dump分析中经常要寻找的一个答案就是如何找到死亡线程的生前都做了一些什么&#xff1f;参考如下输出&#xff1a; 0:001> !t ThreadCount: 22 UnstartedThread: 0 Ba…

浏览器打开新的页面时自动打开控制台

需求 打开浏览器新tab时自动打开控制台&#xff0c;捕捉初次的网络请求 解决 在浏览器图标属性中加入以下代码&#xff0c;再次打开浏览器 --auto-open-devtools-for-tabs

Django实现接口自动化平台(十四)测试用例模块Testcases序列化器及视图【持续更新中】

相关文章&#xff1a; Django实现接口自动化平台&#xff08;十三&#xff09;接口模块Interfaces序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解&#xff0c;查看本章内容时&#xff0c;要结合整体项目代码来看&#xff1a; python django…

1000+设计施工模型免费下载,助力设计方案制作和汇报场景搭建!

作为一名工程设计、施工人员&#xff0c;设计方案制作、工程汇报场景搭建的情景再常见不过。日常需要的模型是必不可少的&#xff0c;但最令人头大的问题是如何寻找方案素材。想要表达的信息越多&#xff0c;素材获取就越是苦恼&#xff01; 有没有一款软件能够集方案三维汇报…

边缘计算:连接物理与数字世界的智能桥梁

引言&#xff1a; 边缘计算&#xff08;Edge Computing&#xff09;作为一种分布式计算模型&#xff0c;旨在将数据处理和分析推向网络边缘设备。随着物联网和大数据的快速发展&#xff0c;边缘计算成为了解决数据处理延迟、网络带宽压力和隐私安全等问题的重要技术。本文将深入…

OLED拼接屏采购指南:如何选择最佳方案?

OLED拼接屏作为一种创新的大屏幕显示设备&#xff0c;正在成为各行各业信息展示和传播的重要工具。 然而&#xff0c;面对市场上众多的品牌和型号&#xff0c;如何选择最佳的OLED拼接屏方案成为一项关键任务。 本文将为您提供一份全面且实用的OLED拼接屏采购指南&#xff0c;…