作者代码 3D resnet
为了测试作者代码的准确性,我先下载原作者所使用的数据集,作者所使用的4个数据集分别是ActivityNet,Kinetics,UCF-101,HMDB-51,其实最开始是想使用Kinetics700数据集,但在网上查阅资料发现,该数据集是来自youtube,下载不仅慢,而且有可能视频资源已经不存在,因此我最终选择UCF-101数据集,需要下载该数据集的童鞋记住!血泪教训!一定要用迅雷下载!
数据集下载链接在此:UCF101
数据集划分链接:https://www.crcv.ucf.edu/wp-content/uploads/2019/03/UCF101TrainTestSplits-RecognitionTask.zip
data
UCF101_videos
ApplyEyeMakeup
...
YoYo
UCF101_jpg
ApplyEyeMakeup
...
YoYo
UCF101_json
ucf101_01.json
UCF101_txt
classInd.txt
testlist01.txt
testlist02.txt
testlist03.txt
trainlist01.txt
trainlist02.txt
trainlist03.txt
models
resnet-50-kinetics.pth #需要去下载
results
将解压好的视频数据集全部放入UCF101_videos文件夹中,将数据集划分文件txt放入UCF101_txt文件夹中
在代码中作者其实已经给出划分数据集的代码,将数据集按7:3的比例划分训练集与测试集,如下:
python -m util_scripts.generate_video_jpgs data/UCF101_videos data/UCF101_jpg ucf101
data/UCF/UCF101_videos为数据集路径,data/UCF101_jpg为保存图片路径,它会自动将每个视频拆分的图片保存成一个文件夹存在data/UCF101_jpg里,ucf101为数据集名称
接着生成标注文件,如下:
python -m util_scripts.ucf101_json data/UCF101_txt data/UCF101_jpg data/UCF101_json
data/UCF101_txt为下载好的切分数据集的txt文件,data/UCF101_json为保存数据集标注文件夹。
再生成json文件时,我们可能遇到这种问题:
Error tokenizing data. C error: Expected 6 fields in line 3, saw 9
我的做法是将txt文件转换为csv文件在将util_scripts.ucf101_json中部分代码所用的文件后缀修改就可以生成json文件。(方法不唯一)
生成的json文件打开之后,可能会遇到这种情况:
"labels": [NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN]
这个时候只需要手动的将这个label改为classInd.txt里面的标签就可以,记住,一定要加双引号,不可以用单引号,如下:
"labels": ["Basketball","BasketballDunk","Biking","CliffDiving","CricketBowling","Diving","Fencing","FloorGymnastics","GolfSwing","HorseRiding","IceDancing","LongJump","PoleVault","RopeClimbing","SalsaSpin","SkateBoarding","Skijet","SoccerJuggling","Surfing","TennisSwing","TrampolineJumping","VolleyballSpiking","WalkingWithDog"]
接下来就可以训练UCF101数据集,如下:
python main.py --root_path ./data --video_path UCF101_jpg/ --annotation_path UCF101_json/ucf101_01.json \
--result_path results --dataset ucf101 --n_classes 101 --model resnet --model_depth 50 --batch_size 32 \
--n_threads 1 --checkpoint 10
–root_path为根目录,–video_path为数据集图片所在的位置,–annotation_path为标注文件速所在位置,–result_path为保存权重以及日志文件所在位置,–dataset为该数据集名称,–n_classes为该数据集的类别,–model与–model_depth为resnet 50,–batch_size设为32,–n_threads为只用1个GPU,–checkpoint为10个epoch保存一次。
python main.py --root_path ./data --video_path UCF101_jpg/ --annotation_path UCF101_json/ucf101_01.json \
--result_path results --dataset ucf101 --resume_path results/save_200.pth \
--model_depth 50 --n_classes 2 --n_threads 1 --no_train --no_val --inference --output_topk 5 --inference_batch_size 1
我们可以从results文件夹里的val.log查看每个测试集的类别和置信度。最后,我们就可以根据UCF101数据集的组成构建出自己的数据集与类别。最后,感谢各位大佬的分享,才能将该网络配置成功!