论文地址:https://arxiv.org/abs/2104.02628
代码地址:https://github.com/JingZhang617/Joint_COD_SOD
发表于:CVPR 2021

I. Intro

  • 这个网络是用来进行显著目标检测与伪装目标检测的,并且在这两个任务上均达到了SOTA
  • 将Joint Training应用到了两个近乎相反的任务上

II. Data Augmentation

高质量的数据集对于网络的性能有较大的影响。而对于这两个任务,有一个好玩的情况:显著目标检测与伪装目标检测都是要把图中感兴趣的那个东西给标出来,区别在于:

  • 显著目标的前景与背景往往差别很大,此所谓“显著”
  • 伪装目标的前景与背景往往十分相似,否则就不存在“伪装”的说法

这么乍一分析,感觉对于同一张图片,两个任务的标注对象应该不一样,但如果打开COD数据集一个个去看的话,会发现下面这种例子:

显然这些样本对也完全可以放到SOD数据集里去,而且属于难度较大的那种,加入这种数据去进行SOD的训练确实有可能能提升网络的性能(Robust Learning)。

那么下一个问题就是,怎么去找这些可以放到SOD数据集里的样本?

  • 一种想法是一个个直接人工去看。个人感觉从某种程度上这样做可能效果更好,就是比较花时间(COD10k数据集里有1万张图,感觉大概得整整砸两天进去…)
  • 另一种想法就是怎么拿算法去找了。文中的解决方法很直接,直接找个SOD的网络来inference COD数据集。MAE大的,说明就是那种伪装得特别好的,不能用(感觉用了可能就会污染SOD数据集);MAE小的,说明原有的SOD模型也能处理的比较好,可以拿去训练看看能不能提升性能。

最终的话作者是挑了400对样本(猜测是MAE从小到大排序到400差不多还能用),然后随机替换掉原有SOD数据集中的400组图片,来作为新的SOD数据集。这里个人感觉是不是直接加进去效果会更好,不过也可能是为了公平起见所以来控制训练样本数相同。

如果要分类的话,这倒可以算是一种contrast level augmentation,既然现有SOD数据集中高对比度的图片比较多,也没有什么比较好的调整对比度的方法,那么不如就直接引入一些低对比度的图片。

III. Network Architecture


个人感觉看起来像个GAN,其中生成器采用的是Encoder-Decoder框架。其他的信息有:

  • Xs : SOD数据集中的图像
  • Xc : COD数据集中的图像
  • EαsE_{\alpha_{s}}Eαs​​ : 用于SOD的Encoder,backbone为ResNet50
  • EαcE_{\alpha_{c}}Eαc​​ : 用于COD的Encoder,backbone为ResNet50
  • Xp : PASCAL VOC 2007数据集中的图像
  • SθS_{\theta}Sθ​: 相似度度量模块
  • Gβ{G_\beta }Gβ​: 共同decoder,能够生成SOD或者COD的预测结果
  • DγfD_{\gamma}^{f}Dγf​: 判别器

IV. Similarity Measure

其实就是网络的这个Sθ{S_\theta }Sθ​模块:

这个东西是干什么用的呢?按照文中的说法,作用是connection modeling,对SOD与COD两个任务之间的关联性进行建模。那么可以回到Xp上来,这个数据集中的图像既送入了SOD Encoder中也送入了COD Encoder中,目的就是提取同一张图片的显著性特征与伪装性特征。这两个特征记为FαspF_{\alpha_{s}}^{p}Fαs​p​和FαcpF_{\alpha_{c}}^{p}Fαc​p​,即Sθ{S_\theta }Sθ​的输入,有:

Fαsp={fs1p,fs2p,fs3p,fs4p}F_{\alpha_{s}}^{p}=\left\{f_{s 1}^{p}, f_{s 2}^{p}, f_{s 3}^{p}, f_{s 4}^{p}\right\} Fαs​p​={fs1p​,fs2p​,fs3p​,fs4p​} Fαcp={fc1p,fc2p,fc3p,fc4p}F_{\alpha_{c}}^{p}=\left\{f_{c 1}^{p}, f_{c 2}^{p}, f_{c 3}^{p}, f_{c 4}^{p}\right\} Fαc​p​={fc1p​,fc2p​,fc3p​,fc4p​}

