├── .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 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/logo.png) 2 | 3 | 微信讨论群,先添加作者微信,让后邀请入群,一起学习姿态估计技术。 4 | 作者微信:cjnewstar111 5 | 6 | # 1.项目开源地址 7 | https://github.com/DL-Practise/OpenSitUp 8 | 9 | # 2.项目简介 10 | 计算机视觉中有一个应用分支叫做姿态估计,通过人体关键点的方式来估计出一个/多个人的姿态信息。如下图所示: 11 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/pose_est.jpg) 12 | OpenSitUp是一个基于姿态估计的开源项目,旨在帮助对姿态估计感兴趣的朋友,能够从零开始搭建一个仰卧起坐计数APP。主要的技术难点为如何让计算量较大的人体姿态估计网络流畅的运行在没有显卡的环境中(例如CPU或者手机),并且实现仰卧起坐的计数功能。掌握了这个项目的原理之后,可以很方便的迁移到类似的运动,健身APP当中。 13 | 14 | # 3.项目成果展示 15 | 如下展示的是这个项目最后的APP效果,在人潮涌动的西湖景区,我当众躺下做仰卧起坐,羞煞老夫也! 16 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/result.gif) 17 | 18 | # 4.项目目录 19 | 由于需要从零开始开发仰卧起坐计数APP,因此整个项目需要包含多个工程,包括数据采集,标注,训练,部署,app开发等,整体目录结构如下图所示: 20 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/pro.png) 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 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/imgs_from_video.jpg) 39 | 仅仅使用视频中抽取的帧会有一个比较严重的问题,就是背景过于单一,很容易造成过拟合。于是我从网上进行图片搜索,得到一分部背景较为丰富的图片,如下图所示: 40 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/imgs_from_net.jpg) 41 | 42 | ## 5.2 标注图片 43 | 收集完数据,就是进行标注了,虽然已经有一些现成的开源标注工具,但是我用的不顺手,因此自己开发了一款关键点标注工具,就是上面开源的LabelTool,毕竟自己开发的,用着顺手。注意该工具在win10/python 3.6环境下做过测试,其他环境暂时没有测试。使用命令python main_widget.py打开界面。初始界面非常简洁,通过“打开”按钮来打开收集好的仰卧起坐图片。 44 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/label_tool_init.jpg) 45 | 在类别中使用0表示标注的是头部,1表示标注的是膝盖,2表示标注的是胯部(由于我们需要在手机上识别仰卧起坐,需要尽可能的减少计算量,姿态估计一般会预测全身很多的关键点,但是对于仰卧起坐,只要能准确的预测头部,膝盖和胯部,就能较好的进行仰卧起坐的动作识别,因此这里只需要标注三个点)。单击鼠标左键进行标注,右键取消上一次标注。不得不说,用python+qt开发一些基于UI的工具非常方便!与C++相比,解放了太多的生产力! 46 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/label_tool_do.jpg) 47 | 标注完图片之后,会在图片目录下面生成一个标签文件label.txt,里面的内容如下: 48 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/label_file.png) 49 | 50 | ## 5.3 算法原理 51 | 52 | 我先简单的介绍一下仰卧起坐的算法原理。在姿态估计(关键点检测)领域,一般很少采用回归的方式来预测关键点位置,取而代之的是采用heatmap输出关键点的位置。这和anchor free的目标检测中的centness之类的做法差不多,即通过查找heatmap中响应值最大的点来确定关键点的坐标。如下图所示(只显示部分heatmap): 53 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/heatmap1.jpg) 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 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/heatmap2.jpg) 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 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/cfg_model.png) 69 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/cfg_opt.png) 70 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/cfg_data.png) 71 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/cfg_train.png) 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 | ![image](https://github.com/DL-Practise/OpenSitUp/blob/main/app.png) 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 --------------------------------------------------------------------------------