1.这篇文章是自己作为一个初学者(或者说什么都不会)在复现yhenon的pytorch-retinaNet代码的整个过程记录,以及遇到的各种问题,文中大量引用了别人的博客或文章内容,都给了详细的网址,作为注释和学习参考。
2.目前为止,对于retinaNet个人觉得对于帮助我的理解最大的一篇文章:
网址:https://blog.csdn.net/qq_43284847/article/details/98472472
3.后期可能有部分更新,可查看以下网址:https://www.yuque.com/yanyu-thlhi/en60s1/nyyi2f
下载retinaNet的代码,网址如下:https://github.com/yhenon/pytorch-retinanet
下载完成后放到一个project中。
首先,建立一个新的环境,在anaconda的控制台下:
输入命令,创建一个新的环境
conda env list #查看已有的环境
conda create --name your_env_name #创建一个名为your_env_name的新环境
conda activate your_env_name #进入创建的新环境中
conda deactivate #退出环境
https://www.jianshu.com/p/742dc4d8f4c5
法一:在上述的环境中输入命令:
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
官网地址:https://pytorch.org/get-started/locally/
地址:https://www.yuque.com/yanyu-thlhi/aro3o2/xw9rwr
方法一:可以在pycharm中直接通过点击(代码旁的红色错误警告:一个灯的形状)下载安装
方法二:在控制台(anaconda进入环境或者pycharm下的terminal都可以),通过
pip install package_name
#或者
conda install package_name
这个的安装花费了很长的时间
#git原网上的安装方式(要求windows安装过visual c++ build tool,
#但是我安装了也不行,可以先试试命令可不可以)
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
#我的解决方式
#(1)直接网址下载coco文件,放到项目文件夹下,或者使用以下命令:
#最好在pycharm的terminal中输入,目的是使文件在项目文件中
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
#(2)控制台操作:
python setup.py build_ext --inplace
python setup.py build_ext install
在控制台第一个命名执行后,可能会出错,则使用一下的方式:报错的话如果是cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”,不用担心,打开上面的setup.py文件,直接删除这两个参数就可以:
然后再按照上面的两个命令运行就可以了,安装完成后可以再将删去的代码再次加回去就可以了。
coco数据集的官方链接是可以直接用的,但是使用chrome下载时网速几乎为零,根本不动,而coco数据集很大,后来找到了解决方案,使用迅雷下载,这样基本可以按正常网速下载了,下面提供2017coco数据集的链接:
(1)train2017:http://images.cocodataset.org/zips/train2017.zip
(2)val2017:http://images.cocodataset.org/zips/val2017.zip
(3)test2017:http://images.cocodataset.org/zips/test2017.zip
(4)trainval2017:http://images.cocodataset.org/annotations/annotations_trainval2017.zip
(5)trainval2017:http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
(6)image_info_test2017:http://images.cocodataset.org/annotations/image_info_test2017.zip
下载后解压放到coco文件夹下。
在pycharm的terminal下运行如下命令:
python train.py --dataset coco --coco_path ..coco --depth 50
参考网址:https://blog.csdn.net/Lee_lg/article/details/103901632
解决方案:再次安装。
地址:https://download.pytorch.org/models/resnet50-19c8e357.pth
参考网址:https://blog.csdn.net/qq_33666011/article/details/81873217
其中,transform:Python中图像数据读入一般都是 nChanns x H x W的numpy数组。常规的做法是使用Dataset中的transform对数据进行转换,输出torch类型的数组。
在目标检测中,一般将图像进行缩放,使其尺寸满足一定要求,具体可以参考之前的博客。也就是要实现一个Resizer()的类进行变换。此外,通常要对图像进行标准化处理,以及水平翻转等变换。因此,在实现Dataset时要实现的变换有三个: Resizer()、Normalizer()和Augmenter()。
详细内容,参考网址:https://www.cnblogs.com/zi-wang/p/9972102.html
该函数的目的是为给DataLoad()函数传递batch_sample参数,所以其内参数介绍放在下面的DataLoader()函数中,
sampler(Sampler, optional): 自定义从数据集中取样本的策略,如果指定这个参数,那么shuffle必须为False
batch_sampler(Sampler, optional): 与sampler类似,但是一次只返回一个batch的indices(索引),需要注意的是,一旦指定了这个参数,那么batch_size,shuffle,sampler,drop_last就不能再制定了(互斥——Mutually exclusive)
首先简单介绍一下DataLoader,它是PyTorch中数据读取的一个重要接口,该接口定义在dataloader.py中,只要是用PyTorch来训练模型基本都会用到该接口(除非用户重写…),该接口的目的:将自定义的Dataset根据batch size大小、是否shuffle等封装成一个Batch Size大小的Tensor,用于后面的训练。
官方对DataLoader的说明是:“数据加载由数据集和采样器组成,基于python的单、多进程的iterators来处理数据。”关于iterator和iterable的区别和概念请自行查阅,在实现中的差别就是iterators有__iter__和__next__方法,而iterable只有__iter__方法。
dataset(Dataset): 传入的数据集
batch_size(int, optional): 每个batch有多少个样本
shuffle(bool, optional): 在每个epoch开始的时候,对数据进行重新排序
sampler(Sampler, optional): 自定义从数据集中取样本的策略,如果指定这个参数,那么shuffle必须为False
batch_sampler(Sampler, optional): 与sampler类似,但是一次只返回一个batch的indices(索引),需要注意的是,一旦指定了这个参数,那么batch_size,shuffle,sampler,drop_last就不能再制定了(互斥——Mutually exclusive)
num_workers (int, optional): 这个参数决定了有几个进程来处理data loading。0意味着所有的数据都会被load进主进程。(默认为0)
collate_fn (callable, optional): 将一个list的sample组成一个mini-batch的函数
pin_memory (bool, optional): 如果设置为True,那么data loader将会在返回它们之前,将tensors拷贝到CUDA中的固定内存(CUDA pinned memory)中.
drop_last (bool, optional): 如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了…
如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。
timeout(numeric, optional): 如果是正数,表明等待从worker进程中收集一个batch等待的时间,若超出设定的时间还没有收集到,那就不收集这个内容了。这个numeric应总是大于等于0。默认为0
worker_init_fn (callable, optional): 每个worker初始化函数 If not None, this will be called on each
worker subprocess with the worker id (an int in [0, num_workers - 1]) as
input, after seeding and before data loading. (default: None)
详细内容,参考网址:https://www.cnblogs.com/ranjiewen/p/10128046.html
网址:https://zhuanlan.zhihu.com/p/29409502
重点:https://blog.csdn.net/qq_39521554/article/details/84480429
第一步:resnet模型,降低网络深度增加带来的梯度消失的负影响
第二步:FPN模型,整合不同维度特征
第三步:SubNet,分类和回归,得到一系列的anchor
第四步:Focal loss,分析误差,降低“类别极为不平衡”的负面影响
。。。待完善。