• Stars
    star
    169
  • Rank 224,453 (Top 5 %)
  • Language
    Python
  • Created over 6 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

视频的文本摘要(标注),输入一段视频,通过深度学习网络和人工智能程序识别视频主要表达的意思(Input a video output a txt decribing the video)。

VideoCaption

视频的文本摘要(标注),输入一段视频,通过深度学习网络和人工智能程序识别视频主要表达的意思 Video summary with text, input a video output a txt decribing the video.

本程序总共包含3个模块:

(1). 视频读取与关键帧提取模块
(2). Image caption模块(通过训练一个CNN feature extracter + LSTM网络)
(3). Text summary模块

依赖包:

python3, numpy, opencv, pytorch, jieba分词, textrank4zh, tdqm, opencc, gensim

预训练的模型文件: Image caption模块的模型文件和Text summary模型文件,链接:
模型文件链接

使用方法:

python videoCaption.py video_file

脚本运行效果截图:(测试的视频是薛之谦的《演员》mv)-

算法主要步骤和脚本文件详解:

(1).Short Detector模块:

 通过opencv读入视频流,使用3帧间差法:计算相邻2帧的直方图帧间一阶差分和二阶差分算子,然后根据阈值判断是否切换镜头,保存镜头所在的帧ID即可。  视频文件较大也可以,程序会将视频文件通过流的方式逐步读入内存。

(2). Image Caption模块:

 本模块将深度卷积神经网络和深度循环神经网络结合,用于解决图像标注和语句检索问题。通过CNN提取输入图像的高层语义信息,然后输入到LSTM不断预测下一个最可能出现的词语,组成图像描述。训练的目标就是输出的词语与预期的词语相符合,依次设计神经网络的loss函数。本程序提供训练好的模型,链接见上。读者想要用自己的数据及训练也是可以的。
 通过调用img2txt.py的generate_txt()函数,输入预处理后的图像数据,输出图像描述信息。
 训练数据来源-全球AI挑战赛-图像中文描述
 需要注意的是:

<1>. 这里使用ResNet作为图像高层次语义特征提取模型,不能直接使用ResNet模型,需要做出一点修改:

     模型要去掉网络的最后一层全连接层FC,或者将FC替换为恒等映射。因为FC主要作用是从特征空间映射到样本空间,起到特征融合的作用,为分类做准备。我们这里不需要得到分类概率,只需要特征信息即可。

(3). 文本摘要模块(Text summary):

 文本摘要模块使用的是textRank算法:类似于PageRank,不同之处在于将每一个句子看作网络中的节点
 在进行textRank之前,将句子处理成一个由词语(word)组成的list。通过计算句子与其他句子之间的关联程度(相似性程度)来计算句子在文中的重要性程度。这里提供两种算法:

<1>. 将句子转化为词频向量,然后计算词频向量之间的夹角余弦作为句子之间的相似度,即textrank4zh的做法。

 textrank4zh计算关键词使用的方法是N-gams + textrank。词语是否相邻决定词语之间是否存在着Edge连接。
 N-gram模型假设在不改变词语在上下文的顺序的前提下,在文中物理距离越近,则关联度越大,物理距离越远则关联度越小,这个假设在某些情况下并不合理,因为没有考虑距离越远的词有可能反而关联度更近的情况。

<2>. 词向量是多维实数向量,向量中包含了自然语言中的语义和语法关系信息。不仅考虑了上下文信息,而且减少了冗余信息,因此可以很自然可以想到利用word2vect计算句子与句子之间的相似性:

词向量均值法: 例如计算句子A=['word','you','me'],与句子B=['sentence','google','python']计算相似性,从word2vec模型中分别得到A中三个单词的词向量v1,v2,v3取其平均值Va(avg)=(v1+v2+v3)/3。对句子B做同样的处理得到Vb(avg),然后计算Va(avg)与Vb(avg)连个向量的夹角余弦值,Cosine Similarity视为句子A与B的相似度值。

<3>. 文本摘要还可以其他深度学习的方式,比如通过训练一个seq2seq模型来完成,这部分内容还在测试,后续会补上。

关于文本摘要使用的维基百科中文预料处理:

 文本摘要模块的预处理比较麻烦,步骤比较多。本程序训练Word2vect模型用的是中文维基百科语料库,读者可自行下载https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2  然后,安装Wikipedia Extractor,使用Wikipedia Extractor抽取正文内容。Wikipedia Extractor是意大利人用Python写的一个维基百科抽取器,使用非常方便。下载之后直接使用这条命令即可完成抽取,运行时间很快。执行以下命令。  
$ sudo apt-get install unzip python python-dev python-pip
$ git clone https://github.com/attardi/wikiextractor.git wikiextractor
$ cd wikiextractor
$ sudo python setup.py install
$ ./WikiExtractor.py -b 1024M -o extracted zhwiki-latest-pages-articles.xml.bz2
Windows使用powershell也是一样的命令(注意除去sudo),命令运行结束会在目录extracted的下一级目录下得到两个文件wiki_00, wiki_01。
接下里对这两个文件做预处理:

