咽喉炎挂什么科| 为什么会长闭口粉刺| 后羿是什么生肖| 梦到被蜜蜂蛰是什么意思| 老公的爸爸称谓是什么| 突然眩晕是什么原因| 高丽参和红参有什么区别| 沙土地适合种什么农作物| 丰富的近义词和反义词是什么| 人脉是什么意思| 什么材质的拖鞋不臭脚| 甙是什么意思| 殚精竭虑是什么意思| 紫薯不能和什么一起吃| 立夏吃什么蛋| 猴子是什么颜色| 广东有什么好玩的地方| 五十年婚姻是什么婚| 怀挺是什么意思| 唇炎是什么原因引起的| 胃总疼是什么原因| 为什么明星不激光祛斑| 崩溃是什么意思| 克服是什么意思| a型rh阳性是什么意思| 小孩不吃肉是什么原因| 麻腮风是什么| 心慌心跳吃什么药| 梦见别人开车撞死人是什么意思| 云母是什么| 太平公主叫什么名字| 指甲很薄很软是为什么| 指鹿为马的反义词是什么| 意大利用什么货币| 嘴辰发紫是什么病| 手为什么会掉皮| 孕妇吃什么对胎儿好| cva医学上是什么意思| 欲钱知吃月饼是什么生肖| 阿戈美拉汀片是什么药| 黑化是什么意思| 一个王一个番读什么| 随意是什么意思| 脾虚吃什么| 杆菌一个加号什么意思| 男生染头发什么颜色好看| 梦见吃杨梅是什么意思| 中药什么时候喝效果最好| 做亲子鉴定需要什么东西| 女人为什么会患得患失| spc是什么意思| 胃病是什么原因引起的| 体积是什么| 逸夫是什么意思| 美林是什么药| 威士忌兑什么好喝| 月经褐色是什么原因| 两肺结节是什么意思| 血管瘤有什么危害| 小孩吃什么补脑更聪明| 甘油三酯吃什么药| 梦见掉牙齿是什么征兆| 腿脚发麻是什么原因| 正常的白带是什么样的| 吃什么食物可以降尿酸| 术前四项检查是什么| 连铁是什么器官| ye是什么颜色| 一个立一个羽念什么| art什么意思| 人乳头瘤病毒39型阳性是什么意思| ieg是什么意思| 中国梦是什么意思| 拉架棉是什么面料| 心脏消融术是什么手术| 早晨起来手肿是什么原因| 白细胞低有什么危害| 为什么来我家| 什么血型会导致不孕| 如厕什么意思| jackjones是什么品牌| 黎明是什么时间| bang什么意思| 角的大小与什么有关与什么无关| 空降兵属于什么兵种| 头七有什么规矩| 什么叫hp感染| 十二年义务教育什么时候开始| 耍宝是什么意思| 蝴蝶代表什么生肖| 大便干燥一粒一粒的吃什么药| 拔罐起水泡是什么原因| 戏谑是什么意思| 老年人爱出汗是什么原因| 缺铁性贫血的人吃什么补血最快| 屁股长痘痘是什么原因| 男属龙和什么属相最配| 秋水仙碱是什么| 社恐是什么意思| 点灯是什么意思| 为什么经常流鼻血| 吃什么去肝火最快| 艾特是什么意思| 真丝姆米是什么意思| 荷叶泡水喝有什么作用| 更是什么结构的字| 中药饮片是什么意思| 儿保是什么| 男属狗配什么属相最好| kerry英文名什么意思| 心包积液是什么意思| 皮肤过敏挂什么科| 看脊椎挂什么科| 不够时间好好来爱你是什么歌| 盈字五行属什么| robinhood是什么牌子| 7月14号是什么节日| 苍白的什么| disease是什么意思| 土豆不能和什么一起吃| 上午十点多是什么时辰| 须眉什么意思| 易烊千玺原名叫什么| 腺瘤是什么意思| 怕得什么| 1978年属什么生肖| 低密度脂蛋白低是什么原因| 京东积分有什么用| 气场什么意思| gm是什么意思| 缺少雌激素吃什么可以补充| 小孩不说话什么原因| 莫言是什么意思| 萝卜喝醉了会变成什么| 嗳气和打嗝有什么区别| 腿抖是什么病的预兆| 人参是什么味道| hpv是什么意思| 胆的作用和功能是什么| 低钾会出现什么症状| 针眼用什么药| 吝啬什么意思| 庄子姓什么| 16 5是什么码| 皮肤一碰就红是什么原因| 为什么老想睡觉| 脱敏什么意思| 宝宝打嗝是什么原因引起的| 什么气味能驱赶猫| 继发性闭经是什么意思| hot什么意思| 欲情故纵什么意思| 吃什么东西可以长高| 身份证号后四位代表什么| 金屋藏娇是什么意思| 孝庄是康熙的什么人| 为什么叫马路| 肝裂不宽是什么意思| 什么的原始森林| 痔疮吃什么药最好| 布谷鸟什么时候叫| 蓝灰色配什么颜色好看| 嬴政姓什么| 经警是做什么的| 咳嗽有黄痰吃什么消炎药| 熬粥用什么锅好| out什么意思| 低烧是什么原因| 抽血前喝水有什么影响| 肌红蛋白偏低说明什么| 一什么嘴巴| 痛经 吃什么| 股癣是什么样子的图片| 塑形是什么意思| 预防脑梗用什么药效果好| 胰腺挂什么科| 晚上睡觉多梦是什么原因| 电脑什么牌子好| 九出十三归是什么意思| 为什么水不能燃烧| 什么树林| 腐女是什么| 桔色搭配什么颜色好看| 一什么苹果| 肋骨骨折什么症状| 为什么不呢| 清洁度111是什么意思| 3个火念什么| 脱发缺乏什么维生素| 做流产手术需要准备什么东西| 木木耳朵旁是什么字| 吃金蝉有什么好处| 肠系膜淋巴结肿大吃什么药| 吃什么全面补充维生素| 丁克是什么| 高抬贵手是什么意思| 天秤男喜欢什么样的女生| 鱼不能和什么一起吃| gmv是什么意思| 前列腺液是什么东西| 平血头晕吃什么药最好| 面部神经挂什么科| 吃高血压药有什么副作用| 每逢佳节倍思亲的上一句是什么| 结甲是什么意思| aoa是什么意思| 左腿发麻是什么原因| 荨麻疹是什么症状| 高笋和茭白有什么区别| 胳膊脱臼是什么症状| 股骨头坏死挂什么科| 为什么合欢树又叫鬼树| 绣球花什么时候修剪| 金字旁的字和什么有关| 狗是什么偏旁| 大便粘稠是什么原因| 文殊菩萨保佑什么| 抑郁症是什么| 排骨炒什么配菜好吃| 九王念什么| 一笑了之是什么意思| 七夕节是什么节日| 茶学专业学什么| 突然间头晕是什么原因| 刺青是什么意思| 预谋什么意思| 副镇长是什么级别| 刚怀孕肚子有什么变化| 孩子发烧挂什么科| 煲仔饭用什么米最好| 喝什么茶减肥效果最好| 玻璃体混浊用什么眼药水| 海啸是什么意思| 营养科都检查什么项目| 一九六七年属什么生肖| daddy什么意思| 注解是什么意思| 人类是什么动物| 附耳是什么| 什么的宝石| 什么动物站着睡觉| 疱疹吃什么药好得快| 请婚假需要什么材料| 来事吃什么水果好| 毒龙是什么意思| 冠脉ct能检查出什么| 眼睛浮肿是什么原因引起的| 蟹粉是什么| 亲亲抱抱举高高什么意思| 扭转乾坤什么意思| 武昌鱼是什么鱼| 经常挖鼻孔有什么危害| 为什么会脚臭| 效应什么意思| 憋屈是什么意思| 轻度高血压吃什么食物可以降压| 什么是水印照片| 肺结节挂什么科室| 胃有火吃什么药| 什么人容易得老年痴呆| 什么的足迹| 什么叫二氧化碳| 为什么会有血管瘤| 为什么会反胃想吐| 百度
"); //-->

