昨天同门用了一天的时间帮我代码调通,再一次让我感觉到自己是个菜鸡,想想自己一个机器学习的代码都还没有好好看,所以未来的几天里痛定思痛,好好把手头里的这个代码调试一下,弄清楚每一句话都是干嘛的,都有什么意思。于是乎打算写篇文章也能记录一下自己的菜鸡之旅。

AL_Train.py

AllClassPath 路径赋值为全部数据集的路径 
output__dir   
weights_path 权重
model_path 模型保存路径

Create Full connected Model

1.选择模型

Sequential:Keras有两种类型的模型,顺序模型以及函数式模型。而其中顺序模型是单输入单输出,一条路通到底,层与层之间只有相邻关系,没有跨层连接。

2.构建网络层

model.add(Dense(512, input_dim=4096,kernel_initializer='glorot_normal',kernel_regularizer=l2(0.001),activation='relu'))
# 512是节点数,input_dim是输入维度,也就是一阶的长度,kernel_initializer权重初始化的方法,权重规范化函数 activated激活函数

dropout随机失活60%

AdaGrad:优化的梯度下降算法,将每一个参数的每一次迭代的梯度取平方累加后在开方。用全局学习率除以这个数,作为学习率的动态更新。因为每个参数在动态更新时肯定是不一样的。

model.compile():用于配置训练方法时,告知训练时用的优化器,损失函数和准确率评测标准。

Load_dataset

listdir:返回一个列表,其中包含由path指定的目录中的条目名称。乱序

datetime.now():获得当前时间

Load_dataset_Train_batch()

np.random.permutation()对数据随机排列

Abnor_list_iter = Abnor_list_iter[Num_abnormal-n_exp:]
#对列表进行切片,第一个参数为开始,第二个为结尾All_Video.append(line.strip())
#line.strip()去掉换行符

np.vstack()以行的形式堆叠列表形成新数组

All_Videos=[]with open(AbnormalPath+"anomaly.txt", 'r') as f1: #file contain path to anomaly video file.for line in f1:   All_Videos.append(line.strip())      #将视频文件名字存储为一个文档,然后读取每个名字,用strip()函数去掉换行AllFeatures = []print("Loading Anomaly videos Features...")Video_count=-1for iv in Abnor_list_iter:        #随机挑选了30个异常视频Video_count=Video_count+1VideoPath = os.path.join(AbnormalPath, All_Videos[iv])f = open(VideoPath, "r")words = f.read().split()              #将预处理过的视频txt文件进行切割num_feat = len(words) / 4096          #输入模型通道为4096count = -1;VideoFeatues = []for feat in range(0, int(num_feat)):feat_row1 = np.float32(words[feat * 4096:feat * 4096 + 4096])  #每次读取4096个数据count = count + 1if count == 0:VideoFeatues = feat_row1if count > 0:VideoFeatues = np.vstack((VideoFeatues, feat_row1)) if Video_count == 0:AllFeatures = VideoFeatuesif Video_count > 0:AllFeatures = np.vstack((AllFeatures, VideoFeatues))    #将全部的异常视频的数据形成一个大的数组,一个维度为4096,另一个为32*30print("Abnormal Features loaded")All_Videos=[]with open(NormalPath+"normal.txt", 'r') as f1: #file contain path to normal video file.for line in f1:All_Videos.append(line.strip())print("Loading Normal videos...")for iv in Norm_list_iter:VideoPath = os.path.join(NormalPath, All_Videos[iv])f = open(VideoPath, "r")words = f.read().split()feat_row1 = np.array([])num_feat = len(words) /4096count = -1;VideoFeatues = []for feat in range(0, int(num_feat)):feat_row1 = np.float32(words[feat * 4096:feat * 4096 + 4096])count = count + 1if count == 0:VideoFeatues = feat_row1if count > 0:VideoFeatues = np.vstack((VideoFeatues, feat_row1))feat_row1 = []AllFeatures = np.vstack((AllFeatures, VideoFeatues))print("Features loaded")     #与异常数据处理相同,然后再将正常处理得到的数据一起加载到异常的后面形成一个4096*1920(960*2)的数组
    AllLabels = np.zeros(32*batchsize, dtype='uint8') #初始化一个1920的数组,用来存储标签th_loop1=n_exp*32      #前960为异常视频th_loop2=n_exp*32-1    #后960为正常视频for iv in range(0, 32*batchsize):if iv< th_loop1:AllLabels[iv] = int(0)     #异常视频标签为0if iv > th_loop2:AllLabels[iv] = int(1)     #正常视频标签为1

视频特征以及视频标签处理完成,函数参数为正常以及异常视频的路径,返回全部视频特征以及视频标签

train_on_batch

是Keras提供的api(函数等等)对一个mini-batch的数据进行更新。

 def train_on_batch(self, x, y,sample_weight=None,class_weight=None):
#参数X为模型输入,参数Y为标签,sample_weight为每个样本对应的权重,class_weight类别权重,主要用于类别不平衡

custom_objective()自定义损失函数

1.flatten()将数组降为一维数据

2.T.stack()矩阵拼接函数,将两个或者多个拼接为一个数组

3.T.concatenate()将数据按行或按列拼在一起

C3D.py

preprocess_input()

get.file():从网上下载文件,参数分别为fname:下载后文件名,origin:下载的地址链接,cache_subdir:模型保存在哪个文件下。return返回值,返回文件的绝对地址

detect_test.py

os.path.basename():返回路径的最后一个文件名

