EMA指数移动平均
多分类是使用softmax分类器还是K个独立的logistic二元分类器呢?
yolov3在最后进行多分类时采用了BCEWithLogisticLoss, 而没有使用CELoss,主要是出于类别之间是否存在互斥性。所有类别之间明显互斥用softmax分类器,所有类别之间不互斥有交叉的情况下最好用k个logistic分类器。
引用知乎一位同学的解答
L1正则和max函数的可导性
ResNeSt回顾
1. ResNest
paper: https://hangzhang.org/files/resnest.pdf
作者讲解:https://www.bilibili.com/video/BV1PV411k7ch
ResNeSt提出了Split-Attention Block模块, 其考虑到组卷积降低计算量、以及通道注意力策略提升跨通道的相互作用,可以理解为ResNeXt和SKNet的结合版。在图像分类,目标检测,目标分割等众多Backbone上有了明显提升。
SKNet回顾
1. SKNet
paper: https://arxiv.org/pdf/1903.06586.pdf
“We propose a dynamic selection mechanism in CNNs that allows each neuron to adaptively adjust its receptive field size based on multiple scales of input information.”
“从ResNet到ResNeXt,> 1 kernel的计算量从原来52.9%的占比下降到了6.6%,几乎下降了一个数量级,但却让ResNeXt的分类性能提升了” —作者@李翔
SKNet考虑到这一现象,思考了几个点:
- 在ResNext结构上少牺牲一些计算量,是否能进一步提升网络性能?
- 对应于CNN网络,一般来说对于特定任务特定模型,卷积核大小是确定的,那么是否可以构建一种模型,使网络可以根据输入信息的多个尺度自适应的调节接受域大小呢?
基于此,结合了分组卷积和SENet提出了Selective Kernel。
SENet回顾
1. SENet
CNN网络架构的发展,使得卷积运算从多个维度去进行特征融合, 从深度depth,宽度等维度去聚合不同感受野的特征,所以基本上在SENet提出前, 通用网络架构都是默认聚合所有channel的信息, 即使MobileNet中的Group Conv 和 Depthwise Separable Conv对channel进行了分组等操作,也只是出于对网络加速的诉求。SENet关注了channel之间的关系,以期使模型能够自动学习出不同channel的重要性。
2. Squeeze and Excitation模块
squeeze: global average pooling
excitation: FC(降维) + FC(升维) + sigmoid(激活0~1)
模块的作用就是学习到每个通道的权重系数。
Res2Net回顾
1. Res2Net简析
paper: https://arxiv.org/pdf/1904.01169.pdf
Res2Net提出的契机, 其认为网络提取多尺度特征的能力是非常重要的,与其他网络不同的是,Res2Net没有在layer-wise这个层面改进,而是在更细粒度的层面改进了网络模型,其改进了Residual Block内部,以期能够提升该模块提取多尺度特征的能力。
- objects may appear with different sizes in a single image, e.g., the sofa and cup are of different sizes.
- the essential contextual information of an object may occupy a much larger area than the object itself.
- perceiving information from different scales is essential for understanding parts as well as objects for tasks such as fine-grained classification and semantic segmentation.
上图(b)即为Res2Net提出的Block, 经过1x1卷积之后,特征图分成4(s)部分。x1不做处理,直接传到y1,等价于skip-connection;x2经过3x3卷积之后分为两条线路,一条继续向前传播给y2,另一条传到x3,这样第三条线路就获得了第二条线路的信息;第三条线路、第四条线路,以此类推。每条线路的通道数为n/s。这样拆分组合的方式使得经过该block之后的特征感受野更加丰富,包含了多种尺度的特征,使得整的网络能够有效提取全局特征和局部特征。Res2Net提出了尺度(s)这个超参数,论文实验论证了增加该参数相比其他维度(通道,深度,宽度)更加有效。
PolyLoss
encryptpy加密python源码
1. python代码的加密方式
(1)pyc
python解释器执行的过程中会首先生成.pyc文件,然后再解释执行.pyc文件中的内容。
./pyc是一个二进制的文件,不具备可读性,可以使用compileall库将py文件编译为pyc二进制文件。
现在反编译工具可以较为轻松的将pyc文件破解,安全性较差。
(2)代码混淆
代码混淆是一种常见的加密方式,其原理是让代码的可读性变差,例如删除注释,添加无意义代码,变量、函数、类进行重命名等。
常用的代码混淆的库是pyobfuscate。
(3)打包为exe
使用py2exe可以将python脚本打包为可以在windows上运行的文件。
(4)cpython加密
一般情况下,cpython可以用来提升python的性能,其实也可以作为加密的一种方式。
cpython可以将py文件编译为.c文件,再将.c文件编译为.so(linux)或者pyd(windows)文件。