博客专栏

EEPW首页 > 博客 > 地平线静态目标检测 MapTR 参考算法 - V2.0

四川多景区厕纸“压力大” 有游客用完还打包

发布人:地平线开发者 时间:2025-08-04 来源:工程师 发布文章
百度 车内的储物空间还是不错的,驾驶员手边的位置,包括中控储物格和扶手箱都有较大、较深的空间,随身物品都能妥善的放置,然而后备厢的周到程度还是不够的,后排座椅靠背只支持整体放倒,虽然有个中央通道,但应付一些特定的生活场景还是无法顾全的。

该示例为参考算法,仅作为在征程 6 上模型部署的设计参考,非量产算法

一、简介

高清地图是自动驾驶系统的重要组件,提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高,维护复杂,使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性,如处理复杂地图元素的能力不足、缺乏实例级信息等,在实时性和后处理

复杂度上存在挑战。

为了解决这些问题,基于 Transformer 的 MapTR 模型被提出,它采用端到端结构,仅使用图像数据就能实现高精度建图,同时保证实时性和鲁棒性。MapTRv2 在此基础上增加了新特性,进一步提升了建图精度和性能。

地平线面向智驾场景推出的征程 6 系列(征程 6)芯片,在提供强大算力的同时带来了极致的性价比,征程 6 芯片对于 Transformer 模型的高效支持助力了 MapTR 系列模型的端侧部署。本文将详细介绍地平线算法工具链在征程 6 芯片部署 MapTR 系列模型所做的优化以及模型端侧的表现。