cv2.VideoCapture(video_path):读取目的地址的视频文件 ret, frame = cap.read():ret返回是否成功获取帧,frame是捕获到的图像def get_video_clips(video_path):frames = get_video_frames(video_path)clips = sliding_window(frames, params.frame_count, params.frame_count)return clips, len(frames)def get_video_frames(video_path):cap = cv2.VideoCapture(video_path)frames = []while (cap.isOpened()):ret, frame = cap.read()if ret == True:frames.append(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))else:breakreturn frames将视频剪切成为帧,然后将图像转化为灰度图,在进行切片,将16张图片放在一个切片中用于提取特征

numpy.linspace():在大间隔内,输出特定的小间隔的数据

numpy.ceil():计算大于等于该值的最小整数

imresize():改变图像的大小

到此项目基本上看完了

Summarize

有两个网络构成,一个是分类网络,一个是特征提取网络,其中特征提取网络的去权重已知。至于怎么用I3D代换,后续再来补。

记录自己的UCF—Crime代码debug相关推荐

  1. java的时间变化_通过java记录数据持续变化时间代码解析

    这篇文章主要介绍了通过java记录数据持续变化时间代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.需求:获取count为null和不为n ...

  2. 微信推文图片间距有缝的代码_使用记录接缝进行旧代码单元测试

    微信推文图片间距有缝的代码 在大多数情况下,使用遗留代码可能很困难. 但是,当涉及到添加新功能,重构或维护您不熟悉的代码时,它可能会变得势不可挡. 如果您已经使用敏捷技术几年了,并且突然间您面对大量的 ...

  3. PRU代码debug

    这两天由于工作关系又搞了一遍PRU代码debug.我的需求很简单,PRU操作外部寄存器,比如DCAN(地址0x4A0037D0),这个过程要可以debug. PRU的代码debug,我认为主要分两种 ...

  4. 刚才同意了一个JetBrains 反编译器对话框,然后代码debug 的时候就会出现许多这些黄色的底层结构, 有没有大神直到这个怎么取消呀

    刚才同意了一个JetBrains 反编译器对话框,然后代码debug 的时候就会出现许多这些黄色的底层结构, 请问下这个怎么取消呀

  5. mip-NeRF代码debug

    代码:https://github.com/google/mipnerf 翻译解说:https://blog.csdn.net/qq_43620967/article/details/12445897 ...

  6. 记录一次自己调试代码的过程

    今年年初我们做了一套防窃电的软件,其中通讯采取的是串口方式.前段时间,根据现场的反馈,我们增加了蓝牙通讯的功能.系统界面如下图所示: 今天,现场人员反馈说:"解析的数据出现问题", ...

  7. 记录两段经典标定代码

    这两段是HALCON给出的分别标定内参和外参的代码,过程和OPENCV类似,但是标定外参更具有参考价值.记录一下 ImgPath := '3d_machine_vision/calib/' dev_c ...

  8. idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解

    我们在使用 IDEA DEBUG调试代码的时候,常常见到控制台会输出一句这样的话:「Connected to the target VM, address: '127.0.0.1:62981', tr ...

  9. IIS W3C日志记录字段和HTTP状态代码的说明

    一般情况下很多朋友都不在意IIS日志,有的是因为购买的虚拟主机不给提供,有的是提供了,但是还必须与服务器管理员联系才能得到.像新网的部分服务器ftp目录有这个文件,但是就是提示没权限查看也没有权限下载 ...

  10. 计算机用什么命令调取共享记录,只需一串代码命令就可以获取你的电脑所有的无线网历史连接记录?...

    这个CMD可能是Windows 保留的跟Dos 系统最相似的一个功能了,黑色的界面通过敲代码来达到其设定的功能, 但是有多少人会用呢?其实如果你会使用,你会发现:它真的很强大! Windows 7 S ...

最新文章

  1. python实现人像美颜
  2. 软件工程--软件危机-生命周期-软件过程
  3. 自定义能够for each的类,C#,Java,C++,C++/cli的实现方法
  4. 前端学习(2818):小程序学习之文件建立
  5. Eclipse中部分快捷键
  6. [解题报告]1005 - Number Sequence
  7. Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)
  8. intellij idea参数提示param hints
  9. rtmp,rtsp,hLS区别
  10. linux看定时任务命令,linux命令-定时任务at
  11. 深入理解浏览器的缓存机制
  12. 爬取百度图片的两种方法
  13. 笔记本计算机bios设置,笔记本怎么进入bios设置【方法步骤】
  14. C++求解一元二次方程
  15. 嵌入式开发培训靠谱吗,嵌入式开发培训怎么样?
  16. 杀死一只知更鸟 摘抄
  17. arcgis 地下管线三维建模
  18. 这,是一篇有“味道”的科普…
  19. 服务器主动推送消息数据给客户端
  20. php百度云5秒盾,cloudflare如何自定义5秒盾页面教程

热门文章

  1. git添加文件到版本库中
  2. SUV世家广汽三菱,牵手微信企业号打造学习型企业
  3. WCDMA中的CQI
  4. 【论文笔记】LIME: low-light image enhancement via illumination map estimation
  5. hive分隔符_hive默认分隔符
  6. Rsyslog Properties and the Property Replacer
  7. 1741. Communication Fiend(dp)
  8. 【C#】 .NET Reflector 安装与学习
  9. EasyBoot制作启动光盘教程
  10. 游戏设计梦工厂学习笔记(一)