Starsholic's Blog


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Search

eigenface实现

Posted on 2019-09-20

eigenface算法步骤 特征脸 TIPs:

  1. M就是图片一共多少张;N维向量指图片flatten成一位向量的维数,即N = 图片高*宽
  2. 每张图片flatten成列向量,按列排,每一行就是每张图片在某一像素点灰度值/RGB值
  3. 零均值化后的矩阵维度是(高*宽,N),如果直接用要用协方差矩阵降维,cov_mat维度(高*宽,高*宽)
  4. 不是对零均值化后的矩阵求特征值和特征向量,是对中心化矩阵的协方差矩阵cov_mat求eig

code:
<pre><code> eigenface.py

import numpy as np from numpy import linalg as la

def eigenface(imgs):

'''
:param imgs: imgs的维度为MxHxW。即有M张图片,每一张高为H宽为W。
:return: a, b
a: 特征值。 为一维向量。
b: 特征向量。 为二维向量, b[:,i]是特征值a[i]对应的特征向量.
'''

imgs_2d = []
for i in range(0,400):
    img_temp = imgs[i,:,:].flatten()   #把每张图片flatten,按列放到矩阵imgs_2d里
    imgs_2d.append(img_temp)
imgs_2d = np.mat(imgs_2d).T
imgs_mean = np.mean(imgs_2d,axis=1)   #对每行求mean,相当于对每个像素点都取mean
imgs_diff = np.mat(imgs_2d) - np.mat(imgs_mean)  #对每个像素点零均值化
#a,b = la.eig(imgs_diff.T*imgs_diff)   #不是求样本中心化矩阵imgs_diff的特征值,而是求imgs_diff的协方差矩阵的特征值
cov_mat = imgs_diff*imgs_diff.T/400   #求协方差矩阵
a,b = la.eig(cov_mat)
b = np.asarray(b)   #最好不要用mat格式,不然会数值溢出
return a, b

</code></pre>

<pre><code> main.py
from future import division from future import print_function

import os import numpy as np from pathlib import Path from PIL import Image import matplotlib.pyplot as plt import math from eigen_face import eigenface

def file_abs_path(arg): return Path(os.path.realpath(arg)).parent

def img_show(imgs, H=None, W=None, info=None): imgs = np.asarray(imgs) assert imgs.ndim == 3 M = imgs.shape[0] if H is None: if W is None: H = int(math.sqrt(M)) W = math.ceil(M / H) else: H = math.ceil(M / W) else: if W is None: W = math.ceil(M / H) else: W = max(W, math.ceil(M / H))

plt.figure()
if info is not None:
    plt.suptitle(info)
for i in range(M):
    plt.subplot(H, W, i+1)
    plt.imshow(imgs[i], cmap='gray')
    plt.axis('off')

plt.show()

def load_images(): folder_path = file_abs_path(file) image_path = folder_path / 'orl_faces'

img_files = list(image_path.glob('**/*.pgm'))
print('There are {} images in {}'.format(len(img_files), image_path))
imgs = []
for img in img_files:
    img_tmp = Image.open(img)
    #img_tmp = img_tmp.resize((12, 9), Image.ANTIALIAS)    # 因为数据维度比较大,在调试的时候可以去掉这一行的注释,缩放一下图片,这样计算比较快。
    img_tmp = np.asarray(img_tmp, dtype=np.float32)
    imgs.append(img_tmp)

return np.asarray(imgs)

if name == 'main': imgs = load_images() # 加载图片,imgs的维度为MxHxW。即有M张图片,每一张高为H宽为W。 print(imgs.shape) img_show(imgs[::10], H=5, info='Raw face') # 展示原图 a, b = eigenface(imgs) # 获得特征值 a,特征向量 b.

num = 8
a = a[:num]
N, H, W = imgs.shape
b = b.T.reshape(H*W, H, W)
b = b[:num]
img_show(b, H=2, info='Eigenface')

</code></pre>


  • linalg.eig(mat)函数求得的特征值和特征向量已经按照从大到小排列了
  • np.shape() ; type() ; np.mat() ; np.asarray() ; np.mean(data,axis=?) ; mat.T
  • 最好不要用matrix格式,可能会数值溢出,最好转换成array处理
  • 图片等三维数组的理解,要有channel的概念 三维数组
  • 二维矩阵 三维矩阵之间转换☞用reshape函数
  • 三维矩阵变二维☞用flatten拉平