(1). 繁体转简体:

   使用opencc(windows下安装比较麻烦,最有效的方式直接下载opencc-python绑定包源码,直接通过源码的setup.py安装,使用过程中可能会遇到版本问题,注释掉相应的代码即可,不影响使用,亲测)。
   linux下直接运行脚本进行opencc的安装和繁转简处理:
    $ sudo apt-get install opencc
    $ opencc -i wiki_00 -o zh_wiki_00 -c zht2zhs.ini
    $ opencc -i wiki_01 -o zh_wiki_01 -c zht2zhs.ini

(2). 去除多余的符号,清洗文本,使用preprocess下的filter_wiki.py脚本。

(3). 使用preprocess下的cut2words.py处理,主要是通过jieba做分词处理。

(4). 安装gensim,通过train_word2vect.py训练word2vect模型,训练结束得到3个模型文件。利用gensim可以计算中文词语的词向量

可以通过提供的Word2VectTextRank.py脚本和test_0.txt, test_1.txt..测试文件测试文本摘要效果。      

More Repositories

1

Vehicle-Car-detection-and-multilabel-classification

使用YOLO_v3_tiny和B-CNN实现街头车辆的检测和车辆属性的多标签识别 Using yolo_v3_tiny to do vehicle or car detection and attribute's multilabel classification or recognize
Python
575
star
2

MCMOT

Real time one-stage multi-class & multi-object tracking based on anchor-free detection and ReID
Python
380
star
3

RepNet-MDNet-VehicleReID

Implementing RepNet(a two-stream multitask learning network) to do vehicle Re-identification, vehicle search(or vehicle match) with PyTorch 可用于车辆细粒度识别,车辆再识别,车辆匹配,车辆检索,RepNet/MDNet的一种PyTorch实现
Python
240
star
4

FairMOTVehicle

A fork of FairMOT used to do vehicle MOT.用于跟踪车辆的多目标跟踪, 自定义数据进行单类别多目标实时跟踪
Python
181
star
5

FaceRecognition

Face recognition using triplet loss, implementing FaceNet with pytorch.人脸识别项目,提供一个小型数据集用作验证,使用三元组损失函数(Triplet loss)提升准确率和泛化能力,对FaceNet进行了一种实现。
Python
127
star
6

MCMOT-ByteTrack

Python
104
star
7

YOLOV4_MCMOT

Using YOLOV4 as detector for MCMOT.
Python
103
star
8

DenseBox

Implemention of Baidu's DenseBox used for multi-task learning of object detection and landmark(key-point) localization 用PyTorch实现了百度的DenseBox并针对任意宽高比矩形(不仅限于方形)的目标检测做了优化,不仅可以输出关键点的热力图(heatmap)而且可以输出每个bbox对应关键点坐标
Python
94
star
9

MOTEvaluate

Python
21
star
10

SFM_OpenCV

A SFM project implemented with Opencv
C++
18
star
11

ByteTrack-MCMOT-TensorRT

MCMOT TensorRT deployment(C/C++) based on ByteTrack.
C++
16
star
12

Depthmap-refinement-upsampling-

Implemention of paper "Spatial-Depth Super Resolution for Range Images" with python
Python
16
star
13

SFM_PMVS_3DReconstruct_python

SFM PMVS 3D sparse to dense reconstruct in python.
Python
11
star
14

BinoCameraCalibrate

Binocular camera calibration and rectification using OpenCV.
C++
11
star
15

Algorithms

Algorithms's implementions for testing 一些机器学习,统计,三维重建等算法实现和测试
Python
8
star
16

PyScripts

Python
7
star
17

ExposureFusionPy

Implementing ExposureFusion algorithm using OpenCV and Numpy in Python3.
Python
5
star
18

MonoCameraCalibrate

C++
4
star
19

ExposureFusionCpp

C++
4
star
20

TestKalman

Python
3
star
21

StereoCalibrateRectify

C++
3
star
22

MonoDepthV1

Python
3
star
23

PytorchToCaffe

Python
3
star
24

MyNanoDet

Using custom dataset for training.
Python
3
star
25

TestOpenCVCuda

Test openCV with CUDA
C++
3
star
26

MonoDepthV2

Jupyter Notebook
3
star
27

SelfSuperviseAidedBlindIQA

SelfSuperviseAidedBlindIQA
Python
2
star
28

Stereo3DReconstruct

Python
2
star
29

MyHDRUNet

Python
2
star
30

MyEnlightenGAN

Python
2
star
31

My_CRNN

2
star
32

ColmapMVSMy

C++
2
star
33

MySlamExperiments

C++
Python
2
star
34

RealChineseLiscensePlateGenerator

Python
2
star
35

CaptainEven

1
star
36

MyMVE

C++
1
star