整个源码有两个大目录: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/

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