├── .vscode
├── launch.json
└── settings.json
├── DataSet
└── images_train
│ ├── 1615711650_3000.jpg
│ ├── 1615711650_3025.jpg
│ ├── 1615711650_3050.jpg
│ ├── 1615711650_3100.jpg
│ ├── 1615711650_3125.jpg
│ ├── 1615711872_225.jpg
│ ├── 1615711872_325.jpg
│ ├── 1615711872_500.jpg
│ ├── 1615711872_525.jpg
│ ├── 1615711872_550.jpg
│ ├── 1615711872_900.jpg
│ ├── 1615712002_1025.jpg
│ ├── 1615712002_1050.jpg
│ ├── 1615712002_1075.jpg
│ ├── 1615712002_1425.jpg
│ ├── 1615712002_1475.jpg
│ ├── 1615712002_1925.jpg
│ ├── 1615712002_375.jpg
│ ├── 1615712002_750.jpg
│ ├── 1615712321_0.jpg
│ ├── 1615712321_100.jpg
│ ├── 1615712321_175.jpg
│ ├── 1615712321_225.jpg
│ ├── 1615712321_25.jpg
│ ├── 1615712321_50.jpg
│ ├── 1615712329_0.jpg
│ ├── 1615712329_25.jpg
│ ├── 1615712329_250.jpg
│ ├── 1615712329_800.jpg
│ ├── 1615712329_975.jpg
│ ├── 1616941804_10210.jpg
│ ├── 1616941804_10605.jpg
│ ├── 1616941804_10645.jpg
│ ├── 1616941804_10735.jpg
│ ├── 1616941804_10825.jpg
│ ├── 1616941804_10915.jpg
│ ├── 1616941804_10925.jpg
│ ├── 1616941804_11050.jpg
│ ├── 1616941804_11105.jpg
│ ├── 1616941804_11110.jpg
│ ├── 1616941804_11140.jpg
│ ├── 1616941804_11860.jpg
│ ├── 1616941804_1195.jpg
│ ├── 1616941804_1210.jpg
│ ├── 1616941804_12145.jpg
│ ├── 1616941804_12225.jpg
│ ├── 1616941804_12230.jpg
│ ├── 1616941804_12235.jpg
│ ├── 1616941804_12265.jpg
│ ├── 1616941804_12445.jpg
│ ├── 1616941804_12725.jpg
│ ├── 1616941804_13345.jpg
│ ├── 1616941804_13760.jpg
│ ├── 1616941804_13845.jpg
│ ├── 1616941804_13850.jpg
│ ├── 1616941804_13855.jpg
│ ├── 1616941804_13940.jpg
│ ├── 1616941804_14155.jpg
│ ├── 1616941804_1795.jpg
│ ├── 1616941804_205.jpg
│ ├── 1616941804_210.jpg
│ ├── 1616941804_2100.jpg
│ ├── 1616941804_2195.jpg
│ ├── 1616941804_2230.jpg
│ ├── 1616941804_2235.jpg
│ ├── 1616941804_2290.jpg
│ ├── 1616941804_2410.jpg
│ ├── 1616941804_2605.jpg
│ ├── 1616941804_2695.jpg
│ ├── 1616941804_2725.jpg
│ ├── 1616941804_2735.jpg
│ ├── 1616941804_2825.jpg
│ ├── 1616941804_2910.jpg
│ ├── 1616941804_305.jpg
│ ├── 1616941804_3100.jpg
│ ├── 1616941804_3130.jpg
│ ├── 1616941804_3315.jpg
│ ├── 1616941804_3410.jpg
│ ├── 1616941804_3730.jpg
│ ├── 1616941804_385.jpg
│ ├── 1616941804_4035.jpg
│ ├── 1616941804_4225.jpg
│ ├── 1616941804_4255.jpg
│ ├── 1616941804_4350.jpg
│ ├── 1616941804_4440.jpg
│ ├── 1616941804_4665.jpg
│ ├── 1616941804_4755.jpg
│ ├── 1616941804_4840.jpg
│ ├── 1616941804_4935.jpg
│ ├── 1616941804_4940.jpg
│ ├── 1616941804_5030.jpg
│ ├── 1616941804_5035.jpg
│ ├── 1616941804_5125.jpg
│ ├── 1616941804_5155.jpg
│ ├── 1616941804_5245.jpg
│ ├── 1616941804_5250.jpg
│ ├── 1616941804_5255.jpg
│ ├── 1616941804_5345.jpg
│ ├── 1616941804_5380.jpg
│ ├── 1616941804_5470.jpg
│ ├── 1616941804_5745.jpg
│ ├── 1616941804_575.jpg
│ ├── 1616941804_610.jpg
│ ├── 1616941804_6285.jpg
│ ├── 1616941804_6340.jpg
│ ├── 1616941804_6475.jpg
│ ├── 1616941804_6555.jpg
│ ├── 1616941804_670.jpg
│ ├── 1616941804_6785.jpg
│ ├── 1616941804_6865.jpg
│ ├── 1616941804_6870.jpg
│ ├── 1616941804_6970.jpg
│ ├── 1616941804_7375.jpg
│ ├── 1616941804_7865.jpg
│ ├── 1616941804_7870.jpg
│ ├── 1616941804_8580.jpg
│ ├── 1616941804_8585.jpg
│ ├── 1616941804_8620.jpg
│ ├── 1616941804_8675.jpg
│ ├── 1616941804_885.jpg
│ ├── 1616941804_890.jpg
│ ├── 1616941804_9520.jpg
│ ├── 1616941804_9525.jpg
│ ├── 1616941804_9580.jpg
│ ├── 1616941804_9610.jpg
│ ├── 1616941804_9895.jpg
│ ├── 1616941914_10195.jpg
│ ├── 1616941914_10280.jpg
│ ├── 1616941914_10695.jpg
│ ├── 1616941914_11090.jpg
│ ├── 1616941914_11190.jpg
│ ├── 1616941914_11195.jpg
│ ├── 1616941914_11370.jpg
│ ├── 1616941914_11375.jpg
│ ├── 1616941914_11410.jpg
│ ├── 1616941914_11465.jpg
│ ├── 1616941914_1150.jpg
│ ├── 1616941914_11505.jpg
│ ├── 1616941914_11585.jpg
│ ├── 1616941914_11595.jpg
│ ├── 1616941914_1160.jpg
│ ├── 1616941914_11600.jpg
│ ├── 1616941914_11680.jpg
│ ├── 1616941914_11775.jpg
│ ├── 1616941914_11870.jpg
│ ├── 1616941914_1190.jpg
│ ├── 1616941914_11900.jpg
│ ├── 1616941914_11995.jpg
│ ├── 1616941914_12095.jpg
│ ├── 1616941914_12305.jpg
│ ├── 1616941914_12315.jpg
│ ├── 1616941914_12490.jpg
│ ├── 1616941914_12500.jpg
│ ├── 1616941914_12530.jpg
│ ├── 1616941914_12590.jpg
│ ├── 1616941914_12720.jpg
│ ├── 1616941914_1280.jpg
│ ├── 1616941914_12905.jpg
│ ├── 1616941914_12935.jpg
│ ├── 1616941914_12990.jpg
│ ├── 1616941914_13220.jpg
│ ├── 1616941914_13395.jpg
│ ├── 1616941914_13400.jpg
│ ├── 1616941914_13430.jpg
│ ├── 1616941914_13610.jpg
│ ├── 1616941914_13620.jpg
│ ├── 1616941914_13625.jpg
│ ├── 1616941914_13705.jpg
│ ├── 1616941914_13835.jpg
│ ├── 1616941914_14330.jpg
│ ├── 1616941914_14425.jpg
│ ├── 1616941914_14645.jpg
│ ├── 1616941914_14835.jpg
│ ├── 1616941914_15230.jpg
│ ├── 1616941914_15325.jpg
│ ├── 1616941914_155.jpg
│ ├── 1616941914_15740.jpg
│ ├── 1616941914_165.jpg
│ ├── 1616941914_17165.jpg
│ ├── 1616941914_17260.jpg
│ ├── 1616941914_17270.jpg
│ ├── 1616941914_17360.jpg
│ ├── 1616941914_18385.jpg
│ ├── 1616941914_18470.jpg
│ ├── 1616941914_18485.jpg
│ ├── 1616941914_18695.jpg
│ ├── 1616941914_19785.jpg
│ ├── 1616941914_20905.jpg
│ ├── 1616941914_21315.jpg
│ ├── 1616941914_21400.jpg
│ ├── 1616941914_23655.jpg
│ ├── 1616941914_2585.jpg
│ ├── 1616941914_2675.jpg
│ ├── 1616941914_27080.jpg
│ ├── 1616941914_27700.jpg
│ ├── 1616941914_28190.jpg
│ ├── 1616941914_28415.jpg
│ ├── 1616941914_28880.jpg
│ ├── 1616941914_29100.jpg
│ ├── 1616941914_29135.jpg
│ ├── 1616941914_29190.jpg
│ ├── 1616941914_29315.jpg
│ ├── 1616941914_29510.jpg
│ ├── 1616941914_29595.jpg
│ ├── 1616941914_29810.jpg
│ ├── 1616941914_2995.jpg
│ ├── 1616941914_30125.jpg
│ ├── 1616941914_30530.jpg
│ ├── 1616941914_30725.jpg
│ ├── 1616941914_31430.jpg
│ ├── 1616941914_31435.jpg
│ ├── 1616941914_31715.jpg
│ ├── 1616941914_31835.jpg
│ ├── 1616941914_31845.jpg
│ ├── 1616941914_31935.jpg
│ ├── 1616941914_3215.jpg
│ ├── 1616941914_3395.jpg
│ ├── 1616941914_350.jpg
│ ├── 1616941914_3800.jpg
│ ├── 1616941914_435.jpg
│ ├── 1616941914_4525.jpg
│ ├── 1616941914_470.jpg
│ ├── 1616941914_475.jpg
│ ├── 1616941914_5105.jpg
│ ├── 1616941914_530.jpg
│ ├── 1616941914_5390.jpg
│ ├── 1616941914_5520.jpg
│ ├── 1616941914_5615.jpg
│ ├── 1616941914_5830.jpg
│ ├── 1616941914_5835.jpg
│ ├── 1616941914_5920.jpg
│ ├── 1616941914_65.jpg
│ ├── 1616941914_660.jpg
│ ├── 1616941914_750.jpg
│ ├── 1616941914_7725.jpg
│ ├── 1616941914_8225.jpg
│ ├── 1616941914_8350.jpg
│ ├── 1616941914_8355.jpg
│ ├── 1616941914_8570.jpg
│ ├── 1616941914_8575.jpg
│ ├── 1616941914_8630.jpg
│ ├── 1616941914_8940.jpg
│ ├── 1616941914_9155.jpg
│ ├── 1616941914_9785.jpg
│ ├── 1616941914_9790.jpg
│ ├── baidu_1026.jpg
│ ├── baidu_1036.jpg
│ ├── baidu_1051.jpg
│ ├── baidu_106.jpg
│ ├── baidu_1072.jpg
│ ├── baidu_1075.jpg
│ ├── baidu_11.jpg
│ ├── baidu_1165.jpg
│ ├── baidu_1168.jpg
│ ├── baidu_12.jpg
│ ├── baidu_123.jpg
│ ├── baidu_129.jpg
│ ├── baidu_133.jpg
│ ├── baidu_136.jpg
│ ├── baidu_137.jpg
│ ├── baidu_14.jpg
│ ├── baidu_146.jpg
│ ├── baidu_154.jpg
│ ├── baidu_158.jpg
│ ├── baidu_173.jpg
│ ├── baidu_18.jpg
│ ├── baidu_181.jpg
│ ├── baidu_2.jpg
│ ├── baidu_203.jpg
│ ├── baidu_208.jpg
│ ├── baidu_21.jpg
│ ├── baidu_230.jpg
│ ├── baidu_231.jpg
│ ├── baidu_232.jpg
│ ├── baidu_235.jpg
│ ├── baidu_244.jpg
│ ├── baidu_25.jpg
│ ├── baidu_256.jpg
│ ├── baidu_265.jpg
│ ├── baidu_266.jpg
│ ├── baidu_27.jpg
│ ├── baidu_270.jpg
│ ├── baidu_280.jpg
│ ├── baidu_294.jpg
│ ├── baidu_300.jpg
│ ├── baidu_305.jpg
│ ├── baidu_306.jpg
│ ├── baidu_307.jpg
│ ├── baidu_31.jpg
│ ├── baidu_311.jpg
│ ├── baidu_313.jpg
│ ├── baidu_325.jpg
│ ├── baidu_333.jpg
│ ├── baidu_337.jpg
│ ├── baidu_35.jpg
│ ├── baidu_358.jpg
│ ├── baidu_36.jpg
│ ├── baidu_365.jpg
│ ├── baidu_37.jpg
│ ├── baidu_38.jpg
│ ├── baidu_380.jpg
│ ├── baidu_383.jpg
│ ├── baidu_4.jpg
│ ├── baidu_409.jpg
│ ├── baidu_420.jpg
│ ├── baidu_44.jpg
│ ├── baidu_46.jpg
│ ├── baidu_56.jpg
│ ├── baidu_66.jpg
│ ├── baidu_75.jpg
│ ├── baidu_79.jpg
│ ├── baidu_8.jpg
│ ├── baidu_81.jpg
│ ├── baidu_83.jpg
│ ├── baidu_888.jpg
│ ├── baidu_889.jpg
│ ├── baidu_890.jpg
│ ├── baidu_898.jpg
│ ├── baidu_9.jpg
│ ├── baidu_90.jpg
│ ├── baidu_905.jpg
│ ├── baidu_907.jpg
│ ├── baidu_908.jpg
│ ├── baidu_910.jpg
│ ├── baidu_913.jpg
│ ├── baidu_915.jpg
│ ├── baidu_916.jpg
│ ├── baidu_917.jpg
│ ├── baidu_919.jpg
│ ├── baidu_920.jpg
│ ├── baidu_923.jpg
│ ├── baidu_925.jpg
│ ├── baidu_93.jpg
│ ├── baidu_934.jpg
│ ├── baidu_946.jpg
│ ├── baidu_95.jpg
│ ├── baidu_950.jpg
│ ├── baidu_953.jpg
│ ├── baidu_959.jpg
│ ├── baidu_979.jpg
│ ├── baidu_99.jpg
│ ├── baidu_994.jpg
│ └── label.txt
├── LabelTool
├── image_widget.py
├── image_widget.ui
├── main_widget.py
├── main_widget.ui
└── requirements.txt
├── README.md
├── Trainer
├── .vscode
│ └── launch.json
├── DLEngine
│ ├── __init__.py
│ ├── eval_project.py
│ ├── modules
│ │ ├── __init__.py
│ │ ├── cfg_parse
│ │ │ └── cfg_parse.py
│ │ ├── dataloader
│ │ │ ├── __init__.py
│ │ │ ├── common_cls.py
│ │ │ ├── common_det.py
│ │ │ ├── common_keypoint.py
│ │ │ ├── dataloader.py
│ │ │ ├── person_keypoint_txt.py
│ │ │ ├── transform.py
│ │ │ ├── transform_v2.py
│ │ │ └── voc_det.py
│ │ ├── evaluater
│ │ │ ├── __init__.py
│ │ │ └── evaluater.py
│ │ ├── lr_schedule
│ │ │ ├── __init__.py
│ │ │ └── lr_schedule.py
│ │ ├── metric
│ │ │ ├── map.py
│ │ │ ├── oks.py
│ │ │ └── top1.py
│ │ ├── optimizer
│ │ │ ├── __init__.py
│ │ │ └── optimizer.py
│ │ ├── trainer
│ │ │ ├── __init__.py
│ │ │ └── trainer.py
│ │ └── visualize
│ │ │ └── visual_util.py
│ └── train_project.py
├── cfgs
│ └── key_point
│ │ ├── keypoint_shufflenetv2_heatmap_224_1.0_3kps.py
│ │ └── temp_cfg.py
├── data
│ ├── __init__.py
│ ├── dataloader.py
│ ├── person_keypoint_txt.py
│ ├── transform.py
│ └── transform_v2.py
├── export_ncnn.py
├── export_onnx.py
├── infer.py
├── models
│ ├── __init__.py
│ └── keypoint
│ │ └── shufflenet_v2_heatmap.py
├── requirements.txt
├── save
│ └── torchvision
│ │ └── shufflenetv2_x1-5666bf0f80_bgr.pth
├── setup.py
└── train.py
├── Video2Images
├── main_widget.py
├── main_widget.ui
└── requirements.txt
├── WinApp
├── .vscode
│ └── launch.json
├── alg_onnx
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── api.py
│ └── models
│ │ └── model_24.onnx
├── alg_warp.py
├── infer_widget.py
├── infer_widget.ui
└── requirements.txt
├── app.png
├── cfg_data.png
├── cfg_model.png
├── cfg_opt.png
├── cfg_train.png
├── heatmap1.jpg
├── heatmap2.jpg
├── imgs_from_net.jpg
├── label_file.png
├── label_tool_do.jpg
├── label_tool_init.jpg
├── logo.png
├── pose_est.jpg
├── pro.png
└── result.gif
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // 使用 IntelliSense 了解相关属性。
3 | // 悬停以查看现有属性的描述。
4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Python: 当前文件",
9 | "type": "python",
10 | "request": "launch",
11 | "program": "${file}",
12 | "console": "integratedTerminal"
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "D:\\Anaconda3\\envs\\situp\\python.exe"
3 | }
--------------------------------------------------------------------------------
/DataSet/images_train/1615711650_3000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711650_3000.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711650_3025.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711650_3025.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711650_3050.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711650_3050.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711650_3100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711650_3100.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711650_3125.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711650_3125.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711872_225.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711872_225.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711872_325.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711872_325.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711872_500.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711872_500.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711872_525.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711872_525.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711872_550.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711872_550.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615711872_900.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615711872_900.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_1025.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_1025.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_1050.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_1050.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_1075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_1075.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_1425.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_1425.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_1475.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_1475.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_1925.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_1925.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_375.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_375.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712002_750.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712002_750.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712321_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712321_0.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712321_100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712321_100.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712321_175.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712321_175.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712321_225.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712321_225.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712321_25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712321_25.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712321_50.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712321_50.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712329_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712329_0.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712329_25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712329_25.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712329_250.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712329_250.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712329_800.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712329_800.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1615712329_975.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1615712329_975.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10210.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10210.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10605.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10605.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10645.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10645.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10735.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10735.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10825.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10825.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10915.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10915.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_10925.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_10925.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_11050.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_11050.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_11105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_11105.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_11110.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_11110.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_11140.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_11140.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_11860.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_11860.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_1195.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_1195.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_1210.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_1210.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12145.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12145.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12225.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12225.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12230.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12230.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12235.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12235.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12265.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12265.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12445.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12445.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_12725.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_12725.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_13345.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_13345.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_13760.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_13760.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_13845.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_13845.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_13850.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_13850.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_13855.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_13855.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_13940.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_13940.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_14155.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_14155.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_1795.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_1795.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_205.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_205.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_210.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_210.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2100.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2195.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2195.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2230.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2230.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2235.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2235.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2290.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2290.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2410.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2410.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2605.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2605.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2695.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2695.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2725.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2725.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2735.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2735.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2825.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2825.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_2910.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_2910.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_305.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_3100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_3100.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_3130.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_3130.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_3315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_3315.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_3410.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_3410.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_3730.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_3730.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_385.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_385.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4035.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4035.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4225.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4225.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4255.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4255.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4350.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4350.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4440.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4440.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4665.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4665.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4755.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4755.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4840.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4840.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4935.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4935.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_4940.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_4940.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5030.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5030.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5035.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5035.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5125.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5125.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5155.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5155.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5245.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5245.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5250.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5250.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5255.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5255.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5345.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5345.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5380.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5380.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5470.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5470.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_5745.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_5745.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_575.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_575.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_610.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_610.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6285.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6285.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6340.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6340.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6475.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6475.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6555.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6555.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_670.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_670.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6785.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6785.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6865.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6865.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6870.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6870.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_6970.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_6970.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_7375.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_7375.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_7865.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_7865.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_7870.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_7870.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_8580.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_8580.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_8585.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_8585.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_8620.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_8620.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_8675.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_8675.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_885.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_885.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_890.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_890.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_9520.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_9520.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_9525.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_9525.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_9580.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_9580.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_9610.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_9610.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941804_9895.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941804_9895.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_10195.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_10195.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_10280.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_10280.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_10695.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_10695.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11090.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11090.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11190.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11190.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11195.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11195.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11370.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11370.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11375.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11375.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11410.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11410.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11465.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11465.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_1150.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_1150.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11505.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11585.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11585.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11595.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11595.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_1160.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_1160.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11600.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11600.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11680.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11680.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11775.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11775.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11870.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11870.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_1190.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_1190.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11900.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11900.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_11995.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_11995.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12095.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12095.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12305.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12315.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12490.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12490.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12500.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12500.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12530.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12530.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12590.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12590.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12720.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12720.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_1280.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_1280.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12905.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12905.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12935.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12935.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_12990.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_12990.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13220.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13220.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13395.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13395.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13400.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13430.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13430.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13610.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13610.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13620.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13620.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13625.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13625.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13705.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13705.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_13835.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_13835.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_14330.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_14330.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_14425.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_14425.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_14645.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_14645.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_14835.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_14835.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_15230.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_15230.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_15325.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_15325.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_155.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_155.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_15740.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_15740.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_165.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_165.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_17165.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_17165.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_17260.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_17260.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_17270.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_17270.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_17360.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_17360.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_18385.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_18385.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_18470.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_18470.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_18485.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_18485.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_18695.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_18695.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_19785.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_19785.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_20905.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_20905.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_21315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_21315.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_21400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_21400.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_23655.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_23655.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_2585.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_2585.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_2675.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_2675.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_27080.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_27080.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_27700.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_27700.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_28190.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_28190.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_28415.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_28415.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_28880.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_28880.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29100.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29135.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29135.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29190.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29190.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29315.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29510.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29510.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29595.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29595.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_29810.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_29810.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_2995.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_2995.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_30125.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_30125.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_30530.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_30530.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_30725.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_30725.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_31430.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_31430.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_31435.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_31435.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_31715.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_31715.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_31835.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_31835.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_31845.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_31845.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_31935.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_31935.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_3215.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_3215.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_3395.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_3395.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_350.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_350.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_3800.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_3800.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_435.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_435.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_4525.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_4525.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_470.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_470.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_475.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_475.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5105.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_530.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_530.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5390.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5390.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5520.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5520.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5615.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5615.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5830.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5830.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5835.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5835.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_5920.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_5920.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_65.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_65.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_660.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_660.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_750.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_750.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_7725.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_7725.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8225.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8225.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8350.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8350.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8355.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8355.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8570.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8570.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8575.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8575.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8630.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8630.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_8940.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_8940.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_9155.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_9155.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_9785.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_9785.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/1616941914_9790.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/1616941914_9790.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1026.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1026.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1036.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1036.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1051.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1051.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_106.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1072.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1072.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1075.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_11.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1165.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1165.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_1168.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_1168.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_12.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_123.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_123.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_129.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_129.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_133.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_133.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_136.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_136.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_137.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_137.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_14.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_146.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_146.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_154.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_154.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_158.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_158.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_173.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_173.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_18.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_181.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_181.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_2.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_203.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_203.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_208.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_208.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_21.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_230.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_230.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_231.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_231.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_232.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_232.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_235.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_235.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_244.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_244.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_25.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_256.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_256.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_265.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_265.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_266.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_266.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_27.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_27.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_270.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_270.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_280.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_280.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_294.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_294.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_300.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_300.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_305.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_306.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_306.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_307.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_307.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_31.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_31.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_311.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_311.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_313.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_313.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_325.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_325.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_333.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_333.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_337.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_337.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_35.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_35.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_358.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_358.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_36.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_36.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_365.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_365.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_37.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_37.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_38.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_38.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_380.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_380.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_383.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_383.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_4.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_409.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_409.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_420.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_420.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_44.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_44.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_46.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_46.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_56.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_56.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_66.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_66.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_75.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_75.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_79.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_79.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_8.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_81.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_81.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_83.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_83.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_888.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_888.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_889.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_889.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_890.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_890.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_898.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_898.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_9.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_90.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_90.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_905.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_905.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_907.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_907.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_908.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_908.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_910.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_910.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_913.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_915.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_915.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_916.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_916.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_917.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_917.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_919.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_919.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_920.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_920.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_923.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_923.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_925.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_925.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_93.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_93.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_934.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_934.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_946.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_946.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_95.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_95.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_950.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_950.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_953.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_953.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_959.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_959.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_979.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_979.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_99.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_99.jpg
--------------------------------------------------------------------------------
/DataSet/images_train/baidu_994.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/DataSet/images_train/baidu_994.jpg
--------------------------------------------------------------------------------
/LabelTool/image_widget.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import sys
3 | import os
4 | if hasattr(sys, 'frozen'):
5 | os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
6 | from PyQt5.QtWidgets import *
7 | from PyQt5 import QtCore, QtGui, uic
8 | from PyQt5.QtCore import *
9 | from PyQt5.QtGui import *
10 | import copy
11 | import xml.etree.cElementTree as et
12 | import os
13 | import cv2
14 | import math
15 | from PIL import Image
16 |
17 | # ui配置文件
18 | cUi, cBase = uic.loadUiType("image_widget.ui")
19 |
20 | # 主界面
21 | class CImageWidget(QWidget, cUi):
22 | def __init__(self):
23 | # 设置UI
24 | QMainWindow.__init__(self)
25 | cUi.__init__(self)
26 | self.setupUi(self)
27 |
28 | #image信息
29 | self.img_path = ''
30 | self.img_name = ''
31 | self.img = None
32 |
33 | # 已标注信息
34 | #self.box_list = []
35 | self.kp_list = []
36 |
37 | #待标注信息
38 | self.current_class = 0
39 | #self.start_label = False
40 | #self.current_box = [0,0,0,0,0]
41 | self.current_kp = [0, 0, 0]
42 |
43 | def closeEvent(self, event):
44 | pass
45 |
46 | def set_info(self, image_path, kp_list=None):
47 | if image_path is None:
48 | self.img_path = ''
49 | self.img_name = ''
50 | self.img = None
51 | self.kp_list = []
52 | #self.start_label = False
53 | self.current_kp = [0, 0, 0]
54 | else:
55 | self.img_path = image_path
56 | self.img_name = os.path.basename(image_path) #.split('.')[0]
57 | self.img = QPixmap(self.img_path)
58 | if kp_list is not None:
59 | self.kp_list = kp_list
60 | else:
61 | self.kp_list = []
62 | self.update()
63 |
64 | def set_current_cls(self, cls):
65 | #self.current_kp[2] = cls
66 | self.current_class = cls
67 |
68 | def get_info(self):
69 | return self.img_name, self.kp_list
70 |
71 | def draw_background(self, painter):
72 | pen = QPen()
73 | pen.setColor(QColor(0, 0, 0))
74 | pen.setWidth(2)
75 | painter.setPen(pen)
76 | painter.drawRect(0, 0, self.width(), self.height())
77 |
78 | def draw_image(self, painter):
79 | if self.img is not None:
80 | painter.drawPixmap(QtCore.QRect(0, 0, self.width(), self.height()), self.img)
81 | painter.drawText(10,20,str(self.img_name))
82 |
83 | def draw_kp_info(self, painter):
84 | for kp in self.kp_list:
85 | painter.setPen(QColor(255, 0, 0))
86 | pen = QPen()
87 | pen.setColor(QColor(255, 0, 0))
88 | pen.setWidth(3)
89 | painter.setPen(pen)
90 | painter.drawPoint(kp[0] * self.width(), kp[1] * self.height())
91 | painter.drawText(kp[0] * self.width(), kp[1] * self.height(), str(kp[2]))
92 | '''
93 | if self.start_label:
94 | kp = self.current_kp
95 | pen = QPen()
96 | pen.setColor(QColor(255, 0, 0))
97 | pen.setWidth(3)
98 | painter.setPen(pen)
99 | painter.drawPoint(kp[0] * self.width(), kp[1] * self.height())
100 | painter.drawText(kp[0] * self.width(), kp[1] * self.height(), str(kp[2]))
101 | '''
102 |
103 | def paintEvent(self, event):
104 | painter = QtGui.QPainter(self)
105 | self.draw_background(painter)
106 | self.draw_image(painter)
107 | self.draw_kp_info(painter)
108 |
109 | def mousePressEvent(self, e):
110 | if self.img is None:
111 | return
112 | if e.button() == QtCore.Qt.LeftButton:
113 | #self.start_label = True
114 | self.current_kp[0] = e.pos().x() / self.width()
115 | self.current_kp[1] = e.pos().y() / self.height()
116 | self.kp_list.append([self.current_kp[0], self.current_kp[1], self.current_class])
117 | if e.button() == QtCore.Qt.RightButton and len(self.kp_list) > 0:
118 | self.kp_list.pop()
119 | self.update()
120 |
121 | if __name__ == "__main__":
122 | cApp = QApplication(sys.argv)
123 | cImageWidget = CImageWidget()
124 | cImageWidget.show()
125 | cImageWidget.set_info('./1.jpg')
126 | sys.exit(cApp.exec_())
--------------------------------------------------------------------------------
/LabelTool/image_widget.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 626
10 | 502
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/LabelTool/main_widget.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import sys
3 | import os
4 | if hasattr(sys, 'frozen'):
5 | os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
6 | from PyQt5.QtWidgets import * #QApplication, QWidget, QPushButton, QMainWindow, QVBoxLayout, QHBoxLayout
7 | from PyQt5 import QtCore, QtGui, uic
8 | from PyQt5.QtCore import *
9 | from PyQt5.QtGui import *
10 | from image_widget import *
11 | import shutil
12 | import glob
13 |
14 | # ui配置文件
15 | cUi, cBase = uic.loadUiType("main_widget.ui")
16 |
17 | # 主界面
18 | class CMainWidget(QWidget, cUi):
19 | def __init__(self):
20 | # 设置UI
21 | QMainWindow.__init__(self)
22 | cUi.__init__(self)
23 | self.setupUi(self)
24 | self.image_dir = ''
25 | self.label_file = ''
26 | self.label_info = {}
27 | self.image_widgets = []
28 | self.batch_index = 0
29 |
30 | vbox = QVBoxLayout()
31 | for i in range(4):
32 | hbox = QHBoxLayout()
33 | for j in range(4):
34 | self.image_widgets.append(CImageWidget())
35 | hbox.addWidget(self.image_widgets[-1])
36 | vbox.addLayout(hbox)
37 | self.frame.setLayout(vbox)
38 | self.btn_open.clicked.connect(self.slot_btn_open)
39 | self.btn_back.clicked.connect(self.slot_btn_pre)
40 | self.btn_next.clicked.connect(self.slot_btn_next)
41 | self.edit_cls.textChanged.connect(self.slot_edit_change)
42 |
43 | self.btn_back.hide()
44 | self.btn_next.hide()
45 |
46 | def closeEvent(self, event):
47 | self.save_kp_info()
48 | self.write_label_file()
49 | pass
50 |
51 | def read_label_file(self):
52 | if os.path.exists(self.label_file):
53 | with open(self.label_file, 'r') as f:
54 | for line in f:
55 | info = line.strip('\r\n')
56 | if len(info) == 0:
57 | continue
58 | domains = info.split(' ')
59 | name = domains[0]
60 |
61 | kps = []
62 | if len(domains) > 1:
63 | kps_str = domains[1:]
64 | assert (len(kps_str) % 3 == 0)
65 | kp_count = int(len(kps_str) / 3)
66 | for i in range(kp_count):
67 | kp_str = kps_str[i * 3:(i + 1) * 3]
68 | kp = [float(x) for x in kp_str]
69 | kps.append(kp)
70 | self.label_info[name] = kps
71 |
72 | def write_label_file(self):
73 | with open(self.label_file, 'w') as f:
74 | for key in self.label_info.keys():
75 | info = str(key)
76 | if self.label_info[key] is not None:
77 | for kp in self.label_info[key]:
78 | info += ' %.2f %.2f %.2f'%(kp[0],kp[1],kp[2])
79 | f.write(info + '\r')
80 |
81 | def save_kp_info(self):
82 | for image_win in self.image_widgets:
83 | name, kps = image_win.get_info()
84 | if name is not None and len(name) > 0:
85 | self.label_info[name] = kps
86 |
87 | def slot_btn_open(self):
88 | self.image_dir = QFileDialog.getExistingDirectory(self, "选择文件夹", "C:\\Users\\newst\\Desktop\\test_data")
89 | if os.path.exists(self.image_dir):
90 | self.btn_back.show()
91 | self.btn_next.show()
92 | files = os.listdir(self.image_dir)
93 | for img_name in files:
94 | if str(img_name).endswith('txt'):
95 | continue
96 | self.label_info[str(img_name)] = None
97 |
98 | self.label_file = self.image_dir + "/label.txt"
99 | self.read_label_file()
100 | self.slot_btn_next()
101 |
102 | def slot_btn_next(self):
103 | self.save_kp_info()
104 | image_names = self.update_batch_index(next=True, pre=False)
105 | if image_names is not None:
106 | for i in range(16):
107 | if i + 1 <= len(image_names):
108 | img_path = self.image_dir + '/' + image_names[i]
109 | self.image_widgets[i].set_info(img_path, self.label_info[image_names[i]])
110 | else:
111 | self.image_widgets[i].set_info(None, None)
112 |
113 | def slot_btn_pre(self):
114 | self.save_kp_info()
115 | image_names = self.update_batch_index(next=False, pre=True)
116 | if image_names is not None:
117 | for i in range(16):
118 | if i + 1 <= len(image_names):
119 | img_path = self.image_dir + '/' + image_names[i]
120 | self.image_widgets[i].set_info(img_path, self.label_info[image_names[i]])
121 | else:
122 | self.image_widgets[i].set_info(None, None)
123 |
124 | def slot_edit_change(self):
125 | for image_win in self.image_widgets:
126 | image_win.set_current_cls(int(self.edit_cls.text()))
127 |
128 | def update_batch_index(self, next=True, pre=False):
129 | if len(self.label_info.keys()) == 0:
130 | return None
131 | assert (next != pre)
132 | self.total_batch = math.ceil(len(self.label_info.keys()) / 16)
133 | if next:
134 | if self.batch_index == self.total_batch:
135 | return None
136 | if self.batch_index == self.total_batch - 1:
137 | batch_count = len(self.label_info.keys()) % 16
138 | image_names = list(self.label_info.keys())[self.batch_index * 16: self.batch_index * 16 + batch_count]
139 | self.batch_index += 1
140 | if self.batch_index < self.total_batch - 1:
141 | batch_count = 16
142 | image_names = list(self.label_info.keys())[self.batch_index * 16: self.batch_index * 16 + batch_count]
143 | self.batch_index += 1
144 | else:
145 | if self.batch_index == 1:
146 | return None
147 | else:
148 | self.batch_index -= 1
149 | image_names = list(self.label_info.keys())[(self.batch_index-1) * 16: (self.batch_index-1) * 16 + 16]
150 |
151 | self.label_jindu.setText('%d/%d'%(self.batch_index, self.total_batch))
152 | return image_names
153 |
154 |
155 |
156 | if __name__ == "__main__":
157 | cApp = QApplication(sys.argv)
158 | cMainWidget = CMainWidget()
159 | cMainWidget.show()
160 | sys.exit(cApp.exec_())
--------------------------------------------------------------------------------
/LabelTool/main_widget.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 833
10 | 651
11 |
12 |
13 |
14 | Form
15 |
16 |
17 | -
18 |
19 |
-
20 |
21 |
-
22 |
23 |
24 | 打开
25 |
26 |
27 |
28 | -
29 |
30 |
31 | Qt::Horizontal
32 |
33 |
34 |
35 | 40
36 | 20
37 |
38 |
39 |
40 |
41 |
42 |
43 | -
44 |
45 |
-
46 |
47 |
48 | 进度:
49 |
50 |
51 |
52 | -
53 |
54 |
55 | 0/0
56 |
57 |
58 |
59 | -
60 |
61 |
62 | Qt::Horizontal
63 |
64 |
65 |
66 | 40
67 | 20
68 |
69 |
70 |
71 |
72 | -
73 |
74 |
75 | 类别:
76 |
77 |
78 |
79 | -
80 |
81 |
82 | 0
83 |
84 |
85 |
86 | -
87 |
88 |
89 | Qt::Horizontal
90 |
91 |
92 |
93 | 40
94 | 20
95 |
96 |
97 |
98 |
99 | -
100 |
101 |
102 | 前一批
103 |
104 |
105 |
106 | -
107 |
108 |
109 | 下一批
110 |
111 |
112 |
113 |
114 |
115 | -
116 |
117 |
118 | QFrame::StyledPanel
119 |
120 |
121 | QFrame::Raised
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
--------------------------------------------------------------------------------
/LabelTool/requirements.txt:
--------------------------------------------------------------------------------
1 | opencv_python==4.6.0.66
2 | Pillow==9.2.0
3 | PyQt5==5.15.7
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | 微信讨论群,先添加作者微信,让后邀请入群,一起学习姿态估计技术。
4 | 作者微信:cjnewstar111
5 |
6 | # 1.项目开源地址
7 | https://github.com/DL-Practise/OpenSitUp
8 |
9 | # 2.项目简介
10 | 计算机视觉中有一个应用分支叫做姿态估计,通过人体关键点的方式来估计出一个/多个人的姿态信息。如下图所示:
11 | 
12 | OpenSitUp是一个基于姿态估计的开源项目,旨在帮助对姿态估计感兴趣的朋友,能够从零开始搭建一个仰卧起坐计数APP。主要的技术难点为如何让计算量较大的人体姿态估计网络流畅的运行在没有显卡的环境中(例如CPU或者手机),并且实现仰卧起坐的计数功能。掌握了这个项目的原理之后,可以很方便的迁移到类似的运动,健身APP当中。
13 |
14 | # 3.项目成果展示
15 | 如下展示的是这个项目最后的APP效果,在人潮涌动的西湖景区,我当众躺下做仰卧起坐,羞煞老夫也!
16 | 
17 |
18 | # 4.项目目录
19 | 由于需要从零开始开发仰卧起坐计数APP,因此整个项目需要包含多个工程,包括数据采集,标注,训练,部署,app开发等,整体目录结构如下图所示:
20 | 
21 |
22 | ## 4.1 DataSet
23 | 数据集存放目录,这里我预先放置了300多张标注好的图片,用这些图片已经可以训练出“项目成果展示”中展示的效果。但是为了获得更好的性能,您可以采集更多的仰卧起坐图片。
24 |
25 | ## 4.2 LabelTool
26 | 这里为您准备了一个适用于该项目的标注工具,主要是标注人体的一些关键点。当您采集了很多仰卧起坐的图片之后,可以使用该工具进行标注,生成相应的标签。
27 |
28 | ## 4.3 Trainer
29 | 这是一个基于pytorch的关键点训练工具,里面包含针对手机设计的轻量级关键点检测网络。
30 |
31 | ## 4.4 WinAPP
32 | Wondows上的仰卧起坐计数APP(不使用显卡,通用性更强)。
33 |
34 |
35 | # 5.项目流程
36 | ## 5.1 采集图片
37 | 由于没有现成的仰卧起坐数据集,只能自己动手,丰衣足食。好在对于仰卧起坐这样常规的运动,网上还是有很多相关资源的。这里我采用下载视频和图片两种方式。先从网上搜索“仰卧起坐”的视频,下载了10个左右的视频片段,然后通过抽帧的方式,从每个视频中抽取一部分帧作为训练用的数据。如下图所示为从视频中抽取的关键帧。
38 | 
39 | 仅仅使用视频中抽取的帧会有一个比较严重的问题,就是背景过于单一,很容易造成过拟合。于是我从网上进行图片搜索,得到一分部背景较为丰富的图片,如下图所示:
40 | 
41 |
42 | ## 5.2 标注图片
43 | 收集完数据,就是进行标注了,虽然已经有一些现成的开源标注工具,但是我用的不顺手,因此自己开发了一款关键点标注工具,就是上面开源的LabelTool,毕竟自己开发的,用着顺手。注意该工具在win10/python 3.6环境下做过测试,其他环境暂时没有测试。使用命令python main_widget.py打开界面。初始界面非常简洁,通过“打开”按钮来打开收集好的仰卧起坐图片。
44 | 
45 | 在类别中使用0表示标注的是头部,1表示标注的是膝盖,2表示标注的是胯部(由于我们需要在手机上识别仰卧起坐,需要尽可能的减少计算量,姿态估计一般会预测全身很多的关键点,但是对于仰卧起坐,只要能准确的预测头部,膝盖和胯部,就能较好的进行仰卧起坐的动作识别,因此这里只需要标注三个点)。单击鼠标左键进行标注,右键取消上一次标注。不得不说,用python+qt开发一些基于UI的工具非常方便!与C++相比,解放了太多的生产力!
46 | 
47 | 标注完图片之后,会在图片目录下面生成一个标签文件label.txt,里面的内容如下:
48 | 
49 |
50 | ## 5.3 算法原理
51 |
52 | 我先简单的介绍一下仰卧起坐的算法原理。在姿态估计(关键点检测)领域,一般很少采用回归的方式来预测关键点位置,取而代之的是采用heatmap输出关键点的位置。这和anchor free的目标检测中的centness之类的做法差不多,即通过查找heatmap中响应值最大的点来确定关键点的坐标。如下图所示(只显示部分heatmap):
53 | 
54 | 思考了一下原因,直接回归坐标,通常会将最后的featuremap下采样到很小,这样才能够实现全局的回归,但是关键点预测这种任务对位置信息非常敏感,过小的特征会极大的丢失空间信息,因而导致预测位置非常不准。而heatmap方式一般要求最后的特征图比较大,通常是输入图片的1/2或者1/4,那么就非常适合做一些空间相关的任务。其实如果人为的将特征图压缩的很小,heatmap的方式也一样不太准。有了上面的思考,便有了最终的方案,就是将shufflenet最后输出的7*7的特征图进行上采样到3*56*56大小(考虑到最终的应用以及场景,56*56足够实现仰卧起坐动作的识别),3表示的是3个关键点。然后输出的特征经过sigmoid激活之后便得到了3*56*56的heatmaps。这里多提两点,就是heatmap标签的设计和loss的平衡问题。先说说标签的设计,如果只是简单的将标签转化成一个one_hot的heatmap,效果不会太好。因为标签点附件的点实际上对于网络来说提取的特征是类似的,那么如果强行把不是标签附近的点设置为0,表现不会很好,一般会用高斯分布来制作标签heatmap,如下图所示:
55 | 
56 |
57 | 另外要说的就是loss的平衡了,上面的标签heatmap大家也看到了,无论是one-hot的heatmap还是高斯分布的heatmap,大部分的点都是负样本点,直接使用MSE而不加以区分,网络基本上会训练出一个输出全是0的heatmap。主要原因就是训练的梯度被负样本压制,正样本的梯度实在太小。因此需要做一个分区。我这里把正负样本的比重设置为10:1。
58 |
59 |
60 | ## 5.3 Trainer训练工具
61 |
62 | Trainer工具主要包括四个部分:
63 | cfg:配置文件目录
64 | data:数据读取目录
65 | DLEngine:训练引擎
66 | models:网络模型目录
67 | 首先在models下的keypoint目录下,我实现了上述讨论的基于shufflenet的关键点检测网络,ShuffleNetV2HeatMap,然后在data目录下实现了读取LabelTool标注的标签文件的数据集读取工具:person_keypoint_txt.py。最后在配置文件夹cfgs下的key_point目录下实现了针对该项目的配置文件:keypoint_shufflenetv2_heatmap_224_1.0_3kps.py,里面包含的主要字段如下:
68 | 
69 | 
70 | 
71 | 
72 |
73 | 启动训练前,将train.py文件中的CFG_FILE修改成上述配置文件即可:
74 | CFG_FILE='cfgs/key_point/keypoint_shufflenetv2_heatmap_224_1.0_3kps.py'。使用命令 python train.py 启动训练。
75 |
76 |
77 |
78 | ## 5.4 转换模型
79 |
80 | 在Trainer中完成训练之后,会在save目录下面生成相应的模型文件。但是这些pytorch的模型无法直接部署到手机中运行,需要使用相应的推理库。目前开源的推理库有很多,例如mnn,ncnn,tnn等。这里我选择使用ncnn,因为ncnn开源的早,使用的人多,网络支持,硬件支持都还不错,关键是很多问题都能搜索到别人的经验,可以少走很多弯路。但是遗憾的是ncnn并不支持直接将pytorch模型导入,需要先转换成onnx格式,然后再将onnx格式导入到ncnn中。另外注意一点,将pytroch的模型到onnx之后有许多胶水op,这在ncnn中是不支持的,需要使用另外一个开源工具:onnx-simplifier对onnx模型进行剪裁,然后再导入到ncnn中。因此整个过程还有些许繁琐,为此,我在Trainer工程中,编写了export_ncnn.py 脚本,可以一键将训练出来的pytorch模型转换成ncnn模型。转换成功后,会在save目录下的pytorch模型文件夹下生成三个ncnn相关的文件:model.param; model.bin以及 ncnn.cfg。
81 |
82 |
83 | ## 5.5 APP开发
84 |
85 | android的APP开发主要Activity类,两个SurfaceView类,一个Alg类,一个Camera类组成。Alg类主要负责调用算法进行推理,并返回结果。这里实际上是调用的NCNN库的推理功能。Camera类主要负责摄像头的打开和关闭,以及进行预览回调。第一个SurfaceView(DisplayView)主要用于摄像头预览的展示。第二个SurfaceView(CustomView)主要用于绘制一些关键点信息,计数统计信息等。Activity就是最上层的一个管理类,负责管理整个APP,包括创建按钮,创建SurfaceView,创建Alg类,创建Camera类等。
86 | 
87 |
88 | 具体的代码逻辑可以查看SiteUpAndroid源码。
89 |
--------------------------------------------------------------------------------
/Trainer/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Python: 当前文件",
9 | "type": "python",
10 | "request": "launch",
11 | "program": "${file}",
12 | "console": "integratedTerminal"
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/Trainer/DLEngine/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/DLEngine/__init__.py
--------------------------------------------------------------------------------
/Trainer/DLEngine/eval_project.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import torch
4 | import argparse
5 | import shutil
6 | import time
7 | import logging
8 | from .modules.optimizer.optimizer import create_optimizer
9 | from .modules.lr_schedule.lr_schedule import LrSchedule
10 | from .modules.dataloader.dataloader import create_val_dataloader
11 | from .modules.evaluater.evaluater import Evaluater
12 | from .modules.cfg_parse.cfg_parse import parse_cfg_file
13 | import importlib
14 |
15 |
16 | class EvalProject():
17 | def __init__(self, net, cfg_file, val_dataset):
18 | self.cfg_file = cfg_file
19 | self.net = net
20 | cfg_dicts = parse_cfg_file(cfg_file)
21 | self.model_dict = cfg_dicts.model_dict
22 | self.data_dict = cfg_dicts.data_dict
23 | self.eval_dict = cfg_dicts.train_dict['eval']
24 | self.device = cfg_dicts.train_dict['device']
25 | self.val_dataset = val_dataset
26 | self.proj_init()
27 | self.eval_init()
28 |
29 |
30 | def proj_init(self):
31 | # get the device and set device
32 | assert(self.device == 'cuda' or self.device == 'cpu')
33 | if self.device == 'cuda':
34 | torch.cuda.set_device(0)
35 |
36 | def eval_init(self):
37 | # 1. create dataloader
38 | print('eval_init: create dataloader')
39 | self.eval_dataloader = create_val_dataloader(self.val_dataset,
40 | self.data_dict['eval'])
41 |
42 | # 2. distributed the net
43 | print('eval_init: move net to ', self.device)
44 | self.net.to(self.device)
45 |
46 |
47 | # 6. create the trainer
48 | print('eval_init: create evaluater')
49 | self.evaluater= Evaluater(self.net,
50 | self.eval_dataloader,
51 | self.device,
52 | self.eval_dict)
53 |
54 | def eval(self):
55 | self.evaluater.run()
56 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/DLEngine/modules/__init__.py
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/cfg_parse/cfg_parse.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import importlib
4 | import shutil
5 | import time
6 |
7 | def parse_cfg_file(cfg_file_path):
8 | # import cfg_dicts from cfg_file
9 | dir_path = os.path.dirname(os.path.abspath(cfg_file_path))
10 | new_cfg_path = dir_path + '/temp_cfg.py'
11 | shutil.copyfile(cfg_file_path, new_cfg_path)
12 | time.sleep(1)
13 | sys.path.append(dir_path)
14 | cfg_dicts = importlib.import_module('temp_cfg')
15 | #os.remove(new_cfg_path)
16 | return cfg_dicts
17 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/dataloader/__init__.py:
--------------------------------------------------------------------------------
1 | from .common_cls import CommonCls
2 | from .common_det import CommonDet
3 | from .common_keypoint import CommonKeyPoint
4 | from .person_keypoint_txt import PersionKeypointTxt
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/dataloader/common_cls.py:
--------------------------------------------------------------------------------
1 | import os
2 | from torch.utils.data import Dataset
3 | import cv2
4 | import numpy as np
5 | import random
6 | from .transform import *
7 | import copy
8 | import logging
9 | import torch
10 | '''
11 | demo_dict = {
12 | 'data_name': 'CommonCls',
13 | 'num_workers': 6,
14 | 'data_dir': '/data/data_set/cifar10/train/',
15 | 'data_label': '/data/data_set/cifar10/train.txt',
16 | 'batch_size': 256,
17 | 'resize': [224, 224], # w and h
18 | 'crop': [224, 224], # w and h
19 | 'mean': [104,117,123],
20 | 'std': [1,1,1],},
21 | '''
22 | class CommonCls(Dataset):
23 | #read the label files
24 | def __init__(self, phase, arg_dict):
25 | self.phase = phase
26 | self.img_root = arg_dict['data_dir']
27 | self.label_file = arg_dict['data_label']
28 | self.resize = arg_dict['resize']
29 | self.crop = arg_dict['crop']
30 | self.mean = arg_dict['mean']
31 | self.std = arg_dict['std']
32 |
33 | if self.phase == 'train':
34 | self.transforms = [
35 | ResizeImage(self.resize),
36 | RandomCropFix(self.crop),
37 | RandomHorizontalFlip(),
38 | NormalizeImage(self.mean,self.std),]
39 | elif self.phase == 'eval':
40 | self.transforms = [
41 | ResizeImage(self.resize),
42 | CenterCropFix(self.crop),
43 | NormalizeImage(self.mean,self.std),]
44 | else:
45 | logging.error('unsupport phase: %s'%phase)
46 | exit(0)
47 |
48 | self.read_label_file()
49 |
50 | def __len__(self):
51 | return len(self.img_name)
52 |
53 | def __getitem__(self, item):
54 | img_name = self.img_name[item]
55 | label = self.img_label[item]
56 |
57 | img = cv2.imread(img_name, cv2.IMREAD_COLOR)
58 | if img is None:
59 | raise ValueError('cv2 read failed: ', img_name)
60 | img_size = img.shape[0:2]
61 | img = img.astype(np.float32)
62 | for t in self.transforms:
63 | img, _ = t(img, None)
64 |
65 | img = img.transpose(2,0,1)
66 | return img, label
67 |
68 | def read_image(self, image_path):
69 | img = cv2.imread(image_path, cv2.IMREAD_COLOR)
70 | if img is None:
71 | raise ValueError('cv2 read failed: ', image_path)
72 | img_size = img.shape[0:2]
73 | img = img.astype(np.float32)
74 | for t in self.transforms:
75 | img, _ = t(img, None)
76 |
77 | img = img.transpose(2, 0, 1)
78 | return img
79 |
80 | def read_label_file(self):
81 | with open(self.label_file) as input_file:
82 | lines = input_file.readlines()
83 |
84 | self.img_name = [os.path.join(self.img_root, line.strip().split(' ')[0]) for line in lines]
85 | self.img_label = [int(line.strip().split(' ')[-1]) for line in lines]
86 |
87 | #@staticmethod
88 | def collate_fn(self, batch):
89 | imgs, labels = list(zip(*batch))
90 | imgs = torch.from_numpy(np.stack(imgs, 0))
91 | labels = torch.from_numpy(np.stack(labels, 0))
92 | return [imgs, labels]
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/dataloader/common_det.py:
--------------------------------------------------------------------------------
1 | import os
2 | import torch
3 | from torch.utils.data import Dataset
4 | from PIL import Image
5 | import numpy as np
6 | import sys
7 | import cv2
8 | from .transform import *
9 | import logging
10 |
11 | class CommonDet(Dataset):
12 | # read the label files
13 | def __init__(self, phase, arg_dict):
14 | self.phase = phase
15 | self.img_root = arg_dict['data_dir']
16 | self.label_file = arg_dict['data_label']
17 | self.resize = arg_dict['resize']
18 | self.mean = arg_dict['mean']
19 | self.std = arg_dict['std']
20 | if 'epoch_expand' not in arg_dict.keys():
21 | self.epoch_expand = 1
22 | else:
23 | self.epoch_expand = arg_dict['epoch_expand']
24 |
25 | if self.phase == 'train':
26 | self.transforms = [
27 | ResizeImage(self.resize),
28 | RandomHorizontalFlip(),
29 | RandomSwapChannels(),
30 | RandomContrast(),
31 | RandomHSV(),
32 | NormalizeImage(self.mean,self.std),]
33 | elif self.phase == 'test':
34 | self.transforms = [
35 | ResizeImage(self.resize),
36 | NormalizeImage(self.mean,self.std),]
37 | else:
38 | logging.error('unsupport phase: %s' % phase)
39 | exit(0)
40 |
41 | self.read_label_file()
42 |
43 | def __len__(self):
44 | return len(self.img_names)
45 |
46 | def __getitem__(self, item):
47 | try:
48 | img_name = self.img_names[item]
49 | labels = np.array(self.img_labels[item]).astype(np.float32)
50 | if not img_name.endswith('.jpg') and not img_name.endswith('.JPG') :
51 | img_name += '.jpg'
52 | img = cv2.imread(img_name, cv2.IMREAD_COLOR)
53 | img_size = img.shape[0:2]
54 | except:
55 | raise ValueError('cv2 read failed: ', img_name)
56 |
57 | img = img.astype(np.float32)
58 | for t in self.transforms:
59 | img, labels = t(img, labels)
60 |
61 | img = img.transpose(2, 0, 1)
62 | new_labels = {'file':img_name, 'size':img_size, 'labels':[], 'boxes':[], 'format':'xyxy'}
63 |
64 | for label in labels:
65 | box = np.array(label[0:4]).astype(np.float32)
66 | label = int(label[4])
67 | new_labels['boxes'].append(box)
68 | new_labels['labels'].append(label)
69 | return img, new_labels
70 |
71 | # read the label files
72 | def read_label_file(self):
73 | self.img_names = []
74 | self.img_labels = []
75 |
76 | with open(self.label_file) as input_file:
77 | lines = input_file.readlines()
78 | for line in lines:
79 | # read box(ignore box_count domain)
80 | fields = line.strip().split(' ')[1:]
81 | if int(len(fields) / 5) == 0:
82 | fields = []
83 |
84 | if len(fields) % 5 == 1:
85 | fields = fields[1:]
86 | try:
87 | fields = [int(float(i)) for i in fields]
88 | except:
89 | print(fields)
90 |
91 | sample_labels = []
92 | for i in range(0, len(fields), 5):
93 | sample_labels.append(fields[i:i + 5])
94 |
95 | self.img_names.append(self.img_root + line.strip().split(' ')[0])
96 | self.img_labels.append(sample_labels)
97 |
98 | #expand the list
99 | if self.epoch_expand > 1:
100 | logging.info('expand the dateset to %d large'%self.epoch_expand)
101 | for i in range(self.epoch_expand - 1):
102 | self.img_names.extend(self.img_names)
103 | self.img_labels.extend(self.img_labels)
104 |
105 | def read_infer_image(self, img_path):
106 | img = cv2.imread(img_path, cv2.IMREAD_COLOR)
107 | labels = None
108 | for t in self.transforms_infer:
109 | img, labels = t(img, labels)
110 |
111 | img = img.transpose(2, 0, 1)
112 | img_t = torch.from_numpy(img).unsqueeze(0)
113 | return img_t
114 |
115 | #@staticmethod
116 | def collate_fn(self, batch):
117 | imgs, labels = list(zip(*batch))
118 | imgs = torch.from_numpy(np.stack(imgs, 0))
119 | return [imgs, labels]
120 |
121 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/dataloader/common_keypoint.py:
--------------------------------------------------------------------------------
1 | import os
2 | from torch.utils.data import Dataset
3 | import cv2
4 | import numpy as np
5 | import random
6 | from .transform import *
7 | #from transform import *
8 | import copy
9 | import logging
10 | import torch
11 | import csv
12 | import copy
13 |
14 |
15 | class CommonKeyPoint(Dataset):
16 | #read the label files
17 | def __init__(self, phase, arg_dict):
18 | self.phase = phase
19 | self.img_root = arg_dict['data_dir']
20 | self.label_file = arg_dict['data_label']
21 | self.resize = arg_dict['resize']
22 | self.mean = arg_dict['mean']
23 | self.std = arg_dict['std']
24 |
25 | if self.phase == 'train':
26 | self.transforms = [
27 | ResizeImage(self.resize),
28 | NormalizeImage(self.mean,self.std),]
29 | elif self.phase == 'eval':
30 | self.transforms = [
31 | ResizeImage(self.resize),
32 | NormalizeImage(self.mean,self.std),]
33 | else:
34 | logging.error('unsupport phase: %s'%phase)
35 | exit(0)
36 |
37 | self.read_label_file()
38 |
39 | def __len__(self):
40 | return len(self.img_name)
41 |
42 | def __getitem__(self, item):
43 | img_name = self.img_name[item]
44 | label_ori = self.img_label[item]
45 | label = copy.deepcopy(label_ori)
46 | img_ori = cv2.imread(self.img_root + '/' + img_name, cv2.IMREAD_COLOR)
47 | if img_ori is None:
48 | raise ValueError('cv2 read failed: ', img_name)
49 | ori_h, ori_w = img_ori.shape[0:2]
50 | img = img_ori.astype(np.float32)
51 | for t in self.transforms:
52 | img, _ = t(img, None)
53 | img = img.transpose(2,0,1)
54 |
55 | label[:, :, 0] = label[:, :, 0] / ori_w
56 | label[:, :, 1] = label[:, :, 1] / ori_h
57 | label = np.clip(label, label.min(), 1.0)
58 |
59 | heatmap = np.zeros((13, 56, 56)).astype(np.float32)
60 | radio = 5
61 | sigma = 1
62 | for c in range(13):
63 | heatmap_c = heatmap[c]
64 | for l in range(label.shape[0]):
65 | labels_c = label[l][c]
66 | labels_e = labels_c[2]
67 | if labels_e > 0:
68 | labels_x = math.floor(labels_c[0] * (55))
69 | labels_y = math.floor(labels_c[1] * (55))
70 | for i in range(labels_y-radio, labels_y+radio):
71 | for j in range(labels_x-radio, labels_x+radio):
72 | if i < 0 or i > 55 or j < 0 or j > 55:
73 | continue
74 | heatmap_c[i][j] = np.exp(-0.5 * ((i - labels_y)**2 + (j - labels_x)**2) / sigma**2 )
75 |
76 |
77 | ##################################
78 | #import matplotlib
79 | #matplotlib.use('Agg')
80 | #import matplotlib.pyplot as plt
81 | #img_resize = cv2.resize(img_ori, (224, 224))[:,:,[2,1,0]]
82 | #for i in range(13):
83 | # plt.clf()
84 | # plt.imshow(img_resize)
85 | # heatmap_resize = cv2.resize(heatmap[i], (224, 224))
86 | # plt.imshow(heatmap_resize, alpha=0.5)
87 | # plt.savefig('./train_kp_%d.jpg'%i)
88 | ##################################
89 |
90 | return img, heatmap
91 |
92 | def read_image(self, img_path):
93 | img_ori = cv2.imread(img_path)
94 | if img_ori is None:
95 | raise ValueError('cv2 read failed: ', img_name)
96 | ori_w, ori_h = img_ori.shape[0:2]
97 | img = img_ori.astype(np.float32)
98 | for t in self.transforms:
99 | img, _ = t(img, None)
100 | img = img.transpose(2,0,1)
101 | return img, img_ori, ori_w, ori_h
102 |
103 | def read_label_file(self):
104 |
105 | def get_one_line(line_info):
106 | img_name, personNumber, bndbox, nose, left_eye, right_eye, left_ear, right_ear, \
107 | left_shoulder, right_shoulder, left_elbow, right_elbow, left_wrist, right_wrist, \
108 | left_hip, right_hip, left_knee, right_knee, left_ankle, right_ankle = line_info
109 |
110 | nose = np.array([float(i) for i in nose.split('_')])
111 | left_shoulder = np.array([float(i) for i in left_shoulder.split('_')])
112 | right_shoulder = np.array([float(i) for i in right_shoulder.split('_')])
113 | left_hip = np.array([float(i) for i in left_hip.split('_')])
114 | right_hip = np.array([float(i) for i in right_hip.split('_')])
115 | left_elbow = np.array([float(i) for i in left_elbow.split('_')])
116 | right_elbow = np.array([float(i) for i in right_elbow.split('_')])
117 | left_wrist = np.array([float(i) for i in left_wrist.split('_')])
118 | right_wrist = np.array([float(i) for i in right_wrist.split('_')])
119 | left_knee = np.array([float(i) for i in left_knee.split('_')])
120 | right_knee = np.array([float(i) for i in right_knee.split('_')])
121 | left_ankle = np.array([float(i) for i in left_ankle.split('_')])
122 | right_ankle = np.array([float(i) for i in right_ankle.split('_')])
123 |
124 | pose_list = np.stack([nose, left_shoulder, right_shoulder, left_hip, right_hip, left_elbow, right_elbow, \
125 | left_wrist, right_wrist, left_knee, right_knee, left_ankle, right_ankle], axis=0)
126 |
127 | return img_name, int(personNumber), pose_list
128 |
129 | self.img_label = []
130 | self.img_name = []
131 | with open(self.label_file, 'r') as f:
132 | reader = csv.reader(f)
133 | total_lines = []
134 | for line in reader:
135 | total_lines.append(line)
136 |
137 | i = 1 # the 0 line is no use
138 | while i < len(total_lines):
139 | labels = []
140 | img_name, personNumber, pose_list = get_one_line(total_lines[i])
141 | labels.append(pose_list)
142 |
143 | self.img_name.append(img_name.split('\'')[1])
144 |
145 | if personNumber > 1:
146 | for num in range(1, personNumber):
147 | img_name, personNumber, pose_list = get_one_line(total_lines[i+num])
148 | labels.append(pose_list)
149 | i += personNumber
150 | self.img_label.append(np.stack(labels, axis=0))
151 |
152 | #@staticmethod
153 | def collate_fn(self, batch):
154 | imgs, labels = list(zip(*batch))
155 | imgs = torch.from_numpy(np.stack(imgs, 0))
156 | labels = torch.from_numpy(np.stack(labels, 0))
157 | return [imgs, labels]
158 |
159 | if __name__ == '__main__':
160 |
161 | demo_dict = {
162 | 'data_name': 'CommonKeyPoint',
163 | 'num_workers': 6,
164 | 'data_dir': '/data/data_set/COCO/train2017/',
165 | 'data_label': '/data/zhengxing/my_dl/tools/get_coco_keypoints/coco_one_person_keypoints.csv',
166 | 'batch_size': 16,
167 | 'resize': [224, 224], # w and h
168 | 'mean': [104,117,123],
169 | 'std': [1,1,1]}
170 |
171 | dataset = CommonKeyPoint('train', demo_dict)
172 | dataset.test_getitem(0)
173 |
174 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/dataloader/dataloader.py:
--------------------------------------------------------------------------------
1 | import torch
2 |
3 |
4 | def create_train_dataloader(dataset, arg_dict, rank, world_size):
5 | sampler = torch.utils.data.distributed.DistributedSampler(dataset,
6 | num_replicas=world_size,
7 | rank=rank)
8 | dataloader_ = torch.utils.data.DataLoader(dataset,
9 | batch_size = arg_dict['batch_size'],
10 | num_workers = arg_dict['num_workers'],
11 | collate_fn = dataset.collate_fn,
12 | sampler=sampler)
13 | return dataloader_, sampler
14 |
15 |
16 | def create_val_dataloader(dataset, arg_dict):
17 | sampler = None
18 | dataloader_ = torch.utils.data.DataLoader(dataset,
19 | batch_size=arg_dict['batch_size'],
20 | num_workers=arg_dict['num_workers'])
21 | return dataloader_
22 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/dataloader/voc_det.py:
--------------------------------------------------------------------------------
1 | """VOC Dataset Classes
2 |
3 | Original author: Francisco Massa
4 | https://github.com/fmassa/vision/blob/voc_dataset/torchvision/datasets/voc.py
5 |
6 | Updated by: Ellis Brown, Max deGroot
7 | """
8 | import os.path as osp
9 | import sys
10 | import torch
11 | import torch.utils.data as data
12 | import cv2
13 | import numpy as np
14 | if sys.version_info[0] == 2:
15 | import xml.etree.cElementTree as ET
16 | else:
17 | import xml.etree.ElementTree as ET
18 |
19 | VOC_CLASSES = (
20 | 'aeroplane', 'bicycle', 'bird', 'boat',
21 | 'bottle', 'bus', 'car', 'cat', 'chair',
22 | 'cow', 'diningtable', 'dog', 'horse',
23 | 'motorbike', 'person', 'pottedplant',
24 | 'sheep', 'sofa', 'train', 'tvmonitor')
25 |
26 |
27 | class VOCAnnotationTransform(object):
28 | """Transforms a VOC annotation into a Tensor of bbox coords and label index
29 | Initilized with a dictionary lookup of classnames to indexes
30 |
31 | Arguments:
32 | class_to_ind (dict, optional): dictionary lookup of classnames -> indexes
33 | (default: alphabetic indexing of VOC's 20 classes)
34 | keep_difficult (bool, optional): keep difficult instances or not
35 | (default: False)
36 | height (int): height
37 | width (int): width
38 | """
39 |
40 | def __init__(self, class_to_ind=None, keep_difficult=False):
41 | self.class_to_ind = class_to_ind or dict(
42 | zip(VOC_CLASSES, range(len(VOC_CLASSES))))
43 | self.keep_difficult = keep_difficult
44 |
45 | def __call__(self, target, width, height):
46 | """
47 | Arguments:
48 | target (annotation) : the target annotation to be made usable
49 | will be an ET.Element
50 | Returns:
51 | a list containing lists of bounding boxes [bbox coords, class name]
52 | """
53 | res = []
54 | for obj in target.iter('object'):
55 | difficult = int(obj.find('difficult').text) == 1
56 | if not self.keep_difficult and difficult:
57 | continue
58 | name = obj.find('name').text.lower().strip()
59 | bbox = obj.find('bndbox')
60 |
61 | pts = ['xmin', 'ymin', 'xmax', 'ymax']
62 | bndbox = []
63 | for i, pt in enumerate(pts):
64 | cur_pt = int(bbox.find(pt).text) - 1
65 | # scale height or width
66 | cur_pt = cur_pt / width if i % 2 == 0 else cur_pt / height
67 | bndbox.append(cur_pt)
68 | label_idx = self.class_to_ind[name]
69 | bndbox.append(label_idx)
70 | res += [bndbox] # [xmin, ymin, xmax, ymax, label_ind]
71 | # img_id = target.find('filename').text[:-4]
72 |
73 | return res # [[xmin, ymin, xmax, ymax, label_ind], ... ]
74 |
75 |
76 | class VOCDataset(data.Dataset):
77 | """VOC Detection Dataset Object
78 |
79 | input is image, target is annotation
80 |
81 | Arguments:
82 | root (string): filepath to VOCdevkit folder.
83 | image_set (string): imageset to use (eg. 'train', 'val', 'test')
84 | transform (callable, optional): transformation to perform on the
85 | input image
86 | target_transform (callable, optional): transformation to perform on the
87 | target `annotation`
88 | (eg: take in caption string, return tensor of word indices)
89 | dataset_name (string, optional): which dataset to load
90 | (default: 'VOC2007')
91 | """
92 |
93 | def __init__(self, root,
94 | image_sets=[('2020', 'train')],# ('2012', 'trainval')],
95 | transform=None, target_transform=VOCAnnotationTransform(),
96 | dataset_name='VOC2020'):
97 | self.root = root
98 | self.image_set = image_sets
99 | self.transform = transform
100 | self.target_transform = target_transform
101 | self.name = dataset_name
102 | self._annopath = osp.join('%s', 'Annotations', '%s.xml')
103 | self._imgpath = osp.join('%s', 'JPEGImages', '%s.jpg')
104 | self.ids = list()
105 | for (year, name) in image_sets:
106 | rootpath = osp.join(self.root, 'VOC' + year)
107 | for line in open(osp.join(rootpath, 'ImageSets', 'Main', name + '.txt')):
108 | self.ids.append((rootpath, line.strip()))
109 |
110 | def __getitem__(self, index):
111 | im, gt, h, w = self.pull_item(index)
112 |
113 | return im, gt
114 |
115 | def __len__(self):
116 | return len(self.ids)
117 |
118 | def reset_transform(self, transform):
119 | self.transform = transform
120 |
121 | def pull_item(self, index):
122 | img_id = self.ids[index]
123 |
124 | target = ET.parse(self._annopath % img_id).getroot()
125 | img = cv2.imread(self._imgpath % img_id)
126 | height, width, channels = img.shape
127 |
128 | if self.target_transform is not None:
129 | target = self.target_transform(target, width, height)
130 |
131 | if self.transform is not None:
132 |
133 | target = np.array(target)
134 | img, boxes, labels = self.transform(img, target[:, :4], target[:, 4])
135 | # to rgb
136 | img = img[:, :, (2, 1, 0)]
137 | # img = img.transpose(2, 0, 1)
138 | target = np.hstack((boxes, np.expand_dims(labels, axis=1)))
139 | return torch.from_numpy(img).permute(2, 0, 1), target, height, width
140 | # return torch.from_numpy(img), target, height, width
141 |
142 | def pull_image(self, index):
143 | '''Returns the original image object at index in PIL form
144 |
145 | Note: not using self.__getitem__(), as any transformations passed in
146 | could mess up this functionality.
147 |
148 | Argument:
149 | index (int): index of img to show
150 | Return:
151 | PIL img
152 | '''
153 | img_id = self.ids[index]
154 | return cv2.imread(self._imgpath % img_id, cv2.IMREAD_COLOR)
155 |
156 | def pull_anno(self, index):
157 | '''Returns the original annotation of image at index
158 |
159 | Note: not using self.__getitem__(), as any transformations passed in
160 | could mess up this functionality.
161 |
162 | Argument:
163 | index (int): index of img to get annotation of
164 | Return:
165 | list: [img_id, [(label, bbox coords),...]]
166 | eg: ('001718', [('dog', (96, 13, 438, 332))])
167 | '''
168 | img_id = self.ids[index]
169 | anno = ET.parse(self._annopath % img_id).getroot()
170 | gt = self.target_transform(anno, 1, 1)
171 | return img_id[1], gt
172 |
173 | def pull_tensor(self, index):
174 | '''Returns the original image at an index in tensor form
175 |
176 | Note: not using self.__getitem__(), as any transformations passed in
177 | could mess up this functionality.
178 |
179 | Argument:
180 | index (int): index of img to show
181 | Return:
182 | tensorized version of img, squeezed
183 | '''
184 | return torch.Tensor(self.pull_image(index)).unsqueeze_(0)
185 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/evaluater/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/DLEngine/modules/evaluater/__init__.py
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/evaluater/evaluater.py:
--------------------------------------------------------------------------------
1 | import torch
2 | torch.backends.cudnn.enabled = True
3 | torch.backends.cudnn.benchmark = True
4 | import torch.distributed as dist
5 | import time
6 | import os
7 | import logging
8 | import shutil
9 | from DLEngine.modules.metric.map import calculate_map
10 | from DLEngine.modules.metric.top1 import calculate_top1
11 | from DLEngine.modules.metric.oks import calculate_oks
12 |
13 |
14 | class Evaluater():
15 | def __init__(self, net, dataloders, device, eval_dict):
16 | self.net = net
17 | self.eval_loader = dataloders
18 | self.device = device
19 | self.eval_dict = eval_dict
20 |
21 | def run(self):
22 | self.net.eval()
23 | result_info = {'preds': [], 'labels': []}
24 | for i, (images, labels) in enumerate(self.eval_loader):
25 | print("evaluate: %d/%d"%(i+1, len(self.eval_loader)))
26 | images = images.to(self.device)
27 | labels = labels.to(self.device)
28 | preds = self.net.eval_step(images)
29 | result_info['preds'].append(preds.detach())
30 | result_info['labels'].append(labels)
31 | if self.eval_dict['eval_type'] == 'top1':
32 | top1 = calculate_top1(result_info)
33 | print("reslut: top1=%.4f" % (top1))
34 | elif self.eval_dict['eval_type'] == 'oks':
35 | oks = calculate_oks(result_info)
36 | print("reslut: osk=%.4f" % (oks))
37 | else:
38 | print("unknown eval type: %s" % (self.eval_dict['eval_type']))
39 |
40 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/lr_schedule/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/DLEngine/modules/lr_schedule/__init__.py
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/lr_schedule/lr_schedule.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import torch
3 | import math
4 | import logging
5 | import numpy as np
6 |
7 | class LrSchedule:
8 | def __init__(self, optimizer, opt_dict):
9 | self.opt_dict = opt_dict
10 | self.lr_policy = opt_dict['lr_policy']
11 | self.warmup_iter = opt_dict['warmup_iter']
12 | self.opt = optimizer
13 | self.get_base_lr()
14 | self.lr_multy = 0.0
15 |
16 |
17 | def get_base_lr(self):
18 | self.base_lr_list = []
19 | for param_group in self.opt.param_groups:
20 | self.base_lr_list.append(param_group['lr'])
21 |
22 | def update_lr(self, cur_iter, max_iter):
23 | # warmup lr
24 | warmup_iter = int(self.warmup_iter * max_iter)
25 | if warmup_iter < 1:
26 | warmup_iter = 1
27 | if cur_iter <= warmup_iter:
28 | #new_lr = self.base_lr * cur_iter / warmup_iter
29 | new_lr_multy = cur_iter / warmup_iter
30 | else:
31 | if self.lr_policy == "step":
32 | lr_rate = float(self.opt_dict['lr_rate'])
33 | steps = self.opt_dict['lr_steps']
34 | steps = [int(s * max_iter) for s in steps]
35 | for i, step in enumerate(steps):
36 | if cur_iter == step:
37 | #new_lr = self.base_lr * lr_rate ** (i + 1)
38 | new_lr_multy = lr_rate ** (i + 1)
39 |
40 | elif self.lr_policy == "cos":
41 | #new_lr = 0.5 * self.base_lr * (1.0 + math.cos(cur_iter * 3.1415926 / max_iter))
42 | new_lr_multy = 0.5 * (1.0 + math.cos(cur_iter * 3.1415926 / max_iter))
43 | else:
44 | logging.error("unsupport lr policy: %s"%self.lr_policy)
45 | exit(0)
46 |
47 | if 'new_lr_multy' in locals().keys():
48 | self.lr_multy = new_lr_multy
49 | for i, param_group in enumerate(self.opt.param_groups):
50 | param_group['lr'] = self.base_lr_list[i] * new_lr_multy
51 |
52 | return np.unique(np.array(self.base_lr_list) * self.lr_multy)
53 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/metric/map.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 |
4 | def calculate_map(result_info):
5 | pass
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/metric/oks.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import torch
4 | import math
5 |
6 | def calculate_oks(result_info):
7 | pass
8 | '''
9 | preds = result_info['preds']
10 | labels = result_info['labels']
11 | assert(len(preds) == len(labels))
12 |
13 |
14 | pred_kp_list = preds
15 | gt_kt_list = labels
16 |
17 | total_len = 0.0
18 | last_gt_point = None
19 | for gt_point in gt_kt_list:
20 | if last_gt_point is not None:
21 | total_len += math.sqrt((last_gt_point[0] - gt_point[0])**2 + (last_gt_point[1] - gt_point[1])**2)
22 | last_gt_point = gt_point
23 |
24 | norm_dis_list = []
25 | for pred_kp, gt_kp in zip(pred_kp_list, gt_kt_list)
26 | dis = math.sqrt((pred_kp[0] - gt_kp[0])**2 + (pred_kp[1] - gt_kp[1])**2)
27 | norm_dis = dis / total_len
28 | norm_dis_list.append(norm_dis)
29 |
30 | oks_list = []
31 | for norm_dis in norm_dis_list:
32 | oks_list.append(math.exp( -norm_dis / 2*0.5**2 ))
33 | oks = np.array(oks_list).mean()
34 |
35 | return oks
36 | '''
37 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/metric/top1.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import torch
4 |
5 | def calculate_top1(result_info):
6 | preds = result_info['preds']
7 | labels = result_info['labels']
8 | assert(len(preds) == len(labels))
9 | correct = 0
10 | total = 0
11 | for i in range(len(preds)):
12 | pred = preds[i]
13 | label = labels[i]
14 | pred_class = pred.argmax(dim=1)
15 |
16 |
17 |
18 | correct += torch.eq(pred_class, label).sum().float().item()
19 | total += pred.shape[0]
20 | top1 = correct / total
21 | return top1
22 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/optimizer/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/DLEngine/modules/optimizer/__init__.py
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/optimizer/optimizer.py:
--------------------------------------------------------------------------------
1 | import sys
2 | sys.path.append('./')
3 | sys.path.append('../')
4 | import torch
5 | import logging
6 | import numpy as np
7 | import math
8 |
9 |
10 | def check_only_train(op_name, only_train_list):
11 | if len(only_train_list) == 0:
12 | return True
13 | else:
14 | for only_train_name in only_train_list:
15 | if only_train_name in op_name:
16 | return True
17 | return False
18 |
19 | def check_lr_multy(op_name, lr_multy_map):
20 | for name in lr_multy_map.keys():
21 | if name in op_name:
22 | lr_multy = lr_multy_map[name]
23 | return lr_multy
24 | else:
25 | return 1.0
26 |
27 |
28 | def create_optimizer(module, opt_dict):
29 | opt_type = opt_dict['opt_type']
30 | base_lr = opt_dict['base_lr']
31 | weight_decay = opt_dict['weight_decay']
32 | if 'only_train' not in opt_dict.keys():
33 | only_train = []
34 | else:
35 | only_train = opt_dict['only_train']
36 | if 'lr_multy' not in opt_dict.keys():
37 | lr_multy_map = {}
38 | else:
39 | lr_multy_map = opt_dict['lr_multy']
40 |
41 | params = []
42 | for name, parameter in module.named_parameters():
43 | if parameter.requires_grad and check_only_train(name, only_train):
44 | lr_multy = check_lr_multy(name, lr_multy_map)
45 | logging.info("op: %s need train with lr_multy: %.2f" % (name,lr_multy))
46 | if 'bias' in name:
47 | #params += [{'params': [parameter], 'lr': 2*base_lr*lr_multy, 'weight_decay': 0}]
48 | params += [{'params': [parameter], 'lr': base_lr * lr_multy, 'weight_decay': 0}]
49 | else:
50 | params += [{'params': [parameter], 'lr': base_lr*lr_multy, 'weight_decay': weight_decay}]
51 | else:
52 | logging.info("op: %s do not need train" % name)
53 | parameter.requires_grad = False
54 |
55 | if opt_type == "sgd":
56 | logging.info("use optimize : momentum sgd")
57 | momentum = opt_dict['momentum']
58 | optimizer = torch.optim.SGD(params, momentum=momentum)
59 |
60 | elif opt_type == "nag":
61 | logging.info("use optimize : momentum sgd with nag")
62 | momentum = opt_dict['momentum']
63 | optimizer = torch.optim.SGD(params, momentum=momentum, nesterov=True)
64 |
65 | elif opt_type == "adagrad":
66 | logging.info("use optimize : moment adagrad")
67 | optimizer = torch.optim.Adagrad(params)
68 |
69 | elif opt_type == "adam":
70 | logging.info("use optimize : adam")
71 | momentum = opt_dict['momentum']
72 | momentum2 = opt_dict['momentum2']
73 | optimizer = torch.optim.Adam(params, betas=(momentum, momentum2),eps=1e-08)
74 | else:
75 | logging.error("unsupport opt type: %s"%opt_type)
76 | exit(0)
77 |
78 | return optimizer
79 |
80 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/trainer/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/DLEngine/modules/trainer/__init__.py
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/trainer/trainer.py:
--------------------------------------------------------------------------------
1 | import torch
2 | torch.backends.cudnn.enabled = True
3 | torch.backends.cudnn.benchmark = True
4 | import torch.distributed as dist
5 | import time
6 | import os
7 | import logging
8 | import shutil
9 | from DLEngine.modules.visualize.visual_util import *
10 | from DLEngine.modules.metric.map import calculate_map
11 | from DLEngine.modules.metric.top1 import calculate_top1
12 |
13 |
14 |
15 | class Trainer():
16 | def __init__(self, proj_dir, opt, lr_schedule, net, dataloders, train_dict, device, local_rank, world_size):
17 | self.pro_dir = proj_dir
18 | self.opt = opt
19 | self.lr_schedule = lr_schedule
20 | self.net = net
21 | self.train_loader = dataloders[0]
22 | self.train_sample = dataloders[1]
23 | self.eval_loader = dataloders[2]
24 | self.train_dict = train_dict
25 | self.device = device
26 | self.local_rank = local_rank
27 | self.world_size = world_size
28 |
29 |
30 | def run(self):
31 | max_epoch = self.train_dict['max_epoch']
32 | display_iter = self.train_dict['train_display']
33 | save_epoch = self.train_dict['train_save']
34 | eval_enable = self.train_dict['eval']['eval_enable']
35 | eval_start = self.train_dict['eval']['start_eval']
36 | eval_epoch = self.train_dict['eval']['eval_epoch']
37 | eval_type = self.train_dict['eval']['eval_type']
38 | train_batch = self.train_loader.batch_size
39 | self.save_dir = self.train_dict['save_dir']
40 | enable_visual = self.train_dict['enable_visual']
41 | if enable_visual and self.local_rank == 0:
42 | visual_init(self.pro_dir)
43 |
44 | self.net.train()
45 | iters_per_epoch = len(self.train_loader)
46 | max_iters = max_epoch * iters_per_epoch
47 | old_time = time.time()
48 | for epoch in range(1, max_epoch + 1):
49 | self.train_sample.set_epoch(epoch)
50 | os.environ['epoch'] = str(epoch)
51 | os.environ['epoch_changed'] = 'true'
52 | for i, (images, labels) in enumerate(self.train_loader):
53 | os.environ['iter'] = str(i)
54 | # update lr
55 | iter = (epoch - 1) * iters_per_epoch + i
56 | lr_list = self.lr_schedule.update_lr(iter, max_iters)
57 | # train for one batch
58 | images = images.to(self.device)
59 | labels = labels.to(self.device)
60 | self.opt.zero_grad()
61 | if self.world_size > 1:
62 | loss = self.net.module.train_step(images, labels, self.local_rank)
63 | else:
64 | loss = self.net.train_step(images, labels)
65 |
66 | if isinstance(loss, dict):
67 | loss['total'].backward()
68 | else:
69 | loss.backward()
70 | self.opt.step()
71 |
72 | # display interval
73 | if iter % display_iter == 0:
74 | new_time = time.time()
75 | speed = self.world_size * train_batch * display_iter / (new_time - old_time)
76 | old_time = new_time
77 | if self.local_rank == 0:
78 | if isinstance(loss, dict):
79 | loss_info = ""
80 | for loss_name in loss.keys():
81 | loss_info += " %s:%.5f"%(loss_name, loss[loss_name].item())
82 | visual_add_scale('loss_%s'%loss_name, loss[loss_name].item(), iter)
83 | else:
84 | loss_info = " %.5f"%loss.item()
85 | visual_add_scale('loss_total', loss.item(), iter)
86 |
87 | for lr_seq, lr_info in enumerate(lr_list):
88 | visual_add_scale('lr_%s'%lr_seq, lr_list[lr_seq], iter)
89 |
90 | logging.info('rank %d: epoch[%d/%d] iter[%d/%d/%d] lr %s loss[%s] speed %.2f'
91 | % (self.local_rank, epoch, max_epoch, i, iters_per_epoch, iter, lr_list, loss_info, speed))
92 |
93 | # save the module(only rank 0)
94 | if epoch % save_epoch == 0 and self.local_rank == 0:
95 | torch.save(self.net.state_dict(), '%s/model_%d.pkl' % (self.save_dir, epoch))
96 | logging.info('the epoch is %d, save the snapshot' % epoch)
97 |
98 | # test the module(if only rank 0 test, it will block)
99 | # if only rank 0 test, the process will be block!
100 | if eval_enable and epoch % eval_epoch == 0 and epoch >= eval_start:
101 | self.net.eval()
102 | result_info = {'preds': [], 'labels': []}
103 | for i, (images, labels) in enumerate(self.eval_loader):
104 | if self.local_rank == 0:
105 | logging.info('eval batch: %d/%d' % (i + 1, len(self.eval_loader)))
106 | images = images.to(self.device)
107 | if self.world_size > 1:
108 | preds = self.net.module.eval_step(images)
109 | else:
110 | preds = self.net.eval_step(images)
111 | result_info['preds'].append(preds.detach().cpu())
112 | result_info['labels'].append(labels)
113 | self.net.train()
114 | if eval_type == 'top1':
115 | accu = calculate_top1(result_info)
116 | elif eval_type == 'map':
117 | accu = calculate_map(result_info)
118 | else:
119 | logging.error('unsupport eval metric:%s' % eval_type)
120 | exit(0)
121 |
122 | if self.local_rank == 0:
123 | logging.info('epoch[ %d/%d ] accu(%s) %.5f'%(epoch, max_epoch, eval_type, accu))
124 |
125 |
--------------------------------------------------------------------------------
/Trainer/DLEngine/modules/visualize/visual_util.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import time
3 | import math
4 | from torchvision.utils import make_grid
5 | from torch.utils.tensorboard import SummaryWriter
6 | import os
7 | import cv2
8 | import matplotlib
9 | matplotlib.use('Agg')
10 | import matplotlib.pyplot as plt
11 |
12 | vis_enable = False
13 | vis_writer = None
14 | vis_count = {'image_with_box': 0}
15 |
16 | def visual_init(proj_dir):
17 | global vis_writer
18 | global vis_enable
19 | vis_writer = SummaryWriter(log_dir=proj_dir + '/tensorboard')
20 | vis_enable = True
21 |
22 | def visual_enable():
23 | global vis_enable
24 | return vis_enable
25 |
26 | def visual_add_scale(name, value, iter):
27 | if not visual_enable():
28 | return
29 |
30 | global vis_writer
31 | vis_writer.add_scalar(name, value, iter)
32 |
33 | def visual_add_image_with_box(image, boxes, iter, max_cout=1):
34 | if not visual_enable():
35 | return
36 |
37 | global vis_writer
38 | global vis_count
39 | if vis_count['image_with_box'] >= max_cout:
40 | return
41 | image_np = image.detach().cpu().numpy().transpose(1, 2, 0)
42 | image_np = (image_np - image_np.min()) / (image_np.max() - image_np.min())
43 | fig = plt.figure('image', figsize=(4, 4))
44 | plt.clf()
45 | plt.imshow(image_np)
46 | for box in boxes:
47 | x1 = box[0].item()
48 | y1 = box[1].item()
49 | x2 = box[2].item()
50 | y2 = box[3].item()
51 | plt.plot([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], color='red')
52 | vis_writer.add_figure(tag='image', figure=fig, global_step=iter)
53 | vis_count['image_with_box'] += 1
54 |
55 | def visual_add_yolov3_targets(coord_mask, conf_pos_mask, conf_neg_mask, cls_mask, tcoord, tconf, tcls):
56 | if not visual_enable():
57 | return
58 | print(coord_mask, conf_pos_mask, conf_neg_mask, cls_mask, tcoord, tconf, tcls)
59 |
60 | def visual_add_image_with_heatmap(images, preds, labels, mean, std, epoch):
61 | if not visual_enable():
62 | return
63 | fig = plt.figure(figsize=(10, 10), dpi=100)
64 | plt.clf()
65 |
66 | label0 = labels[0].cpu().detach().numpy()
67 | pred0 = preds[0].cpu().detach().numpy()
68 | image0 = images[0].cpu().detach().numpy().transpose(1,2,0)
69 | image0 = image0 * std
70 | image0 = image0 + mean
71 | image0 = image0.astype(np.uint8)
72 | h, w = image0.shape[0:2]
73 |
74 | kp_num = label0.shape[0]
75 | for kp_c in range(kp_num):
76 | plt.subplot(2, kp_num, kp_c + 1)
77 | plt.imshow(image0)
78 | plt.imshow(cv2.resize(pred0[kp_c], (w, h)), alpha=0.5)
79 |
80 | for kp_c in range(kp_num):
81 | plt.subplot(2, kp_num, kp_num + kp_c + 1)
82 | plt.imshow(image0)
83 | plt.imshow(cv2.resize(label0[kp_c], (w, h)), alpha=0.5)
84 | #plt.savefig('./train_epoch%d.jpg'%epoch)
85 | vis_writer.add_figure(tag='train', figure=fig, global_step=epoch)
86 |
87 | def draw_det_img(img_paths, preds, labels, title='', save_path=None):
88 | if not visual_enable():
89 | return
90 | img_count = len(img_paths)
91 | assert(img_count) <= 16
92 | side = int(math.sqrt(img_count))
93 | plt.figure(figsize=(side*5, side*5))
94 | plt.suptitle(title)
95 | for i in range(side):
96 | for j in range(side):
97 | index = i*side + j
98 | img = cv2.imread(img_paths[index])
99 | plt.subplot(side, side, index + 1)
100 | plt.title(os.path.basename(img_paths[index]))
101 | plt.imshow(img)
102 |
103 | for cls in preds.keys():
104 | for box in preds[cls]:
105 | img_id = int(box[1])
106 | if img_id != index:
107 | continue
108 | prob = float(box[0])
109 | x1 = int(box[2])
110 | y1 = int(box[3])
111 | x2 = int(box[4])
112 | y2 = int(box[5])
113 | plt.plot([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], color='red')
114 | plt.text(x1, y1, '%d:%.2f' % (cls, prob), color='red')
115 |
116 | if index in labels.keys():
117 | for cls in labels[index].keys():
118 | for box in labels[index][cls]:
119 | x1 = int(box[0])
120 | y1 = int(box[1])
121 | x2 = int(box[2])
122 | y2 = int(box[3])
123 | plt.plot([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], color='blue')
124 | plt.text(x1, y1, '%d' % (cls), color='blue')
125 | plt.savefig(save_path)
126 | plt.show()
127 |
128 | def draw_pr_curve(aps, recalls, precisions, title='', save_path=None):
129 | if not visual_enable():
130 | return
131 | class_count = len(aps)
132 | assert(class_count) <= 16
133 | side = int(math.sqrt(class_count))
134 | plt.figure(figsize=(side*5, side*5))
135 | plt.suptitle(title)
136 | for i in range(class_count):
137 | plt.subplot(side, side, i + 1)
138 | plt.title('class=%d ap=%.4f'%(i, aps[i]))
139 | print('precisions for class: ',i)
140 | print(precisions[i])
141 | print('recalls for class: ', i)
142 | print(recalls[i])
143 | plt.plot(recalls[i], precisions[i], color='red')
144 | plt.xlabel("recall")
145 | plt.ylabel("precision")
146 |
147 | plt.savefig(save_path)
148 | plt.show()
149 |
--------------------------------------------------------------------------------
/Trainer/cfgs/key_point/keypoint_shufflenetv2_heatmap_224_1.0_3kps.py:
--------------------------------------------------------------------------------
1 | opt_dict = {
2 | 'opt_type': 'sgd',
3 | 'momentum': 0.9,
4 | 'base_lr': 0.01,
5 | 'lr_policy': 'step',
6 | 'lr_steps': [0.65,0.85],
7 | 'lr_rate': 0.1,
8 | 'warmup_iter': 0.01,
9 | 'weight_decay': 0.0005,
10 | #'only_train': ['conv_compress', 'duc1', 'duc2', 'duc3', 'conv_result']
11 | 'only_train': []
12 | }
13 |
14 | model_dict = {
15 | 'net': 'ShuffleNetV2HeatMap',
16 | 'net_arg': {'kp_num':3, 'channel_ratio':1.0,},
17 | 'pre_train': 'save/torchvision/shufflenetv2_x1-5666bf0f80_bgr.pth',
18 | }
19 |
20 | data_dict = {
21 | 'train':{
22 | 'data_name': 'PersionKeypointTxt',
23 | 'num_workers': 6,
24 | 'data_dir': '../DataSet/images_train/',
25 | 'data_label': '../DataSet/images_train/label.txt',
26 | 'batch_size': 32,
27 | 'resize': [224, 224], # w and h
28 | 'mean': [103.53,116.28,123.675],
29 | 'std': [57.375,57.12,58.395],
30 | 'kp_num':3,
31 | 'gauss_ratio': 2,
32 | 'gauss_sigma': 1,
33 | 'heatmap': [28, 28], # w and h
34 | 'data_len_expand': 100,
35 | },
36 | 'eval':{
37 | 'data_name': 'PersionKeypointTxt',
38 | 'num_workers': 6,
39 | 'data_dir': '../DataSet/',
40 | 'data_label': '../DataSet/label_val.txt',
41 | 'batch_size': 16,
42 | 'resize': [224, 224], # w and h
43 | 'mean': [103.53,116.28,123.675],
44 | 'std': [57.375,57.12,58.395],
45 | 'kp_num':2,
46 | 'gauss_ratio': 2,
47 | 'gauss_sigma': 1,
48 | 'heatmap': [28, 28], # w and h
49 | },
50 | }
51 |
52 | train_dict = {
53 | 'device': 'cuda', #'cuda' or 'cpu'
54 | 'enable_visual': True,
55 | 'save_dir': '',
56 | 'max_epoch': 24,
57 | 'train_display': 10,
58 | 'train_save': 1,
59 | 'eval': {
60 | 'eval_enable': False,
61 | 'start_eval': 1,
62 | 'eval_epoch': 1,
63 | 'eval_type': 'oks'
64 | },
65 | }
66 |
--------------------------------------------------------------------------------
/Trainer/cfgs/key_point/temp_cfg.py:
--------------------------------------------------------------------------------
1 | opt_dict = {
2 | 'opt_type': 'sgd',
3 | 'momentum': 0.9,
4 | 'base_lr': 0.01,
5 | 'lr_policy': 'step',
6 | 'lr_steps': [0.65,0.85],
7 | 'lr_rate': 0.1,
8 | 'warmup_iter': 0.01,
9 | 'weight_decay': 0.0005,
10 | #'only_train': ['conv_compress', 'duc1', 'duc2', 'duc3', 'conv_result']
11 | 'only_train': []
12 | }
13 |
14 | model_dict = {
15 | 'net': 'ShuffleNetV2HeatMap',
16 | 'net_arg': {'kp_num':3, 'channel_ratio':1.0,},
17 | 'pre_train': 'save/torchvision/shufflenetv2_x1-5666bf0f80_bgr.pth',
18 | }
19 |
20 | data_dict = {
21 | 'train':{
22 | 'data_name': 'PersionKeypointTxt',
23 | 'num_workers': 6,
24 | 'data_dir': '../DataSet/images_train/',
25 | 'data_label': '../DataSet/images_train/label.txt',
26 | 'batch_size': 32,
27 | 'resize': [224, 224], # w and h
28 | 'mean': [103.53,116.28,123.675],
29 | 'std': [57.375,57.12,58.395],
30 | 'kp_num':3,
31 | 'gauss_ratio': 2,
32 | 'gauss_sigma': 1,
33 | 'heatmap': [28, 28], # w and h
34 | 'data_len_expand': 100,
35 | },
36 | 'eval':{
37 | 'data_name': 'PersionKeypointTxt',
38 | 'num_workers': 6,
39 | 'data_dir': '../DataSet/',
40 | 'data_label': '../DataSet/label_val.txt',
41 | 'batch_size': 16,
42 | 'resize': [224, 224], # w and h
43 | 'mean': [103.53,116.28,123.675],
44 | 'std': [57.375,57.12,58.395],
45 | 'kp_num':2,
46 | 'gauss_ratio': 2,
47 | 'gauss_sigma': 1,
48 | 'heatmap': [28, 28], # w and h
49 | },
50 | }
51 |
52 | train_dict = {
53 | 'device': 'cuda', #'cuda' or 'cpu'
54 | 'enable_visual': True,
55 | 'save_dir': '',
56 | 'max_epoch': 24,
57 | 'train_display': 10,
58 | 'train_save': 1,
59 | 'eval': {
60 | 'eval_enable': False,
61 | 'start_eval': 1,
62 | 'eval_epoch': 1,
63 | 'eval_type': 'oks'
64 | },
65 | }
66 |
--------------------------------------------------------------------------------
/Trainer/data/__init__.py:
--------------------------------------------------------------------------------
1 | from .person_keypoint_txt import PersionKeypointTxt
--------------------------------------------------------------------------------
/Trainer/data/dataloader.py:
--------------------------------------------------------------------------------
1 | from DLEngine.modules.dataloader import dataset
2 | import torch
3 |
4 |
5 | def create_dataloader(phase, arg_dict, rank, world_size):
6 | data_name = arg_dict['data_name']
7 | dataset_ = dataset.__dict__[data_name](phase, arg_dict)
8 | if phase == 'train':
9 | sampler = torch.utils.data.distributed.DistributedSampler(dataset_,
10 | num_replicas=world_size,
11 | rank=rank)
12 | dataloader_ = torch.utils.data.DataLoader(dataset_,
13 | batch_size = arg_dict['batch_size'],
14 | num_workers = arg_dict['num_workers'],
15 | collate_fn = dataset_.collate_fn,
16 | sampler=sampler)
17 | else:
18 | sampler = None
19 | dataloader_ = torch.utils.data.DataLoader(dataset_,
20 | batch_size=arg_dict['batch_size'],
21 | num_workers=arg_dict['num_workers'])
22 |
23 | return dataloader_, sampler
--------------------------------------------------------------------------------
/Trainer/export_onnx.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | sys.path.append('./')
4 | sys.path.append('../')
5 | import torch
6 | import matplotlib
7 | matplotlib.use('Agg')
8 | import os
9 | from DLEngine.modules.cfg_parse.cfg_parse import parse_cfg_file
10 | import models
11 | import numpy as np
12 |
13 | ################config info#####################################
14 | MODEL_DIR='save/keypoint_shufflenetv2_heatmap_224_1.0_3kps-20220710151535/'
15 | DETAIL_LOG=True
16 | NEED_ONNX_SIM=True
17 | #################################################################
18 |
19 | def get_file_form_dir(dir_path, houzhui):
20 | files = os.listdir(dir_path)
21 | file_list = []
22 | for file in files:
23 | if str(file).endswith(houzhui) :
24 | file_list.append(os.path.join(dir_path, file))
25 |
26 | if len(file_list) == 0:
27 | return None
28 | elif len(file_list) == 1:
29 | return file_list[0]
30 | else:
31 | print('\nthere are more then one %s files, please select one'%(houzhui))
32 | for i,file in enumerate(file_list):
33 | print(i, file)
34 | print('\nplease input the seq')
35 | x = int(input())
36 | return file_list[x]
37 |
38 |
39 | def load_pre_train_ignore_name(net, pre_train):
40 | if pre_train == '':
41 | print('the pre_train is null, skip')
42 | return
43 | else:
44 | print('the pre_train is %s' % pre_train)
45 | new_dict = {}
46 | pretrained_model = torch.load(pre_train, map_location=torch.device('cpu'))
47 |
48 | pre_keys = pretrained_model.keys()
49 | net_keys = net.state_dict().keys()
50 | print('net keys len:%d, pretrain keys len:%d' % (len(net_keys), len(pre_keys)))
51 | if len(net_keys) != len(pre_keys):
52 | print(
53 | 'key lens not same, maybe the pytorch version for pretrain and net are difficent; use name load')
54 | for key_net in net_keys:
55 | strip_key_net = key_net.replace('module.', '')
56 | if strip_key_net not in pre_keys:
57 | print('op: %s not exist in pretrain, ignore' % (key_net))
58 | new_dict[key_net] = net.state_dict()[key_net]
59 | continue
60 | else:
61 | net_shape = str(net.state_dict()[key_net].shape).replace('torch.Size', '')
62 | pre_shape = str(pretrained_model[strip_key_net].shape).replace('torch.Size', '')
63 | if net.state_dict()[key_net].shape != pretrained_model[strip_key_net].shape:
64 | print('op: %s exist in pretrain but shape difficenet(%s:%s), ignore' % (
65 | key_net, net_shape, pre_shape))
66 | new_dict[key_net] = net.state_dict()[key_net]
67 | else:
68 | print(
69 | 'op: %s exist in pretrain and shape same(%s:%s), load' % (key_net, net_shape, pre_shape))
70 | new_dict[key_net] = pretrained_model[strip_key_net]
71 |
72 | else:
73 | for key_pre, key_net in zip(pretrained_model.keys(), net.state_dict().keys()):
74 | if net.state_dict()[key_net].shape == pretrained_model[key_pre].shape:
75 | new_dict[key_net] = pretrained_model[key_pre]
76 | print('op: %s shape same, load weights' % (key_net))
77 | else:
78 | new_dict[key_net] = net.state_dict()[key_net]
79 | print('op: %s:%s shape diffient(%s:%s), ignore weights' %
80 | (key_net, key_pre,
81 | str(net.state_dict()[key_net].shape).replace('torch.Size', ''),
82 | str(pretrained_model[key_pre].shape).replace('torch.Size', '')))
83 |
84 | net.load_state_dict(new_dict, strict=False)
85 |
86 | if __name__ == '__main__':
87 |
88 | cfg_file = get_file_form_dir(MODEL_DIR, '.py')
89 | model_file = get_file_form_dir(MODEL_DIR, '.pkl')
90 | cfg_dicts = parse_cfg_file(cfg_file)
91 | onnx_file = model_file.replace('.pkl', '.onnx')
92 | onnx_sim_file = model_file.replace('.pkl', '_sim.onnx')
93 | print('@')
94 | print('@ 1.get all the file names:')
95 | print('@ config file: ', cfg_file)
96 | print('@ pytroch model file: ', model_file)
97 | print('@ onnx_file: ', onnx_file)
98 | print('@ onnx_sim_file: ', onnx_sim_file)
99 |
100 | # create net
101 | model_dict = cfg_dicts.model_dict
102 | model_name = model_dict['net']
103 | model_args = model_dict['net_arg']
104 | if 'torchvision' in model_name:
105 | assert ('num_classes' in model_args.keys())
106 | cmd = 'net = models.%s(pretrained=False, num_classes=%d)' % (model_name, model_args['num_classes'])
107 | exec(cmd)
108 | else:
109 | cmd = 'net = models.%s(model_args)' % (model_name)
110 | exec(cmd)
111 | load_pre_train_ignore_name(net, model_file)
112 | net.eval()
113 | print('@')
114 | print('@ 2.create pytroch net(%s) and load model'%(model_name))
115 |
116 |
117 | # create the input tensor
118 | input_w, input_h = cfg_dicts.data_dict['eval']['resize']
119 | input_shape = (1, 3, input_h, input_w)
120 | input = torch.FloatTensor(input_shape[0],input_shape[1],input_shape[2],input_shape[3])
121 | input = input.to('cpu')
122 | print('@')
123 | print('@ 3.create the input tensor')
124 | print('@ input_shape: ', input.shape)
125 |
126 |
127 | # export to onnx file
128 | torch.onnx.export(net,input,onnx_file,verbose=DETAIL_LOG)
129 | print('@')
130 | print('@ 4.export to onnx model')
131 |
132 |
133 | # sim the onnx file
134 | print('@')
135 | if NEED_ONNX_SIM:
136 | cmd = 'python3 -m onnxsim ' + str(onnx_file) + ' ' + str(onnx_sim_file)
137 | ret = os.system(str(cmd))
138 | #print(ret)
139 | new_onnx_file = onnx_sim_file
140 | print('@ 5.need to sim the onnx model')
141 | else:
142 | new_onnx_file = onnx_file
143 | print('@ 5.do not need to sim the onnx model')
144 | print('@ use this onnx file: ', new_onnx_file)
--------------------------------------------------------------------------------
/Trainer/models/__init__.py:
--------------------------------------------------------------------------------
1 | from .keypoint.shufflenet_v2_heatmap import ShuffleNetV2HeatMap
2 |
--------------------------------------------------------------------------------
/Trainer/requirements.txt:
--------------------------------------------------------------------------------
1 | matplotlib>=2.2.3
2 | numpy>=1.15.1
3 | opencv_python>=4.6.0.66
4 | Pillow>=9.2.0
5 | scipy>=1.1.0
6 | torch==1.12.0
7 | torchvision==0.13.0
8 | torchstat==0.0.7
9 |
--------------------------------------------------------------------------------
/Trainer/save/torchvision/shufflenetv2_x1-5666bf0f80_bgr.pth:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/Trainer/save/torchvision/shufflenetv2_x1-5666bf0f80_bgr.pth
--------------------------------------------------------------------------------
/Trainer/setup.py:
--------------------------------------------------------------------------------
1 | from distutils.core import setup
2 | #files = ["things/*"]
3 |
4 | setup(name='DLEngine',
5 | version='0.0.1',
6 | packages=['DLEngine',
7 | 'DLEngine.modules',
8 | 'DLEngine.modules.dataloader',
9 | 'DLEngine.modules.dataloader.dataset',
10 | 'DLEngine.modules.lr_schedule',
11 | 'DLEngine.modules.metric',
12 | 'DLEngine.modules.optimizer',
13 | 'DLEngine.modules.trainer']
14 | )
15 |
16 |
--------------------------------------------------------------------------------
/Trainer/train.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import importlib
4 | import torch
5 | from torch import nn
6 | from DLEngine.train_project import TrainProject
7 | from DLEngine.modules.cfg_parse.cfg_parse import parse_cfg_file
8 | import models
9 | import data
10 | from torchstat import stat
11 | #from thop import profile
12 |
13 |
14 | ############################################################
15 | CFG_FILE='cfgs/key_point/keypoint_shufflenetv2_heatmap_224_1.0_3kps.py'
16 | ############################################################
17 |
18 |
19 | if __name__ == '__main__':
20 | # import cfg_dicts from cfg_file
21 | cfg_dicts = parse_cfg_file(CFG_FILE)
22 |
23 | # create net
24 | model_dict = cfg_dicts.model_dict
25 | model_name = model_dict['net']
26 | model_args = model_dict['net_arg']
27 | print(model_name)
28 | print(model_args)
29 | net = models.__dict__[model_name](model_args)
30 | print(net)
31 |
32 | # create dataset
33 | data_name = cfg_dicts.data_dict['train']['data_name']
34 | dataset_train = data.__dict__[data_name]('train', cfg_dicts.data_dict['train'])
35 | if cfg_dicts.train_dict['eval']['eval_enable']:
36 | data_name = cfg_dicts.data_dict['eval']['data_name']
37 | dataset_eval = data.__dict__[data_name]('eval', cfg_dicts.data_dict['eval'])
38 | else:
39 | dataset_eval = None
40 |
41 | # create train project
42 | train_project = TrainProject(net, CFG_FILE, dataset_train, dataset_eval)
43 |
44 | # train
45 | train_project.train()
46 |
--------------------------------------------------------------------------------
/Video2Images/main_widget.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import sys
3 | import os
4 | if hasattr(sys, 'frozen'):
5 | os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
6 | from PyQt5.QtWidgets import *
7 | from PyQt5 import QtCore, QtGui, uic
8 | from PyQt5.QtCore import *
9 | from PyQt5.QtGui import *
10 | import copy
11 | import xml.etree.cElementTree as et
12 | import os
13 | import cv2
14 | import math
15 | from PIL import Image
16 | import threading
17 |
18 | # ui配置文件
19 | cUi, cBase = uic.loadUiType("main_widget.ui")
20 |
21 | # 主界面
22 | class CImageWidget(QWidget, cUi):
23 |
24 | info_sig = pyqtSignal(dict)
25 |
26 | def __init__(self):
27 | # 设置UI
28 | QMainWindow.__init__(self)
29 | cUi.__init__(self)
30 | self.setupUi(self)
31 | self.videos_dir = ''
32 | self.images_dir = ''
33 | self.thread_flag = False
34 | self.thread_handle = None
35 | self.info_sig.connect(self.info_slot)
36 |
37 | self.progressNow.setMaximum(100)
38 | self.progressTotal.setMaximum(100)
39 | self.progressNow.setValue(0)
40 | self.progressTotal.setValue(0)
41 |
42 | self.setWindowTitle('视频转图片小工具 作者:理工堆堆星 联系:cjnewstar111')
43 |
44 | def closeEvent(self, event):
45 | pass
46 |
47 | def thread_func(self, videos_dir, images_dir):
48 | print('>>[info] thread_func start')
49 | print('>>[info] videos_dir is', videos_dir)
50 | print('>>[info] images_dir is', images_dir)
51 |
52 | all_videos = os.listdir(videos_dir)
53 | videos_count = len(all_videos)
54 | for i, video_name in enumerate(all_videos):
55 | total_progress = int(i * 100 / videos_count)
56 | video_path = os.path.join(videos_dir, video_name)
57 | capture = cv2.VideoCapture(video_path)
58 | frame_count = capture.get(cv2.CAP_PROP_FRAME_COUNT)
59 | if frame_count < 1:
60 | frame_count = 100000000
61 | frame_seq = 0
62 | while True:
63 | #print('-----> frame_count,', frame_count)
64 | ret, frame = capture.read()
65 | if not ret:
66 | self.info_sig.emit({'video_name':video_name, 'total_progress': total_progress, 'now_progress': 100})
67 | break
68 | frame_name = video_name + '_%d.jpg'%frame_seq
69 | frame_path = os.path.join(images_dir, frame_name)
70 | cv2.imwrite(frame_path, frame)
71 | now_progress = int(frame_seq * 100 / frame_count)
72 | self.info_sig.emit({'video_name':video_name, 'total_progress': total_progress, 'now_progress': now_progress})
73 | frame_seq += 1
74 |
75 | self.info_sig.emit({'video_name':video_name, 'total_progress': 100, 'now_progress': 100})
76 | self.thread_flag = False
77 | self.thread_handle = None
78 | print('>>[info] thread_func stop')
79 |
80 | @pyqtSlot()
81 | def on_btnOpenVideosDir_clicked(self):
82 | print('info:on_btnOpenVideosDir_clicked')
83 | videos_dir = QFileDialog.getExistingDirectory(self, u"请选择视频所在文件夹", os.getcwd())
84 | if os.path.exists(videos_dir):
85 | self.editVideosDir.setText(videos_dir)
86 | else:
87 | pass
88 |
89 | @pyqtSlot()
90 | def on_btnOpenImagesDir_clicked(self):
91 | print('info:on_btnOpenImagesDir_clicked')
92 | images_dir = QFileDialog.getExistingDirectory(self, u"请选择图片保存文件夹", os.getcwd())
93 | if os.path.exists(images_dir):
94 | self.editImagesDir.setText(images_dir)
95 | else:
96 | pass
97 |
98 | @pyqtSlot()
99 | def on_btnStartConvert_clicked(self):
100 | print('info:on_btnStartConvert_clicked')
101 | if self.thread_flag is False:
102 |
103 | videos_dir = self.editVideosDir.text()
104 | images_dir = self.editImagesDir.text()
105 |
106 | if not os.path.exists(videos_dir):
107 | reply = QMessageBox.warning(self,
108 | u'警告',
109 | u'请选择有效的视频所在文件夹',
110 | QMessageBox.Yes)
111 | return
112 |
113 | if not os.path.exists(images_dir):
114 | reply = QMessageBox.warning(self,
115 | u'警告',
116 | u'请选择有效的图片保存文件夹',
117 | QMessageBox.Yes)
118 | return
119 |
120 | self.thread_flag = True
121 | self.thread_handle = threading.Thread(target=self.thread_func, args=(videos_dir, images_dir,))
122 | self.thread_handle.start()
123 | else:
124 | pass
125 |
126 | def info_slot(self, info_dict):
127 | video_name = info_dict['video_name']
128 | total_progress = info_dict['total_progress']
129 | now_progress = info_dict['now_progress']
130 | self.editNowVideo.setText(video_name)
131 | self.progressNow.setValue(now_progress)
132 | self.progressTotal.setValue(total_progress)
133 |
134 |
135 | if __name__ == "__main__":
136 | cApp = QApplication(sys.argv)
137 | cImageWidget = CImageWidget()
138 | cImageWidget.show()
139 | sys.exit(cApp.exec_())
--------------------------------------------------------------------------------
/Video2Images/main_widget.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 626
10 | 502
11 |
12 |
13 |
14 |
15 |
16 |
17 | -
18 |
19 |
-
20 |
21 |
-
22 |
23 |
24 |
25 | 150
26 | 0
27 |
28 |
29 |
30 |
31 | 150
32 | 16777215
33 |
34 |
35 |
36 | 选择视频所在文件夹
37 |
38 |
39 |
40 | -
41 |
42 |
43 |
44 |
45 | -
46 |
47 |
-
48 |
49 |
50 |
51 | 150
52 | 0
53 |
54 |
55 |
56 |
57 | 150
58 | 16777215
59 |
60 |
61 |
62 | 选择图片保存文件夹
63 |
64 |
65 |
66 | -
67 |
68 |
69 |
70 |
71 | -
72 |
73 |
-
74 |
75 |
76 | Qt::Horizontal
77 |
78 |
79 |
80 | 40
81 | 20
82 |
83 |
84 |
85 |
86 | -
87 |
88 |
89 |
90 | 150
91 | 0
92 |
93 |
94 |
95 |
96 | 150
97 | 16777215
98 |
99 |
100 |
101 | 开始转换
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | -
110 |
111 |
112 | Qt::Vertical
113 |
114 |
115 |
116 | 20
117 | 146
118 |
119 |
120 |
121 |
122 | -
123 |
124 |
-
125 |
126 |
-
127 |
128 |
129 |
130 | 150
131 | 0
132 |
133 |
134 |
135 |
136 | 150
137 | 16777215
138 |
139 |
140 |
141 | 当前转换视频
142 |
143 |
144 |
145 | -
146 |
147 |
148 |
149 |
150 | -
151 |
152 |
-
153 |
154 |
155 |
156 | 150
157 | 0
158 |
159 |
160 |
161 |
162 | 150
163 | 16777215
164 |
165 |
166 |
167 | 当前视频转换进度
168 |
169 |
170 |
171 | -
172 |
173 |
174 | 24
175 |
176 |
177 |
178 |
179 |
180 | -
181 |
182 |
-
183 |
184 |
185 |
186 | 150
187 | 0
188 |
189 |
190 |
191 |
192 | 150
193 | 16777215
194 |
195 |
196 |
197 | 总体进度
198 |
199 |
200 |
201 | -
202 |
203 |
204 | 24
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 | -
213 |
214 |
215 | Qt::Vertical
216 |
217 |
218 |
219 | 20
220 | 145
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
--------------------------------------------------------------------------------
/Video2Images/requirements.txt:
--------------------------------------------------------------------------------
1 | opencv_python==4.6.0.66
2 | Pillow==9.1.1
3 | PyQt5==5.15.7
4 |
--------------------------------------------------------------------------------
/WinApp/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // 使用 IntelliSense 了解相关属性。
3 | // 悬停以查看现有属性的描述。
4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Python: 当前文件",
9 | "type": "python",
10 | "request": "launch",
11 | "program": "${file}",
12 | "console": "integratedTerminal"
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/WinApp/alg_onnx/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // 使用 IntelliSense 了解相关属性。
3 | // 悬停以查看现有属性的描述。
4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Python: 当前文件",
9 | "type": "python",
10 | "request": "launch",
11 | "program": "${file}",
12 | "console": "integratedTerminal"
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/WinApp/alg_onnx/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "D:\\Anaconda3\\envs\\situp\\python.exe"
3 | }
--------------------------------------------------------------------------------
/WinApp/alg_onnx/api.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import argparse
3 | import os
4 | import time
5 | import cv2
6 | import torch
7 | import torchvision
8 | import numpy as np
9 | import onnxruntime
10 |
11 | def situp_preproc(cv_img, resize=(224,224), mean=[103.53,116.28,123.675], std=[57.375,57.12,58.395]):
12 | img = cv2.resize(cv_img, resize)
13 | img = img - mean
14 | img = img / std
15 | img = np.ascontiguousarray(img, dtype=np.float32)
16 | img = np.expand_dims(img.transpose(2,0,1), axis=0)
17 | return img
18 |
19 | class SitupDet():
20 | def __init__(self):
21 | cur_dir = os.path.dirname(os.path.abspath(__file__))
22 | onnx_path = os.path.join(cur_dir, './models/model_24.onnx')
23 | # 1. 根据onnx模型,创建onnx的session
24 | self.onnx_session = onnxruntime.InferenceSession(onnx_path)
25 | self.onnx_input_info = self.onnx_session.get_inputs()[0]
26 | self.onnx_output_info = self.onnx_session.get_outputs()[0]
27 |
28 | def infer(self, cv_img):
29 | img_ori = cv_img.copy()
30 | h, w, c = cv_img.shape
31 | img = situp_preproc(cv_img)
32 | input_feed = {self.onnx_input_info.name: img}
33 | # 2. 根据onnx_session,进行预测推理,输入图片,得出结果
34 | preds = self.onnx_session.run([self.onnx_output_info.name], input_feed=input_feed)
35 | preds = preds[0]
36 |
37 | featuremap1 = preds[0][0]
38 | featuremap2 = preds[0][1]
39 | featuremap3 = preds[0][2]
40 |
41 | max1 = np.unravel_index(np.argmax(featuremap1), featuremap1.shape)
42 | max2 = np.unravel_index(np.argmax(featuremap2), featuremap2.shape)
43 | max3 = np.unravel_index(np.argmax(featuremap3), featuremap3.shape)
44 |
45 | norm_pos1 = [(max1[0] + 0.5) / featuremap1.shape[0], (max1[1] + 0.5) / featuremap1.shape[1]]
46 | norm_pos2 = [(max2[0] + 0.5) / featuremap2.shape[0], (max2[1] + 0.5) / featuremap2.shape[1]]
47 | norm_pos3 = [(max3[0] + 0.5) / featuremap3.shape[0], (max3[1] + 0.5) / featuremap3.shape[1]]
48 | abs_pos1 = (int(norm_pos1[1] * w), int(norm_pos1[0] * h))
49 | abs_pos2 = (int(norm_pos2[1] * w), int(norm_pos2[0] * h))
50 | abs_pos3 = (int(norm_pos3[1] * w), int(norm_pos3[0] * h))
51 |
52 | cv2.line(img_ori, abs_pos1, abs_pos3, (0, 250, 250), 3)
53 | cv2.line(img_ori, abs_pos2, abs_pos3, (0, 250, 250), 3)
54 | cv2.circle(img_ori, abs_pos1, 10, (0, 0, 255), -1)
55 | cv2.circle(img_ori, abs_pos2, 10, (0, 255, 0), -1)
56 | cv2.circle(img_ori, abs_pos3, 10, (255, 0, 0), -1)
57 |
58 | return img_ori, [norm_pos1, norm_pos2, norm_pos3]
59 |
60 |
61 | if __name__ == '__main__':
62 |
63 | #############################################################
64 | img_path = 'C:\\Users\\Administrator\\Desktop\\2.jpg'
65 | #############################################################
66 |
67 | situp_det = SitupDet()
68 | now_dir = os.path.dirname(__file__)
69 |
70 | img_list = []
71 | if os.path.isdir(img_path):
72 | for file in os.listdir(img_path):
73 | if str(file).endswith('jpg'):
74 | img_list.append(os.path.join(img_path, file))
75 | else:
76 | img_list.append(img_path)
77 |
78 | for i, img_path in enumerate(img_list):
79 | img = cv2.imread(img_path)
80 | img_result, results = situp_det.infer(img)
81 | #save_img_ori_path = os.path.join(now_dir, 'save/%d_ori.jpg'%(i))
82 | #save_img_result_path = os.path.join(now_dir,'save/%d_result.jpg'%(i))
83 | #cv2.imwrite(save_img_ori_path, img)
84 | #cv2.imwrite(save_img_result_path, img_result)
85 | #plt.title(os.path.basename(img_path))
86 | #plt.imshow(img[:,:,[2,1,0]])
87 | #plt.show()
88 |
--------------------------------------------------------------------------------
/WinApp/alg_onnx/models/model_24.onnx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/WinApp/alg_onnx/models/model_24.onnx
--------------------------------------------------------------------------------
/WinApp/alg_warp.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import sys
3 | import sys
4 | sys.path.append('./movenet')
5 | import os
6 | if hasattr(sys, 'frozen'):
7 | os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
8 | from PyQt5.QtWidgets import *
9 | from PyQt5 import QtCore, QtGui, uic
10 | from PyQt5.QtCore import *
11 | from PyQt5.QtGui import *
12 | import copy
13 | import xml.etree.cElementTree as et
14 | import os
15 | import cv2
16 | import math
17 | import time
18 | from PIL import Image
19 | import threading
20 | import time
21 | from alg_onnx.api import SitupDet
22 | import numpy as np
23 | import matplotlib
24 | matplotlib.use('Agg')
25 | import matplotlib.pyplot as plt
26 | try:
27 | import queue
28 | except ImportError:
29 | import Queue as queue
30 | import json
31 |
32 |
33 |
34 | class AlgWarp():
35 | def __init__(self, image_queue, callback_func):
36 | self.img_queue = image_queue
37 | self.callback_func = callback_func
38 | self.thread_handle = None
39 | self.thread_flag = False
40 | self.alg = SitupDet()
41 | self.analyze_flag = False
42 | self.situp_count = 0
43 | self.last_pos = 'unknown'
44 |
45 | def thread_func(self, args):
46 | while self.thread_flag:
47 | try:
48 | img = self.img_queue.get(block=True, timeout=0.5)
49 | if type(img) is dict:
50 | #print('thread running: get a cmd')
51 | if img['cmd'] == 'analyze_start':
52 | self.analyze_init()
53 | if img['cmd'] == 'analyze_stop':
54 | self.analyze_fini()
55 | else:
56 | time_start = time.time()
57 | result_img, result_info = self.infer(img)
58 | time_spend = time.time() - time_start
59 | self.callback_func(result_img, result_info, time_spend)
60 | except queue.Empty:
61 | pass
62 |
63 | self.thread_flag = False
64 | self.thread_handle = None
65 |
66 | def start(self):
67 | self.thread_flag = True
68 | self.thread_handle = threading.Thread(target=self.thread_func, args=(None,))
69 | self.thread_handle.start()
70 |
71 | def stop(self):
72 | self.thread_flag = False
73 | if self.thread_handle is not None:
74 | self.thread_handle.join()
75 | self.thread_handle = None
76 |
77 | def analyze_init(self):
78 | self.analyze_flag = True
79 | self.situp_count = 0
80 | self.last_pos = 'unknown'
81 |
82 | def analyze_fini(self):
83 | self.analyze_flag = False
84 |
85 | def infer(self, img):
86 | img, pos = self.alg.infer(img)
87 | if self.analyze_flag:
88 | now_pos_head, now_pos_knee, now_pos_crotch = pos
89 | if now_pos_head[0] > now_pos_knee[0] and now_pos_crotch[0] > now_pos_knee[0]:
90 | self.last_pos = 'step1'
91 | if now_pos_head[0] < now_pos_knee[0] and now_pos_crotch[0] > now_pos_knee[0]:
92 | if self.last_pos == 'step1':
93 | self.situp_count += 1
94 | self.last_pos = 'step2'
95 |
96 | info = '仰卧起坐个数:%d'%(self.situp_count)
97 | else:
98 | info = '图片模式,只检测关键点,不计数'
99 |
100 | return img, info
101 |
--------------------------------------------------------------------------------
/WinApp/infer_widget.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 626
10 | 502
11 |
12 |
13 |
14 |
15 |
16 |
17 | -
18 |
19 |
-
20 |
21 |
22 | Qt::Horizontal
23 |
24 |
25 |
26 | 40
27 | 20
28 |
29 |
30 |
31 |
32 | -
33 |
34 |
-
35 |
36 |
37 | 图片
38 |
39 |
40 |
41 | -
42 |
43 |
44 | 视频
45 |
46 |
47 |
48 | -
49 |
50 |
-
51 |
52 |
53 | 摄像头
54 |
55 |
56 |
57 | -
58 |
59 |
60 |
61 | 30
62 | 16777215
63 |
64 |
65 |
66 |
67 |
68 |
69 | -
70 |
71 |
72 | 停止
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | -
81 |
82 |
83 | Qt::Vertical
84 |
85 |
86 |
87 | 20
88 | 450
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/WinApp/requirements.txt:
--------------------------------------------------------------------------------
1 | matplotlib==2.2.3
2 | numpy==1.21.6
3 | onnxruntime==1.11.1
4 | opencv_python==4.6.0.66
5 | Pillow==9.2.0
6 | PyQt5==5.15.7
7 | torch==1.12.0
8 | torchvision==0.13.0
9 |
--------------------------------------------------------------------------------
/app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/app.png
--------------------------------------------------------------------------------
/cfg_data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/cfg_data.png
--------------------------------------------------------------------------------
/cfg_model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/cfg_model.png
--------------------------------------------------------------------------------
/cfg_opt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/cfg_opt.png
--------------------------------------------------------------------------------
/cfg_train.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/cfg_train.png
--------------------------------------------------------------------------------
/heatmap1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/heatmap1.jpg
--------------------------------------------------------------------------------
/heatmap2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/heatmap2.jpg
--------------------------------------------------------------------------------
/imgs_from_net.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/imgs_from_net.jpg
--------------------------------------------------------------------------------
/label_file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/label_file.png
--------------------------------------------------------------------------------
/label_tool_do.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/label_tool_do.jpg
--------------------------------------------------------------------------------
/label_tool_init.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/label_tool_init.jpg
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/logo.png
--------------------------------------------------------------------------------
/pose_est.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/pose_est.jpg
--------------------------------------------------------------------------------
/pro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/pro.png
--------------------------------------------------------------------------------
/result.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DL-Practise/OpenSitUp/0e8d56e349a93dedb95fe875f32d8d3438e6a7ea/result.gif
--------------------------------------------------------------------------------