二、性能精度指标

模型配置:

image.png

性能精度表现:

image.png


    三、公版模型介绍

    3.1 MapTR

    image.png

    MapTR 模型的默认输入是车载摄像头采集到的 6 张相同分辨率的环视图像,使用 nuScenes 数据集,同时也支持拓展为多模态输入例如雷达点云。模型输出是矢量化的地图元素信息,其中地图元素为人行横道、车道分隔线和道路边界 3 种。模型主体采用 encoder-decoder 的端到端结构:


      3.2 MapTRv2

      image.png

      MapTRv2 在 MapTR 的基础上增加了新的特性:


        四、地平线部署说明

        地平线参考算法使用流程请参考征程 6 参考算法使用指南;对应高效模型设计建议请参考《征程 6 平台算法设计建议》

        MapTROE 模型引入了 SD map 的前融合结构,与图像视角转换后的 bev feature 进行融合,再通过优化后的 MapTR head 生成矢量化的地图元素。整体结构如下:

        image.png

        因此 maptroe_henet_tinym_bevformer_nuscenes 模型相比之前版本新增了如下优化点:

          maptroe_henet_tinym_bevformer_nuscenes 模型对应的代码路径:

          image.png

          4.1 性能优化

          4.1.1 Backbone

          MapTROE 采用基于征程 6 芯片的高效轻量化 Backbone HENet_TinyM(Hybrid Efficient Network, Tiny for J6M),HENet 能更好地利用征程 6 系列芯片的算力,在模型精度和性能上更具优势。HENet_TinyM 采用了纯 CNN 架构,总体分为四个 stage,每个 stage 会进行一次 2 倍下采样,具体结构配置如下:

          # henet-tinym
          depth = [4, 3, 8, 6]
          block_cls = ["GroupDWCB", "GroupDWCB", "AltDWCB", "DWCB"]
          width = [64, 128, 192, 384]
          attention_block_num = [0, 0, 0, 0]
          mlp_ratios, mlp_ratio_attn = [2, 2, 2, 3], 2
          act_layer = ["nn.GELU", "nn.GELU", "nn.GELU", "nn.GELU"]
          use_layer_scale = [True, True, True, True]
          extra_act = [False, False, False, False]
          final_expand_channel, feature_mix_channel = 0, 1024
          down_cls = ["S2DDown", "S2DDown", "S2DDown", "None"]
          patch_embed = "origin"

          4.1.2 Neck

          Neck 部分采用了地平线内部实现的 FPN,相比公版 FPN 实现,在征程 6 平台上性能更加友好。

          4.1.3 View Transformer

          地平线参考算法版本将基于 LSS 的视角转换方式替换为深度优化后 Bevformer 的 View Transformer 部分。

            # 公版模型
            class MapTRPerceptionTransformer(BaseModule):
                ...
                def attn_bev_encode(...):
                    ...
                    if prev_bev is not None:
                        if prev_bev.shape[1] == bev_h * bev_w:
                            prev_bev = prev_bev.permute(1, 0, 2)
                        if self.rotate_prev_bev:
                            for i in range(bs):
                                # num_prev_bev = prev_bev.size(1)
                                rotation_angle = kwargs['img_metas'][i]['can_bus'][-1]
                                tmp_prev_bev = prev_bev[:, i].reshape(
                                    bev_h, bev_w, -1).permute(2, 0, 1)
                                tmp_prev_bev = rotate(tmp_prev_bev, rotation_angle,
                                                      center=self.rotate_center)
                                tmp_prev_bev = tmp_prev_bev.permute(1, 2, 0).reshape(
                                    bev_h * bev_w, 1, -1)
                                prev_bev[:, i] = tmp_prev_bev[:, 0]
                    
                    # add can bus signals
                    can_bus = bev_queries.new_tensor(
                        [each['can_bus'] for each in kwargs['img_metas']])  # [:, :]
                    can_bus = self.can_bus_mlp(can_bus[:, :self.len_can_bus])[None, :, :]
                    bev_queries = bev_queries + can_bus * self.use_can_bus
                    ...
            
            # 地平线参考算法
            class BevFormerViewTransformer(nn.Module):
                ...
                def __init__(...):
                    ...
                    self.prev_frame_info = {
                        "prev_bev": None,
                        "scene_token": None,
                        "ego2global": None,
                    }
                    ...
                def get_prev_bev(...):
                    if idx == self.queue_length - 1 and self.queue_length != 1:
                        prev_bev = torch.zeros(
                            (bs, self.bev_h * self.bev_w, self.embed_dims),
                            dtype=torch.float32,
                            device=device,
                        )
                        ...
                    else:
                        prev_bev = self.prev_frame_info["prev_bev"]
                        if prev_bev is None:
                            prev_bev = torch.zeros(
                                (bs, self.bev_h * self.bev_w, self.embed_dims),
                                dtype=torch.float32,
                                device=device,
                            ) # 对应改动2.a
                            ...
                def bev_encoder(...):
                    ...
                    tmp_prev_bev = prev_bev.reshape(
                        bs, self.bev_h, self.bev_w, self.embed_dims
                    ).permute(0, 3, 1, 2)
                    prev_bev = F.grid_sample(
                        tmp_prev_bev, norm_coords, "bilinear", "zeros", True
                    ) # 对应改动2.b
                    ...
            class SingleBevFormerViewTransformer(BevFormerViewTransformer):
                ...
                def get_bev_embed(...):
                    ...
                    bev_query = self.bev_embedding.weight
                    bev_query = bev_query.unsqueeze(1).repeat(1, bs, 1) # 对应改动2.c
                    ...

            d. 取消了公版的 TemporalSelfAttention,改为 HorizonMSDeformableAttention,保持精度的同时提升速度;

            # 公版模型Config
            model = dict(
                ...
                pts_bbox_head=dict(
                    type='MapTRHead',
                    ...
                    transformer=dict(
                        type='MapTRPerceptionTransformer',
                        ...
                        encoder=dict(
                            type='BEVFormerEncoder',
                            ...
                            transformerlayers=dict(
                                type='BEVFormerLayer',
                                attn_cfgs=[
                                    dict(
                                        type='TemporalSelfAttention',
                                        embed_dims=_dim_,
                                        num_levels=1),
                                        ...
                                ]
                            )
                        )
                    )
                )
            )
            
            # 地平线参考算法Config
            model = dict(
                ...
                view_transformer=dict(
                    type="SingleBevFormerViewTransformer",
                    ...
                    encoder=dict(
                        type="SingleBEVFormerEncoder",
                        ...
                        encoder_layer=dict(
                            type="SingleBEVFormerEncoderLayer",
                            ...
                            selfattention=dict(
                                type="HorizonMSDeformableAttention", # 对应改动2.d
                                ...
                            ),
                        )
                    )
                )
            )

            e. 支持公版 Bevformer 中的 bev_mask,并将涉及到的 gather/scatter 操作,用 gridsample 等价替换,提高模型速度。

            # 地平线参考算法Config
            view_transformer=dict(
                type="SingleBevFormerViewTransformer",
                ...
                max_camoverlap_num=2, # 对应根据bev_mask进行稀疏映射,提高运行效率,对应改动2.e
                virtual_bev_h=int(0.4 * bev_h_),
                virtual_bev_w=bev_w_,
                ...
            )

            4.1.4 Head

            公版 MapTR 使用分层 query 机制,定义一组 instance queries 和由所有 instance 共享的 point queries,每个地图元素对应一组分层 query(一个 instance query 和共享的 point queries 广播相加得到),在 decoder layer 中分别使用 self-attention 和 cross-attention 来更新分层 query。

            MapTROE 的改进则是为每个地图元素分配一个 instance query(无直接 point query),每个 query 用于编码语义信息和地理位置信息,decoder 阶段和公版 MapTR 一样,分别进行 multi-head self-attention 和 deformable cross-attention,最后每个 instance query 通过 MLP 网络生成类别信息和元素内的点集坐标,相比公版预测分层 query,改进后直接预测 instance query 带来的计算量更少,极大地提高了模型在端侧的运行性能。同时借鉴 StreamMapNet,使用多点注意力方法来适应高度不规则的地图元素,扩大感知范围。代码见/usr/local/lib/python3.10/dist-packages/hat/models/task_modules/maptr/instance_decoder.py: class MapInstanceDetectorHead(nn.Module)

            4.1.5 多点注意力

            image.png 传统的可变形注意力为每个 query 分配一个参考点,多点注意力则使用前一层预测的地图元素的多个点作为当前层 query 的参考点,具体计算方式是在点维度上扩展了一层求和,将一个点变成多个点,分别计算 deformable attention。回归的时候并非预测 offsets,而是直接预测地图元素点的坐标位置。

            4.1.6Attention

            模型中用到的 attention 操作均使用地平线提供的算子,相比 PyTorch 提供的公版算子,地平线 attention 算子在保持算子逻辑等价的同时在效率上进行了优化

            from hat.models.task_modules.bevformer.attention import (
                HorizonMSDeformableAttention,
                HorizonMSDeformableAttention3D,
                HorizonSpatialCrossAttention,
                ...
            )

            4.2 精度优化

            4.2.1 浮点精度

            MapTROE 模型引入 SD Map 前融合,与图像转换后的 bev feature 进行融合,以提高在线地图的生成质量。模块结构如下图所示:

            image.png

            4.2.1.1 SD Map 特征提取

            SD Map 从 OpenStreetMap(OSM)中获取,通过由 GPS 提供的车辆位姿,查询车辆当前位姿附近的 SD Map,然后将 SD Map 转换到自车坐标系下,与 NuScenes 中的数据标注坐标系保持一致。SD Map 会从车道中心骨架线 Polyline 的形式转化为栅格结构,大小和 BEV 特征相同,经过 CNN 变成特征图,对应 SD Map 的先验信息。

            4.2.1.2 SD Map 特征融合

            栅格化后的 SD Map 和实际场景可能会出现错位、不对齐的情况,这种错位导致直接 Concatenate BEV 特征和 SD Map 特征的效果并不好,为了解决这个问题,引入了特征融合模块,通过网络学习来决定最适合的对齐方式,可以有效地利用 SD Map 先验提升 BEV 特征的效果。关于特征融合模块,分别实验了交叉注意力与 CNN 网络,通过精度与性能的平衡,最后选择了 CNN 网络模块。

            4.3 量化精度

              # Config文件
              cali_qconfig_setter = (default_calibration_qconfig_setter,)
              qat_qconfig_setter = (default_qat_fixed_act_qconfig_setter,)

              2.浮点阶段采用更大的 weight decay 训练,使浮点数据分布范围更小,浮点模型参数更有利于量化

              # Config文件
              float_trainer = dict(
                  ...
                  optimizer=dict(
                      ...
                      weight_decay=0.1, # 相比maptrv2_resnet50_bevformer_nuscenes增大了10倍
                  ),
                  ...
              )

              3.QAT 训练采用固定较小的 learning rate 来 fine-tune,这里固定也即取消 LrUpdater Callback 的使用,配置如下:

              # Config文件
              qat_lr = 1e-9

              4.取消了公版模型 MapTRHead 中对于量化不友好的 inverse_sigmoid 操作;此外 MapTROE 对 Head 的优化无需再引入 reg_branches 输出和 reference 相加后再 sigmoid 的操作:

              # 公版模型
              class MapTRHead(DETRHead):
                  ...
                  def forward(...):
                      ...
                      for lvl in range(hs.shape[0]):
                          if lvl == 0:
                              # import pdb;pdb.set_trace()
                              reference = init_reference
                          else:
                              reference = inter_references[lvl - 1]
                          reference = inverse_sigmoid(reference)
                          ...
                          tmp = self.reg_branches[lvl](...)
                          tmp[..., 0:2] += reference[..., 0:2]
                          tmp = tmp.sigmoid() # cx,cy,w,h
                          
              # 地平线参考算法
              class MapInstanceDetectorHead(nn.Module):
                  ...
                  def get_outputs(...):
                      ...
                      for lvl in range(len(outputs_classes)):
                          tmp = reference_out[lvl].float()
              
                          outputs_coord, outputs_pts_coord = self.transform_box(tmp)
                          outputs_class = outputs_classes[lvl].float()
              
                          outputs_classes_one2one.append(
                              outputs_class[:, 0 : self.num_vec_one2one]
                          )
                          outputs_coords_one2one.append(
                              outputs_coord[:, 0 : self.num_vec_one2one]
                          )
                          outputs_pts_coords_one2one.append(
                              outputs_pts_coord[:, 0 : self.num_vec_one2one]
                          )
              
                          outputs_classes_one2many.append(
                              outputs_class[:, self.num_vec_one2one :]
                          )
                          outputs_coords_one2many.append(
                              outputs_coord[:, self.num_vec_one2one :]
                          )
                          outputs_pts_coords_one2many.append(
                              outputs_pts_coord[:, self.num_vec_one2one :]
                          )
                  ...        
                  def forward(...):
                      outputs = self.bev_decoder(...)
                      if self.is_deploy:
                          return outputs
                      ...
                      outputs = self.get_outputs(...)
                      ...
                      return self._post_process(data, outputs)

              5.Attention 结构优化,通过数值融合方法,将部分数值运算提前进行融合,减少整体的量化操作,提高模型的量化友好度

              4.4 其他优化

              4.4.1 设计优化

                五、总结与建议

                5.1 部署建议

                  5.2 总结

                  本文通过对 MapTR 进行地平线量化部署的优化,使得模型在征程 6 计算平台上用较低的量化精度损失,最优获得征程 6M 单核 93.77 FPS 的部署性能。同时,MapTR 系列的部署经验可以推广到其他相似结构或相似使用场景模型的部署中。

                  对于地平线 MapTR 参考算法模型,结合 Sparse Bev 等的优化方向仍在探索和实践中,Stay Tuned!

                  六、附录


                    *博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



                    相关推荐

                    技术专区

                    关闭
                    潜能是什么意思 慢性肾炎是什么原因引起的 新生儿湿肺是什么意思 破执是什么意思 小蝌蚪吃什么
                    胃溃疡吃什么食物 这是什么虫子 类风湿和风湿有什么区别 独在异乡为异客的异是什么意思 开大是什么意思
                    1104是什么星座 体检胸透主要检查什么 为什么会得人乳头瘤病毒 水钠潴留什么意思 毛豆是什么豆
                    凝血酸是什么 胆气不足吃什么中成药 小人是什么意思 辰五行属性是什么 西京医院什么科室最强
                    异地办理临时身份证需要什么材料hcv7jop9ns5r.cn 燃气泄露是什么味道hcv8jop2ns7r.cn 三头六臂开过什么生肖hcv9jop5ns1r.cn 心率过缓有什么危害hcv8jop8ns8r.cn 小拇指旁边的手指叫什么tiangongnft.com
                    玉五行属性是什么hcv9jop0ns1r.cn ercp是什么意思hcv9jop1ns6r.cn 属蛇是什么命hcv8jop0ns3r.cn 柏拉图之恋是什么意思hcv8jop3ns4r.cn 美国为什么叫鹰酱hcv9jop5ns8r.cn
                    什么降血糖hcv7jop4ns8r.cn 什么东西补气血hcv9jop4ns0r.cn 莫名其妙的心情不好是什么原因hcv9jop5ns6r.cn 狗怀孕有什么症状hcv8jop6ns3r.cn 梦见捡到钱是什么征兆hcv9jop8ns3r.cn
                    急于求成是什么意思hcv9jop5ns6r.cn 皇太后是皇上的什么人onlinewuye.com 天秤座后面是什么星座hcv9jop6ns0r.cn 苍蝇是什么味道hcv9jop4ns6r.cn 什么是忧郁症cj623037.com
                    百度