change-agent源码阅读
change-agent中用的是多分类的指标:miou(所有类别iou的平均值)、acc(像素准确率)、acc_cls(对每个类别的准确率取平均)、FWIoU_seg(频率加权的交并比,根据类别出现的频率取平均)、类别交并比IoU (Class-wise)[0.9810, 0.7954, 0.8200]1. thought: dict = dict(role='THOUGHT', begin='T
整个源码有两个大目录:lagent和Multi_change。前者是agent能力,包含工具调用、任务分解、llm接入等。后者是只做变化检测与自然语言描述任务,看起来用的是segformer。
agent在什么时候会调用segformer呢:在用户请求分析两张图像间的变化等。调用路径:通过agent触发,调用image_change_imterpreter.py中的Visual_Change_Process_PythonInterpreter这个action。
lagent下面有actions、agents和llms目录。
actions是动作层,里面定义了供agent调用的可执行工具。
agents是策略层,有reAct、rewoo等风格的agent。
llms是llm接入层。
一些小知识:
1. thought: dict = dict(role='THOUGHT', begin='Thought:', end='\n', belong='assistant')是传入的参数,初始化为一个字典。
react.py里面的。
2.
def chat(self, message: Union[str, dict, List[dict]],
**kwargs) -> AgentReturn:
这里面,message: Union[str, dict, List[dict]]是类型注解,
Union[A, B, C]表示参数可以是 A、B 或 C 中的任意一种类型3.
parser = argparse.ArgumentParser(description='Remote_Sensing_Image_Change_Interpretation') parser.add_argument('--imgA_path', default=r'../tmp_dir/train_1a.png') parser.add_argument('--imgB_path', default=r'../tmp_dir/train_1b.png') parser.add_argument('--mask_save_path', default=r'../tmp_dir/CDmask.png') args = parser.parse_args() imgA_path = args.imgA_path imgB_path = args.imgB_path先parser = argparse.ArgumentParser创建一个解析器对象,然后parser.add_argument是告诉解析器有哪些参数,而
args = parser.parse_args()是解析器根据前面定义的规则,去解析命令行参数。
运行streamlit的时候,streamlit run web_demo.py --server.address=0.0.0.0 --server.port=8501用这个命令,就可以别的机器访问了。
网页成功运行了,但是我上传两张图片,问是否有变化,输出的mask结果很差。看流程发现是tool运行失败,就执行了最简单的差分去算mask。于是接下来直接看predict.py能不能运行成功。
predict.py报错说维度不对。原始图像是hwc,一般转置后是chw,因为pytorch之类的用起来方便,会是(B,C,H,W)

整个运行起来的数据流是,先经过encoder,然后经过attentieEncoder生成mask,然后经过decoder生成文本描述。

| 指标 (Metric) | 缩写 | 结果 (Score) | 描述 |
| 平均交并比 | mIoU_seg | 0.86545 | 所有类别 IoU 的平均值,是变化检测的关键指标。 |
| 像素准确率 | Acc_seg | 0.98225 | 正确分类的像素占总像素的比例。 |
| 类别像素准确率 | Acc_class_seg | 0.91700 | 对每个类别准确率取平均。 |
| 频率加权交并比 | FWIoU_seg | 0.96617 | 根据类别频率加权的 IoU 平均值。 |
| 类别交并比 | IoU (Class-wise) | [0.9810, 0.7954, 0.8200] | 分别对应 3 个类别(通常是:未变化、新增变化、减少变化)的 IoU。 |
| 指标 (Metric) | 结果 (Score) |
| BLEU-1 | 0.87361 |
| BLEU-2 | 0.79283 |
| BLEU-3 | 0.72097 |
| BLEU-4 | 0.66181 |
| METEOR | 0.41088 |
| ROUGE-L | 0.76437 |
| CIDEr | 1.41622 |
无变化样本:1930个
| 指标 (Metric) | 缩写 | 结果 (Score) | 描述 |
| BLEU-4 | - | 0.97768 | 描述准确性非常高,说明模型能很好地描述“无变化”场景。 |
| CIDEr | - | 0.00000 | 在“无变化”的固定句式下,CIDEr分数通常会不适用或很低。 |
| No-Change Acc | - | 0.98135 | 分类准确率: 模型预测为“无变化”且真实情况为“无变化”的比例。 |
有变化样本:1928个
| 指标 (Metric) | 缩写 | 结果 (Score) | 描述 |
| BLEU-4 | - | 0.40972 | 描述复杂“有变化”场景的准确性显著低于“无变化”场景,这是常见的现象。 |
| CIDEr | - | 0.68352 | 在描述有变化的复杂内容时,CIDEr开始体现出区分度。 |
| Change Acc | - | 0.89834 | 分类准确率: 模型预测为“有变化”且真实情况为“有变化”的比例。 |
观察了一下,别的文章中的指标是f1 iou rec prec这几个。问了ai,说是这几个指标是二分类的指标。change-agent中用的是多分类的指标:miou(所有类别iou的平均值)、acc(像素准确率)、acc_cls(对每个类别的准确率取平均)、FWIoU_seg(频率加权的交并比,根据类别出现的频率取平均)、类别交并比IoU (Class-wise)[0.9810, 0.7954, 0.8200]
跑一下训练试试
python train.py --train_goal 2 --data_folder /root/autodl-tmp/datasets/LEVIR-MCI-dataset/images --savepath ./models_ckpt/
更多推荐


所有评论(0)