对dataframe数据集构建dataset
1 | # -*- coding: utf-8 -*- |
1 | class TrainDataset: |
1 | # -*- coding: utf-8 -*- |
1 | class TrainDataset: |
1 | # pkl、csv、xlsx等文件都可使用pandas进行读取,读取后都为dataframe数据类型 |
先删除本地文件->git add -u
列出所有分支git branch -a(带*绿色的为当前分支,白色和绿色的为当前分支,红色所有远端分支)->创建test分支git branch test->切换分支git checkout test->提交分支git push origin test
git merge test
切换非删除的分支
git branch -D test 删除本地分支
git push —delete test 删除远端分支 删除远端分支时,本地分支不会被删除
git pull
把文件添加到缓冲区 git add 文件名
把文件添加到本地仓库 git commit -a 本地提交的注释
把文件推送到仓库git push(origin 当前分支名)(亲测,如果是分支第一次提交不能省略,可能是因为要把新分支和代码同时推上去,否则括号内的内容可省)
git checkout .(恢复被修改的所有文件)
git checkout — 文件名/文件夹名(恢复被修改的文件名或则文件夹名)
git reset HEAD^ 所有内容回退到上一个版本
git reset HEAD^ 文件名 具体文件回退到上一个版本
git reset 哈希值 回退到产生这个哈希值的状态
get checkout -b 分支名 origin/分支名 切换到远端的分支并在本地命名
1 | import torch |
Test类直接接受是CNN()实例化后的net,相当于把CNN()的网络结构作为参数传给了Test(),这样在CNN()中就不用写forward(),即使写了也不起作用,因为对于test对象来说,它的网络结构是Test()定义的,其前向传播必须在Test()中进行定义。
mro是每一个类会把它所有的父类和自己做一个线性化serialization,也就是把所有的继承类和自己做一个排队,这个排队要保证自己是最高优先级。
1 | # 定义两个父类 |
1 | # 情况1 |
1 | # 情况2 |
1 | # 情况3 |
1 | # 情况4 |
总结:
1 | super(class, object/class).__init__([参数]) |
1 | class A: |
Mixup:让两张图片的像素值对应相加,生成一张新的图片;
Cutout:对一张图片的部分进行遮挡;
CutMix:把多张图片进行缩放,拼接到一张图片上;
Random Erase:用随机值或训练集的平均像素替换图像的区域;
Hide and Seek:根据概率设置随机隐藏一些补丁;
系数要足够小
之前是随机失活一个像素点,但是周围的像素点还存在,其实对整个图像的影响并不大;
现在随机吃掉一个区域,使网络的性能更好。
平滑标签,不让边界感那么强,可以提高图像的识别率;
这个0.1的系数是自己设置的;
重点:是在不重叠的情况下,预测框向真实框前进,不重叠,不重叠!!!!
当重叠时,不能反应出来情况的好坏;
先不直接剔除,而是降低置信度,再给一次机会。
虽然输出的图像尺寸大小可能不一样,但是通过最大池化来满足最终输入特征图的大小是一样的。
把特征图平均分成两部分,一部分什么都不做,另外一部分经过卷积进行输出,虽然精度上可能有所降低,但是速度上会加快很多,但是结果表现精度可能并没有降低,还有一点点升高。
Channel Attention Module:对不同特征图产生一个概率,这个概率值表示对不同特征图的关注度;
SAM:对于特征图的不同位置的注意力机制;
在σ(ty)前加上大于1的系数;
YOLOv3采用了Darknet53为主干网络;
在YOLOv3上设计了3种scale,分别为特征图大小13 13、26 26、52 * 52上进行大、中、小目标预测;
残差网络,会有A(保存原来的不进行任何操作),B两种通道,然后再合并,即使F(x)不起作用,还会保存以前的输出结果。
注:使用残差网络,不能保证效果一定有多大提升,但是至少不会差。
先使用K-means方法生成9个先验框,然后按照大小进行排序,分给3个不同的scale。
Softmax实现物体单分类最后的评判, Softmax能够确保所有物体的预测概率之和为1,比如一个物体的预测是狗的概率是80%,那么是其他物体的概率之和为20%。这就是单标签概率。
然后,对于多标签预测,比如,一个物体是狗的概率是80%,是狼狗的概率是70%,是猎狗的概率是75%,像这样的分类判决,Softmax就无法胜任了。
YOLO V3使用了logistic激活函数替换了softmax函数,把物体的联合的多分类,变成独立的二分类,从而实现对物体多标签的支持
(此部分参考YOLO V3 - 网络结构、原理、改进的全新、全面、通俗、结构化讲解)
在逻辑回归算法中,选用的基本函数就是sigmoid函数
该函数用于预测输入x后标签y的概率,注意,这里的x并非是数据集的原始数据输入,而是乘以了参数θ之后的值,即 x = X ⋅ θ,因此逻辑回归的基本函数为:
舍弃全连接层和dropout,每次卷积后加入batch normalization。
具有统一规格的数据能让神经网络更好地学习到数据的规律;批归一化在非线性激活函数前,使梯度不会出线为0;
目前的大部分检测模型都会使用主流分类网络(如vgg、resnet)在ImageNet上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于256×256的图片作为输入进行训练的,低分辨率会影响模型检测能力。
YOLO v2将输入图片的分辨率提升448×448,为了使网络适应新的分辨率,YOLO v2先在ImageNet上以224×224进行训练,然后再以448×448的分辨率对网络进行10个epoch的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入,YOLO v2的mAP提升了约4%。
anchor box是通过对真实框聚类得到的,得到5种不同大小的anchor box。
anchor box只有w和h,没有中心点。
聚类的目的是为了提高选取的Anchor Box和同一个聚类下的gt框之间的IOU,采用的距离公式如下:
box为其他的bounding box
对box进行K-means的步骤为:
tx,ty,tw,th是预测值,cx和cy是grid cell左上角位置,pw和ph是anchor box的值,通过计算即可得到预测框在特征图上的位置,从而得到在原图的位置;
t0是预测值,进行σ变换后作为置信度的值。
注:用IOU最大的去进行回归,Pr(object)的值是1,其余是0;
YOLOv2采用了一个新的特征提取主干 Darknet-19,包括19个卷积层,5个maxpooling层;
YOLOv2的输出是一个13 13 125的一个张量。
训练尺度的大小必须为32的倍数,最小320,最大640;
使用多尺度训练时,然后只需要修改对最后检测层的处理就可以重新训练。