python解释器版本管理

Posted on 2019-09-19
  • mac如果shell换成了zsh,每次开机时则先执行~/.zshrc,再执行~/.bash_profile、~/.bashrc
  • 查看pip的位置:$ pip show numpy
  • 查看conda环境:$ conda info --envs
  • 切换conda版本:$ conda activate env
  • 切换环境时,计算机source文件:切换环境时执行的脚本
  • 查看当前版本python解释器:import os``os.path
  • 查看当前版本python包的位置:import sys``sys.path

图像的基本属性

Posted on 2019-09-17
  • 图像的像素数目(pixel dimensions):指位图图像的宽度和高度方向上含有的像素数目,比如高度300*宽度200像素
  • 图像的分辨率:dpi(dot per inch)指单位长度上像素的数目;dpi越大,图像越清晰
  • 图像深度(image depth):指图像中每个像素的数据所占的位数。图像的每一个像素对应的数据通常可以是1位(bit)或多位字节,用于存放该像素的颜色、亮度等信息,数据位数越多,对应的图像颜色种类越多;可以理解成图像的拓展信息存放处
  • 图像色彩通道(channel):可以理解图像由几层叠加而成,就是有几个channel
    图像第一层:灰度图是1个channel;RGB图是3个channel,用红绿蓝三种颜色组成;不同分类,能更好地解决特定问题;RGB可以理解成显示器的一种协议,(R,G,B)都有数值时,显示器会显示出相应颜色 一个卷积核(3 * 3 * 3) 多个卷积核 图像其它层:channel数等于每个卷积层中卷积核的数量
  • 图像的大小:字节数=(位图高* 位图宽 *图像深度/8
  • 灰度图:f是灰度值,对应客观景物被观察到的亮度;文本图像常为二值图像,f的取值只有两个
  • 灰度:用于显示的灰度图像通常用每个采样像素8bit的非线性尺度来保存,黑-灰-白连续变化的灰度值量化为256个灰度级,0~255,表示亮度由深到浅
  • 比特bit:binary digit 字节byte = 8bits 可以存储256个数字

detection综述

Posted on 2019-09-16

Rich feature hierachies for accurate object detection and semantic segmentation

  • Abstract

  • Introduction

  • Object detection with RCNN

module design
Test-time detection
Training
Results on OASCAL VOC 2010-12
Results on ILSVRC2013 detection
  • Visualization,ablation,and modes of error
Visualizing learned features
Ablation studies
Network architectures
Detection error analysis
Bounding-box regression
Qualitative results
  • The ILSVRC2013 detection dataset
Dataset overview
Region proposals
Training data
Validation and evaluation
Ablation study
Relationship to Overfeat
  • Semantic segmentation
  • Conclusion

  • 这样按文章结构分take notes有些抓不住重点
  • 分成:主要工作、概念理解、核心思路、实验过程、有用链接

  • detection综述
  • 一文读懂fasterRCNN,fasterRCNN是two-stage的基础
  • anchor可以理解为候选框。最后分类这个框是属于背景还是前景;同时回归,修正anchor box的坐标,得到检测到的物体真正位置
  • two-stage:非end-to-end,要先region proposal,提取目标所在位置及大小;再把候选框输入到CNN来classification(RCNN家族)
    one-stage:end-to-end,用CNN定位和识别分类(YOLO)end-to-end1、end-to-end2
    区别:two-stage算法会先使用一个网络生成proposal,如selective search和RPN网络,前者是基于一些人造特征来的,RPN是一个也需要进行训练的网络,RPN出现后,ss方法基本就被摒弃。RPN网络接在图像特征提取网络backbone后(和之后的fast-RCNN网络架构共用特征提取层),会设置RPN loss(bbox regression loss+classification loss)对RPN网络进行训练,RPN生成的proposal再送到后面的网络中进行更精细的bbox regression和classification。One-stage追求速度舍弃了two-stage架构,即不再设置单独网络生成proposal,而是直接在feature map上进行密集抽样,产生大量的先验框,如YOLO的网格方法和SSD沿用Faster-RCNN的Anchor方法。这些先验框没有经过两步处理,且框的尺寸往往是人为规定,精度肯定会比较低,而且Retina-Net论文中提到,one-stage产生的先验框正负样本比例严重失衡(背景样本占多数),会引起训练上的问题(Focal Loss正是为了解决这个问题)

  • Region-CNN features
  • 主要工作:
1.基于区域,用CNN来localize和segment目标
2.训练样本很少时,在额外数据上预训练的模型经过fine-tuning能取得好的效果

rcnn

  • 概念理解
fine-tuning:
Overfeat:
SIFT,HOG:

MMDetection

Posted on 2019-09-15
  • For object detection & instance segmentation
  • MMDetection 是商汤(SenseTime)和港中文多媒体实验室(mmLab)合作的开源目标检测库。以前类似的库有Detectron、SimpleDet、maskrcnn-benchmark等等

高度模块化设计

对不同检测方法进行了分解,形成了一系列可定制模块。模块组合可以搭建不同的检测框架

多种算法框架支持

支持多种主流的目标检测与实例分割的算法框架,包括single-stage、two-stage、multi-stage等多种架构;还提供了200多个预训练模型

高性能计算

均支持GPU,速度快。支持混合精度训练和多卡联合训练

先进算法

随时同步最新算法

  • 用一个月的时间,过一遍mmdetection的baseline,过一遍detection领域的经典paper和model,用mmdetection框架实现一遍

mmdetection\docs

  • mmdetection\docs:帮助文档,开始文档

mmdetection\tools

  • mmdetection\tools:一些工具脚本和测试脚本
  • test.py:测试脚本;
    1.模型训练好后,下一步是保存(save)和恢复(restore)模型。checkpoints和savedmodel是模型两种存储格式,checkpoints dependent on the code,savedmodel independent on the code.
    checkpoint1
    checkpoint2
    可以理解成必须有checkpoints,TF就会在每次调用train(),predict()时重建模型
    创建checkpoint文件
    用checkpoint恢复 2.argparse是命令行参数解析模块
    3.test.py定义4个函数:single gpu test,multi gpu test,collect results,parse args,main
    4.parse args函数用于解析命令行(三步操作):
    parser = argparse.ArgumentParser(description='MMDet test detector')导入argparse包,用ArgumentParser类生成一个paser对象,description是描述这个paser是干啥用的,通过 -h 命令可以调用显示python test.py -h;parser.add_argument('config', help='test config file path')用add argument来增加参数;args = parser.parse_args()用paser的parse args函数获取解析的参数;返回args,就是命令行里解析出来的参数args
    返回的args是‘argparse.Namespace’类,用args.config 就可以调用命令行里参数赋的值,比如调用--eval,前面的--省略掉
    5.main函数执行整体:assert、endswith、pickle模块保存模型(dump保存、load读取)、mmcv(CV的基础库)、mmcv.Config导入配置模型文件、dict.get()方法、

mmdetection\configs

  • fast_recnn_r50_fpn_1x.py:定义模型的配置
    1.组成部分:model、train_cfg;test_cfg;dataset_type;data_root;img_norm_cfg;train_pipeline;test_pipeline;data;optimizer;optimizer_config;lr_config;checkpoingt_config、log_config、total_epochs、dist_params、log_level、work_dir、load_from、resume_from
    2.model settings:type、pretrained(在torchvision.models包里)、backbone、neck、bbox_roi_extractor、bbox_head
    3.model training and testing settings:
    4.dataset settings:
    5.optimizer:
    6.learning policy:
    7.yapf:disable:
    8.runtime settings:

torchvision

pytorch框架中一个非常重要且好用的包,主要包括三个子包:torchvision.datasets、torchvision.models、torchvision.transforms

  • torchvision.models:github地址,导入预训练好的网络和参数注意这里模型下载到了.cache/torch/checkpoints,checkpoints就是模型存储的格式

linux和服务器相关

Posted on 2019-09-12
  • 在服务器上下载 wget link + url
  • 上传本地文件至服务器 scp -P 1524 /Users/davidwu/Downloads/cudnn-10.0-linux-x64-v7.6.3.30.tar wushiwei@202.38.75.5:/home/wushiwei/cuda10.0
  • 服务器外网跳转,先ssh 1524端口,再跳转ssh sis13,具体端口地址看BDAA GitLab;建议用TITAN的端口,cuda版本是9.0(用nvcc --version查看)
  • CondaHTTPError: HTTP 404 NOT FOUND for url <http://mirrors.aliyun.com/pypi/simple/noarch/repodata.json> 国庆墙又高了,pypi源都404,必须在.condarc里面把这些source全部kill,弄了一个晚上
  • cuda版本可以自己升级,修改.bashrc文件地址见BDAA GitLab
  • scp传文件
    scp出现问题
  • 关闭服务器进程
  • 用ssh映射服务器内核到本地,Hydrogen调用映射的内核
    1.用服务器开jupyter notebook,获取token和端口x
    2.本地开ssh端口y映射x ssh wushiwei@202.38.75.5 -p 1524 -L 8006:localhost:8889
    3.在hydrogen里设置kernel gateways,baseurl里填本地的端口
    hydrogen设置
    4.hydrogen里连接connect to remote kernel,token在第1步里获取
    5.本地映射文件夹是/Users/davidwu/CV,里面的ftpconfig已经设置好;可以在服务器里用screen开一个长期的jupyter notebook
    http://localhost:1116/?token=2de4d58ff86b2b311e41da0f8fcdbba9237d5caf8b8b337a;以后每次在本地直接ssh wushiwei@202.38.75.5 -p 1524 -L 8007:localhost:1116,输入上面的token即可
    实现这个功能,但是这个方法用不鸟 每开一个py文件,都要重复操作,连接服务器的解释器
  • 删除软链接时要注意!!用rm
  • $PATH查看环境变量,排前面的优先级更高
  • killall -9 同进程名 批量关闭
  • which pipconda虚拟环境中,pip也是该环境下的,可以放心装pip
  • 快速构建conda项目环境:1.看gcc版本要求,如需更改用软链接(见知乎)2.看cuda版本要求,如需更改用软链接(见blog)(安装pytorch后,用torch.cuda.is_available()查看环境的pytorch的cuda能不能用)3.安装指定库 4.python setup.py build 编译环境(遇到装库的停下来用conda手动装)(用gcc编译,如果gcc版本不对,需要删环境重新编译)
  • echo $PATH:当我们执行程序时,shell自动跟据PATH变量的值去搜索该程序

厦门

Posted on 2019-09-11

xmu,要提前微信预约

  • 思源谷(往里走靠近植物园处有高尔夫球场,貌似校外的也可以打)
  • 建南大礼堂、上弦场
  • 芙蓉湖;南强、群贤教学楼
  • 芙蓉隧道
  • 餐厅对外开放只有芙蓉餐厅3楼;靠近西村有富万邦,出了芙蓉隧道靠近学生公寓或者上李那边也有吃的

厦门植物园

  • 可以玩半天,里面有游览车

鼓浪屿

  • 东渡买票坐船,微信上好像也可以买

中山路、演武大桥

  • 晚上可以去逛逛,沿着演武大桥底下走一走,风景非常好

白城沙滩、黄厝、环岛路

  • 白天晚上都可以去

住

  • 最好住在思明区,越靠近厦大越方便,好玩的都在这一片
  • 推荐厦大学生公寓附近那家新开的鹭江宾馆,有泳池

吃

  • 斯利美各种冰、中山公园土笋冻、桥底麻辣烫(厦大西村附近,超级好吃,花生酱拌面)、阿姨麻辣烫、漳州四果汤、202海鲜、思北BRT桥附近小红帽生蚝、潮福城、chello蛋糕、黑明餐厅、中午可以去鹭江宾馆吃自助(靠近厦大学生公寓那家好吃便宜)、乌塘沙茶面(厦大西村附近,最好吃的沙茶面,只有上午中午开)

9月记录

Posted on 2019-09-09
  • 9.9 上午体检,下午非参第一节,听不懂,考虑退课
    回来继续看py,lambda函数还有map、filter、reduce这些函数式编程,对ML、DL这些数据量大的coding还挺能优化的
    明天要看一节py,后天两节
  • 9.10 下午组会,大分享视频语义分割,小分享时间增强LSTM
    换方向multimodal,推举先看CV、NLP,重点CV的detection、NLP的NMT以及这两个领域的综述;这个月mmdetection、openNMT-py,知乎搜目标检测综述、transformer、nmt
    换选课,统计☞数据科学
    今天的那节python没看完,移步明天;还有PPT要翻译
  • 9.11 上午深度学习,人超级多,都挤到门口…下周得早点去
    下午数字图像分析,周文罡老师的课,好的批爆,浅显易懂,对CV大有益处,美中不足要闭卷考试…
    晚上政治课,不好溜,不带书包应该比较好溜~
    PPT事宜争取明天弄完;py类那节快看完了,明天收个尾
    中秋不放假了,周五晚上回去吃个饭
  • 9.12 上午数据可视化,貌似对以后做PPT有帮助
    下午强化学习,离散数学、图论代数结构数理逻辑…好多要补,也不考试,但要用GYM写项目
    晚上装pytorch,看detection综述,先把R-CNN paper三天争取看完
    python先不看了,不会的到时候再看
  • 9.13 肥宅
  • 9.14 PPT做了一半,py看完那节
  • 9.15 PPT做完;看了一点点mmdetection,明天看RCNN,在mmdetection看有无实现的baseline,自己注解,跑一遍
  • 9.16 如何看paper?
  1. 大致扫一遍,先过一级标题、二级标题、三级标题;主要细看实验部分
  2. take notes 分几个部分:主要工作、概念理解、核心思路、实验过程、有用链接
    文献管理系统Mendely,以后写paper的时候再用,方便reference
  • 9.17 看了深度学习那本书的CNN,还有一些图像的基本知识(channel等一些明天还要补充);要加油入门detection还有NMT了,11月前必须给他拿下
  • 9.18 弄明白了channel,CNN,开了2个会
  • 9.19 9.20 9.21 实现eigenface算法(人生第一个实验)
  • 9.22 实现DFT算法(其实就是写一个循环处理算法公式...),时间复杂度==循环层数
  • 9.27 jupyter进阶,!ls可以调用shell命令
  • 9.29 历时两天终于搭建好第一个projectmmdetection的环境,可以成功运行,工程总结:
    1.项目的document一定要首先看,从安装(特别注意安装环境!!!这次安装时gcc版本和服务器不一致,浪费了许多时间)到使用(没看getting start文档,上来就开始毫无头绪的看文档,注定没有方向效率低)
    2.anaconda的env是个非常好的管理项目环境的工具,项目内部之间的各种库环境依赖特别复杂;开一个新项目就新开一个环境
    3.关于debug:最好是先根据document一步步来,遇到问题,先google再baidu,多看几个解决方法,不要上来就试,要多看了解为什么错再尝试修复
    4.关于训练:先不要用nohup命令,测试能用的时候再用;小的项目也最好不要用,否则出问题不能立即知道
    5.关于环境配置:能用conda装就先用conda装(conda -c 选择安装源时也有讲究,可能用gcc编译的版本不一样,比如mmdetection就必须用-c pytorch源),会解决库之间版本依赖的问题;实在不行再用pip装pytorch坑
    6.目标文件不在存放的位置或者想改特定库名等等时 ☞ 软链接(删除时小心)
    7.下载任何大文件时,先看有无国内镜像源
    8.一般在config及下载的
    网络文件
    里改文件路径

发布新blog

Posted on 2019-09-08
  1. hexo new "项目名",可以在~/blog/source/_posts里面查看项目名.md 文件
  2. 用Macdown编辑新文件
  3. 在_posts文件夹里执行脚本source commit.sh

Macdown 居然还支持html语法,只是不可以和Markdown语法混用

macdown使用文档

Posted on 2019-09-07

Macdown可以实时查看修改后的文本

基础操作

  • 换行:在行结尾加上两个空格符和回车符
  • 加粗和斜体:选取字段 command+B或者+I
  • 加标题:# 标题 ## 二级标题 快捷键 command+1、2、3…
  • 引用网址:TAB+command+K 会出现 [里面写链接名](里面写链接地址url)
  • 引用图片:TAB+command+I 其他同引用网址
  • 引用邮箱:在邮箱前后 + < >
  • 添加序号:TAB+command+O
  • 添加·:TAB+command+U
  • 添加类似starsholic符号或代码(Inline Code):command+K,用反引号`在要引用的符号前后标注
  • 添加引用块(Blockquote):TAB+command+B
  • 分行:在一行中加***
12

David Wu

一只小白

20 posts
8 tags
© 2019 David Wu
Powered by Hexo
|
Theme — NexT.Muse v5.1.4