TXT文件剔除冗余信息

简化问题

先尝试对一个txt文件中的内容进行操作:
文件中的内容按行读取,以空格为分隔符进行分割,将其存入vector容器中(vectorres)。另外创建一个vector容器(vectorkeywords),用来存放关键字,进行关键字匹配(ret[8]==keywords[i]?),即可达到提取有效信息和剔除冗余信息的目的。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <fstream>
#include <string>
#include<vector>
using namespace std;

void printValue(vector<string>&s)
{
	for (vector<string>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

vector<string> split(const string& str, const string& delim) {
	vector<string> res;
	if ("" == str) return res;
	//先将要切割的字符串从string类型转换为char*类型
	char * strs = new char[str.length() + 1]; //不要忘了
	strcpy(strs, str.c_str());

	char * d = new char[delim.length() + 1];
	strcpy(d, delim.c_str());

	char *p = strtok(strs, d);
	while (p) {
		string s = p; //分割得到的字符串转换为string类型
		res.push_back(s); //存入结果数组
		p = strtok(NULL, d);
	}

	return res;
}

int main()
{
	ifstream ifs("P0001.txt", ios::in);
	ofstream ofs;

	ofs.open("P0002.txt", ios::out);

	if(!ifs)
	{
	cerr<<"open error"<<endl;
	exit(1);
	}

	string s;
	int index = 0;

	while (getline(ifs, s))
	{
		//cout << s << endl;

		vector<string> res = split(s, " ");

		//printValue(res);

		/*if (index > 1)
		{
			cout << res[8] << endl;
		}*/

		//system("pause");

		vector<string> keywords;

		keywords.push_back("small-vehicle");
		keywords.push_back("large-vehicle");
		keywords.push_back("plane");
		keywords.push_back("ship");
		keywords.push_back("harbor");
		keywords.push_back("roundabout");
		keywords.push_back("bridge");
		keywords.push_back("helicopter");
		keywords.push_back("container-crane");

		if (index > 1) 
		{
			for (int i = 0; i < keywords.size(); i++)
			{
				if (res[8] == keywords[i])
				{
					//printValue(res);
					for (vector<string>::iterator it = res.begin(); it != res.end(); it++)
					{
						ofs << (*it) << " ";
					}
					ofs << endl;
				}
			}
		}
		else
		{
			//printValue(res);
			for (vector<string>::iterator it = res.begin(); it != res.end(); it++)
			{
				ofs << (*it) << " ";
			}
			ofs << endl;
		}
		//system("pause");

		index++;
	}

	ofs.close();

	system("pause");
	return 0;
}
//多了个换行符
//其次,需要解决批量的问题

下图是处理过后的对比图,红色部分为冗余信息,可以看出此番操作达到了提取有效信息和剔除冗余信息的目的。
错误信息被剔除

美中不足的是:新生成的txt文件多了一个空白行,但是应该不影响数据的后续操作吧?最后多了一个空行
接下来要考虑的就是批量的问题。

说实话,有些事情只有自己亲手做了才知道问题出在哪里。

提取几个新的知识盲点:

#define _CRT_SECURE_NO_WARNINGS

字符串分割操作,切记先将要切割的字符串从string类型转换为char*类型。

先用getline()函数读行,再用split()函数进行分割,将分割过后的字符串存入容器。(不得不说,这个split()函数真的很好用)

未完待续…

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值