这里需要注意的一点是只有从Xp中提取来的特征才会送入Sθ{S_\theta }Sθ​,Xs、Xc得到的特征是直接送入Decoder的。

由于这FαspF_{\alpha_{s}}^{p}Fαs​p​和FαcpF_{\alpha_{c}}^{p}Fαc​p​都是用ResNet50算出来的,格式相同,因此Sθ{S_\theta }Sθ​会先将FαspF_{\alpha_{s}}^{p}Fαs​p​和FαcpF_{\alpha_{c}}^{p}Fαc​p​进行channel-wise的相加,然后再送入同一个全连接层。此时,就可以得到两个latent feature。将SOD的latent feature记为fspf^{s p}fsp,COD的latent feature记为fcpf^{c p}fcp,有:
fsp=Sθ(Fαsp)f^{s p}=S_{\theta}\left(F_{\alpha_{s}}^{p}\right) fsp=Sθ​(Fαs​p​) fcp=Sθ(Fαcp)f^{c p}=S_{\theta}\left(F_{\alpha_{c}}^{p}\right) fcp=Sθ​(Fαc​p​)
latent feature所在latent space的维度设置为了700,这个值是一个经验值。

在讲下一步的操作之前,首先进行一个论证。对于PASCAL VOC中的图像某一张特定图像Xp,其经过SOD、COD处理后激活的区域应该是不一样的,如下所示(即假设PASCAL数据集中以伪装对象为主的图片极少):

其中第一行表示经SOD处理后的激活区域,第二行表示经COD处理后的激活区域。

然后,对于latent space中的两个latent feature,计算其余弦相似度,得到latent space loss,记为Llatent \mathcal{L}_{\text {latent }}Llatent ​,有:
Llatent =cos⁡(fsp,fcp)=fsp⋅fcp∥fsp∥×∥fcp∥\mathcal{L}_{\text {latent }}=\cos \left(f^{s p}, f^{c p}\right)=\frac{f^{s p} \cdot f^{c p}}{\left\|f^{s p}\right\| \times\left\|f^{c p}\right\|} Llatent ​=cos(fsp,fcp)=∥fsp∥×∥fcp∥fsp⋅fcp​

个人对这种做法的理解是,既然SOD与COD关注的区域不一样,那么如果某一区域被SOD激活了,说明该区域不应该被COD激活,反之亦然。通过这么训练,可以使SOD Encoder丢弃一些误识别的背景,COD Encoder丢弃一些误识别的前景。

V. Prediction Decoder

在介绍decoder之前,首先来指出本文标题中Uncertainty的含义。Uncertainty指的是数据集标注的不确定性:

左边两张图是SOD不确定性的一个例子:对于图片中的网球,在部分标注中可能被视为前景,而在部分标注中可能被视为背景,即saliency的定义不是特别的明确。

右边两张图是COD不确定性的一个例子:对于树叶上的昆虫,其边缘十分精细,难以做到准确的人工标注,即标注的不确定性。

接下来开始看decoder。decoder即网络结构图中的Gβ{G_\beta }Gβ​:
可以看到,SOD与COD的Encoder是共享同一个Decoder的。由于原文并没有放出Decoder的结构示意图,因此在这里用文字的方式介绍Decoder的构成:

  • Re:[1] 一个自顶向下的,带有residual channel attention的模块,用于提取特征
  • Da:[2] dual attention模块,用于融合低级细节特征与高级语义特征,得到初始预测结果
  • Ha:[3] holistic attention模块,用于对初始预测结果进行细化

对于Xs、Xc经各自解码器得到的特征FαsF_{\alpha_{s}}Fαs​​、FαcF_{\alpha_{c}}Fαc​​,有:
Ginit (Fαs)=Ccla (Re⁡[Da(f4s),f43init s,Da(f2s)])G_{\text {init }}\left(F_{\alpha_{s}}\right)=C_{\text {cla }}\left(\operatorname{Re}\left[D a\left(f_{4}^{s}\right), f_{43_{\text {init }}}^{s}, D a\left(f_{2}^{s}\right)\right]\right) Ginit ​(Fαs​​)=Ccla ​(Re[Da(f4s​),f43init ​s​,Da(f2s​)]) Ginit (Fαc)=Ccla (Re⁡[Da(f4c),f43init c,Da(f2c)])G_{\text {init }}\left(F_{\alpha_{c}}\right)=C_{\text {cla }}\left(\operatorname{Re}\left[D a\left(f_{4}^{c}\right), f_{43_{\text {init }}}^{c}, D a\left(f_{2}^{c}\right)\right]\right) Ginit ​(Fαc​​)=Ccla ​(Re[Da(f4c​),f43init ​c​,Da(f2c​)]) f43init=conv⁡(Re⁡[Da(f4),Da(f3)])f_{43i n i t}=\operatorname{conv} \left(\operatorname{Re}\left[D a\left(f_{4}\right), D a\left(f_{3}\right)\right]\right) f43init​=conv(Re[Da(f4​),Da(f3​)])
其中Ccla C_{\text {cla }}Ccla ​为一个3×3卷积,文中写的作用是分类,其实就是将feature map降维至单通道以获得初始结果Ginit G_{\text {init }}Ginit ​。接下来就是对粗结果进行细化:
fr2=Ha(Ginit (Fα),f2),fr3=R3(fr2),fr4=R4(fr3)f_{r 2}=H a\left(G_{\text {init }}\left(F_{\alpha}\right), f_{2}\right), f_{r 3}=R_{3}\left(f_{r 2}\right), f_{r 4}=R_{4}\left(f_{r 3}\right) fr2​=Ha(Ginit ​(Fα​),f2​),fr3​=R3​(fr2​),fr4​=R4​(fr3​) Gβ(Fαs)=Ccla(Re⁡[Da(fr4s),f43s,f432s,conv⁡(f1s)])G_{\beta}\left(F_{\alpha_{s}}\right)=C_{c l a}\left(\operatorname{Re}\left[D a\left(f_{r 4}^{s}\right), f_{43}^{s}, f_{432}^{s}, \operatorname{conv} \left(f_{1}^{s}\right)\right]\right)Gβ​(Fαs​​)=Ccla​(Re[Da(fr4s​),f43s​,f432s​,conv(f1s​)]) Gβ(Fαc)=Ccla(Re⁡[Da(fr4c),f43c,f432c,conv⁡(f1c)])G_{\beta}\left(F_{\alpha_{c}}\right)=C_{c l a}\left(\operatorname{Re}\left[D a\left(f_{r 4}^{c}\right), f_{43}^{c}, f_{432}^{c}, \operatorname{conv} \left(f_{1}^{c}\right)\right]\right)Gβ​(Fαc​​)=Ccla​(Re[Da(fr4c​),f43c​,f432c​,conv(f1c​)]) f43=conv⁡(Re⁡[Da(fr4),Da(fr3])f_{43}=\operatorname{conv} \left(\operatorname{Re}\left[D a\left(f_{r 4}\right), D a\left(f_{r 3}\right]\right)\right. f43​=conv(Re[Da(fr4​),Da(fr3​]) f432=conv⁡(Re⁡[Da(fr4),f43,Da(fr2)])f_{432}=\operatorname{conv}\left(\operatorname{Re}\left[D a\left(f_{r 4}\right), f_{43}, D a\left(f_{r 2}\right)\right]\right) f432​=conv(Re[Da(fr4​),f43​,Da(fr2​)])
这样就得到了Decoder输出的最终结果,其中R3、R4指的是ResNet backbone的1024、2048通道的卷积层。

VI. Adversarial Learning

Adversarial Learning,对抗学习,一个比较典型的例子就是GAN了,对抗样本由Generator来生成。而本文的网络从某种程度上也可以理解成一种GAN:

  • 生成器就是Encoder-Decoder架构的EαsE_{\alpha_{s}}Eαs​​、EαcE_{\alpha_{c}}Eαc​​、Gβ{G_\beta }Gβ​,最终由输入图像得到了一个SOD/COD预测结果
  • 判别器就是接下来提到的DγfD_{\gamma}^{f}Dγf​,文中称其作用为Confidence Estimation,目的是区分ground truth与Gβ{G_\beta }Gβ​生成的预测结果

GAN在训练过程中是生成器与判别器在进行对抗学习,而本文对抗学习的两个对象便是解码器Prediction Decoder与判别器DγfD_{\gamma}^{f}Dγf​。DγfD_{\gamma}^{f}Dγf​在网络结构的这个地方:

从结构上讲DγfD_{\gamma}^{f}Dγf​是一个小型的全卷积网络:

对抗学习所用的loss将在后文进行介绍。

VII. Loss

训练Prediction Decoder所用的loss为Lstr\mathcal{L}_{s t r}Lstr​,即structure-aware loss,出自论文F3net,在本文中,有:
Lstr(Pred ,Y)=ω∗Lce(Pred ,Y)+Liou(Pred ,Y)\mathcal{L}_{s t r}(\text { Pred }, Y)=\omega * \mathcal{L}_{c e}(\text { Pred }, Y)+\mathcal{L}_{i o u}(\text { Pred }, Y) Lstr​( Pred ,Y)=ω∗Lce​( Pred ,Y)+Liou​( Pred ,Y) 其中:

  • ω\omegaω: edge-aware weight,ω=1+5∗∣(avg⁡−pool⁡(Y)−Y)∣\omega = 1+5 * \mid\left(\operatorname{avg}_{-} \operatorname{pool}(Y)-Y\right)\midω=1+5∗∣(avg−​pool(Y)−Y)∣
  • Lce\mathcal{L}_{ce}Lce​: cross-entropy loss
  • Liou\mathcal{L}_{iou}Liou​: boundary-IOU loss,出自论文Non-local deep features for salient object detection,在本文中有Liou=1−ω∗inter+1ω∗union−ω∗inter+1\mathcal{L}_{i o u}=1-\frac{\omega * i n t e r+1}{\omega * u n i o n-\omega * i n t e r+1}Liou​=1−ω∗union−ω∗inter+1ω∗inter+1​,inter=Pred∗Yinter = Pred ∗ Yinter=Pred∗Y,union=Pred+Yunion = Pred + Yunion=Pred+Y

最终,SOD与COD各自的structure-aware loss为:
Lstrs=0.5∗[Lstr(Ginit(Fαs),Ys)+Lstr(Gβ(Fαs),Ys)]\mathcal{L}_{s t r}^{s}=0.5 *\left[L_{s t r}\left(G_{i n i t}\left(F_{\alpha_{s}}\right), Y^{s}\right)+L_{s t r}\left(G_{\beta}\left(F_{\alpha_{s}}\right), Y^{s}\right)\right] Lstrs​=0.5∗[Lstr​(Ginit​(Fαs​​),Ys)+Lstr​(Gβ​(Fαs​​),Ys)] Lstr c=0.5∗[Lstr (Ginit(Fαc),Yc)+Lstr(Gβ(Fαc),Yc)]\mathcal{L}_{\text {str }}^{c}=0.5 *\left[L_{\text {str }}\left(G_{init }\left(F_{\alpha_{c}}\right), Y^{c}\right)+L_{s t r}\left(G_{\beta}\left(F_{\alpha_{c}}\right), Y^{c}\right)\right] Lstr c​=0.5∗[Lstr ​(Ginit​(Fαc​​),Yc)+Lstr​(Gβ​(Fαc​​),Yc)]

训练判别器DγfD_{\gamma}^{f}Dγf​所用的loss与大多GAN判别器loss类似,如下:
Ldiss=Lce(Dγf(Gβ(Fαs)),0)+Lce(Dγf(Ys),1)\mathcal{L}_{d i s}^{s}=\mathcal{L}_{c e}\left(D_{\gamma}^{f}\left(G_{\beta}\left(F_{\alpha_{s}}\right)\right), \mathbf{0}\right)+\mathcal{L}_{c e}\left(D_{\gamma}^{f}\left(Y^{s}\right), \mathbf{1}\right) Ldiss​=Lce​(Dγf​(Gβ​(Fαs​​)),0)+Lce​(Dγf​(Ys),1) Ldisc=Lce(Dγf(Gβ(Fαc)),0)+Lce(Dγf(Yc),1)\mathcal{L}_{d i s}^{c}=\mathcal{L}_{c e}\left(D_{\gamma}^{f}\left(G_{\beta}\left(F_{\alpha_{c}}\right)\right), \mathbf{0}\right)+\mathcal{L}_{c e}\left(D_{\gamma}^{f}\left(Y^{c}\right), \mathbf{1}\right) Ldisc​=Lce​(Dγf​(Gβ​(Fαc​​)),0)+Lce​(Dγf​(Yc),1)

最后还有个adversarial learning的问题,即我们希望判别器最终无法区分预测结果与ground truth:
Ladvs=Lce(Dγf(Gβ(Fαs)),1)\mathcal{L}_{a d v}^{s}=\mathcal{L}_{c e}\left(D_{\gamma}^{f}\left(G_{\beta}\left(F_{\alpha_{s}}\right)\right), \mathbf{1}\right) Ladvs​=Lce​(Dγf​(Gβ​(Fαs​​)),1) Ladvc=Lce(Dγf(Gβ(Fαc)),1)\mathcal{L}_{a d v}^{c}=\mathcal{L}_{c e}\left(D_{\gamma}^{f}\left(G_{\beta}\left(F_{\alpha_{c}}\right)\right), \mathbf{1}\right) Ladvc​=Lce​(Dγf​(Gβ​(Fαc​​)),1)

其中1指的是相应尺寸的全1矩阵,因为判别器会将其认为是ground truth的图片输出为全1矩阵。

VIII. Training

网络的训练中每轮迭代内的过程大致可以拆分为以下五步:

  • 利用Llatent \mathcal{L}_{\text {latent }}Llatent ​来训练两个编码器与Sθ{S_\theta }Sθ​模块
  • 利用Lsod =Lstr s+λ1Ladv s\mathcal{L}_{\text {sod }}=\mathcal{L}_{\text {str }}^{s}+\lambda_{1} \mathcal{L}_{\text {adv }}^{s}Lsod ​=Lstr s​+λ1​Ladv s​来训练SOD编码器与Decoder
  • 利用Ldiss\mathcal{L}_{d i s}^{s}Ldiss​来训练判别器
  • 利用Lcod =Lstr c+λ2Ladv c\mathcal{L}_{\text {cod }}=\mathcal{L}_{\text {str }}^{c}+\lambda_{2} \mathcal{L}_{\text {adv }}^{c}Lcod ​=Lstr c​+λ2​Ladv c​来训练COD编码器与Decoder
  • 利用Ldisc\mathcal{L}_{d i s}^{c}Ldisc​来训练判别器

需要注意的是由于SOD数据集比COD大很多,为了防止过拟合,具体实现过程中是每训练三轮SOD才训练一轮COD。

IX. Experiment

性能超越了11个最近模型,包括NLDF(CVPR 2017)、PiCANet(CVPR 2018)、CPD(CVPR 2019)、SCRN(ICCV 2019)、PoolNet(CVPR 2019)、BASNet(CVPR 2019)、EGNet(ICCV 2019)、AFNet(CVPR 2019)、CSNet(ECCV 2020)、F3Net(AAAI 2020)、ITSD(CVPR 2020)

X. Summary

本文的最大创新点在于将Joint Training应用到了SOD、COD这两个近乎相反的任务上。SOD与COD的关注点不同,SOD寻找局部特征的能力有助于COD获得更精确的伪装边界,而COD处理全局信息的能力能帮助SOD减少对背景噪声的误识别。从SOD的角度讲,这也暂时跳出了如何提升特征融合能力上限这一研究点。

比较好奇的一点是标题中Uncertainty-aware。文中提到了SOD与COD数据集标注的两个问题,但是在结果展示中并没有展示“预测结果比实际结果更准确”的情形,理论上引入了判别器,确实有可能实现判别器将预测结果判定为ground truth(事实上的更精确标注)。

Ref

[1] Yulun Zhang, Kunpeng Li, Kai Li, Lichen Wang, Bineng Zhong, and Yun Fu. Image super-resolution using very deep residual channel attention networks. In Proceedings of the European conference on computer vision (ECCV), pages 286–301, 2018.
[2] Jun Fu, Jing Liu, Haijie Tian, Yong Li, Yongjun Bao, Zhiwei Fang, and Hanqing Lu. Dual attention network for scene segmentation. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, June 2019.
[3] Zhe Wu, Li Su, and Qingming Huang. Cascaded partial decoder for fast and accurate salient object detection. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, June 2019.

论文阅读:Uncertainty-aware Joint Salient Object and Camouflaged Object Detection相关推荐

  1. 论文阅读笔记——DLT-Net: Joint Detection of Drivable Areas, Lane Lines, and Traffic Objects)

    论文阅读笔记--DLT-Net: Joint Detection of Drivable Areas, Lane Lines, and Traffic Objects 论文简介 1 引言 2 DLT- ...

  2. Zero-shot Learning零样本学习 论文阅读(一)——Learning to detect unseen object classes by between-class attribute

    Zero-shot Learning零样本学习 论文阅读(一)--Learning to detect unseen object classes by between-class attribute ...

  3. 论文阅读笔记——VulDeePecker: A Deep Learning-Based System for Vulnerability Detection

    本论文相关内容 论文下载地址--Engineering Village 论文中文翻译--VulDeePecker: A Deep Learning-Based System for Vulnerabi ...

  4. 论文阅读笔记——Vulnerability Dataset Construction Methods Applied To Vulnerability Detection A Survey

    本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--Vulnerability Dataset Construction Methods Applied To Vulnera ...

  5. 【论文阅读】Point-GNN: Graph Neural Network for 3D Object Detection in a Point Cloud

    最近在看3d目标检测的文章,感觉看完东西还是要记一下自己的想法,尤其是有思考的文章. 论文题目:Point-GNN: Graph Neural Network for 3D Object Detect ...

  6. 论文阅读:Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos

    Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos 文章目录 Tube Convolutional Neu ...

  7. 【论文阅读】MFAN: Multi-modal Feature-enhanced Attention Networks for Rumor Detection --- 多模态,谣言检测,注意力机制

    本博客系博主根据个人理解所写,非逐字逐句翻译,预知详情,请参阅论文原文. 论文标题:MFAN: Multi-modal Feature-enhanced Attention Networks for ...

  8. [论文阅读] Disentangled High Quality Salient Object Detection

    论文地址:https://arxiv.org/abs/2108.03551 代码:https://github.com/luckybird1994/HQSOD 发表于:ICCV'21 Abstract ...

  9. [论文阅读] Unsupervised Domain Adaptive Salient Object Detection Through Uncertainty-Aware Pseudo-Label

    论文地址:https://arxiv.org/abs/2202.13170 代码:https://github.com/Kinpzz/UDASOD-UPL 发表于:AAAI 22 Abstract 深 ...

最新文章

  1. ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误
  2. 阿里终面:怎么用 UDP 实现 TCP?
  3. DeVeDe:视频 CD 制造利器
  4. 自学python要到什么程度-学好深度学习,Python 得达到什么程度?
  5. ABAP取字符串中的连续数字
  6. 【每天一道算法题】Numeric Keypad
  7. 马斯克:特斯拉智能召唤功能已被使用超过55万次
  8. 刚进职场的新人,这6点一定要牢记
  9. python基础教程-Python基础
  10. VMware15.5.1+macos catalina 10.5+unlocker 3.1 解决unlocker下载文件报错问题
  11. pygame 鼠标事件
  12. 超级搜索术5-商业变现/生活便捷
  13. 计算机文献检索语言,计算机文献检索论文参考文献集 计算机文献检索论文参考文献数量是多少...
  14. 陈越微博c语言自学攻略,数据结构自学攻略
  15. 《畅玩NAS》 使用树莓派打造一个NAS服务器
  16. Hello, CTF WP
  17. 基础 八大疑问词+翻译
  18. BUUCTF中的reverse1
  19. 图论最短路 之 弗洛伊德Floyd(详细分析)
  20. 两份重磅文件明确互联网平台分类分级,淘宝、微信、抖音等将迎“超级监管”...

热门文章

  1. centos7,pyinstaller打包出application/x-sharedlib,这是一个求助的帖子
  2. rhel系统启动过程_Linux系统启动过程
  3. J - DNA Consensus String
  4. 自动驾驶——SimpleNet的学习笔记
  5. 机器学习——One-Hot编码
  6. 好用好玩的Python包
  7. 一道笔试题:贿赂选民
  8. AD20如何用图片做丝印的图案,丝印层导入logo
  9. 【Qt串口调试助手】1.4 - 16进制接收/发送
  10. 在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题)