diff --git a/src/PaddleClas/deploy/.idea/.gitignore b/src/PaddleClas/deploy/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/src/PaddleClas/deploy/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/src/PaddleClas/deploy/.idea/deploy.iml b/src/PaddleClas/deploy/.idea/deploy.iml new file mode 100644 index 0000000..8a05c6e --- /dev/null +++ b/src/PaddleClas/deploy/.idea/deploy.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/.idea/inspectionProfiles/profiles_settings.xml b/src/PaddleClas/deploy/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/src/PaddleClas/deploy/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/.idea/misc.xml b/src/PaddleClas/deploy/.idea/misc.xml new file mode 100644 index 0000000..d56657a --- /dev/null +++ b/src/PaddleClas/deploy/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/.idea/modules.xml b/src/PaddleClas/deploy/.idea/modules.xml new file mode 100644 index 0000000..1071ae1 --- /dev/null +++ b/src/PaddleClas/deploy/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/.scannerwork/.sonar_lock b/src/PaddleClas/deploy/.scannerwork/.sonar_lock new file mode 100644 index 0000000..e69de29 diff --git a/src/PaddleClas/deploy/.scannerwork/report-task.txt b/src/PaddleClas/deploy/.scannerwork/report-task.txt new file mode 100644 index 0000000..d55dfb8 --- /dev/null +++ b/src/PaddleClas/deploy/.scannerwork/report-task.txt @@ -0,0 +1,6 @@ +projectKey=deploy +serverUrl=http://localhost:9000 +serverVersion=8.1.0.31237 +dashboardUrl=http://localhost:9000/dashboard?id=deploy +ceTaskId=AYA_xvBwrgFtfprwzYuQ +ceTaskUrl=http://localhost:9000/api/ce/task?id=AYA_xvBwrgFtfprwzYuQ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_1.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_1.jpg new file mode 100644 index 0000000..ec10770 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_1.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_10.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_10.jpg new file mode 100644 index 0000000..5fca3bf Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_10.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_100.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_100.jpg new file mode 100644 index 0000000..3588191 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_100.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_11.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_11.jpg new file mode 100644 index 0000000..14f07c9 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_11.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_12.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_12.jpg new file mode 100644 index 0000000..702051a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_12.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_13.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_13.jpg new file mode 100644 index 0000000..01126ea Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_13.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_14.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_14.jpg new file mode 100644 index 0000000..3f8bc89 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_14.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_15.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_15.jpg new file mode 100644 index 0000000..d2431a6 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_15.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_16.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_16.jpg new file mode 100644 index 0000000..d466de8 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_16.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_17.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_17.jpg new file mode 100644 index 0000000..d73830e Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_17.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_18.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_18.jpg new file mode 100644 index 0000000..2330c27 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_18.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_19.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_19.jpg new file mode 100644 index 0000000..76ef557 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_19.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_2.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_2.jpg new file mode 100644 index 0000000..f541386 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_2.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_20.GIF b/src/PaddleClas/deploy/Trees/gallery/0/Image_20.GIF new file mode 100644 index 0000000..c7d40c7 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_20.GIF differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_2001.png b/src/PaddleClas/deploy/Trees/gallery/0/Image_2001.png new file mode 100644 index 0000000..3b4d6ce Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_2001.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_21.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_21.jpg new file mode 100644 index 0000000..6ba0ae5 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_21.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_22.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_22.jpg new file mode 100644 index 0000000..11481a0 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_22.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_23.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_23.jpg new file mode 100644 index 0000000..8df03b9 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_23.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_24.GIF b/src/PaddleClas/deploy/Trees/gallery/0/Image_24.GIF new file mode 100644 index 0000000..6775510 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_24.GIF differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_25.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_25.jpg new file mode 100644 index 0000000..4e6f77a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_25.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_26.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_26.jpg new file mode 100644 index 0000000..8a65677 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_26.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_27.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_27.jpg new file mode 100644 index 0000000..9d458aa Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_27.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_28.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_28.jpg new file mode 100644 index 0000000..1abba95 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_28.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_29.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_29.jpg new file mode 100644 index 0000000..6d94ca7 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_29.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_3.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_3.jpg new file mode 100644 index 0000000..dda97fe Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_3.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_30.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_30.jpg new file mode 100644 index 0000000..884e61d Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_30.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_31.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_31.jpg new file mode 100644 index 0000000..09768ea Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_31.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_32.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_32.jpg new file mode 100644 index 0000000..8963b22 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_32.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_33.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_33.jpg new file mode 100644 index 0000000..76a983b Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_33.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_34.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_34.JPG new file mode 100644 index 0000000..232a661 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_34.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_35.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_35.jpg new file mode 100644 index 0000000..d208c15 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_35.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_36.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_36.jpg new file mode 100644 index 0000000..02d8547 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_36.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_37.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_37.jpg new file mode 100644 index 0000000..9003b1c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_37.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_38.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_38.jpg new file mode 100644 index 0000000..c842b91 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_38.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_39.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_39.jpg new file mode 100644 index 0000000..6ca2d5c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_39.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_4.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_4.jpg new file mode 100644 index 0000000..b9b3795 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_4.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_40.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_40.jpg new file mode 100644 index 0000000..517349e Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_40.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_41.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_41.JPG new file mode 100644 index 0000000..2b15a9a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_41.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_42.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_42.JPG new file mode 100644 index 0000000..c334734 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_42.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_43.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_43.jpg new file mode 100644 index 0000000..bd855bb Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_43.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_44.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_44.jpg new file mode 100644 index 0000000..c0786db Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_44.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_45.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_45.jpg new file mode 100644 index 0000000..e99329c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_45.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_46.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_46.jpg new file mode 100644 index 0000000..8d8e08a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_46.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_47.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_47.jpg new file mode 100644 index 0000000..bb4b665 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_47.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_48.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_48.jpg new file mode 100644 index 0000000..47ea88f Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_48.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_49.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_49.jpg new file mode 100644 index 0000000..0d7298c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_49.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_5.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_5.jpg new file mode 100644 index 0000000..6ccbc9c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_5.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_50.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_50.JPG new file mode 100644 index 0000000..3833fdd Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_50.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_51.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_51.jpg new file mode 100644 index 0000000..9bb379a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_51.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_52.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_52.jpg new file mode 100644 index 0000000..e217583 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_52.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_53.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_53.jpg new file mode 100644 index 0000000..ea90113 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_53.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_54.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_54.jpg new file mode 100644 index 0000000..fe4aadc Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_54.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_55.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_55.jpg new file mode 100644 index 0000000..38dbf05 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_55.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_56.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_56.jpg new file mode 100644 index 0000000..9d150e1 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_56.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_57.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_57.jpg new file mode 100644 index 0000000..2adbf1d Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_57.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_58.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_58.jpg new file mode 100644 index 0000000..14e9595 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_58.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_59.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_59.jpg new file mode 100644 index 0000000..3165ab9 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_59.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_6.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_6.jpg new file mode 100644 index 0000000..90d8f5b Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_6.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_60.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_60.jpg new file mode 100644 index 0000000..b5bed40 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_60.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_61.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_61.jpg new file mode 100644 index 0000000..49a0acb Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_61.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_62.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_62.jpg new file mode 100644 index 0000000..ae3689c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_62.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_63.GIF b/src/PaddleClas/deploy/Trees/gallery/0/Image_63.GIF new file mode 100644 index 0000000..ed1d98a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_63.GIF differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_64.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_64.jpg new file mode 100644 index 0000000..94116a9 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_64.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_65.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_65.JPG new file mode 100644 index 0000000..b1ae445 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_65.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_66.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_66.jpg new file mode 100644 index 0000000..690995d Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_66.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_67.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_67.JPG new file mode 100644 index 0000000..d845f5d Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_67.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_68.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_68.jpg new file mode 100644 index 0000000..6bf3f87 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_68.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_69.png b/src/PaddleClas/deploy/Trees/gallery/0/Image_69.png new file mode 100644 index 0000000..662fee0 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_69.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_7.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_7.jpg new file mode 100644 index 0000000..3588191 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_7.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_70.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_70.jpg new file mode 100644 index 0000000..193e3c5 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_70.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_71.GIF b/src/PaddleClas/deploy/Trees/gallery/0/Image_71.GIF new file mode 100644 index 0000000..6ca874d Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_71.GIF differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_72.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_72.jpg new file mode 100644 index 0000000..cc895ed Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_72.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_73.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_73.jpg new file mode 100644 index 0000000..d2178d0 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_73.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_74.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_74.jpg new file mode 100644 index 0000000..9bc526c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_74.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_75.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_75.jpg new file mode 100644 index 0000000..0822d97 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_75.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_76.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_76.jpg new file mode 100644 index 0000000..d21e900 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_76.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_77.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_77.jpg new file mode 100644 index 0000000..050abd8 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_77.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_78.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_78.jpg new file mode 100644 index 0000000..213b099 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_78.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_79.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_79.jpg new file mode 100644 index 0000000..012ba5d Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_79.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_8.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_8.JPG new file mode 100644 index 0000000..cecf8f8 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_8.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_80.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_80.jpg new file mode 100644 index 0000000..a516319 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_80.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_81.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_81.jpg new file mode 100644 index 0000000..b2fd51c Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_81.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_82.GIF b/src/PaddleClas/deploy/Trees/gallery/0/Image_82.GIF new file mode 100644 index 0000000..63c3cc5 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_82.GIF differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_83.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_83.jpg new file mode 100644 index 0000000..4f6dcd2 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_83.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_84.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_84.jpg new file mode 100644 index 0000000..6d8e7c3 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_84.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_85.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_85.jpg new file mode 100644 index 0000000..b359e03 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_85.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_86.JPG b/src/PaddleClas/deploy/Trees/gallery/0/Image_86.JPG new file mode 100644 index 0000000..274de00 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_86.JPG differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_87.png b/src/PaddleClas/deploy/Trees/gallery/0/Image_87.png new file mode 100644 index 0000000..bf39fe1 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_87.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_88.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_88.jpg new file mode 100644 index 0000000..3a668a4 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_88.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_89.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_89.jpg new file mode 100644 index 0000000..89b8391 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_89.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_9.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_9.jpg new file mode 100644 index 0000000..f2a96ff Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_9.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_90.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_90.jpg new file mode 100644 index 0000000..ea45e0f Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_90.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_91.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_91.jpg new file mode 100644 index 0000000..cb28403 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_91.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_92.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_92.jpg new file mode 100644 index 0000000..427143f Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_92.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_93.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_93.jpg new file mode 100644 index 0000000..4d411b4 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_93.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_94.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_94.jpg new file mode 100644 index 0000000..ec10770 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_94.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_95.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_95.jpg new file mode 100644 index 0000000..f541386 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_95.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_96.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_96.jpg new file mode 100644 index 0000000..dda97fe Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_96.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_97.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_97.jpg new file mode 100644 index 0000000..b9b3795 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_97.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_98.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_98.jpg new file mode 100644 index 0000000..ef34d0e Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_98.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/0/Image_99.jpg b/src/PaddleClas/deploy/Trees/gallery/0/Image_99.jpg new file mode 100644 index 0000000..90d8f5b Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/0/Image_99.jpg differ diff --git a/src/PaddleClas/deploy/Trees/gallery/1/Image_2007.png b/src/PaddleClas/deploy/Trees/gallery/1/Image_2007.png new file mode 100644 index 0000000..b2dcb5f Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/1/Image_2007.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/Image_2002.png b/src/PaddleClas/deploy/Trees/gallery/Image_2002.png new file mode 100644 index 0000000..369b4b7 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/Image_2002.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/Image_2003.png b/src/PaddleClas/deploy/Trees/gallery/Image_2003.png new file mode 100644 index 0000000..7b70f9e Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/Image_2003.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/Image_2004.png b/src/PaddleClas/deploy/Trees/gallery/Image_2004.png new file mode 100644 index 0000000..2720a67 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/Image_2004.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/Image_2005.png b/src/PaddleClas/deploy/Trees/gallery/Image_2005.png new file mode 100644 index 0000000..e92a210 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/Image_2005.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/Image_2006.png b/src/PaddleClas/deploy/Trees/gallery/Image_2006.png new file mode 100644 index 0000000..bf944c4 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/gallery/Image_2006.png differ diff --git a/src/PaddleClas/deploy/Trees/gallery/tree_list.txt b/src/PaddleClas/deploy/Trees/gallery/tree_list.txt new file mode 100644 index 0000000..abb056f --- /dev/null +++ b/src/PaddleClas/deploy/Trees/gallery/tree_list.txt @@ -0,0 +1,2261 @@ +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +0/Image_2001.png tree +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees +1/Image_2007.png trees diff --git a/src/PaddleClas/deploy/Trees/gallery/tree_list_1.txt b/src/PaddleClas/deploy/Trees/gallery/tree_list_1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/PaddleClas/deploy/Trees/gallery/tree_list_all.txt b/src/PaddleClas/deploy/Trees/gallery/tree_list_all.txt new file mode 100644 index 0000000..4e87ed7 --- /dev/null +++ b/src/PaddleClas/deploy/Trees/gallery/tree_list_all.txt @@ -0,0 +1,95 @@ +0/Image_1.jpg tree +0/Image_10.jpg tree +0/Image_100.jpg tree +0/Image_11.jpg tree +0/Image_12.jpg tree +0/Image_13.jpg tree +0/Image_14.jpg tree +0/Image_15.jpg tree +0/Image_16.jpg tree +0/Image_17.jpg tree +0/Image_18.jpg tree +0/Image_19.jpg tree +0/Image_2.jpg tree +0/Image_21.jpg tree +0/Image_22.jpg tree +0/Image_23.jpg tree +0/Image_25.jpg tree +0/Image_26.jpg tree +0/Image_27.jpg tree +0/Image_28.jpg tree +0/Image_29.jpg tree +0/Image_3.jpg tree +0/Image_30.jpg tree +0/Image_31.jpg tree +0/Image_32.jpg tree +0/Image_33.jpg tree +0/Image_34.JPG tree +0/Image_35.jpg tree +0/Image_36.jpg tree +0/Image_37.jpg tree +0/Image_38.jpg tree +0/Image_39.jpg tree +0/Image_4.jpg tree +0/Image_40.jpg tree +0/Image_41.JPG tree +0/Image_42.JPG tree +0/Image_43.jpg tree +0/Image_44.jpg tree +0/Image_45.jpg tree +0/Image_46.jpg tree +0/Image_47.jpg tree +0/Image_48.jpg tree +0/Image_49.jpg tree +0/Image_5.jpg tree +0/Image_50.JPG tree +0/Image_51.jpg tree +0/Image_52.jpg tree +0/Image_53.jpg tree +0/Image_54.jpg tree +0/Image_55.jpg tree +0/Image_56.jpg tree +0/Image_57.jpg tree +0/Image_58.jpg tree +0/Image_59.jpg tree +0/Image_6.jpg tree +0/Image_60.jpg tree +0/Image_61.jpg tree +0/Image_62.jpg tree +0/Image_64.jpg tree +0/Image_65.JPG tree +0/Image_66.jpg tree +0/Image_67.JPG tree +0/Image_68.jpg tree +0/Image_69.png tree +0/Image_7.jpg tree +0/Image_70.jpg tree +0/Image_72.jpg tree +0/Image_73.jpg tree +0/Image_74.jpg tree +0/Image_75.jpg tree +0/Image_76.jpg tree +0/Image_77.jpg tree +0/Image_78.jpg tree +0/Image_79.jpg tree +0/Image_8.JPG tree +0/Image_80.jpg tree +0/Image_81.jpg tree +0/Image_83.jpg tree +0/Image_84.jpg tree +0/Image_85.jpg tree +0/Image_86.JPG tree +0/Image_87.png tree +0/Image_88.jpg tree +0/Image_89.jpg tree +0/Image_9.jpg tree +0/Image_90.jpg tree +0/Image_91.jpg tree +0/Image_92.jpg tree +0/Image_93.jpg tree +0/Image_94.jpg tree +0/Image_95.jpg tree +0/Image_96.jpg tree +0/Image_97.jpg tree +0/Image_98.jpg tree +0/Image_99.jpg tree diff --git a/src/PaddleClas/deploy/Trees/index/id_map.pkl b/src/PaddleClas/deploy/Trees/index/id_map.pkl new file mode 100644 index 0000000..3e774b1 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/index/id_map.pkl differ diff --git a/src/PaddleClas/deploy/Trees/index/vector.index b/src/PaddleClas/deploy/Trees/index/vector.index new file mode 100644 index 0000000..fd1b257 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/index/vector.index differ diff --git a/src/PaddleClas/deploy/Trees/test_images/157333-1868444027.jpg b/src/PaddleClas/deploy/Trees/test_images/157333-1868444027.jpg new file mode 100644 index 0000000..631bdda Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/157333-1868444027.jpg differ diff --git a/src/PaddleClas/deploy/Trees/test_images/202103160813194077.jpg b/src/PaddleClas/deploy/Trees/test_images/202103160813194077.jpg new file mode 100644 index 0000000..6f9cb09 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/202103160813194077.jpg differ diff --git a/src/PaddleClas/deploy/Trees/test_images/202103160813194078.jpg b/src/PaddleClas/deploy/Trees/test_images/202103160813194078.jpg new file mode 100644 index 0000000..95c4b3a Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/202103160813194078.jpg differ diff --git a/src/PaddleClas/deploy/Trees/test_images/90.jpeg b/src/PaddleClas/deploy/Trees/test_images/90.jpeg new file mode 100644 index 0000000..f13b396 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/90.jpeg differ diff --git a/src/PaddleClas/deploy/Trees/test_images/Image_4.png b/src/PaddleClas/deploy/Trees/test_images/Image_4.png new file mode 100644 index 0000000..aa938ce Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/Image_4.png differ diff --git a/src/PaddleClas/deploy/Trees/test_images/Image_5.png b/src/PaddleClas/deploy/Trees/test_images/Image_5.png new file mode 100644 index 0000000..694bc24 Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/Image_5.png differ diff --git a/src/PaddleClas/deploy/Trees/test_images/Image_6.jpg b/src/PaddleClas/deploy/Trees/test_images/Image_6.jpg new file mode 100644 index 0000000..90d8f5b Binary files /dev/null and b/src/PaddleClas/deploy/Trees/test_images/Image_6.jpg differ diff --git a/src/PaddleClas/deploy/__init__.py b/src/PaddleClas/deploy/__init__.py new file mode 100644 index 0000000..eb018c3 --- /dev/null +++ b/src/PaddleClas/deploy/__init__.py @@ -0,0 +1 @@ +from . import utils diff --git a/src/PaddleClas/deploy/configs/ShuffleNetV2_x0_25.yaml b/src/PaddleClas/deploy/configs/ShuffleNetV2_x0_25.yaml new file mode 100644 index 0000000..1246366 --- /dev/null +++ b/src/PaddleClas/deploy/configs/ShuffleNetV2_x0_25.yaml @@ -0,0 +1,129 @@ +# global configs +Global: + checkpoints: null + pretrained_model: null + output_dir: ./output/ + device: cpu + save_interval: 1 + eval_during_train: True + eval_interval: 1 + epochs: 20 + print_batch_step: 10 + use_visualdl: False + # used for static mode and model export + image_shape: [3, 224, 224] + save_inference_dir: ./inference + +# model architecture +Arch: + name: ShuffleNetV2_x0_25 + class_num: 102 + +# loss function config for traing/eval process +Loss: + Train: + - CELoss: + weight: 1.0 + Eval: + - CELoss: + weight: 1.0 + + +Optimizer: + name: Momentum + momentum: 0.9 + lr: + name: Cosine + learning_rate: 0.0125 + warmup_epoch: 5 + regularizer: + name: 'L2' + coeff: 0.00001 + + +# data loader for train and eval +DataLoader: + Train: + dataset: + name: ImageNetDataset + image_root: ./dataset/flowers102/ + cls_label_path: ./dataset/flowers102/train_list.txt + transform_ops: + - DecodeImage: + to_rgb: True + channel_first: False + - RandCropImage: + size: 224 + - RandFlipImage: + flip_code: 1 + - NormalizeImage: + scale: 1.0/255.0 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + + sampler: + name: DistributedBatchSampler + batch_size: 256 + drop_last: False + shuffle: True + loader: + num_workers: 4 + use_shared_memory: True + + Eval: + dataset: + name: ImageNetDataset + image_root: ./dataset/flowers102/ + cls_label_path: ./dataset/flowers102/val_list.txt + transform_ops: + - DecodeImage: + to_rgb: True + channel_first: False + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 1.0/255.0 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + sampler: + name: DistributedBatchSampler + batch_size: 64 + drop_last: False + shuffle: False + loader: + num_workers: 4 + use_shared_memory: True + +Infer: + infer_imgs: docs/images/inference_deployment/whl_demo.jpg + batch_size: 10 + transforms: + - DecodeImage: + to_rgb: True + channel_first: False + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 1.0/255.0 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + PostProcess: + name: Topk + topk: 5 + class_id_map_file: ./dataset/flowers102/flowers102_label_list.txt + +Metric: + Train: + - TopkAcc: + topk: [1, 5] + Eval: + - TopkAcc: + topk: [1, 5] diff --git a/src/PaddleClas/deploy/configs/build_general.yaml b/src/PaddleClas/deploy/configs/build_general.yaml new file mode 100644 index 0000000..a632c99 --- /dev/null +++ b/src/PaddleClas/deploy/configs/build_general.yaml @@ -0,0 +1,36 @@ +Global: + rec_inference_model_dir: "./models/general_PPLCNet_x2_5_lite_v1.0_infer" + batch_size: 32 + use_gpu: False + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + image_root: "./flowers102/gallery/" + index_dir: "./flowers102/index" + data_file: "./flowers102/gallery/train_label.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "IP" + embedding_size: 512 diff --git a/src/PaddleClas/deploy/configs/inference_cartoon.yaml b/src/PaddleClas/deploy/configs/inference_cartoon.yaml new file mode 100644 index 0000000..7d93d98 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_cartoon.yaml @@ -0,0 +1,65 @@ +Global: + infer_imgs: "./recognition_demo_data_v1.1/test_cartoon" + det_inference_model_dir: "./models/ppyolov2_r50vd_dcn_mainbody_v1.0_infer/" + rec_inference_model_dir: "./models/cartoon_rec_ResNet50_iCartoon_v1.0_infer/" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + index_dir: "./recognition_demo_data_v1.1/gallery_cartoon/index/" + image_root: "./recognition_demo_data_v1.1/gallery_cartoon/" + data_file: "./recognition_demo_data_v1.1/gallery_cartoon/data_file.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "IP" + embedding_size: 2048 + batch_size: 32 + return_k: 5 + score_thres: 0.5 \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_cls.yaml b/src/PaddleClas/deploy/configs/inference_cls.yaml new file mode 100644 index 0000000..fc0f0fe --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_cls.yaml @@ -0,0 +1,35 @@ +Global: + infer_imgs: "./images/ILSVRC2012_val_00000010.jpeg" + inference_model_dir: "./models" + batch_size: 1 + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +PreProcess: + transform_ops: + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + channel_num: 3 + - ToCHWImage: + +PostProcess: + main_indicator: Topk + Topk: + topk: 5 + class_id_map_file: "../ppcls/utils/imagenet1k_label_list.txt" + SavePreLabel: + save_dir: ./pre_label/ \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_cls_ch4.yaml b/src/PaddleClas/deploy/configs/inference_cls_ch4.yaml new file mode 100644 index 0000000..9b740ed --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_cls_ch4.yaml @@ -0,0 +1,35 @@ +Global: + infer_imgs: "./images/ILSVRC2012_val_00000010.jpeg" + inference_model_dir: "./models" + batch_size: 1 + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +PreProcess: + transform_ops: + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + channel_num: 4 + - ToCHWImage: + +PostProcess: + main_indicator: Topk + Topk: + topk: 5 + class_id_map_file: "../ppcls/utils/imagenet1k_label_list.txt" + SavePreLabel: + save_dir: ./pre_label/ \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_cls_multilabel.yaml b/src/PaddleClas/deploy/configs/inference_cls_multilabel.yaml new file mode 100644 index 0000000..78912d0 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_cls_multilabel.yaml @@ -0,0 +1,35 @@ +Global: + infer_imgs: "./images/0517_2715693311.jpg" + inference_model_dir: "../inference/" + batch_size: 1 + use_gpu: True + enable_mkldnn: False + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +PreProcess: + transform_ops: + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + channel_num: 3 + - ToCHWImage: + +PostProcess: + main_indicator: MultiLabelTopk + MultiLabelTopk: + topk: 5 + class_id_map_file: None + SavePreLabel: + save_dir: ./pre_label/ \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_det.yaml b/src/PaddleClas/deploy/configs/inference_det.yaml new file mode 100644 index 0000000..c809a02 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_det.yaml @@ -0,0 +1,34 @@ +Global: + infer_imgs: "./images/wangzai.jpg" + det_inference_model_dir: "./models/ppyolov2_r50vd_dcn_mainbody_v1.0_infer" + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 1 + labe_list: + - foreground + + # inference engine config + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_drink.yaml b/src/PaddleClas/deploy/configs/inference_drink.yaml new file mode 100644 index 0000000..d044965 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_drink.yaml @@ -0,0 +1,63 @@ +Global: + infer_imgs: "./drink_dataset_v1.0/test_images/hongniu_1.jpg" + det_inference_model_dir: "./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer" + rec_inference_model_dir: "./models/general_PPLCNet_x2_5_lite_v1.0_infer" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + use_gpu: True + enable_mkldnn: False + cpu_num_threads: 10 + enable_benchmark: False + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + image_root: "./drink_dataset_v1.0/gallery" + index_dir: "./drink_dataset_v1.0/index" + data_file: "./drink_dataset_v1.0/gallery/drink_label.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: " " + dist_type: "IP" + embedding_size: 512 + batch_size: 32 + return_k: 5 + score_thres: 0.4 \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_general.yaml b/src/PaddleClas/deploy/configs/inference_general.yaml new file mode 100644 index 0000000..df5ab58 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_general.yaml @@ -0,0 +1,63 @@ +Global: + infer_imgs: "./drink_dataset_v1.0/test_images/1101.jpeg" + det_inference_model_dir: "./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer" + rec_inference_model_dir: "./models/general_PPLCNet_x2_5_lite_v1.0_infer" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + image_root: "./Trees/gallery/" + index_dir: "./Trees/index" + data_file: "./Trees/gallery/tree_list.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "IP" + embedding_size: 512 + batch_size: 32 + return_k: 5 + score_thres: 0.5 \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_general_binary.yaml b/src/PaddleClas/deploy/configs/inference_general_binary.yaml new file mode 100644 index 0000000..d76dae8 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_general_binary.yaml @@ -0,0 +1,65 @@ +Global: + infer_imgs: "./drink_dataset_v1.0/test_images/001.jpeg" + det_inference_model_dir: "./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer" + rec_inference_model_dir: "./models/general_PPLCNet_x2_5_lite_binary_v1.0_infer" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: + main_indicator: Binarize + Binarize: + method: "sign" + +# indexing engine config +IndexProcess: + index_method: "Flat" # supported: HNSW32, Flat + image_root: "./drink_dataset_v1.0/gallery/" + index_dir: "./drink_dataset_v1.0/index_bin" + data_file: "./drink_dataset_v1.0/gallery/drink_label.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "hamming" + embedding_size: 512 + batch_size: 32 + return_k: 5 + hamming_radius: 100 diff --git a/src/PaddleClas/deploy/configs/inference_logo.yaml b/src/PaddleClas/deploy/configs/inference_logo.yaml new file mode 100644 index 0000000..f78ca25 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_logo.yaml @@ -0,0 +1,63 @@ +Global: + infer_imgs: "./recognition_demo_data_v1.1/test_logo" + det_inference_model_dir: "./models/ppyolov2_r50vd_dcn_mainbody_v1.0_infer/" + rec_inference_model_dir: "./models/logo_rec_ResNet50_Logo3K_v1.0_infer/" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + index_dir: "./recognition_demo_data_v1.1/gallery_logo/index/" + image_root: "./recognition_demo_data_v1.1/gallery_logo/" + data_file: "./recognition_demo_data_v1.1/gallery_logo/data_file.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "IP" + embedding_size: 512 + batch_size: 32 + return_k: 5 + score_thres: 0.5 \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_product.yaml b/src/PaddleClas/deploy/configs/inference_product.yaml new file mode 100644 index 0000000..e7b494c --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_product.yaml @@ -0,0 +1,64 @@ +Global: + infer_imgs: "./recognition_demo_data_v1.1/test_product/daoxiangcunjinzhubing_6.jpg" + det_inference_model_dir: "./models/ppyolov2_r50vd_dcn_mainbody_v1.0_infer" + rec_inference_model_dir: "./models/product_ResNet50_vd_aliproduct_v1.0_infer" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + # inference engine config + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + index_dir: "./recognition_demo_data_v1.1/gallery_product/index" + image_root: "./recognition_demo_data_v1.1/gallery_product/" + data_file: "./recognition_demo_data_v1.1/gallery_product/data_file.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "IP" + embedding_size: 512 + batch_size: 32 + return_k: 5 + score_thres: 0.5 \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_rec.yaml b/src/PaddleClas/deploy/configs/inference_rec.yaml new file mode 100644 index 0000000..e183ef0 --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_rec.yaml @@ -0,0 +1,28 @@ +Global: + infer_imgs: "./images/wangzai.jpg" + rec_inference_model_dir: "./models/product_ResNet50_vd_aliproduct_v1.0_infer" + batch_size: 1 + use_gpu: False + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +RecPreProcess: + transform_ops: + - ResizeImage: + resize_short: 256 + - CropImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null \ No newline at end of file diff --git a/src/PaddleClas/deploy/configs/inference_vehicle.yaml b/src/PaddleClas/deploy/configs/inference_vehicle.yaml new file mode 100644 index 0000000..d99f42a --- /dev/null +++ b/src/PaddleClas/deploy/configs/inference_vehicle.yaml @@ -0,0 +1,63 @@ +Global: + infer_imgs: "./recognition_demo_data_v1.1/test_vehicle/" + det_inference_model_dir: "./models/ppyolov2_r50vd_dcn_mainbody_v1.0_infer/" + rec_inference_model_dir: "./models/vehicle_cls_ResNet50_CompCars_v1.0_infer/" + rec_nms_thresold: 0.05 + + batch_size: 1 + image_shape: [3, 640, 640] + threshold: 0.2 + max_det_results: 5 + labe_list: + - foreground + + use_gpu: True + enable_mkldnn: True + cpu_num_threads: 10 + enable_benchmark: True + use_fp16: False + ir_optim: True + use_tensorrt: False + gpu_mem: 8000 + enable_profile: False + +DetPreProcess: + transform_ops: + - DetResize: + interp: 2 + keep_ratio: false + target_size: [640, 640] + - DetNormalizeImage: + is_scale: true + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + - DetPermute: {} + +DetPostProcess: {} + +RecPreProcess: + transform_ops: + - ResizeImage: + size: 224 + - NormalizeImage: + scale: 0.00392157 + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: '' + - ToCHWImage: + +RecPostProcess: null + +# indexing engine config +IndexProcess: + index_method: "HNSW32" # supported: HNSW32, IVF, Flat + index_dir: "./recognition_demo_data_v1.1/gallery_vehicle/index/" + image_root: "./recognition_demo_data_v1.1/gallery_vehicle/" + data_file: "./recognition_demo_data_v1.1/gallery_vehicle/data_file.txt" + index_operation: "new" # suported: "append", "remove", "new" + delimiter: "\t" + dist_type: "IP" + embedding_size: 512 + batch_size: 32 + return_k: 5 + score_thres: 0.5 \ No newline at end of file diff --git a/src/PaddleClas/deploy/cpp/CMakeLists.txt b/src/PaddleClas/deploy/cpp/CMakeLists.txt new file mode 100644 index 0000000..74c1c72 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/CMakeLists.txt @@ -0,0 +1,225 @@ +project(clas_system CXX C) +cmake_minimum_required(VERSION 3.14) + +option(WITH_MKL "Compile demo with MKL/OpenBlas support, default use MKL." ON) +option(WITH_GPU "Compile demo with GPU/CPU, default use CPU." OFF) +option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static." ON) +option(WITH_TENSORRT "Compile demo with TensorRT." OFF) + +SET(PADDLE_LIB "" CACHE PATH "Location of libraries") +SET(OPENCV_DIR "" CACHE PATH "Location of libraries") +SET(CUDA_LIB "" CACHE PATH "Location of libraries") +SET(CUDNN_LIB "" CACHE PATH "Location of libraries") +SET(TENSORRT_DIR "" CACHE PATH "Compile demo with TensorRT") + +set(DEMO_NAME "clas_system") + +include(external-cmake/yaml-cpp.cmake) +include_directories("${CMAKE_SOURCE_DIR}/") +include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include") +link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib") + +macro(safe_set_static_flag) + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif(${flag_var} MATCHES "/MD") + endforeach(flag_var) +endmacro() + +if (WITH_MKL) + ADD_DEFINITIONS(-DUSE_MKL) +endif() + +if(NOT DEFINED PADDLE_LIB) + message(FATAL_ERROR "please set PADDLE_LIB with -DPADDLE_LIB=/path/paddle/lib") +endif() + +if(NOT DEFINED OPENCV_DIR) + message(FATAL_ERROR "please set OPENCV_DIR with -DOPENCV_DIR=/path/opencv") +endif() + + +if (WIN32) + include_directories("${PADDLE_LIB}/paddle/fluid/inference") + include_directories("${PADDLE_LIB}/paddle/include") + link_directories("${PADDLE_LIB}/paddle/fluid/inference") + find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH) + +else () + find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH) + include_directories("${PADDLE_LIB}/paddle/include") + link_directories("${PADDLE_LIB}/paddle/lib") +endif () +include_directories(${OpenCV_INCLUDE_DIRS}) + +if (WIN32) + add_definitions("/DGOOGLE_GLOG_DLL_DECL=") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT") + if (WITH_STATIC_LIB) + safe_set_static_flag() + add_definitions(-DSTATIC_LIB) + endif() +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -std=c++11") + set(CMAKE_STATIC_LIBRARY_PREFIX "") +endif() +message("flags" ${CMAKE_CXX_FLAGS}) + + +if (WITH_GPU) + if (NOT DEFINED CUDA_LIB OR ${CUDA_LIB} STREQUAL "") + message(FATAL_ERROR "please set CUDA_LIB with -DCUDA_LIB=/path/cuda-8.0/lib64") + endif() + if (NOT WIN32) + if (NOT DEFINED CUDNN_LIB) + message(FATAL_ERROR "please set CUDNN_LIB with -DCUDNN_LIB=/path/cudnn_v7.4/cuda/lib64") + endif() + endif(NOT WIN32) +endif() + +include_directories("${PADDLE_LIB}/third_party/install/protobuf/include") +include_directories("${PADDLE_LIB}/third_party/install/glog/include") +include_directories("${PADDLE_LIB}/third_party/install/gflags/include") +include_directories("${PADDLE_LIB}/third_party/install/xxhash/include") +include_directories("${PADDLE_LIB}/third_party/install/zlib/include") +include_directories("${PADDLE_LIB}/third_party/boost") +include_directories("${PADDLE_LIB}/third_party/eigen3") + +include_directories("${CMAKE_SOURCE_DIR}/") + +if (NOT WIN32) + if (WITH_TENSORRT AND WITH_GPU) + include_directories("${TENSORRT_DIR}/include") + link_directories("${TENSORRT_DIR}/lib") + endif() +endif(NOT WIN32) + +link_directories("${PADDLE_LIB}/third_party/install/zlib/lib") + +link_directories("${PADDLE_LIB}/third_party/install/protobuf/lib") +link_directories("${PADDLE_LIB}/third_party/install/glog/lib") +link_directories("${PADDLE_LIB}/third_party/install/gflags/lib") +link_directories("${PADDLE_LIB}/third_party/install/xxhash/lib") +link_directories("${PADDLE_LIB}/paddle/lib") + + +if(WITH_MKL) + include_directories("${PADDLE_LIB}/third_party/install/mklml/include") + if (WIN32) + set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.lib + ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md.lib) + else () + set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} + ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX}) + execute_process(COMMAND cp -r ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} /usr/lib) + endif () + set(MKLDNN_PATH "${PADDLE_LIB}/third_party/install/mkldnn") + if(EXISTS ${MKLDNN_PATH}) + include_directories("${MKLDNN_PATH}/include") + if (WIN32) + set(MKLDNN_LIB ${MKLDNN_PATH}/lib/mkldnn.lib) + else () + set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0) + endif () + endif() +else() + if (WIN32) + set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/openblas${CMAKE_STATIC_LIBRARY_SUFFIX}) + else () + set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif () +endif() + +# Note: libpaddle_inference_api.so/a must put before libpaddle_fluid.so/a +if(WITH_STATIC_LIB) + if(WIN32) + set(DEPS + ${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX}) + else() + set(DEPS + ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() +else() + if(WIN32) + set(DEPS + ${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX}) + else() + set(DEPS + ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX}) + endif() +endif(WITH_STATIC_LIB) + +if (NOT WIN32) + set(DEPS ${DEPS} + ${MATH_LIB} ${MKLDNN_LIB} + glog gflags protobuf z xxhash yaml-cpp + ) + if(EXISTS "${PADDLE_LIB}/third_party/install/snappystream/lib") + set(DEPS ${DEPS} snappystream) + endif() + if (EXISTS "${PADDLE_LIB}/third_party/install/snappy/lib") + set(DEPS ${DEPS} snappy) + endif() +else() + set(DEPS ${DEPS} + ${MATH_LIB} ${MKLDNN_LIB} + glog gflags_static libprotobuf xxhash libyaml-cppmt) + set(DEPS ${DEPS} libcmt shlwapi) + if (EXISTS "${PADDLE_LIB}/third_party/install/snappy/lib") + set(DEPS ${DEPS} snappy) + endif() + if(EXISTS "${PADDLE_LIB}/third_party/install/snappystream/lib") + set(DEPS ${DEPS} snappystream) + endif() +endif(NOT WIN32) + + +if(WITH_GPU) + if(NOT WIN32) + if (WITH_TENSORRT) + set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX}) + endif() + set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX}) + else() + set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} ) + set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} ) + set(DEPS ${DEPS} ${CUDNN_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() +endif() + + +if (NOT WIN32) + set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread") + set(DEPS ${DEPS} ${EXTERNAL_LIB}) +endif() + +set(DEPS ${DEPS} ${OpenCV_LIBS}) + +include(FetchContent) +include(external-cmake/auto-log.cmake) +include_directories(${FETCHCONTENT_BASE_DIR}/extern_autolog-src) + +AUX_SOURCE_DIRECTORY(./src SRCS) +add_executable(${DEMO_NAME} ${SRCS}) +ADD_DEPENDENCIES(${DEMO_NAME} ext-yaml-cpp) + +target_link_libraries(${DEMO_NAME} ${DEPS}) + +if (WIN32 AND WITH_MKL) + add_custom_command(TARGET ${DEMO_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.dll ./mklml.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md.dll ./libiomp5md.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mkldnn/lib/mkldnn.dll ./mkldnn.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.dll ./release/mklml.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md.dll ./release/libiomp5md.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mkldnn/lib/mkldnn.dll ./release/mkldnn.dll + ) +endif() diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/ILSVRC2012_val_00000666.JPEG b/src/PaddleClas/deploy/cpp/docs/imgs/ILSVRC2012_val_00000666.JPEG new file mode 100644 index 0000000..ebb5625 Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/ILSVRC2012_val_00000666.JPEG differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/cpp_infer_result.png b/src/PaddleClas/deploy/cpp/docs/imgs/cpp_infer_result.png new file mode 100644 index 0000000..6a1adfe Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/cpp_infer_result.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step1.png b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step1.png new file mode 100644 index 0000000..58fdf2f Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step1.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step2.png b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step2.png new file mode 100644 index 0000000..f1b5fd0 Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step2.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step3.png b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step3.png new file mode 100644 index 0000000..cb1b2ae Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step3.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step4.png b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step4.png new file mode 100644 index 0000000..5fc0408 Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step4.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step5.png b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step5.png new file mode 100644 index 0000000..fbb2e4c Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step5.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step6.png b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step6.png new file mode 100644 index 0000000..86a8039 Binary files /dev/null and b/src/PaddleClas/deploy/cpp/docs/imgs/vs2019_step6.png differ diff --git a/src/PaddleClas/deploy/cpp/docs/windows_vs2019_build.md b/src/PaddleClas/deploy/cpp/docs/windows_vs2019_build.md new file mode 100644 index 0000000..6e2b370 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/docs/windows_vs2019_build.md @@ -0,0 +1,119 @@ +# Visual Studio 2019 Community CMake 编译指南 + +PaddleClas在Windows 平台下基于`Visual Studio 2019 Community` 进行了测试。微软从`Visual Studio 2017`开始即支持直接管理`CMake`跨平台编译项目,但是直到`2019`才提供了稳定和完全的支持,所以如果你想使用CMake管理项目编译构建,我们推荐使用`Visual Studio 2019`。如果您希望通过生成`sln解决方案`的方式进行编译,可以参考该文档:[https://zhuanlan.zhihu.com/p/145446681](https://zhuanlan.zhihu.com/p/145446681)。 + + +## 前置条件 +* Visual Studio 2019 +* CUDA 9.0 / CUDA 10.0,cudnn 7.6+ (仅在使用GPU版本的预测库时需要) +* CMake 3.0+ + +请确保系统已经正确安装并配置好上述基本软件,其中: + * 在安装`Visual Studio 2019`时,`工作负载`需要勾选`使用C++的桌面开发`; + * CUDA需要正确安装并设置系统环境变量; + * CMake需要正确安装并将路径添加到系统环境变量中。 + +以下测试基于`Visual Studio 2019 Community`版本。 + +**下面所有示例以工作目录为 `D:\projects`演示**。 + +### Step1: 下载PaddlePaddle C++ 预测库 paddle_inference_install_dir + +PaddlePaddle C++ 预测库针对不同的`CPU`和`CUDA`版本提供了不同的预编译版本,请根据实际情况下载: [C++预测库下载列表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/windows_cpp_inference.html)。 + +解压后`D:\projects\paddle_inference_install_dir`目录包含内容为: + +``` +paddle_inference_install_dir +├── paddle # paddle核心库和头文件 +| +├── third_party # 第三方依赖库和头文件 +| +└── version.txt # 版本和编译信息 +``` + +然后需要将`Paddle预测库`的路径`D:\projects\paddle_inference_install_dir\paddle\lib`添加到系统环境变量`Path`中。 + +### Step2: 安装配置OpenCV + +1. 在OpenCV官网下载适用于Windows平台的3.4.6版本, [下载地址](https://sourceforge.net/projects/opencvlibrary/files/3.4.6/opencv-3.4.6-vc14_vc15.exe/download) +2. 运行下载的可执行文件,将OpenCV解压至指定目录,如`D:\projects\opencv` +3. 配置环境变量,如下流程所示 + - 此电脑(我的电脑)-> 属性 -> 高级系统设置 -> 环境变量 + - 在系统变量中找到Path(如没有,自行创建),并双击编辑 + - 新建,将OpenCV路径填入并保存,如 `D:\projects\opencv\build\x64\vc14\bin` + +### Step3: 使用Visual Studio 2019直接编译CMake + +1. 打开Visual Studio 2019 Community,点击 `继续但无需代码` + +![step2](./imgs/vs2019_step1.png) + +2. 点击: `文件`->`打开`->`CMake` + +![step2.1](./imgs/vs2019_step2.png) + +选择项目代码所在路径,并打开`CMakeList.txt`: + +![step2.2](./imgs/vs2019_step3.png) + +3. 点击:`项目`->`cpp_inference_demo的CMake设置` + +![step3](./imgs/vs2019_step4.png) + +4. 请设置以下参数的值 + + +| 名称 | 值 | 保存到 JSON | +| ----------------------------- | ------------------ | ----------- | +| CMAKE_BACKWARDS_COMPATIBILITY | 3.17 | [√] | +| CMAKE_BUILD_TYPE | RelWithDebInfo | [√] | +| CUDA_LIB | CUDA的库路径 | [√] | +| CUDNN_LIB | CUDNN的库路径 | [√] | +| OpenCV_DIR | OpenCV的安装路径 | [√] | +| PADDLE_LIB | Paddle预测库的路径 | [√] | +| WITH_GPU | [√] | [√] | +| WITH_MKL | [√] | [√] | +| WITH_STATIC_LIB | [√] | [√] | + +**注意**: + +1. `CMAKE_BACKWARDS_COMPATIBILITY` 的值请根据自己 `cmake` 版本设置,`cmake` 版本可以通过命令:`cmake --version` 查询; +2. `CUDA_LIB` 、 `CUDNN_LIB` 的值仅需在使用**GPU版本**预测库时指定,其中CUDA库版本尽量对齐,**使用9.0、10.0版本,不使用9.2、10.1等版本CUDA库**; +3. 在设置 `CUDA_LIB`、`CUDNN_LIB`、`OPENCV_DIR`、`PADDLE_LIB` 时,点击 `浏览`,分别设置相应的路径; + * `CUDA_LIB`和`CUDNN_LIB`:该路径取决于CUDA与CUDNN的安装位置。 + * `OpenCV_DIR`:该路径下需要有`.cmake`文件,一般为`opencv/build/`; + * `PADDLE_LIB`:该路径下需要有`CMakeCache.txt`文件,一般为`paddle_inference_install_dir/`。 +4. 在使用 `CPU` 版预测库时,请不要勾选 `WITH_GPU` - `保存到 JSON`。 + +![step4](./imgs/vs2019_step5.png) + +**设置完成后**, 点击上图中 `保存并生成CMake缓存以加载变量` 。 + +5. 点击`生成`->`全部生成` + +![step6](./imgs/vs2019_step6.png) + + +### Step4: 预测及可视化 + +在完成上述操作后,`Visual Studio 2019` 编译产出的可执行文件 `clas_system.exe` 在 `out\build\x64-Release`目录下,打开`cmd`,并切换到该目录: + +``` +cd D:\projects\PaddleClas\deploy\cpp_infer\out\build\x64-Release +``` +可执行文件`clas_system.exe`即为编译产出的的预测程序,其使用方法如下: + +```shell +.\clas_system.exe D:\projects\PaddleClas\deploy\cpp_infer\tools\config.txt .\docs\ILSVRC2012_val_00008306.JPEG +``` + +上述命令中,第一个参数(`D:\projects\PaddleClas\deploy\cpp_infer\tools\config.txt`)为配置文件路径,第二个参数(`.\docs\ILSVRC2012_val_00008306.JPEG`)为需要预测的图片路径。 + +注意,需要在配置文件中正确设置预测参数,包括所用模型文件的路径(`cls_model_path`和`cls_params_path`)。 + + +### 注意 +* 在Windows下的终端中执行文件exe时,可能会发生乱码的现象,此时需要在终端中输入`CHCP 65001`,将终端的编码方式由GBK编码(默认)改为UTF-8编码,更加具体的解释可以参考这篇博客:[https://blog.csdn.net/qq_35038153/article/details/78430359](https://blog.csdn.net/qq_35038153/article/details/78430359)。 +* 如果需要使用CPU预测,PaddlePaddle在Windows上仅支持avx的CPU预测,目前不支持noavx的CPU预测。 +* 在使用生成的`clas_system.exe`进行预测时,如提示`由于找不到paddle_fluid.dll,无法继续执行代码。重新安装程序可能会解决此问题`,请检查是否将Paddle预测库路径添加到系统环境变量,详见[Step1: 下载PaddlePaddle C++ 预测库 paddle_inference_install_dir](#step1-下载paddlepaddle-c-预测库-paddle_inference_install_dir) diff --git a/src/PaddleClas/deploy/cpp/external-cmake/auto-log.cmake b/src/PaddleClas/deploy/cpp/external-cmake/auto-log.cmake new file mode 100644 index 0000000..9be9c2f --- /dev/null +++ b/src/PaddleClas/deploy/cpp/external-cmake/auto-log.cmake @@ -0,0 +1,12 @@ +find_package(Git REQUIRED) +include(FetchContent) + +set(FETCHCONTENT_BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/third-party") + +FetchContent_Declare( + extern_Autolog + PREFIX autolog + GIT_REPOSITORY https://github.com/LDOUBLEV/AutoLog.git + GIT_TAG main +) +FetchContent_MakeAvailable(extern_Autolog) diff --git a/src/PaddleClas/deploy/cpp/external-cmake/yaml-cpp.cmake b/src/PaddleClas/deploy/cpp/external-cmake/yaml-cpp.cmake new file mode 100644 index 0000000..7bc7f34 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/external-cmake/yaml-cpp.cmake @@ -0,0 +1,30 @@ + +find_package(Git REQUIRED) + +include(ExternalProject) + +message("${CMAKE_BUILD_TYPE}") + +ExternalProject_Add( + ext-yaml-cpp + URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip + URL_MD5 9542d6de397d1fbd649ed468cb5850e6 + CMAKE_ARGS + -DYAML_CPP_BUILD_TESTS=OFF + -DYAML_CPP_BUILD_TOOLS=OFF + -DYAML_CPP_INSTALL=OFF + -DYAML_CPP_BUILD_CONTRIB=OFF + -DMSVC_SHARED_RT=OFF + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} + -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/ext/yaml-cpp/lib + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/ext/yaml-cpp/lib + PREFIX "${CMAKE_BINARY_DIR}/ext/yaml-cpp" + # Disable install step + INSTALL_COMMAND "" + LOG_DOWNLOAD ON + LOG_BUILD 1 +) diff --git a/src/PaddleClas/deploy/cpp/include/cls.h b/src/PaddleClas/deploy/cpp/include/cls.h new file mode 100644 index 0000000..8456d10 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/include/cls.h @@ -0,0 +1,90 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include "paddle_inference_api.h" +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "include/cls_config.h" +#include + +using namespace paddle_infer; + +namespace PaddleClas { + + class Classifier { + public: + explicit Classifier(const ClsConfig &config) { + this->use_gpu_ = config.use_gpu; + this->gpu_id_ = config.gpu_id; + this->gpu_mem_ = config.gpu_mem; + this->cpu_math_library_num_threads_ = config.cpu_threads; + this->use_fp16_ = config.use_fp16; + this->use_mkldnn_ = config.use_mkldnn; + this->use_tensorrt_ = config.use_tensorrt; + this->mean_ = config.mean; + this->std_ = config.std; + this->resize_short_size_ = config.resize_short_size; + this->scale_ = config.scale; + this->crop_size_ = config.crop_size; + this->ir_optim_ = config.ir_optim; + LoadModel(config.cls_model_path, config.cls_params_path); + } + + // Load Paddle inference model + void LoadModel(const std::string &model_path, const std::string ¶ms_path); + + // Run predictor + void Run(cv::Mat &img, std::vector &out_data, std::vector &idx, + std::vector ×); + + private: + std::shared_ptr predictor_; + + bool use_gpu_ = false; + int gpu_id_ = 0; + int gpu_mem_ = 4000; + int cpu_math_library_num_threads_ = 4; + bool use_mkldnn_ = false; + bool use_tensorrt_ = false; + bool use_fp16_ = false; + bool ir_optim_ = true; + + std::vector mean_ = {0.485f, 0.456f, 0.406f}; + std::vector std_ = {0.229f, 0.224f, 0.225f}; + float scale_ = 0.00392157; + + int resize_short_size_ = 256; + int crop_size_ = 224; + + // pre-process + ResizeImg resize_op_; + Normalize normalize_op_; + Permute permute_op_; + CenterCropImg crop_op_; + }; + +} // namespace PaddleClas diff --git a/src/PaddleClas/deploy/cpp/include/cls_config.h b/src/PaddleClas/deploy/cpp/include/cls_config.h new file mode 100644 index 0000000..225e728 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/include/cls_config.h @@ -0,0 +1,133 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#ifdef WIN32 +#define OS_PATH_SEP "\\" +#else +#define OS_PATH_SEP "/" +#endif + +#include "include/utility.h" +#include "yaml-cpp/yaml.h" +#include +#include +#include +#include +#include +#include + +namespace PaddleClas { + + class ClsConfig { + public: + explicit ClsConfig(const std::string &path) { + ReadYamlConfig(path); + this->infer_imgs = + this->config_file["Global"]["infer_imgs"].as(); + this->batch_size = this->config_file["Global"]["batch_size"].as(); + this->use_gpu = this->config_file["Global"]["use_gpu"].as(); + if (this->config_file["Global"]["gpu_id"].IsDefined()) + this->gpu_id = this->config_file["Global"]["gpu_id"].as(); + else + this->gpu_id = 0; + this->gpu_mem = this->config_file["Global"]["gpu_mem"].as(); + this->cpu_threads = + this->config_file["Global"]["cpu_num_threads"].as(); + this->use_mkldnn = this->config_file["Global"]["enable_mkldnn"].as(); + this->use_tensorrt = this->config_file["Global"]["use_tensorrt"].as(); + this->use_fp16 = this->config_file["Global"]["use_fp16"].as(); + this->enable_benchmark = + this->config_file["Global"]["enable_benchmark"].as(); + this->ir_optim = this->config_file["Global"]["ir_optim"].as(); + this->enable_profile = + this->config_file["Global"]["enable_profile"].as(); + this->cls_model_path = + this->config_file["Global"]["inference_model_dir"].as() + + OS_PATH_SEP + "inference.pdmodel"; + this->cls_params_path = + this->config_file["Global"]["inference_model_dir"].as() + + OS_PATH_SEP + "inference.pdiparams"; + this->resize_short_size = + this->config_file["PreProcess"]["transform_ops"][0]["ResizeImage"] + ["resize_short"] + .as(); + this->crop_size = + this->config_file["PreProcess"]["transform_ops"][1]["CropImage"]["size"] + .as(); + this->scale = this->config_file["PreProcess"]["transform_ops"][2] + ["NormalizeImage"]["scale"] + .as(); + this->mean = this->config_file["PreProcess"]["transform_ops"][2] + ["NormalizeImage"]["mean"] + .as < std::vector < float >> (); + this->std = this->config_file["PreProcess"]["transform_ops"][2] + ["NormalizeImage"]["std"] + .as < std::vector < float >> (); + if (this->config_file["Global"]["benchmark"].IsDefined()) + this->benchmark = this->config_file["Global"]["benchmark"].as(); + else + this->benchmark = false; + + if (this->config_file["PostProcess"]["Topk"]["topk"].IsDefined()) + this->topk = this->config_file["PostProcess"]["Topk"]["topk"].as(); + if (this->config_file["PostProcess"]["Topk"]["class_id_map_file"] + .IsDefined()) + this->class_id_map_path = + this->config_file["PostProcess"]["Topk"]["class_id_map_file"] + .as(); + if (this->config_file["PostProcess"]["SavePreLabel"]["save_dir"] + .IsDefined()) + this->label_save_dir = + this->config_file["PostProcess"]["SavePreLabel"]["save_dir"] + .as(); + ReadLabelMap(); + } + + YAML::Node config_file; + bool use_gpu = false; + int gpu_id = 0; + int gpu_mem = 4000; + int cpu_threads = 1; + bool use_mkldnn = false; + bool use_tensorrt = false; + bool use_fp16 = false; + bool benchmark = false; + int batch_size = 1; + bool enable_benchmark = false; + bool ir_optim = true; + bool enable_profile = false; + + std::string cls_model_path; + std::string cls_params_path; + std::string infer_imgs; + + int resize_short_size = 256; + int crop_size = 224; + float scale = 0.00392157; + std::vector mean = {0.485, 0.456, 0.406}; + std::vector std = {0.229, 0.224, 0.225}; + int topk = 5; + std::string class_id_map_path; + std::map id_map; + std::string label_save_dir; + + void PrintConfigInfo(); + + void ReadLabelMap(); + + void ReadYamlConfig(const std::string &path); + }; +} // namespace PaddleClas diff --git a/src/PaddleClas/deploy/cpp/include/preprocess_op.h b/src/PaddleClas/deploy/cpp/include/preprocess_op.h new file mode 100644 index 0000000..48c04e4 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/include/preprocess_op.h @@ -0,0 +1,56 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include +#include +#include +#include +#include + +#include +#include +#include + +using namespace std; + +namespace PaddleClas { + + class Normalize { + public: + virtual void Run(cv::Mat *im, const std::vector &mean, + const std::vector &std, float &scale); + }; + +// RGB -> CHW + class Permute { + public: + virtual void Run(const cv::Mat *im, float *data); + }; + + class CenterCropImg { + public: + virtual void Run(cv::Mat &im, const int crop_size = 224); + }; + + class ResizeImg { + public: + virtual void Run(const cv::Mat &img, cv::Mat &resize_img, int max_size_len); + }; + +} // namespace PaddleClas diff --git a/src/PaddleClas/deploy/cpp/include/utility.h b/src/PaddleClas/deploy/cpp/include/utility.h new file mode 100644 index 0000000..73b594e --- /dev/null +++ b/src/PaddleClas/deploy/cpp/include/utility.h @@ -0,0 +1,46 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" + +namespace PaddleClas { + + class Utility { + public: + static std::vector ReadDict(const std::string &path); + + // template + // inline static size_t argmax(ForwardIterator first, ForwardIterator last) + // { + // return std::distance(first, std::max_element(first, last)); + // } + }; + +} // namespace PaddleClas \ No newline at end of file diff --git a/src/PaddleClas/deploy/cpp/readme.md b/src/PaddleClas/deploy/cpp/readme.md new file mode 100644 index 0000000..ec40f23 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/readme.md @@ -0,0 +1,229 @@ +# 服务器端C++预测 + +本教程将介绍在服务器端部署PaddleClas模型的详细步骤。 + + +## 1. 准备环境 + +### 运行准备 +- Linux环境,推荐使用docker。 +- Windows环境,目前支持基于`Visual Studio 2019 Community`进行编译;此外,如果您希望通过生成`sln解决方案`的方式进行编译,可以参考该文档:[https://zhuanlan.zhihu.com/p/145446681](https://zhuanlan.zhihu.com/p/145446681) + +* 该文档主要介绍基于Linux环境下的PaddleClas C++预测流程,如果需要在Windows环境下使用预测库进行C++预测,具体编译方法请参考[Windows下编译教程](./docs/windows_vs2019_build.md)。 + +### 1.1 编译opencv库 + +* 首先需要从opencv官网上下载在Linux环境下源码编译的包,以3.4.7版本为例,下载及解压缩命令如下: + +``` +wget https://github.com/opencv/opencv/archive/3.4.7.tar.gz +tar -xvf 3.4.7.tar.gz +``` + +最终可以在当前目录下看到`opencv-3.4.7/`的文件夹。 + +* 编译opencv,首先设置opencv源码路径(`root_path`)以及安装路径(`install_path`),`root_path`为下载的opencv源码路径,`install_path`为opencv的安装路径。在本例中,源码路径即为当前目录下的`opencv-3.4.7/`。 + +```shell +cd ./opencv-3.4.7 +export root_path=$PWD +export install_path=${root_path}/opencv3 +``` + +* 然后在opencv源码路径下,按照下面的方式进行编译。 + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DCMAKE_INSTALL_PREFIX=${install_path} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DWITH_IPP=OFF \ + -DBUILD_IPP_IW=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_EIGEN=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib64 \ + -DWITH_ZLIB=ON \ + -DBUILD_ZLIB=ON \ + -DWITH_JPEG=ON \ + -DBUILD_JPEG=ON \ + -DWITH_PNG=ON \ + -DBUILD_PNG=ON \ + -DWITH_TIFF=ON \ + -DBUILD_TIFF=ON + +make -j +make install +``` + +* `make install`完成之后,会在该文件夹下生成opencv头文件和库文件,用于后面的PaddleClas代码编译。 + +以opencv3.4.7版本为例,最终在安装路径下的文件结构如下所示。**注意**:不同的opencv版本,下述的文件结构可能不同。 + +``` +opencv3/ +|-- bin +|-- include +|-- lib64 +|-- share +``` + +### 1.2 下载或者编译Paddle预测库 + +* 有2种方式获取Paddle预测库,下面进行详细介绍。 + +#### 1.2.1 预测库源码编译 +* 如果希望获取最新预测库特性,可以从Paddle github上克隆最新代码,源码编译预测库。 +* 可以参考[Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id16)的说明,从github上获取Paddle代码,然后进行编译,生成最新的预测库。使用git获取代码方法如下。 + +```shell +git clone https://github.com/PaddlePaddle/Paddle.git +``` + +* 进入Paddle目录后,使用如下方法编译。 + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DWITH_CONTRIB=OFF \ + -DWITH_MKL=ON \ + -DWITH_MKLDNN=ON \ + -DWITH_TESTING=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_INFERENCE_API_TEST=OFF \ + -DON_INFER=ON \ + -DWITH_PYTHON=ON +make -j +make inference_lib_dist +``` + +更多编译参数选项可以参考Paddle C++预测库官网:[https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id16](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id16)。 + + +* 编译完成之后,可以在`build/paddle_inference_install_dir/`文件下看到生成了以下文件及文件夹。 + +``` +build/paddle_inference_install_dir/ +|-- CMakeCache.txt +|-- paddle +|-- third_party +|-- version.txt +``` + +其中`paddle`就是之后进行C++预测时所需的Paddle库,`version.txt`中包含当前预测库的版本信息。 + +#### 1.2.2 直接下载安装 + +* [Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id1)上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本,注意必须选择`develop`版本。 + + 以`2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2`的`develop`版本为例,使用下述命令下载并解压: + + +```shell +wget https://paddle-inference-lib.bj.bcebos.com/2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2/paddle_inference.tgz +tar -xvf paddle_inference.tgz +``` + + +最终会在当前的文件夹中生成`paddle_inference/`的子文件夹。 + + +## 2 开始运行 + +### 2.1 将模型导出为inference model + +* 可以参考[模型导出](../../tools/export_model.py),导出`inference model`,用于模型预测。得到预测模型后,假设模型文件放在`inference`目录下,则目录结构如下。 + +``` +inference/ +|--inference.pdmodel +|--inference.pdiparams +``` +**注意**:上述文件中,`inference.pdmodel`文件存储了模型结构信息,`inference.pdiparams`文件存储了模型参数信息。模型目录可以随意设置,但是模型名字不能修改。 + +### 2.2 编译PaddleClas C++预测demo + +* 编译命令如下,其中Paddle C++预测库、opencv等其他依赖库的地址需要换成自己机器上的实际地址。 + + +```shell +sh tools/build.sh +``` + +具体地,`tools/build.sh`中内容如下。 + +```shell +OPENCV_DIR=your_opencv_dir +LIB_DIR=your_paddle_inference_dir +CUDA_LIB_DIR=your_cuda_lib_dir +CUDNN_LIB_DIR=your_cudnn_lib_dir +TENSORRT_DIR=your_tensorrt_lib_dir + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DDEMO_NAME=clas_system \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DWITH_TENSORRT=OFF \ + -DTENSORRT_DIR=${TENSORRT_DIR} \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + +make -j +cd .. +``` + +上述命令中, + +* `OPENCV_DIR`为opencv编译安装的地址(本例中为`opencv-3.4.7/opencv3`文件夹的路径); + +* `LIB_DIR`为下载的Paddle预测库(`paddle_inference`文件夹),或编译生成的Paddle预测库(`build/paddle_inference_install_dir`文件夹)的路径; + +* `CUDA_LIB_DIR`为cuda库文件地址,在docker中为`/usr/local/cuda/lib64`; + +* `CUDNN_LIB_DIR`为cudnn库文件地址,在docker中为`/usr/lib/x86_64-linux-gnu/`。 + +* `TENSORRT_DIR`是tensorrt库文件地址,在dokcer中为`/usr/local/TensorRT6-cuda10.0-cudnn7/`,TensorRT需要结合GPU使用。 + +在执行上述命令,编译完成之后,会在当前路径下生成`build`文件夹,其中生成一个名为`clas_system`的可执行文件。 + + +### 2.3 运行demo +#### 2.3.1 设置配置文件 + +```shell +cp ../configs/inference_cls.yaml tools/ +``` + +根据[python预测推理](../../docs/zh_CN/inference_deployment/python_deploy.md)的`图像分类推理`部分修改好`tools`目录下`inference_cls.yaml`文件。`yaml`文件的参数说明详见[python预测推理](../../docs/zh_CN/inference_deployment/python_deploy.md)。 + +请根据实际存放文件,修改好`Global.infer_imgs`、`Global.inference_model_dir`、`PostProcess.Topk.topk`、`PostProcess.Topk.class_id_map_file`等参数。 + +#### 2.3.2 执行 + +```shell +./build/clas_system -c tools/inference_cls.yaml +# or +./build/clas_system -config tools/inference_cls.yaml +``` + +最终屏幕上会输出结果,如下图所示。 + +
+ +
+ + +其中`class id`表示置信度最高的类别对应的id,score表示图片属于该类别的概率。 diff --git a/src/PaddleClas/deploy/cpp/readme_en.md b/src/PaddleClas/deploy/cpp/readme_en.md new file mode 100644 index 0000000..fe5abe2 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/readme_en.md @@ -0,0 +1,240 @@ +# Server-side C++ inference + + +In this tutorial, we will introduce the detailed steps of deploying PaddleClas models on the server side. + + +## 1. Prepare the environment + +### Environment + +- Linux, docker is recommended. +- Windows, compilation based on `Visual Studio 2019 Community` is supported. In addition, you can refer to [How to use PaddleDetection to make a complete project](https://zhuanlan.zhihu.com/p/145446681) to compile by generating the `sln solution`. +- This document mainly introduces the compilation and inference of PaddleClas C++ in Linux environment. +- If you need to use the Inference Library in Windows environment, please refer to [The compilation tutorial in Windows](./docs/windows_vs2019_build.md) for detailed information. + + +### 1.1 Compile opencv + +* First of all, you need to download the source code compiled package in the Linux environment from the opencv official website. Taking opencv3.4.7 as an example, the download and uncompress command are as follows. + +``` +wget https://github.com/opencv/opencv/archive/3.4.7.tar.gz +tar -xf 3.4.7.tar.gz +``` + +Finally, you can see the folder of `opencv-3.4.7/` in the current directory. + +* Compile opencv, the opencv source path (`root_path`) and installation path (`install_path`) should be set by yourself. Among them, `root_path` is the downloaded opencv source code path, and `install_path` is the installation path of opencv. In this case, the opencv source is `./opencv-3.4.7`. + +```shell +cd ./opencv-3.4.7 +export root_path=$PWD +export install_path=${root_path}/opencv3 +``` + +* After entering the opencv source code path, you can compile it in the following way. + + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DCMAKE_INSTALL_PREFIX=${install_path} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DWITH_IPP=OFF \ + -DBUILD_IPP_IW=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_EIGEN=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib64 \ + -DWITH_ZLIB=ON \ + -DBUILD_ZLIB=ON \ + -DWITH_JPEG=ON \ + -DBUILD_JPEG=ON \ + -DWITH_PNG=ON \ + -DBUILD_PNG=ON \ + -DWITH_TIFF=ON \ + -DBUILD_TIFF=ON + +make -j +make install +``` + +* After `make install` is completed, the opencv header file and library file will be generated in this folder for later PaddleClas source code compilation. + +Take opencv3.4.7 for example, the final file structure under the opencv installation path is as follows. **NOTICE**:The following file structure may be different for different Versions of Opencv. + +``` +opencv3/ +|-- bin +|-- include +|-- lib64 +|-- share +``` + +### 1.2 Compile or download the Paddle Inference Library + +* There are 2 ways to obtain the Paddle Inference Library, described in detail below. + + +#### 1.2.1 Compile from the source code +* If you want to get the latest Paddle Inference Library features, you can download the latest code from Paddle GitHub repository and compile the inference library from the source code. +* You can refer to [Paddle Inference Library](https://www.paddlepaddle.org.cn/documentation/docs/en/develop/guides/05_inference_deployment/inference/build_and_install_lib_en.html#build-from-source-code) to get the Paddle source code from github, and then compile To generate the latest inference library. The method of using git to access the code is as follows. + + +```shell +git clone https://github.com/PaddlePaddle/Paddle.git +``` + +* After entering the Paddle directory, the compilation method is as follows. + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DWITH_CONTRIB=OFF \ + -DWITH_MKL=ON \ + -DWITH_MKLDNN=ON \ + -DWITH_TESTING=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_INFERENCE_API_TEST=OFF \ + -DON_INFER=ON \ + -DWITH_PYTHON=ON +make -j +make inference_lib_dist +``` + +For more compilation parameter options, please refer to the official website of the Paddle C++ inference library:[https://www.paddlepaddle.org.cn/documentation/docs/en/develop/guides/05_inference_deployment/inference/build_and_install_lib_en.html#build-from-source-code](https://www.paddlepaddle.org.cn/documentation/docs/en/develop/guides/05_inference_deployment/inference/build_and_install_lib_en.html#build-from-source-code). + + +* After the compilation process, you can see the following files in the folder of `build/paddle_inference_install_dir/`. + +``` +build/paddle_inference_install_dir/ +|-- CMakeCache.txt +|-- paddle +|-- third_party +|-- version.txt +``` + +Among them, `paddle` is the Paddle library required for C++ prediction later, and `version.txt` contains the version information of the current inference library. + + + +#### 1.2.2 Direct download and installation + +* Different cuda versions of the Linux inference library (based on GCC 4.8.2) are provided on the +[Paddle Inference Library official website](https://www.paddlepaddle.org.cn/documentation/docs/en/develop/guides/05_inference_deployment/inference/build_and_install_lib_en.html). You can view and select the appropriate version of the inference library on the official website. + +* Please select the `develop` version. + +* After downloading, use the following method to uncompress. + +``` +tar -xf paddle_inference.tgz +``` + +Finally you can see the following files in the folder of `paddle_inference/`. + + +## 2. Compile and run the demo + +### 2.1 Export the inference model + +* You can refer to [Model inference](../../tools/export_model.py),export the inference model. After the model is exported, assuming it is placed in the `inference` directory, the directory structure is as follows. + +``` +inference/ +|--cls_infer.pdmodel +|--cls_infer.pdiparams +``` + +**NOTICE**: Among them, `cls_infer.pdmodel` file stores the model structure information and the `cls_infer.pdiparams` file stores the model parameter information.The paths of the two files need to correspond to the parameters of `cls_model_path` and `cls_params_path` in the configuration file `tools/config.txt`. + +### 2.2 Compile PaddleClas C++ inference demo + + +* The compilation commands are as follows. The addresses of Paddle C++ inference library, opencv and other Dependencies need to be replaced with the actual addresses on your own machines. + +```shell +sh tools/build.sh +``` + +Specifically, the content in `tools/build.sh` is as follows. + +```shell +OPENCV_DIR=your_opencv_dir +LIB_DIR=your_paddle_inference_dir +CUDA_LIB_DIR=your_cuda_lib_dir +CUDNN_LIB_DIR=your_cudnn_lib_dir +TENSORRT_DIR=your_tensorrt_lib_dir + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DDEMO_NAME=clas_system \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DWITH_TENSORRT=OFF \ + -DTENSORRT_DIR=${TENSORRT_DIR} \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + +make -j +``` + +In the above parameters of command: + +* `OPENCV_DIR` is the opencv installation path; + +* `LIB_DIR` is the download (`paddle_inference` folder) or the generated Paddle Inference Library path (`build/paddle_inference_install_dir` folder); + +* `CUDA_LIB_DIR` is the cuda library file path, in docker; it is `/usr/local/cuda/lib64`; + +* `CUDNN_LIB_DIR` is the cudnn library file path, in docker it is `/usr/lib/x86_64-linux-gnu/`. + +* `TENSORRT_DIR` is the tensorrt library file path,in dokcer it is `/usr/local/TensorRT6-cuda10.0-cudnn7/`,TensorRT is just enabled for GPU. + +After the compilation is completed, an executable file named `clas_system` will be generated in the `build` folder. + + +### Run the demo +* First, please modify the `tools/config.txt` and `tools/run.sh`. + +* Some key words in `tools/config.txt` is as follows. + * use_gpu: Whether to use GPU. + * gpu_id: GPU id. + * gpu_mem:GPU memory. + * cpu_math_library_num_threads:Number of thread for math library acceleration. + * use_mkldnn:Whether to use mkldnn. + * use_tensorrt: Whether to use tensorRT. + * use_fp16:Whether to use Float16 (half precision), it is just enabled when use_tensorrt is set as 1. + * cls_model_path: Model path of inference model. + * cls_params_path: Params path of inference model. + * resize_short_size:Short side length of the image after resize. + * crop_size:Image size after center crop. + + +* Then execute the following command to complete the classification of an image. + +```shell +sh tools/run.sh +``` + +* The detection results will be shown on the screen, which is as follows. + +
+ +
+ +* In the above results,`class id` represents the id corresponding to the category with the highest confidence, and `score` represents the probability that the image belongs to that category. diff --git a/src/PaddleClas/deploy/cpp/src/cls.cpp b/src/PaddleClas/deploy/cpp/src/cls.cpp new file mode 100644 index 0000000..63d8c5f --- /dev/null +++ b/src/PaddleClas/deploy/cpp/src/cls.cpp @@ -0,0 +1,116 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +namespace PaddleClas { + + void Classifier::LoadModel(const std::string &model_path, + const std::string ¶ms_path) { + paddle_infer::Config config; + config.SetModel(model_path, params_path); + + if (this->use_gpu_) { + config.EnableUseGpu(this->gpu_mem_, this->gpu_id_); + if (this->use_tensorrt_) { + config.EnableTensorRtEngine( + 1 << 20, 1, 3, + this->use_fp16_ ? paddle_infer::Config::Precision::kHalf + : paddle_infer::Config::Precision::kFloat32, + false, false); + } + } else { + config.DisableGpu(); + if (this->use_mkldnn_) { + config.EnableMKLDNN(); + // cache 10 different shapes for mkldnn to avoid memory leak + config.SetMkldnnCacheCapacity(10); + } + config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); + } + + config.SwitchUseFeedFetchOps(false); + // true for multiple input + config.SwitchSpecifyInputNames(true); + + config.SwitchIrOptim(this->ir_optim_); + + config.EnableMemoryOptim(); + config.DisableGlogInfo(); + + this->predictor_ = CreatePredictor(config); + } + + void Classifier::Run(cv::Mat &img, std::vector &out_data, + std::vector &idx, std::vector ×) { + cv::Mat srcimg; + cv::Mat resize_img; + img.copyTo(srcimg); + + auto preprocess_start = std::chrono::system_clock::now(); + this->resize_op_.Run(img, resize_img, this->resize_short_size_); + + this->crop_op_.Run(resize_img, this->crop_size_); + + this->normalize_op_.Run(&resize_img, this->mean_, this->std_, this->scale_); + std::vector input(1 * 3 * resize_img.rows * resize_img.cols, 0.0f); + this->permute_op_.Run(&resize_img, input.data()); + + auto input_names = this->predictor_->GetInputNames(); + auto input_t = this->predictor_->GetInputHandle(input_names[0]); + input_t->Reshape({1, 3, resize_img.rows, resize_img.cols}); + auto preprocess_end = std::chrono::system_clock::now(); + + auto infer_start = std::chrono::system_clock::now(); + input_t->CopyFromCpu(input.data()); + this->predictor_->Run(); + + auto output_names = this->predictor_->GetOutputNames(); + auto output_t = this->predictor_->GetOutputHandle(output_names[0]); + std::vector output_shape = output_t->shape(); + int out_num = std::accumulate(output_shape.begin(), output_shape.end(), 1, + std::multiplies()); + + out_data.resize(out_num); + idx.resize(out_num); + output_t->CopyToCpu(out_data.data()); + auto infer_end = std::chrono::system_clock::now(); + + auto postprocess_start = std::chrono::system_clock::now(); + // int maxPosition = + // max_element(out_data.begin(), out_data.end()) - out_data.begin(); + iota(idx.begin(), idx.end(), 0); + stable_sort(idx.begin(), idx.end(), [&out_data](int i1, int i2) { + return out_data[i1] > out_data[i2]; + }); + auto postprocess_end = std::chrono::system_clock::now(); + + std::chrono::duration preprocess_diff = + preprocess_end - preprocess_start; + times[0] = double(preprocess_diff.count() * 1000); + std::chrono::duration inference_diff = infer_end - infer_start; + double inference_cost_time = double(inference_diff.count() * 1000); + times[1] = inference_cost_time; + std::chrono::duration postprocess_diff = + postprocess_end - postprocess_start; + times[2] = double(postprocess_diff.count() * 1000); + + /* std::cout << "result: " << std::endl; */ + /* std::cout << "\tclass id: " << maxPosition << std::endl; */ + /* std::cout << std::fixed << std::setprecision(10) */ + /* << "\tscore: " << double(out_data[maxPosition]) << std::endl; */ + } +} // namespace PaddleClas diff --git a/src/PaddleClas/deploy/cpp/src/cls_config.cpp b/src/PaddleClas/deploy/cpp/src/cls_config.cpp new file mode 100644 index 0000000..ec3a44f --- /dev/null +++ b/src/PaddleClas/deploy/cpp/src/cls_config.cpp @@ -0,0 +1,52 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +namespace PaddleClas { + + void ClsConfig::PrintConfigInfo() { + std::cout << "=======Paddle Class inference config======" << std::endl; + std::cout << this->config_file << std::endl; + std::cout << "=======End of Paddle Class inference config======" << std::endl; + } + + void ClsConfig::ReadYamlConfig(const std::string &path) { + + try { + this->config_file = YAML::LoadFile(path); + } catch (YAML::BadFile &e) { + std::cout << "Something wrong in yaml file, please check yaml file" + << std::endl; + exit(1); + } + } + + void ClsConfig::ReadLabelMap() { + if (this->class_id_map_path.empty()) { + std::cout << "The Class Label file dose not input" << std::endl; + return; + } + std::ifstream in(this->class_id_map_path); + std::string line; + if (in) { + while (getline(in, line)) { + int split_flag = line.find_first_of(" "); + this->id_map[std::stoi(line.substr(0, split_flag))] = + line.substr(split_flag + 1, line.size()); + } + } + } +}; // namespace PaddleClas diff --git a/src/PaddleClas/deploy/cpp/src/main.cpp b/src/PaddleClas/deploy/cpp/src/main.cpp new file mode 100644 index 0000000..120c4a4 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/src/main.cpp @@ -0,0 +1,137 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; +using namespace cv; +using namespace PaddleClas; + +DEFINE_string(config, +"", "Path of yaml file"); +DEFINE_string(c, +"", "Path of yaml file"); + +int main(int argc, char **argv) { + google::ParseCommandLineFlags(&argc, &argv, true); + std::string yaml_path = ""; + if (FLAGS_config == "" && FLAGS_c == "") { + std::cerr << "[ERROR] usage: " << std::endl + << argv[0] << " -c $yaml_path" << std::endl + << "or:" << std::endl + << argv[0] << " -config $yaml_path" << std::endl; + exit(1); + } else if (FLAGS_config != "") { + yaml_path = FLAGS_config; + } else { + yaml_path = FLAGS_c; + } + ClsConfig config(yaml_path); + config.PrintConfigInfo(); + + std::string path(config.infer_imgs); + + std::vector img_files_list; + if (cv::utils::fs::isDirectory(path)) { + std::vector filenames; + cv::glob(path, filenames); + for (auto f : filenames) { + img_files_list.push_back(f); + } + } else { + img_files_list.push_back(path); + } + + std::cout << "img_file_list length: " << img_files_list.size() << std::endl; + + Classifier classifier(config); + + std::vector cls_times = {0, 0, 0}; + std::vector cls_times_total = {0, 0, 0}; + double infer_time; + std::vector out_data; + std::vector result_index; + int warmup_iter = 5; + bool label_output_equal_flag = true; + for (int idx = 0; idx < img_files_list.size(); ++idx) { + std::string img_path = img_files_list[idx]; + cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR); + if (!srcimg.data) { + std::cerr << "[ERROR] image read failed! image path: " << img_path + << "\n"; + exit(-1); + } + + cv::cvtColor(srcimg, srcimg, cv::COLOR_BGR2RGB); + classifier.Run(srcimg, out_data, result_index, cls_times); + if (label_output_equal_flag and out_data.size() != config.id_map.size()) { + std::cout << "Warning: the label size is not equal to output size!" + << std::endl; + label_output_equal_flag = false; + } + + int max_len = std::min(config.topk, int(out_data.size())); + std::cout << "Current image path: " << img_path << std::endl; + infer_time = cls_times[0] + cls_times[1] + cls_times[2]; + std::cout << "Current total inferen time cost: " << infer_time << " ms." + << std::endl; + for (int i = 0; i < max_len; ++i) { + printf("\tTop%d: class_id: %d, score: %.4f, ", i + 1, result_index[i], + out_data[result_index[i]]); + if (label_output_equal_flag) + printf("label: %s\n", config.id_map[result_index[i]].c_str()); + } + if (idx >= warmup_iter) { + for (int i = 0; i < cls_times.size(); ++i) + cls_times_total[i] += cls_times[i]; + } + } + if (img_files_list.size() > warmup_iter) { + + infer_time = cls_times_total[0] + cls_times_total[1] + cls_times_total[2]; + std::cout << "average time cost in all: " + << infer_time / (img_files_list.size() - warmup_iter) << " ms." + << std::endl; + } + + std::string presion = "fp32"; + if (config.use_fp16) + presion = "fp16"; + if (config.benchmark) { + AutoLogger autolog("Classification", config.use_gpu, config.use_tensorrt, + config.use_mkldnn, config.cpu_threads, 1, + "1, 3, 224, 224", presion, cls_times_total, + img_files_list.size()); + autolog.report(); + } + return 0; +} diff --git a/src/PaddleClas/deploy/cpp/src/preprocess_op.cpp b/src/PaddleClas/deploy/cpp/src/preprocess_op.cpp new file mode 100644 index 0000000..7e86308 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/src/preprocess_op.cpp @@ -0,0 +1,88 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include "paddle_api.h" +#include "paddle_inference_api.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +namespace PaddleClas { + + void Permute::Run(const cv::Mat *im, float *data) { + int rh = im->rows; + int rw = im->cols; + int rc = im->channels(); + for (int i = 0; i < rc; ++i) { + cv::extractChannel(*im, cv::Mat(rh, rw, CV_32FC1, data + i * rh * rw), i); + } + } + + void Normalize::Run(cv::Mat *im, const std::vector &mean, + const std::vector &std, float &scale) { + if (scale) { + (*im).convertTo(*im, CV_32FC3, scale); + } + for (int h = 0; h < im->rows; h++) { + for (int w = 0; w < im->cols; w++) { + im->at(h, w)[0] = + (im->at(h, w)[0] - mean[0]) / std[0]; + im->at(h, w)[1] = + (im->at(h, w)[1] - mean[1]) / std[1]; + im->at(h, w)[2] = + (im->at(h, w)[2] - mean[2]) / std[2]; + } + } + } + + void CenterCropImg::Run(cv::Mat &img, const int crop_size) { + int resize_w = img.cols; + int resize_h = img.rows; + int w_start = int((resize_w - crop_size) / 2); + int h_start = int((resize_h - crop_size) / 2); + cv::Rect rect(w_start, h_start, crop_size, crop_size); + img = img(rect); + } + + void ResizeImg::Run(const cv::Mat &img, cv::Mat &resize_img, + int resize_short_size) { + int w = img.cols; + int h = img.rows; + + float ratio = 1.f; + if (h < w) { + ratio = float(resize_short_size) / float(h); + } else { + ratio = float(resize_short_size) / float(w); + } + + int resize_h = round(float(h) * ratio); + int resize_w = round(float(w) * ratio); + + cv::resize(img, resize_img, cv::Size(resize_w, resize_h)); + } + +} // namespace PaddleClas diff --git a/src/PaddleClas/deploy/cpp/src/utility.cpp b/src/PaddleClas/deploy/cpp/src/utility.cpp new file mode 100644 index 0000000..dbb4549 --- /dev/null +++ b/src/PaddleClas/deploy/cpp/src/utility.cpp @@ -0,0 +1,39 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include + +namespace PaddleClas { + + std::vector Utility::ReadDict(const std::string &path) { + std::ifstream in(path); + std::string line; + std::vector m_vec; + if (in) { + while (getline(in, line)) { + m_vec.push_back(line); + } + } else { + std::cout << "no such label file: " << path << ", exit the program..." + << std::endl; + exit(1); + } + return m_vec; + } + +} // namespace PaddleClas \ No newline at end of file diff --git a/src/PaddleClas/deploy/cpp/tools/build.sh b/src/PaddleClas/deploy/cpp/tools/build.sh new file mode 100644 index 0000000..72447ec --- /dev/null +++ b/src/PaddleClas/deploy/cpp/tools/build.sh @@ -0,0 +1,21 @@ +OPENCV_DIR=/work/project/project/test/opencv-3.4.7/opencv3 +LIB_DIR=/work/project/project/test/paddle_inference/ +CUDA_LIB_DIR=/usr/local/cuda/lib64 +CUDNN_LIB_DIR=/usr/lib/x86_64-linux-gnu/ + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DUSE_TENSORRT=OFF \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + +make -j +cd .. diff --git a/src/PaddleClas/deploy/cpp_shitu/CMakeLists.txt b/src/PaddleClas/deploy/cpp_shitu/CMakeLists.txt new file mode 100644 index 0000000..f412654 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/CMakeLists.txt @@ -0,0 +1,249 @@ +project(pp_shitu CXX C) +cmake_minimum_required(VERSION 3.14) + +option(WITH_MKL "Compile demo with MKL/OpenBlas support, default use MKL." ON) +option(WITH_GPU "Compile demo with GPU/CPU, default use CPU." OFF) +option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static." ON) +option(WITH_TENSORRT "Compile demo with TensorRT." OFF) +option(FAISS_WITH_MKL "Faiss Compile demo with MKL." OFF) + +SET(PADDLE_LIB "" CACHE PATH "Location of libraries") +SET(OPENCV_DIR "" CACHE PATH "Location of libraries") +SET(CUDA_LIB "" CACHE PATH "Location of libraries") +SET(CUDNN_LIB "" CACHE PATH "Location of libraries") +SET(TENSORRT_DIR "" CACHE PATH "Compile demo with TensorRT") +SET(FAISS_DIR "" CACHE PATH "Location of libraries") + +set(DEMO_NAME "pp_shitu") + +if (FAISS_WITH_MKL) + SET(BLAS_NAME "mklml_intel") +else() + SET(BLAS_NAME "openblas") +endif() + +include(external-cmake/yaml-cpp.cmake) +include_directories("${CMAKE_SOURCE_DIR}/") +include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include") +link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib") + +macro(safe_set_static_flag) + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif(${flag_var} MATCHES "/MD") + endforeach(flag_var) +endmacro() + + +if (WITH_MKL) + ADD_DEFINITIONS(-DUSE_MKL) +endif() + +if(NOT DEFINED FAISS_DIR) + message(FATAL_ERROR "please set FAISS_DIR with -DFAISS_DIR=/path/faiss") +endif() + +if(NOT DEFINED PADDLE_LIB) + message(FATAL_ERROR "please set PADDLE_LIB with -DPADDLE_LIB=/path/paddle/lib") +endif() + +if(NOT DEFINED OPENCV_DIR) + message(FATAL_ERROR "please set OPENCV_DIR with -DOPENCV_DIR=/path/opencv") +endif() + +if (WIN32) + include_directories("${FAISS_DIR}/include") + link_directories("${FAISS_DIR}/lib") + find_package(faiss REQUIRED PATHS ${FAISS_DIR}/share/faiss/ NO_DEFAULT_PATH) +else() + find_package(faiss REQUIRED PATHS ${FAISS_DIR}/share/faiss NO_DEFAULT_PATH) + include_directories("${FAISS_DIR}/include") + link_directories("${FAISS_DIR}/lib") +endif() + +if (WIN32) + include_directories("${PADDLE_LIB}/paddle/fluid/inference") + include_directories("${PADDLE_LIB}/paddle/include") + link_directories("${PADDLE_LIB}/paddle/fluid/inference") + find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH) + +else () + find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH) + include_directories("${PADDLE_LIB}/paddle/include") + link_directories("${PADDLE_LIB}/paddle/lib") +endif () +include_directories(${OpenCV_INCLUDE_DIRS}) + +if (WIN32) + add_definitions("/DGOOGLE_GLOG_DLL_DECL=") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT") + if (WITH_STATIC_LIB) + safe_set_static_flag() + add_definitions(-DSTATIC_LIB) + endif() +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -std=c++11") + set(CMAKE_STATIC_LIBRARY_PREFIX "") +endif() +message("flags" ${CMAKE_CXX_FLAGS}) + + +if (WITH_GPU) + if (NOT DEFINED CUDA_LIB OR ${CUDA_LIB} STREQUAL "") + message(FATAL_ERROR "please set CUDA_LIB with -DCUDA_LIB=/path/cuda-8.0/lib64") + endif() + if (NOT WIN32) + if (NOT DEFINED CUDNN_LIB) + message(FATAL_ERROR "please set CUDNN_LIB with -DCUDNN_LIB=/path/cudnn_v7.4/cuda/lib64") + endif() + endif(NOT WIN32) +endif() + +include_directories("${PADDLE_LIB}/third_party/install/protobuf/include") +include_directories("${PADDLE_LIB}/third_party/install/glog/include") +include_directories("${PADDLE_LIB}/third_party/install/gflags/include") +include_directories("${PADDLE_LIB}/third_party/install/xxhash/include") +include_directories("${PADDLE_LIB}/third_party/install/zlib/include") +include_directories("${PADDLE_LIB}/third_party/boost") +include_directories("${PADDLE_LIB}/third_party/eigen3") + +include_directories("${CMAKE_SOURCE_DIR}/") + +if (NOT WIN32) + if (WITH_TENSORRT AND WITH_GPU) + include_directories("${TENSORRT_DIR}/include") + link_directories("${TENSORRT_DIR}/lib") + endif() +endif(NOT WIN32) + +link_directories("${PADDLE_LIB}/third_party/install/zlib/lib") + +link_directories("${PADDLE_LIB}/third_party/install/protobuf/lib") +link_directories("${PADDLE_LIB}/third_party/install/glog/lib") +link_directories("${PADDLE_LIB}/third_party/install/gflags/lib") +link_directories("${PADDLE_LIB}/third_party/install/xxhash/lib") +link_directories("${PADDLE_LIB}/paddle/lib") + + +if(WITH_MKL) + include_directories("${PADDLE_LIB}/third_party/install/mklml/include") + if (WIN32) + set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.lib + ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md.lib) + else () + set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} + ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX}) + execute_process(COMMAND cp -r ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} /usr/lib) + endif () + set(MKLDNN_PATH "${PADDLE_LIB}/third_party/install/mkldnn") + if(EXISTS ${MKLDNN_PATH}) + include_directories("${MKLDNN_PATH}/include") + if (WIN32) + set(MKLDNN_LIB ${MKLDNN_PATH}/lib/mkldnn.lib) + else () + set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0) + endif () + endif() +else() + if (WIN32) + set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/openblas${CMAKE_STATIC_LIBRARY_SUFFIX}) + else () + set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif () +endif() + +# Note: libpaddle_inference_api.so/a must put before libpaddle_fluid.so/a +if(WITH_STATIC_LIB) + if(WIN32) + set(DEPS + ${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX}) + else() + set(DEPS + ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() +else() + if(WIN32) + set(DEPS + ${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX}) + else() + set(DEPS + ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX}) + endif() +endif(WITH_STATIC_LIB) + +if (NOT WIN32) + set(DEPS ${DEPS} + ${MATH_LIB} ${MKLDNN_LIB} + glog gflags protobuf z xxhash yaml-cpp + ) + if(EXISTS "${PADDLE_LIB}/third_party/install/snappystream/lib") + set(DEPS ${DEPS} snappystream) + endif() + if (EXISTS "${PADDLE_LIB}/third_party/install/snappy/lib") + set(DEPS ${DEPS} snappy) + endif() +else() + set(DEPS ${DEPS} + ${MATH_LIB} ${MKLDNN_LIB} + glog gflags_static libprotobuf xxhash libyaml-cppmt) + set(DEPS ${DEPS} libcmt shlwapi) + if (EXISTS "${PADDLE_LIB}/third_party/install/snappy/lib") + set(DEPS ${DEPS} snappy) + endif() + if(EXISTS "${PADDLE_LIB}/third_party/install/snappystream/lib") + set(DEPS ${DEPS} snappystream) + endif() +endif(NOT WIN32) + + +if(WITH_GPU) + if(NOT WIN32) + if (WITH_TENSORRT) + set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX}) + endif() + set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX}) + else() + set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} ) + set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} ) + set(DEPS ${DEPS} ${CUDNN_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() +endif() + + +if (NOT WIN32) + set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread") + set(DEPS ${DEPS} ${EXTERNAL_LIB}) +endif() + +set(DEPS ${DEPS} ${OpenCV_LIBS}) + +include(FetchContent) +include(external-cmake/auto-log.cmake) +include_directories(${FETCHCONTENT_BASE_DIR}/extern_autolog-src) + + +AUX_SOURCE_DIRECTORY(./src SRCS) +add_executable(${DEMO_NAME} ${SRCS}) +ADD_DEPENDENCIES(${DEMO_NAME} ext-yaml-cpp) +target_link_libraries(${DEMO_NAME} ${DEPS}) +target_link_libraries(${DEMO_NAME} ${FAISS_DIR}/lib/libfaiss${CMAKE_STATIC_LIBRARY_SUFFIX}) +target_link_libraries(${DEMO_NAME} ${BLAS_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) + +if (WIN32 AND WITH_MKL) + add_custom_command(TARGET ${DEMO_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.dll ./mklml.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md.dll ./libiomp5md.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mkldnn/lib/mkldnn.dll ./mkldnn.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/mklml.dll ./release/mklml.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md.dll ./release/libiomp5md.dll + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_LIB}/third_party/install/mkldnn/lib/mkldnn.dll ./release/mkldnn.dll + ) +endif() diff --git a/src/PaddleClas/deploy/cpp_shitu/external-cmake/auto-log.cmake b/src/PaddleClas/deploy/cpp_shitu/external-cmake/auto-log.cmake new file mode 100644 index 0000000..9be9c2f --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/external-cmake/auto-log.cmake @@ -0,0 +1,12 @@ +find_package(Git REQUIRED) +include(FetchContent) + +set(FETCHCONTENT_BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/third-party") + +FetchContent_Declare( + extern_Autolog + PREFIX autolog + GIT_REPOSITORY https://github.com/LDOUBLEV/AutoLog.git + GIT_TAG main +) +FetchContent_MakeAvailable(extern_Autolog) diff --git a/src/PaddleClas/deploy/cpp_shitu/external-cmake/yaml-cpp.cmake b/src/PaddleClas/deploy/cpp_shitu/external-cmake/yaml-cpp.cmake new file mode 100644 index 0000000..7bc7f34 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/external-cmake/yaml-cpp.cmake @@ -0,0 +1,30 @@ + +find_package(Git REQUIRED) + +include(ExternalProject) + +message("${CMAKE_BUILD_TYPE}") + +ExternalProject_Add( + ext-yaml-cpp + URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip + URL_MD5 9542d6de397d1fbd649ed468cb5850e6 + CMAKE_ARGS + -DYAML_CPP_BUILD_TESTS=OFF + -DYAML_CPP_BUILD_TOOLS=OFF + -DYAML_CPP_INSTALL=OFF + -DYAML_CPP_BUILD_CONTRIB=OFF + -DMSVC_SHARED_RT=OFF + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} + -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/ext/yaml-cpp/lib + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/ext/yaml-cpp/lib + PREFIX "${CMAKE_BINARY_DIR}/ext/yaml-cpp" + # Disable install step + INSTALL_COMMAND "" + LOG_DOWNLOAD ON + LOG_BUILD 1 +) diff --git a/src/PaddleClas/deploy/cpp_shitu/include/feature_extracter.h b/src/PaddleClas/deploy/cpp_shitu/include/feature_extracter.h new file mode 100644 index 0000000..e83caee --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/feature_extracter.h @@ -0,0 +1,110 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include "paddle_inference_api.h" +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +using namespace paddle_infer; + +namespace Feature { + + class FeatureExtracter { + public: + explicit FeatureExtracter(const YAML::Node &config_file) { + this->use_gpu_ = config_file["Global"]["use_gpu"].as(); + if (config_file["Global"]["gpu_id"].IsDefined()) + this->gpu_id_ = config_file["Global"]["gpu_id"].as(); + else + this->gpu_id_ = 0; + this->gpu_mem_ = config_file["Global"]["gpu_mem"].as(); + this->cpu_math_library_num_threads_ = + config_file["Global"]["cpu_num_threads"].as(); + this->use_mkldnn_ = config_file["Global"]["enable_mkldnn"].as(); + this->use_tensorrt_ = config_file["Global"]["use_tensorrt"].as(); + this->use_fp16_ = config_file["Global"]["use_fp16"].as(); + + this->cls_model_path_ = + config_file["Global"]["rec_inference_model_dir"].as() + + OS_PATH_SEP + "inference.pdmodel"; + this->cls_params_path_ = + config_file["Global"]["rec_inference_model_dir"].as() + + OS_PATH_SEP + "inference.pdiparams"; + this->resize_size_ = + config_file["RecPreProcess"]["transform_ops"][0]["ResizeImage"]["size"] + .as(); + this->scale_ = config_file["RecPreProcess"]["transform_ops"][1]["NormalizeImage"]["scale"].as(); + this->mean_ = config_file["RecPreProcess"]["transform_ops"][1] + ["NormalizeImage"]["mean"] + .as < std::vector < float >> (); + this->std_ = config_file["RecPreProcess"]["transform_ops"][1] + ["NormalizeImage"]["std"] + .as < std::vector < float >> (); + if (config_file["Global"]["rec_feature_normlize"].IsDefined()) + this->feature_norm = + config_file["Global"]["rec_feature_normlize"].as(); + + LoadModel(cls_model_path_, cls_params_path_); + } + + // Load Paddle inference model + void LoadModel(const std::string &model_path, const std::string ¶ms_path); + + // Run predictor + void Run(cv::Mat &img, std::vector &out_data, + std::vector ×); + + void FeatureNorm(std::vector &feature); + + std::shared_ptr predictor_; + + private: + bool use_gpu_ = false; + int gpu_id_ = 0; + int gpu_mem_ = 4000; + int cpu_math_library_num_threads_ = 4; + bool use_mkldnn_ = false; + bool use_tensorrt_ = false; + bool feature_norm = true; + bool use_fp16_ = false; + std::vector mean_ = {0.485f, 0.456f, 0.406f}; + std::vector std_ = {0.229f, 0.224f, 0.225f}; + float scale_ = 0.00392157; + int resize_size_ = 224; + int resize_short_ = 224; + std::string cls_model_path_; + std::string cls_params_path_; + + // pre-process + ResizeImg resize_op_; + Normalize normalize_op_; + Permute permute_op_; + }; + +} // namespace Feature diff --git a/src/PaddleClas/deploy/cpp_shitu/include/nms.h b/src/PaddleClas/deploy/cpp_shitu/include/nms.h new file mode 100644 index 0000000..0295624 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/nms.h @@ -0,0 +1,85 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This code is adpated from opencv(https://github.com/opencv/opencv) + +#include +#include + +template +static inline bool SortScorePairDescend(const std::pair &pair1, + const std::pair &pair2) { + return pair1.first > pair2.first; +} + +float RectOverlap(const Detection::ObjectResult &a, + const Detection::ObjectResult &b) { + float Aa = (a.rect[2] - a.rect[0] + 1) * (a.rect[3] - a.rect[1] + 1); + float Ab = (b.rect[2] - b.rect[0] + 1) * (b.rect[3] - b.rect[1] + 1); + + int iou_w = max(min(a.rect[2], b.rect[2]) - max(a.rect[0], b.rect[0]) + 1, 0); + int iou_h = max(min(a.rect[3], b.rect[3]) - max(a.rect[1], b.rect[1]) + 1, 0); + float Aab = iou_w * iou_h; + return Aab / (Aa + Ab - Aab); +} + +// Get max scores with corresponding indices. +// scores: a set of scores. +// threshold: only consider scores higher than the threshold. +// top_k: if -1, keep all; otherwise, keep at most top_k. +// score_index_vec: store the sorted (score, index) pair. +inline void +GetMaxScoreIndex(const std::vector &det_result, + const float threshold, + std::vector > &score_index_vec) { + // Generate index score pairs. + for (size_t i = 0; i < det_result.size(); ++i) { + if (det_result[i].confidence > threshold) { + score_index_vec.push_back(std::make_pair(det_result[i].confidence, i)); + } + } + + // Sort the score pair according to the scores in descending order + std::stable_sort(score_index_vec.begin(), score_index_vec.end(), + SortScorePairDescend); + + // // Keep top_k scores if needed. + // if (top_k > 0 && top_k < (int)score_index_vec.size()) + // { + // score_index_vec.resize(top_k); + // } +} + +void NMSBoxes(const std::vector det_result, + const float score_threshold, const float nms_threshold, + std::vector &indices) { + int a = 1; + // Get top_k scores (with corresponding indices). + std::vector > score_index_vec; + GetMaxScoreIndex(det_result, score_threshold, score_index_vec); + + // Do nms + indices.clear(); + for (size_t i = 0; i < score_index_vec.size(); ++i) { + const int idx = score_index_vec[i].second; + bool keep = true; + for (int k = 0; k < (int) indices.size() && keep; ++k) { + const int kept_idx = indices[k]; + float overlap = RectOverlap(det_result[idx], det_result[kept_idx]); + keep = overlap <= nms_threshold; + } + if (keep) + indices.push_back(idx); + } +} diff --git a/src/PaddleClas/deploy/cpp_shitu/include/object_detector.h b/src/PaddleClas/deploy/cpp_shitu/include/object_detector.h new file mode 100644 index 0000000..5bfc562 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/object_detector.h @@ -0,0 +1,138 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "paddle_inference_api.h" // NOLINT + +#include "include/preprocess_op_det.h" +#include "include/yaml_config.h" + +using namespace paddle_infer; + +namespace Detection { +// Object Detection Result + struct ObjectResult { + // Rectangle coordinates of detected object: left, right, top, down + std::vector rect; + // Class id of detected object + int class_id; + // Confidence of detected object + float confidence; + }; + +// Generate visualization colormap for each class + std::vector GenerateColorMap(int num_class); + +// Visualiztion Detection Result + cv::Mat VisualizeResult(const cv::Mat &img, + const std::vector &results, + const std::vector &lables, + const std::vector &colormap, const bool is_rbox); + + class ObjectDetector { + public: + explicit ObjectDetector(const YAML::Node &config_file) { + this->use_gpu_ = config_file["Global"]["use_gpu"].as(); + if (config_file["Global"]["gpu_id"].IsDefined()) + this->gpu_id_ = config_file["Global"]["gpu_id"].as(); + this->gpu_mem_ = config_file["Global"]["gpu_mem"].as(); + this->cpu_math_library_num_threads_ = + config_file["Global"]["cpu_num_threads"].as(); + this->use_mkldnn_ = config_file["Global"]["enable_mkldnn"].as(); + this->use_tensorrt_ = config_file["Global"]["use_tensorrt"].as(); + this->use_fp16_ = config_file["Global"]["use_fp16"].as(); + this->model_dir_ = + config_file["Global"]["det_inference_model_dir"].as(); + this->threshold_ = config_file["Global"]["threshold"].as(); + this->max_det_results_ = config_file["Global"]["max_det_results"].as(); + this->image_shape_ = + config_file["Global"]["image_shape"].as < std::vector < int >> (); + this->label_list_ = + config_file["Global"]["labe_list"].as < std::vector < std::string >> (); + this->ir_optim_ = config_file["Global"]["ir_optim"].as(); + this->batch_size_ = config_file["Global"]["batch_size"].as(); + + preprocessor_.Init(config_file["DetPreProcess"]["transform_ops"]); + LoadModel(model_dir_, batch_size_, run_mode); + } + + // Load Paddle inference model + void LoadModel(const std::string &model_dir, const int batch_size = 1, + const std::string &run_mode = "fluid"); + + // Run predictor + void Predict(const std::vector imgs, const int warmup = 0, + const int repeats = 1, + std::vector *result = nullptr, + std::vector *bbox_num = nullptr, + std::vector *times = nullptr); + + const std::vector &GetLabelList() const { + return this->label_list_; + } + + const float &GetThreshold() const { return this->threshold_; } + + private: + bool use_gpu_ = true; + int gpu_id_ = 0; + int gpu_mem_ = 800; + int cpu_math_library_num_threads_ = 6; + std::string run_mode = "fluid"; + bool use_mkldnn_ = false; + bool use_tensorrt_ = false; + bool batch_size_ = 1; + bool use_fp16_ = false; + std::string model_dir_; + float threshold_ = 0.5; + float max_det_results_ = 5; + std::vector image_shape_ = {3, 640, 640}; + std::vector label_list_; + bool ir_optim_ = true; + bool det_permute_ = true; + bool det_postprocess_ = true; + int min_subgraph_size_ = 30; + bool use_dynamic_shape_ = false; + int trt_min_shape_ = 1; + int trt_max_shape_ = 1280; + int trt_opt_shape_ = 640; + bool trt_calib_mode_ = false; + + // Preprocess image and copy data to input buffer + void Preprocess(const cv::Mat &image_mat); + + // Postprocess result + void Postprocess(const std::vector mats, + std::vector *result, std::vector bbox_num, + bool is_rbox); + + std::shared_ptr predictor_; + Preprocessor preprocessor_; + ImageBlob inputs_; + std::vector output_data_; + std::vector out_bbox_num_data_; + }; + +} // namespace Detection diff --git a/src/PaddleClas/deploy/cpp_shitu/include/preprocess_op.h b/src/PaddleClas/deploy/cpp_shitu/include/preprocess_op.h new file mode 100644 index 0000000..db4c6b2 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/preprocess_op.h @@ -0,0 +1,57 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include +#include +#include +#include +#include + +#include +#include +#include + +using namespace std; + +namespace Feature { + + class Normalize { + public: + virtual void Run(cv::Mat *im, const std::vector &mean, + const std::vector &std, float scale); + }; + +// RGB -> CHW + class Permute { + public: + virtual void Run(const cv::Mat *im, float *data); + }; + + class CenterCropImg { + public: + virtual void Run(cv::Mat &im, const int crop_size = 224); + }; + + class ResizeImg { + public: + virtual void Run(const cv::Mat &img, cv::Mat &resize_img, int max_size_len, + int size = 0); + }; + +} // namespace Feature diff --git a/src/PaddleClas/deploy/cpp_shitu/include/preprocess_op_det.h b/src/PaddleClas/deploy/cpp_shitu/include/preprocess_op_det.h new file mode 100644 index 0000000..cd66340 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/preprocess_op_det.h @@ -0,0 +1,158 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace Detection { + +// Object for storing all preprocessed data + class ImageBlob { + public: + // image width and height + std::vector im_shape_; + // Buffer for image data after preprocessing + std::vector im_data_; + // in net data shape(after pad) + std::vector in_net_shape_; + // Evaluation image width and height + // std::vector eval_im_size_f_; + // Scale factor for image size to origin image size + std::vector scale_factor_; + }; + +// Abstraction of preprocessing opration class + class PreprocessOp { + public: + virtual void Init(const YAML::Node &item) = 0; + + virtual void Run(cv::Mat *im, ImageBlob *data) = 0; + }; + + class InitInfo : public PreprocessOp { + public: + virtual void Init(const YAML::Node &item) {} + + virtual void Run(cv::Mat *im, ImageBlob *data); + }; + + class NormalizeImage : public PreprocessOp { + public: + virtual void Init(const YAML::Node &item) { + mean_ = item["mean"].as < std::vector < float >> (); + scale_ = item["std"].as < std::vector < float >> (); + is_scale_ = item["is_scale"].as(); + } + + virtual void Run(cv::Mat *im, ImageBlob *data); + + private: + // CHW or HWC + std::vector mean_; + std::vector scale_; + bool is_scale_; + }; + + class Permute : public PreprocessOp { + public: + virtual void Init(const YAML::Node &item) {} + + virtual void Run(cv::Mat *im, ImageBlob *data); + }; + + class Resize : public PreprocessOp { + public: + virtual void Init(const YAML::Node &item) { + interp_ = item["interp"].as(); + // max_size_ = item["target_size"].as(); + keep_ratio_ = item["keep_ratio"].as(); + target_size_ = item["target_size"].as < std::vector < int >> (); + } + + // Compute best resize scale for x-dimension, y-dimension + std::pair GenerateScale(const cv::Mat &im); + + virtual void Run(cv::Mat *im, ImageBlob *data); + + private: + int interp_ = 2; + bool keep_ratio_; + std::vector target_size_; + std::vector in_net_shape_; + }; + +// Models with FPN need input shape % stride == 0 + class PadStride : public PreprocessOp { + public: + virtual void Init(const YAML::Node &item) { + stride_ = item["stride"].as(); + } + + virtual void Run(cv::Mat *im, ImageBlob *data); + + private: + int stride_; + }; + + class Preprocessor { + public: + void Init(const YAML::Node &config_node) { + // initialize image info at first + ops_["InitInfo"] = std::make_shared(); + for (int i = 0; i < config_node.size(); ++i) { + if (config_node[i]["DetResize"].IsDefined()) { + ops_["Resize"] = std::make_shared(); + ops_["Resize"]->Init(config_node[i]["DetResize"]); + } + + if (config_node[i]["DetNormalizeImage"].IsDefined()) { + ops_["NormalizeImage"] = std::make_shared(); + ops_["NormalizeImage"]->Init(config_node[i]["DetNormalizeImage"]); + } + + if (config_node[i]["DetPermute"].IsDefined()) { + ops_["Permute"] = std::make_shared(); + ops_["Permute"]->Init(config_node[i]["DetPermute"]); + } + + if (config_node[i]["DetPadStrid"].IsDefined()) { + ops_["PadStride"] = std::make_shared(); + ops_["PadStride"]->Init(config_node[i]["DetPadStrid"]); + } + } + } + + void Run(cv::Mat *im, ImageBlob *data); + + public: + static const std::vector RUN_ORDER; + + private: + std::unordered_map > ops_; + }; + +} // namespace Detection diff --git a/src/PaddleClas/deploy/cpp_shitu/include/vector_search.h b/src/PaddleClas/deploy/cpp_shitu/include/vector_search.h new file mode 100644 index 0000000..4b354f7 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/vector_search.h @@ -0,0 +1,70 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once +#ifdef WIN32 +#define OS_PATH_SEP "\\" +#else +#define OS_PATH_SEP "/" +#endif + +#include "yaml-cpp/yaml.h" +#include +#include +#include +#include + +struct SearchResult { + std::vector I; + std::vector D; + int return_k; +}; + +class VectorSearch { +public: + explicit VectorSearch(const YAML::Node &config_file) { + // IndexProcess + this->index_dir = + config_file["IndexProcess"]["index_dir"].as(); + this->return_k = config_file["IndexProcess"]["return_k"].as(); + this->score_thres = config_file["IndexProcess"]["score_thres"].as(); + this->max_query_number = + config_file["Global"]["max_det_results"].as() + 1; + LoadIdMap(); + LoadIndexFile(); + this->I.resize(this->return_k * this->max_query_number); + this->D.resize(this->return_k * this->max_query_number); + }; + + void LoadIdMap(); + + void LoadIndexFile(); + + const SearchResult &Search(float *feature, int query_number); + + const std::string &GetLabel(faiss::Index::idx_t ind); + + const float &GetThreshold() { return this->score_thres; } + +private: + std::string index_dir; + int return_k = 5; + float score_thres = 0.5; + std::map id_map; + faiss::Index *index; + int max_query_number = 6; + std::vector D; + std::vector I; + SearchResult sr; +}; diff --git a/src/PaddleClas/deploy/cpp_shitu/include/yaml_config.h b/src/PaddleClas/deploy/cpp_shitu/include/yaml_config.h new file mode 100644 index 0000000..78243e2 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/include/yaml_config.h @@ -0,0 +1,58 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#ifdef WIN32 +#define OS_PATH_SEP "\\" +#else +#define OS_PATH_SEP "/" +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include "yaml-cpp/yaml.h" + + +class YamlConfig { +public: + explicit YamlConfig(const std::string &path) { + config_file = ReadYamlConfig(path); + } + + static std::vector ReadDict(const std::string &path); + + static std::map ReadIndexId(const std::string &path); + + static YAML::Node ReadYamlConfig(const std::string &path); + + void PrintConfigInfo(); + + YAML::Node config_file; +}; diff --git a/src/PaddleClas/deploy/cpp_shitu/readme.md b/src/PaddleClas/deploy/cpp_shitu/readme.md new file mode 100644 index 0000000..97315ec --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/readme.md @@ -0,0 +1,340 @@ +# 服务器端C++预测 + +本教程将介绍在服务器端部署PP-ShiTU的详细步骤。 + +## 目录 + +- [1.准备环境](#1) + - [1.1 升级cmake](#1.1) + - [1.2 编译opencv库](#1.2) + - [1.3 下载或者编译Paddle预测库](#1.3) + - [1.3.1 预测库源码编译](#1.3.1) + - [1.3.2 直接下载安装](#1.3.2) + - [1.4 安装faiss库](#1.4) +- [2.代码编译](#2) +- [3.运行demo](#3) +- [4.使用自己模型](#4) + + + +## 1. 准备环境 + +### 运行准备 +- Linux环境,推荐使用ubuntu docker。 + + + +### 1.1 升级cmake + +由于依赖库编译需要较高版本的cmake,因此,第一步首先将cmake升级。 + +- 下载最新版本cmake + +```shell +# 当前版本最新为3.22.0,根据实际情况自行下载,建议最新版本 +wget https://github.com/Kitware/CMake/releases/download/v3.22.0/cmake-3.22.0.tar.gz +tar xf cmake-3.22.0.tar.gz +``` + +最终可以在当前目录下看到`cmake-3.22.0/`的文件夹。 + +- 编译cmake,首先设置came源码路径(`root_path`)以及安装路径(`install_path`),`root_path`为下载的came源码路径,`install_path`为came的安装路径。在本例中,源码路径即为当前目录下的`cmake-3.22.0/`。 + +```shell +cd ./cmake-3.22.0 +export root_path=$PWD +export install_path=${root_path}/cmake +``` + +- 然后在cmake源码路径下,按照下面的方式进行编译 + +```shell +./bootstrap --prefix=${install_path} +make -j +make install +``` + +- 设置环境变量 + +```shell +export PATH=${install_path}/bin:$PATH +#检查是否正常使用 +cmake --version +``` + +此时,cmake就可以使用了 + + + +### 1.2 编译opencv库 + +* 首先需要从opencv官网上下载在Linux环境下源码编译的包,以3.4.7版本为例,下载及解压缩命令如下: + +``` +wget https://github.com/opencv/opencv/archive/3.4.7.tar.gz +tar -xvf 3.4.7.tar.gz +``` + +最终可以在当前目录下看到`opencv-3.4.7/`的文件夹。 + +* 编译opencv,首先设置opencv源码路径(`root_path`)以及安装路径(`install_path`),`root_path`为下载的opencv源码路径,`install_path`为opencv的安装路径。在本例中,源码路径即为当前目录下的`opencv-3.4.7/`。 + +```shell +cd ./opencv-3.4.7 +export root_path=$PWD +export install_path=${root_path}/opencv3 +``` + +* 然后在opencv源码路径下,按照下面的方式进行编译。 + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DCMAKE_INSTALL_PREFIX=${install_path} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DWITH_IPP=OFF \ + -DBUILD_IPP_IW=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_EIGEN=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib64 \ + -DWITH_ZLIB=ON \ + -DBUILD_ZLIB=ON \ + -DWITH_JPEG=ON \ + -DBUILD_JPEG=ON \ + -DWITH_PNG=ON \ + -DBUILD_PNG=ON \ + -DWITH_TIFF=ON \ + -DBUILD_TIFF=ON + +make -j +make install +``` + +* `make install`完成之后,会在该文件夹下生成opencv头文件和库文件,用于后面的PaddleClas代码编译。 + +以opencv3.4.7版本为例,最终在安装路径下的文件结构如下所示。**注意**:不同的opencv版本,下述的文件结构可能不同。 + +``` +opencv3/ +|-- bin +|-- include +|-- lib64 +|-- share +``` + + + +### 1.3 下载或者编译Paddle预测库 + +* 有2种方式获取Paddle预测库,下面进行详细介绍。 + + + +#### 1.3.1 预测库源码编译 + +* 如果希望获取最新预测库特性,可以从Paddle github上克隆最新代码,源码编译预测库。 +* 可以参考[Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id16)的说明,从github上获取Paddle代码,然后进行编译,生成最新的预测库。使用git获取代码方法如下。 + +```shell +git clone https://github.com/PaddlePaddle/Paddle.git +``` + +* 进入Paddle目录后,使用如下方法编译。 + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DWITH_CONTRIB=OFF \ + -DWITH_MKL=ON \ + -DWITH_MKLDNN=ON \ + -DWITH_TESTING=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_INFERENCE_API_TEST=OFF \ + -DON_INFER=ON \ + -DWITH_PYTHON=ON +make -j +make inference_lib_dist +``` + +更多编译参数选项可以参考[Paddle C++预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id16)。 + + +* 编译完成之后,可以在`build/paddle_inference_install_dir/`文件下看到生成了以下文件及文件夹。 + +``` +build/paddle_inference_install_dir/ +|-- CMakeCache.txt +|-- paddle +|-- third_party +|-- version.txt +``` + +其中`paddle`就是之后进行C++预测时所需的Paddle库,`version.txt`中包含当前预测库的版本信息。 + + + +#### 1.3.2 直接下载安装 + +* [Paddle预测库官网](https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html)上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本,注意必须选择`develop`版本。 + + 以`https://paddle-inference-lib.bj.bcebos.com/2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2/paddle_inference.tgz`的`develop`版本为例,使用下述命令下载并解压: + + +```shell +wget https://paddle-inference-lib.bj.bcebos.com/2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2/paddle_inference.tgz + +tar -xvf paddle_inference.tgz +``` + + +最终会在当前的文件夹中生成`paddle_inference/`的子文件夹。 + + + +### 1.4 安装faiss库 + +```shell + # 下载 faiss + git clone https://github.com/facebookresearch/faiss.git + cd faiss + export faiss_install_path=$PWD/faiss_install + cmake -B build . -DFAISS_ENABLE_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=${faiss_install_path} + make -C build -j faiss + make -C build install +``` + +在安装`faiss`前,请安装`openblas`,`ubuntu`系统中安装命令如下: + +```shell +apt-get install libopenblas-dev +``` + +注意本教程以安装faiss cpu版本为例,安装时请参考[faiss](https://github.com/facebookresearch/faiss)官网文档,根据需求自行安装。 + + + +## 2. 代码编译 + +编译命令如下,其中Paddle C++预测库、opencv等其他依赖库的地址需要换成自己机器上的实际地址。同时,编译过程中需要下载编译`yaml-cpp`等C++库,请保持联网环境。 + + +```shell +sh tools/build.sh +``` + +具体地,`tools/build.sh`中内容如下,请根据具体路径修改。 + +```shell +OPENCV_DIR=${opencv_install_dir} +LIB_DIR=${paddle_inference_dir} +CUDA_LIB_DIR=/usr/local/cuda/lib64 +CUDNN_LIB_DIR=/usr/lib/x86_64-linux-gnu/ +FAISS_DIR=${faiss_install_dir} +FAISS_WITH_MKL=OFF + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DUSE_TENSORRT=OFF \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + -DFAISS_DIR=${FAISS_DIR} \ + -DFAISS_WITH_MKL=${FAISS_WITH_MKL} + +make -j +cd .. +``` + +上述命令中, + +* `OPENCV_DIR`为opencv编译安装的地址(本例中为`opencv-3.4.7/opencv3`文件夹的路径); +* `LIB_DIR`为下载的Paddle预测库(`paddle_inference`文件夹),或编译生成的Paddle预测库(`build/paddle_inference_install_dir`文件夹)的路径; +* `CUDA_LIB_DIR`为cuda库文件地址,在docker中为`/usr/local/cuda/lib64`; +* `CUDNN_LIB_DIR`为cudnn库文件地址,在docker中为`/usr/lib/x86_64-linux-gnu/`。 +* `TENSORRT_DIR`是tensorrt库文件地址,在dokcer中为`/usr/local/TensorRT6-cuda10.0-cudnn7/`,TensorRT需要结合GPU使用。 +* `FAISS_DIR`是faiss的安装地址 +* `FAISS_WITH_MKL`是指在编译faiss的过程中,是否使用了mkldnn,本文档中编译faiss,没有使用,而使用了openblas,故设置为`OFF`,若使用了mkldnn,则为`ON`. + + +在执行上述命令,编译完成之后,会在当前路径下生成`build`文件夹,其中生成一个名为`pp_shitu`的可执行文件。 + + + +## 3. 运行demo + +- 请参考[识别快速开始文档](../../docs/zh_CN/quick_start/quick_start_recognition.md),下载好相应的 轻量级通用主体检测模型、轻量级通用识别模型及瓶装饮料测试数据并解压。 + + ```shell + mkdir models + cd models + wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar + tar -xf picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar + wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/general_PPLCNet_x2_5_lite_v1.0_infer.tar + tar -xf general_PPLCNet_x2_5_lite_v1.0_infer.tar + cd .. + + mkdir data + cd data + wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v1.0.tar + tar -xf drink_dataset_v1.0.tar + cd .. + ``` + +- 将相应的yaml文件拷到当前文件夹下 + + ```shell + cp ../configs/inference_drink.yaml . + ``` + +- 将`inference_drink.yaml`中的相对路径,改成基于本目录的路径或者绝对路径。涉及到的参数有 + + - Global.infer_imgs :此参数可以是具体的图像地址,也可以是图像集所在的目录 + - Global.det_inference_model_dir : 检测模型存储目录 + - Global.rec_inference_model_dir : 识别模型存储目录 + - IndexProcess.index_dir : 检索库的存储目录,在示例中,检索库在下载的demo数据中。 + +- 字典转换 + + 由于python的检索库的字典,使用`pickle`进行的序列化存储,导致C++不方便读取,因此进行转换 + + ```shell + python tools/transform_id_map.py -c inference_drink.yaml + ``` + + 转换成功后,在`IndexProcess.index_dir`目录下生成`id_map.txt`,方便c++ 读取。 + +- 执行程序 + + ```shell + ./build/pp_shitu -c inference_drink.yaml + # or + ./build/pp_shitu -config inference_drink.yaml + ``` + + 若对图像集进行检索,则可能得到,如下结果。注意,此结果只做展示,具体以实际运行结果为准。 + + 同时,需注意的是,由于opencv 版本问题,会导致图像在预处理的过程中,resize产生细微差别,导致python 和c++结果,轻微不同,如bbox相差几个像素,检索结果小数点后3位diff等。但不会改变最终检索label。 + + ![](../../docs/images/quick_start/shitu_c++_result.png) + + + +## 4. 使用自己模型 + +使用自己训练的模型,可以参考[模型导出](../../docs/zh_CN/inference_deployment/export_model.md),导出`inference model`,用于模型预测。 + +同时注意修改`yaml`文件中具体参数。 diff --git a/src/PaddleClas/deploy/cpp_shitu/readme_en.md b/src/PaddleClas/deploy/cpp_shitu/readme_en.md new file mode 100644 index 0000000..76867c7 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/readme_en.md @@ -0,0 +1,336 @@ +# C++ Inference on Server + +This tutorial details the steps to deploy PP-ShiTU on the server side. + +## Catalogue + +- [1.Prepare the Environment](#1) + - [1.1 Update cmake](#1.1) + - [1.2 Compile opencv Library](#1.2) + - [1.3 Download or Compile Paddle Inference Library](#1.3) + - [1.3.1 Compile the Source of Inference Library](#1.3.1) + - [1.3.2 Direct Download and Installation](#1.3.2) + - [1.4 Install faiss Library](#1.4) +- [2.Code Compilation](#2) +- [3.Run the demo](#3) +- [4.Use Your Own Model](#4) + + + +## 1. Prepare the Environment + +### Environment Preparation + +- Linux environment, ubuntu docker recommended. + + + +### 1.1 Update cmake + +The first step is to upgrade `cmake` considering the requirements of the dependency library compilation. + +- Download the latest version of cmake + +``` +# The latest version is 3.22.0, please download the appropriate one, the latest recommended. +wget https://github.com/Kitware/CMake/releases/download/v3.22.0/cmake-3.22.0.tar.gz +tar xf cmake-3.22.0.tar.gz +``` + +You can find `cmake-3.22.0/` folder in the current directory. + +- To compile cmake, first set the source path of `cmake` (`root_path`) and installation path (`install_path`). In this example, the source path is `cmake-3.22.0/` in the current directory. + +```shell +cd ./cmake-3.22.0 +export root_path=$PWD +export install_path=${root_path}/cmake +``` + +- Then compile under the source path as follows: + +```shell +./bootstrap --prefix=${install_path} +make -j +make install +``` + +- Set environment variables + +```shell +export PATH=${install_path}/bin:$PATH +#Check its well functioning +cmake --version +``` + +cmake is now ready for use. + + + +### 1.2 Compile opencv Library + +- First, download the package for source compilation in Linux environment from the official website of opencv. Taking version 3.4.7 as an example, follow the command below to download and unzip it: + +```shell +wget https://github.com/opencv/opencv/archive/3.4.7.tar.gz +tar -xvf 3.4.7.tar.gz +``` + +You can find`opencv-3.4.7/`folder in the current directory. + +- To compile opencv, first set the source path of opencv(`root_path`) and installation path (`install_path`). In this example, the source path is`opencv-3.4.7/`in the current directory. + +``` +cd ./opencv-3.4.7 +export root_path=$PWD +export install_path=${root_path}/opencv3 +``` + +- Then compile under the source path as follows: + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DCMAKE_INSTALL_PREFIX=${install_path} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DWITH_IPP=OFF \ + -DBUILD_IPP_IW=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_EIGEN=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib64 \ + -DWITH_ZLIB=ON \ + -DBUILD_ZLIB=ON \ + -DWITH_JPEG=ON \ + -DBUILD_JPEG=ON \ + -DWITH_PNG=ON \ + -DBUILD_PNG=ON \ + -DWITH_TIFF=ON \ + -DBUILD_TIFF=ON + +make -j +make install +``` + +- After `make install` is done, opencv header and library files will be generated in this folder for later compilation of PaddleClas code. + +For opencv version 3.4.7, the final file structure under the installation path is shown below. **Note**: The following file structure may vary for different opencv versions. + +``` +opencv3/ +|-- bin +|-- include +|-- lib64 +|-- share +``` + + + +### 1.3 Download or Compile Paddle Inference Library + +- Here we detail 2 ways to obtain Paddle inference library. + + + +#### 1.3.1 Compile the Source of Inference Library + +- To obtain the latest features of the inference library, you can clone the latest code from Paddle github and compile the source code of the library. +- Please refer to the website of [Paddle Inference Library](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_ and_install_lib_cn.html#id16) to get Paddle code from github and then compile it to generate the latest inference library. The method to obtain the code using git is as follows. + +```shell +git clone https://github.com/PaddlePaddle/Paddle.git +``` + +- Adopt the following method to compile after entering Paddle directory. + +```shell +rm -rf build +mkdir build +cd build + +cmake .. \ + -DWITH_CONTRIB=OFF \ + -DWITH_MKL=ON \ + -DWITH_MKLDNN=ON \ + -DWITH_TESTING=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_INFERENCE_API_TEST=OFF \ + -DON_INFER=ON \ + -DWITH_PYTHON=ON +make -j +make inference_lib_dist +``` + +See the official website of [Paddle C++ Inference Library](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html#id16) for more compilation parameters. + +- The following files and folders can be found generated under `build/paddle_inference_install_dir/` after compilation. + +``` +build/paddle_inference_install_dir/ +|-- CMakeCache.txt +|-- paddle +|-- third_party +|-- version.txt +``` + + `paddle` is the Paddle library needed for later C++ inference, and `version.txt` contains the version information of the current inference library. + + + +#### 1.3.2 Direct Download and Installation + +- The Linux inference library of different cuda versions are available on the official website of [Paddle Inference Library ](https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html), where you can choose the appropriate version. Note that you must select the `develop` version. + + For the `develop` version of `https://paddle-inference-lib.bj.bcebos.com/2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2/paddle_inference.tgz`, use the following command to download and unzip it: + +```shell +wget https://paddle-inference-lib.bj.bcebos.com/2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2/paddle_inference.tgz + +tar -xvf paddle_inference.tgz +``` + +The subfolder `paddle_inference/` will finally be created in the current folder. + + + +### 1.4 Install faiss Library + +```shell + # Download faiss + git clone https://github.com/facebookresearch/faiss.git + cd faiss + export faiss_install_path=$PWD/faiss_install + cmake -B build . -DFAISS_ENABLE_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=${faiss_install_path} + make -C build -j faiss + make -C build install +``` + +Please install `openblas` before `faiss`, the installation command in `ubuntu` system is as follows: + +``` +apt-get install libopenblas-dev +``` + +Note that this tutorial installs the cpu version of faiss as an example, please install it as your need by referring to the official documents of [faiss](https://github.com/facebookresearch/faiss). + + + +## 2. Code Compilation + +The command is as follows, where the address of Paddle C++ inference library, opencv and other dependency libraries need to be replaced with the actual address on your own machine. Also, you need to download and compile `yaml-cpp` and other C++ libraries during the compilation, so please keep the network unblocked. + +```shell +sh tools/build.sh +``` + +Specifically, the contents of `tools/build.sh` are as follows, please modify according to the specific path. + +```shell +OPENCV_DIR=${opencv_install_dir} +LIB_DIR=${paddle_inference_dir} +CUDA_LIB_DIR=/usr/local/cuda/lib64 +CUDNN_LIB_DIR=/usr/lib/x86_64-linux-gnu/ +FAISS_DIR=${faiss_install_dir} +FAISS_WITH_MKL=OFF + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DUSE_TENSORRT=OFF \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + -DFAISS_DIR=${FAISS_DIR} \ + -DFAISS_WITH_MKL=${FAISS_WITH_MKL} + +make -j +cd .. +``` + +In the above commands: + +- `OPENCV_DIR` is the address of the opencv compilation and installation (in this case, the path of the `opencv-3.4.7/opencv3` folder). +- `LIB_DIR` is the path of the downloaded Paddle inference library (`paddle_inference` folder), or the generated Paddle inference library after compilation (`build/paddle_inference_install_dir` folder). +- `CUDA_LIB_DIR` is path of the cuda library file, which in docker is `/usr/local/cuda/lib64`. +- `CUDNN_LIB_DIR` is the path of the cudnn library file, which in docker is `/usr/lib/x86_64-linux-gnu/` . +- `TENSORRT_DIR` is the path of the tensorrt library file, which in docker is `/usr/local/TensorRT6-cuda10.0-cudnn7/`. TensorRT needs to be used in combination with GPU. +- `FAISS_DIR` is the installation path of faiss. +- `FAISS_WITH_MKL` means whether mkldnn is used during the compilation of faiss. The compilation in this document employs openbals instead of mkldnn, so it is set to `OFF`, otherwise it is `ON`. + +A `build` folder will be created in the current path after the compilation, which generates an executable file named `pp_shitu`. + + + +## 3. Run the demo + +- Please refer to the [Quick Start of Recognition](../../docs/en/quick_start/quick_start_recognition_en.md), download the corresponding Lightweight Generic Mainbody Detection Model, Lightweight Generic Recognition Model, and the beverage test data and unzip them. + + ```shell + mkdir models + cd models + wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar + tar -xf picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar + wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/general_PPLCNet_x2_5_lite_v1.0_infer.tar + tar -xf general_PPLCNet_x2_5_lite_v1.0_infer.tar + cd .. + + mkdir data + cd data + wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v1.0.tar + tar -xf drink_dataset_v1.0.tar + cd .. + ``` + +- Copy the corresponding yaml file to the current folder + + ``` + cp ../configs/inference_drink.yaml . + ``` + +- Change the relative path in `inference_drink.yaml` to a path based on this directory or an absolute path. The parameters involved are: + + - Global.infer_imgs: This parameter can be a specific image path or the directory where the image set is located + - Global.det_inference_model_dir: The directory where detection models are saved. + - Global.rec_inference_model_dir: The directory where recognition models are saved. + - IndexProcess.index_dir: The storage directory of the retrieval library, in the exmple, the retrieval library is in the downloaded demo data. + +- Transform the ID-Label Map Dictionary + + The id-label map dictionary in python is serialized using `pickle`, which make it hard to read for C++, so the transformation is needed: + + ``` + python tools/transform_id_map.py -c inference_drink.yaml + ``` + + `id_map.txt` is generated in `IndexProcess.index_dir` directory for convenience of C++ reading. + +- Execute the program + + ```shell + ./build/pp_shitu -c inference_drink.yaml + # or + ./build/pp_shitu -config inference_drink.yaml + ``` + + The following results can be obtained after searching the image set. + + At the same time, it should be noticed that a slight difference may occur during the pre-processing of the image due to the version of opencv, resulting in a minor discrepancy in python and c++ results, such as a few pixels for bbox, 3 decimal places for retrieval results, etc. But it has no impact on the final search label. + + [![img](../../docs/images/quick_start/shitu_c++_result.png)](https://github.com/PaddlePaddle/PaddleClas/blob/develop/docs/images/quick_start/shitu_c++_result.png) + + + +## 4. Use Your Own Model + +You can also use your self-trained models. Please refer to [model export](../../docs/en/inference_deployment/export_model_en.md) to export ` inference model` for model inference. + +Mind modifying the specific parameters in the `yaml` file. diff --git a/src/PaddleClas/deploy/cpp_shitu/src/feature_extracter.cpp b/src/PaddleClas/deploy/cpp_shitu/src/feature_extracter.cpp new file mode 100644 index 0000000..37c7590 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/feature_extracter.cpp @@ -0,0 +1,119 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +namespace Feature { + + void FeatureExtracter::LoadModel(const std::string &model_path, + const std::string ¶ms_path) { + paddle_infer::Config config; + config.SetModel(model_path, params_path); + + if (this->use_gpu_) { + config.EnableUseGpu(this->gpu_mem_, this->gpu_id_); + if (this->use_tensorrt_) { + config.EnableTensorRtEngine( + 1 << 20, 1, 3, + this->use_fp16_ ? paddle_infer::Config::Precision::kHalf + : paddle_infer::Config::Precision::kFloat32, + false, false); + } + } else { + config.DisableGpu(); + if (this->use_mkldnn_) { + config.EnableMKLDNN(); + // cache 10 different shapes for mkldnn to avoid memory leak + config.SetMkldnnCacheCapacity(10); + } + config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); + } + + config.SwitchUseFeedFetchOps(false); + // true for multiple input + config.SwitchSpecifyInputNames(true); + + config.SwitchIrOptim(true); + + config.EnableMemoryOptim(); + config.DisableGlogInfo(); + + this->predictor_ = CreatePredictor(config); + } + + void FeatureExtracter::Run(cv::Mat &img, std::vector &out_data, + std::vector ×) { + cv::Mat resize_img; + std::vector time; + + auto preprocess_start = std::chrono::steady_clock::now(); + this->resize_op_.Run(img, resize_img, this->resize_short_, + this->resize_size_); + + this->normalize_op_.Run(&resize_img, this->mean_, this->std_, this->scale_); + std::vector input(1 * 3 * resize_img.rows * resize_img.cols, 0.0f); + this->permute_op_.Run(&resize_img, input.data()); + + auto input_names = this->predictor_->GetInputNames(); + auto input_t = this->predictor_->GetInputHandle(input_names[0]); + input_t->Reshape({1, 3, resize_img.rows, resize_img.cols}); + auto preprocess_end = std::chrono::steady_clock::now(); + + auto infer_start = std::chrono::steady_clock::now(); + input_t->CopyFromCpu(input.data()); + this->predictor_->Run(); + + auto output_names = this->predictor_->GetOutputNames(); + auto output_t = this->predictor_->GetOutputHandle(output_names[0]); + std::vector output_shape = output_t->shape(); + int out_num = std::accumulate(output_shape.begin(), output_shape.end(), 1, + std::multiplies()); + + out_data.resize(out_num); + output_t->CopyToCpu(out_data.data()); + auto infer_end = std::chrono::steady_clock::now(); + + auto postprocess_start = std::chrono::steady_clock::now(); + if (this->feature_norm) + FeatureNorm(out_data); + auto postprocess_end = std::chrono::steady_clock::now(); + + std::chrono::duration preprocess_diff = + preprocess_end - preprocess_start; + time.push_back(double(preprocess_diff.count()) * 1000); + std::chrono::duration inference_diff = infer_end - infer_start; + double inference_cost_time = double(inference_diff.count() * 1000); + time.push_back(inference_cost_time); + // std::chrono::duration postprocess_diff = + // postprocess_end - postprocess_start; + time.push_back(0); + + // std::cout << "result: " << std::endl; + // std::cout << "\tclass id: " << maxPosition << std::endl; + // std::cout << std::fixed << std::setprecision(10) + // << "\tscore: " << double(out_data[maxPosition]) << std::endl; + times[0] += time[0]; + times[1] += time[1]; + times[2] += time[2]; + } + + void FeatureExtracter::FeatureNorm(std::vector &featuer) { + float featuer_sqrt = std::sqrt(std::inner_product( + featuer.begin(), featuer.end(), featuer.begin(), 0.0f)); + for (int i = 0; i < featuer.size(); ++i) + featuer[i] /= featuer_sqrt; + } +} // namespace Feature diff --git a/src/PaddleClas/deploy/cpp_shitu/src/main.cpp b/src/PaddleClas/deploy/cpp_shitu/src/main.cpp new file mode 100644 index 0000000..be37d3a --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/main.cpp @@ -0,0 +1,342 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace cv; + +DEFINE_string(config, +"", "Path of yaml file"); +DEFINE_string(c, +"", "Path of yaml file"); + +void DetPredictImage(const std::vector &batch_imgs, + const std::vector &all_img_paths, + const int batch_size, Detection::ObjectDetector *det, + std::vector &im_result, + std::vector &im_bbox_num, std::vector &det_t, + const bool visual_det = false, + const bool run_benchmark = false, + const std::string &output_dir = "output") { + int steps = ceil(float(all_img_paths.size()) / batch_size); + // printf("total images = %d, batch_size = %d, total steps = %d\n", + // all_img_paths.size(), batch_size, steps); + for (int idx = 0; idx < steps; idx++) { + int left_image_cnt = all_img_paths.size() - idx * batch_size; + if (left_image_cnt > batch_size) { + left_image_cnt = batch_size; + } + // for (int bs = 0; bs < left_image_cnt; bs++) { + // std::string image_file_path = all_img_paths.at(idx * batch_size+bs); + // cv::Mat im = cv::imread(image_file_path, 1); + // batch_imgs.insert(batch_imgs.end(), im); + // } + + // Store all detected result + std::vector result; + std::vector bbox_num; + std::vector det_times; + bool is_rbox = false; + if (run_benchmark) { + det->Predict(batch_imgs, 10, 10, &result, &bbox_num, &det_times); + } else { + det->Predict(batch_imgs, 0, 1, &result, &bbox_num, &det_times); + // get labels and colormap + auto labels = det->GetLabelList(); + auto colormap = Detection::GenerateColorMap(labels.size()); + + int item_start_idx = 0; + for (int i = 0; i < left_image_cnt; i++) { + cv::Mat im = batch_imgs[i]; + int detect_num = 0; + + for (int j = 0; j < bbox_num[i]; j++) { + Detection::ObjectResult item = result[item_start_idx + j]; + if (item.confidence < det->GetThreshold() || item.class_id == -1) { + continue; + } + detect_num += 1; + im_result.push_back(item); + if (visual_det) { + if (item.rect.size() > 6) { + is_rbox = true; + printf( + "class=%d confidence=%.4f rect=[%d %d %d %d %d %d %d %d]\n", + item.class_id, item.confidence, item.rect[0], item.rect[1], + item.rect[2], item.rect[3], item.rect[4], item.rect[5], + item.rect[6], item.rect[7]); + } else { + printf("class=%d confidence=%.4f rect=[%d %d %d %d]\n", + item.class_id, item.confidence, item.rect[0], item.rect[1], + item.rect[2], item.rect[3]); + } + } + } + im_bbox_num.push_back(detect_num); + item_start_idx = item_start_idx + bbox_num[i]; + + // Visualization result + if (visual_det) { + std::cout << all_img_paths.at(idx * batch_size + i) + << " The number of detected box: " << detect_num + << std::endl; + cv::Mat vis_img = Detection::VisualizeResult(im, im_result, labels, + colormap, is_rbox); + std::vector compression_params; + compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); + compression_params.push_back(95); + std::string output_path(output_dir); + if (output_dir.rfind(OS_PATH_SEP) != output_dir.size() - 1) { + output_path += OS_PATH_SEP; + } + std::string image_file_path = all_img_paths.at(idx * batch_size + i); + output_path += + image_file_path.substr(image_file_path.find_last_of('/') + 1); + cv::imwrite(output_path, vis_img, compression_params); + printf("Visualized output saved as %s\n", output_path.c_str()); + } + } + } + det_t[0] += det_times[0]; + det_t[1] += det_times[1]; + det_t[2] += det_times[2]; + } +} + +void PrintResult(std::string &img_path, + std::vector &det_result, + std::vector &indeices, VectorSearch &vector_search, + SearchResult &search_result) { + printf("%s:\n", img_path.c_str()); + for (int i = 0; i < indeices.size(); ++i) { + int t = indeices[i]; + printf("\tresult%d: bbox[%d, %d, %d, %d], score: %f, label: %s\n", i, + det_result[t].rect[0], det_result[t].rect[1], det_result[t].rect[2], + det_result[t].rect[3], det_result[t].confidence, + vector_search.GetLabel(search_result.I[search_result.return_k * t]) + .c_str()); + } +} + +int main(int argc, char **argv) { + google::ParseCommandLineFlags(&argc, &argv, true); + std::string yaml_path = ""; + if (FLAGS_config == "" && FLAGS_c == "") { + std::cerr << "[ERROR] usage: " << std::endl + << argv[0] << " -c $yaml_path" << std::endl + << "or:" << std::endl + << argv[0] << " -config $yaml_path" << std::endl; + exit(1); + } else if (FLAGS_config != "") { + yaml_path = FLAGS_config; + } else { + yaml_path = FLAGS_c; + } + + YamlConfig config(yaml_path); + config.PrintConfigInfo(); + + // initialize detector, rec_Model, vector_search + Feature::FeatureExtracter feature_extracter(config.config_file); + Detection::ObjectDetector detector(config.config_file); + VectorSearch searcher(config.config_file); + + // config + const int batch_size = config.config_file["Global"]["batch_size"].as(); + bool visual_det = false; + if (config.config_file["Global"]["visual_det"].IsDefined()) { + visual_det = config.config_file["Global"]["visual_det"].as(); + } + bool benchmark = false; + if (config.config_file["Global"]["benchmark"].IsDefined()) { + benchmark = config.config_file["Global"]["benchmark"].as(); + } + int max_det_results = 5; + if (config.config_file["Global"]["max_det_results"].IsDefined()) { + max_det_results = config.config_file["Global"]["max_det_results"].as(); + } + float rec_nms_thresold = 0.05; + if (config.config_file["Global"]["rec_nms_thresold"].IsDefined()) { + rec_nms_thresold = + config.config_file["Global"]["rec_nms_thresold"].as(); + } + + // load image_file_path + std::string path = + config.config_file["Global"]["infer_imgs"].as(); + std::vector img_files_list; + if (cv::utils::fs::isDirectory(path)) { + std::vector filenames; + cv::glob(path, filenames); + for (auto f : filenames) { + img_files_list.push_back(f); + } + } else { + img_files_list.push_back(path); + } + std::cout << "img_file_list length: " << img_files_list.size() << std::endl; + // for time log + std::vector cls_times = {0, 0, 0}; + std::vector det_times = {0, 0, 0}; + std::vector search_times = {0, 0, 0}; + int instance_num = 0; + // for read images + std::vector batch_imgs; + std::vector img_paths; + // for detection + std::vector det_result; + std::vector det_bbox_num; + // for vector search + std::vector features; + std::vector feature; + // for nms + std::vector indeices; + + int warmup_iter = img_files_list.size() > 5 ? 5 : img_files_list.size(); + if (benchmark) { + img_files_list.insert(img_files_list.begin(), img_files_list.begin(), + img_files_list.begin() + warmup_iter); + } + + for (int idx = 0; idx < img_files_list.size(); ++idx) { + std::string img_path = img_files_list[idx]; + cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR); + if (!srcimg.data) { + std::cerr << "[ERROR] image read failed! image path: " << img_path + << "\n"; + exit(-1); + } + cv::cvtColor(srcimg, srcimg, cv::COLOR_BGR2RGB); + + batch_imgs.push_back(srcimg); + img_paths.push_back(img_path); + + // step1: get all detection results + DetPredictImage(batch_imgs, img_paths, batch_size, &detector, det_result, + det_bbox_num, det_times, visual_det, false); + + // select max_det_results bbox + if (det_result.size() > max_det_results) { + det_result.resize(max_det_results); + } + instance_num += det_result.size(); + + // step2: add the whole image for recognition to improve recall + Detection::ObjectResult result_whole_img = { + {0, 0, srcimg.cols - 1, srcimg.rows - 1}, 0, 1.0}; + det_result.push_back(result_whole_img); + det_bbox_num[0] = det_result.size() + 1; + + // step3: extract feature for all boxes in an inmage + SearchResult search_result; + for (int j = 0; j < det_result.size(); ++j) { + int w = det_result[j].rect[2] - det_result[j].rect[0]; + int h = det_result[j].rect[3] - det_result[j].rect[1]; + cv::Rect rect(det_result[j].rect[0], det_result[j].rect[1], w, h); + cv::Mat crop_img = srcimg(rect); + feature_extracter.Run(crop_img, feature, cls_times); + features.insert(features.end(), feature.begin(), feature.end()); + } + + // step4: get search result + auto search_start = std::chrono::steady_clock::now(); + search_result = searcher.Search(features.data(), det_result.size()); + auto search_end = std::chrono::steady_clock::now(); + + // nms for search result + for (int i = 0; i < det_result.size(); ++i) { + det_result[i].confidence = search_result.D[search_result.return_k * i]; + } + NMSBoxes(det_result, searcher.GetThreshold(), rec_nms_thresold, indeices); + auto nms_end = std::chrono::steady_clock::now(); + std::chrono::duration search_diff = search_end - search_start; + search_times[1] += double(search_diff.count() * 1000); + + std::chrono::duration nms_diff = nms_end - search_end; + search_times[2] += double(nms_diff.count() * 1000); + + // print result + if (not benchmark or (benchmark and idx >= warmup_iter)) + PrintResult(img_path, det_result, indeices, searcher, search_result); + + // for postprocess + batch_imgs.clear(); + img_paths.clear(); + det_bbox_num.clear(); + det_result.clear(); + feature.clear(); + features.clear(); + indeices.clear(); + if (benchmark and warmup_iter == idx + 1) { + det_times = {0, 0, 0}; + cls_times = {0, 0, 0}; + search_times = {0, 0, 0}; + instance_num = 0; + } + } + + if (benchmark) { + std::string presion = "fp32"; + if (config.config_file["Global"]["use_fp16"].IsDefined() and + config.config_file["Global"]["use_fp16"].as()) + presion = "fp16"; + bool use_gpu = config.config_file["Global"]["use_gpu"].as(); + bool use_tensorrt = config.config_file["Global"]["use_tensorrt"].as(); + bool enable_mkldnn = + config.config_file["Global"]["enable_mkldnn"].as(); + int cpu_num_threads = + config.config_file["Global"]["cpu_num_threads"].as(); + int batch_size = config.config_file["Global"]["batch_size"].as(); + std::vector shape = + config.config_file["Global"]["image_shape"].as < std::vector < int >> (); + std::string det_shape = std::to_string(shape[0]); + for (int i = 1; i < shape.size(); ++i) + det_shape = det_shape + ", " + std::to_string(shape[i]); + + AutoLogger autolog_det("Det", use_gpu, use_tensorrt, enable_mkldnn, + cpu_num_threads, batch_size, det_shape, presion, + det_times, img_files_list.size() - warmup_iter); + autolog_det.report(); + AutoLogger autolog_rec("Rec", use_gpu, use_tensorrt, enable_mkldnn, + cpu_num_threads, batch_size, "3, 224, 224", presion, + cls_times, instance_num); + autolog_rec.report(); + AutoLogger autolog_search("Search", false, use_tensorrt, enable_mkldnn, + cpu_num_threads, batch_size, "dynamic", presion, + search_times, instance_num); + autolog_search.report(); + } + return 0; +} diff --git a/src/PaddleClas/deploy/cpp_shitu/src/object_detector.cpp b/src/PaddleClas/deploy/cpp_shitu/src/object_detector.cpp new file mode 100644 index 0000000..03b02b9 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/object_detector.cpp @@ -0,0 +1,365 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include +// for setprecision +#include "include/object_detector.h" +#include +#include + +using namespace paddle_infer; + +namespace Detection { + +// Load Model and create model predictor + void ObjectDetector::LoadModel(const std::string &model_dir, + const int batch_size, + const std::string &run_mode) { + paddle_infer::Config config; + std::string prog_file = model_dir + OS_PATH_SEP + "inference.pdmodel"; + std::string params_file = model_dir + OS_PATH_SEP + "inference.pdiparams"; + config.SetModel(prog_file, params_file); + if (this->use_gpu_) { + config.EnableUseGpu(this->gpu_mem_, this->gpu_id_); + config.SwitchIrOptim(this->ir_optim_); + // // use tensorrt + // if (run_mode != "fluid") { + // auto precision = paddle_infer::Config::Precision::kFloat32; + // if (run_mode == "trt_fp32") { + // precision = paddle_infer::Config::Precision::kFloat32; + // } + // else if (run_mode == "trt_fp16") { + // precision = paddle_infer::Config::Precision::kHalf; + // } + // else if (run_mode == "trt_int8") { + // precision = paddle_infer::Config::Precision::kInt8; + // } else { + // printf("run_mode should be 'fluid', 'trt_fp32', 'trt_fp16' or + // 'trt_int8'"); + // } + // set tensorrt + + if (this->use_tensorrt_) { + config.EnableTensorRtEngine( + 1 << 30, batch_size, this->min_subgraph_size_, + this->use_fp16_ ? paddle_infer::Config::Precision::kHalf + : paddle_infer::Config::Precision::kFloat32, + false, this->trt_calib_mode_); + // set use dynamic shape + if (this->use_dynamic_shape_) { + // set DynamicShsape for image tensor + const std::vector min_input_shape = {1, 3, this->trt_min_shape_, + this->trt_min_shape_}; + const std::vector max_input_shape = {1, 3, this->trt_max_shape_, + this->trt_max_shape_}; + const std::vector opt_input_shape = {1, 3, this->trt_opt_shape_, + this->trt_opt_shape_}; + const std::map > map_min_input_shape = { + {"image", min_input_shape}}; + const std::map > map_max_input_shape = { + {"image", max_input_shape}}; + const std::map > map_opt_input_shape = { + {"image", opt_input_shape}}; + + config.SetTRTDynamicShapeInfo(map_min_input_shape, map_max_input_shape, + map_opt_input_shape); + std::cout << "TensorRT dynamic shape enabled" << std::endl; + } + } + + // } else if (this->device_ == "XPU"){ + // config.EnableXpu(10*1024*1024); + } else { + config.DisableGpu(); + if (this->use_mkldnn_) { + config.EnableMKLDNN(); + // cache 10 different shapes for mkldnn to avoid memory leak + config.SetMkldnnCacheCapacity(10); + } + config.SetCpuMathLibraryNumThreads(this->cpu_math_library_num_threads_); + } + config.SwitchUseFeedFetchOps(false); + config.SwitchIrOptim(this->ir_optim_); + config.DisableGlogInfo(); + // Memory optimization + config.EnableMemoryOptim(); + predictor_ = std::move(CreatePredictor(config)); + } + +// Visualiztion MaskDetector results + cv::Mat VisualizeResult(const cv::Mat &img, + const std::vector &results, + const std::vector &lables, + const std::vector &colormap, + const bool is_rbox = false) { + cv::Mat vis_img = img.clone(); + for (int i = 0; i < results.size(); ++i) { + // Configure color and text size + std::ostringstream oss; + oss << std::setiosflags(std::ios::fixed) << std::setprecision(4); + oss << lables[results[i].class_id] << " "; + oss << results[i].confidence; + std::string text = oss.str(); + int c1 = colormap[3 * results[i].class_id + 0]; + int c2 = colormap[3 * results[i].class_id + 1]; + int c3 = colormap[3 * results[i].class_id + 2]; + cv::Scalar roi_color = cv::Scalar(c1, c2, c3); + int font_face = cv::FONT_HERSHEY_COMPLEX_SMALL; + double font_scale = 0.5f; + float thickness = 0.5; + cv::Size text_size = + cv::getTextSize(text, font_face, font_scale, thickness, nullptr); + cv::Point origin; + + if (is_rbox) { + // Draw object, text, and background + for (int k = 0; k < 4; k++) { + cv::Point pt1 = cv::Point(results[i].rect[(k * 2) % 8], + results[i].rect[(k * 2 + 1) % 8]); + cv::Point pt2 = cv::Point(results[i].rect[(k * 2 + 2) % 8], + results[i].rect[(k * 2 + 3) % 8]); + cv::line(vis_img, pt1, pt2, roi_color, 2); + } + } else { + int w = results[i].rect[2] - results[i].rect[0]; + int h = results[i].rect[3] - results[i].rect[1]; + cv::Rect roi = cv::Rect(results[i].rect[0], results[i].rect[1], w, h); + // Draw roi object, text, and background + cv::rectangle(vis_img, roi, roi_color, 2); + } + + origin.x = results[i].rect[0]; + origin.y = results[i].rect[1]; + + // Configure text background + cv::Rect text_back = + cv::Rect(results[i].rect[0], results[i].rect[1] - text_size.height, + text_size.width, text_size.height); + // Draw text, and background + cv::rectangle(vis_img, text_back, roi_color, -1); + cv::putText(vis_img, text, origin, font_face, font_scale, + cv::Scalar(255, 255, 255), thickness); + } + return vis_img; + } + + void ObjectDetector::Preprocess(const cv::Mat &ori_im) { + // Clone the image : keep the original mat for postprocess + cv::Mat im = ori_im.clone(); + cv::cvtColor(im, im, cv::COLOR_BGR2RGB); + preprocessor_.Run(&im, &inputs_); + } + + void ObjectDetector::Postprocess(const std::vector mats, + std::vector *result, + std::vector bbox_num, + bool is_rbox = false) { + result->clear(); + int start_idx = 0; + for (int im_id = 0; im_id < mats.size(); im_id++) { + cv::Mat raw_mat = mats[im_id]; + int rh = 1; + int rw = 1; + // if (config_.arch_ == "Face") { + // rh = raw_mat.rows; + // rw = raw_mat.cols; + // } + for (int j = start_idx; j < start_idx + bbox_num[im_id]; j++) { + if (is_rbox) { + // Class id + int class_id = static_cast(round(output_data_[0 + j * 10])); + // Confidence score + float score = output_data_[1 + j * 10]; + int x1 = (output_data_[2 + j * 10] * rw); + int y1 = (output_data_[3 + j * 10] * rh); + int x2 = (output_data_[4 + j * 10] * rw); + int y2 = (output_data_[5 + j * 10] * rh); + int x3 = (output_data_[6 + j * 10] * rw); + int y3 = (output_data_[7 + j * 10] * rh); + int x4 = (output_data_[8 + j * 10] * rw); + int y4 = (output_data_[9 + j * 10] * rh); + + ObjectResult result_item; + result_item.rect = {x1, y1, x2, y2, x3, y3, x4, y4}; + result_item.class_id = class_id; + result_item.confidence = score; + result->push_back(result_item); + } else { + // Class id + int class_id = static_cast(round(output_data_[0 + j * 6])); + // Confidence score + float score = output_data_[1 + j * 6]; + int xmin = (output_data_[2 + j * 6] * rw); + int ymin = (output_data_[3 + j * 6] * rh); + int xmax = (output_data_[4 + j * 6] * rw); + int ymax = (output_data_[5 + j * 6] * rh); + int wd = xmax - xmin; + int hd = ymax - ymin; + + ObjectResult result_item; + result_item.rect = {xmin, ymin, xmax, ymax}; + result_item.class_id = class_id; + result_item.confidence = score; + result->push_back(result_item); + } + } + start_idx += bbox_num[im_id]; + } + } + + void ObjectDetector::Predict(const std::vector imgs, const int warmup, + const int repeats, + std::vector *result, + std::vector *bbox_num, + std::vector *times) { + auto preprocess_start = std::chrono::steady_clock::now(); + int batch_size = imgs.size(); + + // in_data_batch + std::vector in_data_all; + std::vector im_shape_all(batch_size * 2); + std::vector scale_factor_all(batch_size * 2); + + // Preprocess image + for (int bs_idx = 0; bs_idx < batch_size; bs_idx++) { + cv::Mat im = imgs.at(bs_idx); + Preprocess(im); + im_shape_all[bs_idx * 2] = inputs_.im_shape_[0]; + im_shape_all[bs_idx * 2 + 1] = inputs_.im_shape_[1]; + + scale_factor_all[bs_idx * 2] = inputs_.scale_factor_[0]; + scale_factor_all[bs_idx * 2 + 1] = inputs_.scale_factor_[1]; + + // TODO: reduce cost time + in_data_all.insert(in_data_all.end(), inputs_.im_data_.begin(), + inputs_.im_data_.end()); + } + + // Prepare input tensor + auto input_names = predictor_->GetInputNames(); + for (const auto &tensor_name : input_names) { + auto in_tensor = predictor_->GetInputHandle(tensor_name); + if (tensor_name == "image") { + int rh = inputs_.in_net_shape_[0]; + int rw = inputs_.in_net_shape_[1]; + in_tensor->Reshape({batch_size, 3, rh, rw}); + in_tensor->CopyFromCpu(in_data_all.data()); + } else if (tensor_name == "im_shape") { + in_tensor->Reshape({batch_size, 2}); + in_tensor->CopyFromCpu(im_shape_all.data()); + } else if (tensor_name == "scale_factor") { + in_tensor->Reshape({batch_size, 2}); + in_tensor->CopyFromCpu(scale_factor_all.data()); + } + } + + auto preprocess_end = std::chrono::steady_clock::now(); + // Run predictor + // warmup + for (int i = 0; i < warmup; i++) { + predictor_->Run(); + // Get output tensor + auto output_names = predictor_->GetOutputNames(); + auto out_tensor = predictor_->GetOutputHandle(output_names[0]); + std::vector output_shape = out_tensor->shape(); + auto out_bbox_num = predictor_->GetOutputHandle(output_names[1]); + std::vector out_bbox_num_shape = out_bbox_num->shape(); + // Calculate output length + int output_size = 1; + for (int j = 0; j < output_shape.size(); ++j) { + output_size *= output_shape[j]; + } + + if (output_size < 6) { + std::cerr << "[WARNING] No object detected." << std::endl; + } + output_data_.resize(output_size); + out_tensor->CopyToCpu(output_data_.data()); + + int out_bbox_num_size = 1; + for (int j = 0; j < out_bbox_num_shape.size(); ++j) { + out_bbox_num_size *= out_bbox_num_shape[j]; + } + out_bbox_num_data_.resize(out_bbox_num_size); + out_bbox_num->CopyToCpu(out_bbox_num_data_.data()); + } + + bool is_rbox = false; + auto inference_start = std::chrono::steady_clock::now(); + for (int i = 0; i < repeats; i++) { + predictor_->Run(); + // Get output tensor + auto output_names = predictor_->GetOutputNames(); + auto out_tensor = predictor_->GetOutputHandle(output_names[0]); + std::vector output_shape = out_tensor->shape(); + auto out_bbox_num = predictor_->GetOutputHandle(output_names[1]); + std::vector out_bbox_num_shape = out_bbox_num->shape(); + // Calculate output length + int output_size = 1; + for (int j = 0; j < output_shape.size(); ++j) { + output_size *= output_shape[j]; + } + is_rbox = output_shape[output_shape.size() - 1] % 10 == 0; + + if (output_size < 6) { + std::cerr << "[WARNING] No object detected." << std::endl; + } + output_data_.resize(output_size); + out_tensor->CopyToCpu(output_data_.data()); + + int out_bbox_num_size = 1; + for (int j = 0; j < out_bbox_num_shape.size(); ++j) { + out_bbox_num_size *= out_bbox_num_shape[j]; + } + out_bbox_num_data_.resize(out_bbox_num_size); + out_bbox_num->CopyToCpu(out_bbox_num_data_.data()); + } + auto inference_end = std::chrono::steady_clock::now(); + auto postprocess_start = std::chrono::steady_clock::now(); + // Postprocessing result + result->clear(); + Postprocess(imgs, result, out_bbox_num_data_, is_rbox); + bbox_num->clear(); + for (int k = 0; k < out_bbox_num_data_.size(); k++) { + int tmp = out_bbox_num_data_[k]; + bbox_num->push_back(tmp); + } + auto postprocess_end = std::chrono::steady_clock::now(); + + std::chrono::duration preprocess_diff = + preprocess_end - preprocess_start; + times->push_back(double(preprocess_diff.count() * 1000)); + std::chrono::duration inference_diff = inference_end - inference_start; + times->push_back(double(inference_diff.count() / repeats * 1000)); + std::chrono::duration postprocess_diff = + postprocess_end - postprocess_start; + times->push_back(double(postprocess_diff.count() * 1000)); + } + + std::vector GenerateColorMap(int num_class) { + auto colormap = std::vector(3 * num_class, 0); + for (int i = 0; i < num_class; ++i) { + int j = 0; + int lab = i; + while (lab) { + colormap[i * 3] |= (((lab >> 0) & 1) << (7 - j)); + colormap[i * 3 + 1] |= (((lab >> 1) & 1) << (7 - j)); + colormap[i * 3 + 2] |= (((lab >> 2) & 1) << (7 - j)); + ++j; + lab >>= 3; + } + } + return colormap; + } + +} // namespace Detection diff --git a/src/PaddleClas/deploy/cpp_shitu/src/preprocess_op.cpp b/src/PaddleClas/deploy/cpp_shitu/src/preprocess_op.cpp new file mode 100644 index 0000000..6bf1ec9 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/preprocess_op.cpp @@ -0,0 +1,91 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "opencv2/core.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/imgproc.hpp" +#include "paddle_api.h" +#include "paddle_inference_api.h" +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +namespace Feature { + + void Permute::Run(const cv::Mat *im, float *data) { + int rh = im->rows; + int rw = im->cols; + int rc = im->channels(); + for (int i = 0; i < rc; ++i) { + cv::extractChannel(*im, cv::Mat(rh, rw, CV_32FC1, data + i * rh * rw), i); + } + } + + void Normalize::Run(cv::Mat *im, const std::vector &mean, + const std::vector &std, float scale) { + (*im).convertTo(*im, CV_32FC3, scale); + for (int h = 0; h < im->rows; h++) { + for (int w = 0; w < im->cols; w++) { + im->at(h, w)[0] = + (im->at(h, w)[0] - mean[0]) / std[0]; + im->at(h, w)[1] = + (im->at(h, w)[1] - mean[1]) / std[1]; + im->at(h, w)[2] = + (im->at(h, w)[2] - mean[2]) / std[2]; + } + } + } + + void CenterCropImg::Run(cv::Mat &img, const int crop_size) { + int resize_w = img.cols; + int resize_h = img.rows; + int w_start = int((resize_w - crop_size) / 2); + int h_start = int((resize_h - crop_size) / 2); + cv::Rect rect(w_start, h_start, crop_size, crop_size); + img = img(rect); + } + + void ResizeImg::Run(const cv::Mat &img, cv::Mat &resize_img, + int resize_short_size, int size) { + int resize_h = 0; + int resize_w = 0; + if (size > 0) { + resize_h = size; + resize_w = size; + } else { + int w = img.cols; + int h = img.rows; + + float ratio = 1.f; + if (h < w) { + ratio = float(resize_short_size) / float(h); + } else { + ratio = float(resize_short_size) / float(w); + } + resize_h = round(float(h) * ratio); + resize_w = round(float(w) * ratio); + } + cv::resize(img, resize_img, cv::Size(resize_w, resize_h)); + } + +} // namespace Feature diff --git a/src/PaddleClas/deploy/cpp_shitu/src/preprocess_op_det.cpp b/src/PaddleClas/deploy/cpp_shitu/src/preprocess_op_det.cpp new file mode 100644 index 0000000..e32b03a --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/preprocess_op_det.cpp @@ -0,0 +1,130 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "include/preprocess_op_det.h" + +namespace Detection { + + void InitInfo::Run(cv::Mat *im, ImageBlob *data) { + data->im_shape_ = {static_cast(im->rows), + static_cast(im->cols)}; + data->scale_factor_ = {1., 1.}; + data->in_net_shape_ = {static_cast(im->rows), + static_cast(im->cols)}; + } + + void NormalizeImage::Run(cv::Mat *im, ImageBlob *data) { + double e = 1.0; + if (is_scale_) { + e /= 255.0; + } + (*im).convertTo(*im, CV_32FC3, e); + for (int h = 0; h < im->rows; h++) { + for (int w = 0; w < im->cols; w++) { + im->at(h, w)[0] = + (im->at(h, w)[0] - mean_[0]) / scale_[0]; + im->at(h, w)[1] = + (im->at(h, w)[1] - mean_[1]) / scale_[1]; + im->at(h, w)[2] = + (im->at(h, w)[2] - mean_[2]) / scale_[2]; + } + } + } + + void Permute::Run(cv::Mat *im, ImageBlob *data) { + int rh = im->rows; + int rw = im->cols; + int rc = im->channels(); + (data->im_data_).resize(rc * rh * rw); + float *base = (data->im_data_).data(); + for (int i = 0; i < rc; ++i) { + cv::extractChannel(*im, cv::Mat(rh, rw, CV_32FC1, base + i * rh * rw), i); + } + } + + void Resize::Run(cv::Mat *im, ImageBlob *data) { + auto resize_scale = GenerateScale(*im); + data->im_shape_ = {static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second)}; + data->in_net_shape_ = {static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second)}; + cv::resize(*im, *im, cv::Size(), resize_scale.first, resize_scale.second, + interp_); + data->im_shape_ = { + static_cast(im->rows), static_cast(im->cols), + }; + data->scale_factor_ = { + resize_scale.second, resize_scale.first, + }; + } + + std::pair Resize::GenerateScale(const cv::Mat &im) { + std::pair resize_scale; + int origin_w = im.cols; + int origin_h = im.rows; + + if (keep_ratio_) { + int im_size_max = std::max(origin_w, origin_h); + int im_size_min = std::min(origin_w, origin_h); + int target_size_max = + *std::max_element(target_size_.begin(), target_size_.end()); + int target_size_min = + *std::min_element(target_size_.begin(), target_size_.end()); + double scale_min = + static_cast(target_size_min) / static_cast(im_size_min); + double scale_max = + static_cast(target_size_max) / static_cast(im_size_max); + double scale_ratio = std::min(scale_min, scale_max); + resize_scale = {scale_ratio, scale_ratio}; + } else { + resize_scale.first = + static_cast(target_size_[1]) / static_cast(origin_w); + resize_scale.second = + static_cast(target_size_[0]) / static_cast(origin_h); + } + return resize_scale; + } + + void PadStride::Run(cv::Mat *im, ImageBlob *data) { + if (stride_ <= 0) { + return; + } + int rc = im->channels(); + int rh = im->rows; + int rw = im->cols; + int nh = (rh / stride_) * stride_ + (rh % stride_ != 0) * stride_; + int nw = (rw / stride_) * stride_ + (rw % stride_ != 0) * stride_; + cv::copyMakeBorder(*im, *im, 0, nh - rh, 0, nw - rw, cv::BORDER_CONSTANT, + cv::Scalar(0)); + data->in_net_shape_ = { + static_cast(im->rows), static_cast(im->cols), + }; + } + +// Preprocessor op running order + const std::vector Preprocessor::RUN_ORDER = { + "InitInfo", "Resize", "NormalizeImage", "PadStride", "Permute"}; + + void Preprocessor::Run(cv::Mat *im, ImageBlob *data) { + for (const auto &name : RUN_ORDER) { + if (ops_.find(name) != ops_.end()) { + ops_[name]->Run(im, data); + } + } + } + +} // namespace Detection diff --git a/src/PaddleClas/deploy/cpp_shitu/src/vector_search.cpp b/src/PaddleClas/deploy/cpp_shitu/src/vector_search.cpp new file mode 100644 index 0000000..85c487a --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/vector_search.cpp @@ -0,0 +1,62 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "include/vector_search.h" +#include +#include +#include +#include +#include +#include + +void VectorSearch::LoadIndexFile() { + std::string file_path = this->index_dir + OS_PATH_SEP + "vector.index"; + const char *fname = file_path.c_str(); + this->index = faiss::read_index(fname, 0); +} + +void VectorSearch::LoadIdMap() { + std::string file_path = this->index_dir + OS_PATH_SEP + "id_map.txt"; + std::ifstream in(file_path); + std::string line; + std::vector m_vec; + if (in) { + while (getline(in, line)) { + std::regex ws_re("\\s+"); + std::vector v( + std::sregex_token_iterator(line.begin(), line.end(), ws_re, -1), + std::sregex_token_iterator()); + if (v.size() != 2) { + std::cout << "The number of element for each line in : " << file_path + << "must be 2, exit the program..." << std::endl; + exit(1); + } else + this->id_map.insert(std::pair( + std::stol(v[0], nullptr, 10), v[1])); + } + } +} + +const SearchResult &VectorSearch::Search(float *feature, int query_number) { + this->D.resize(this->return_k * query_number); + this->I.resize(this->return_k * query_number); + this->index->search(query_number, feature, return_k, D.data(), I.data()); + this->sr.return_k = this->return_k; + this->sr.D = this->D; + this->sr.I = this->I; + return this->sr; +} + +const std::string &VectorSearch::GetLabel(faiss::Index::idx_t ind) { + return this->id_map.at(ind); +} diff --git a/src/PaddleClas/deploy/cpp_shitu/src/yaml_config.cpp b/src/PaddleClas/deploy/cpp_shitu/src/yaml_config.cpp new file mode 100644 index 0000000..b20fcde --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/src/yaml_config.cpp @@ -0,0 +1,78 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include + + +std::vector YamlConfig::ReadDict(const std::string &path) { + std::ifstream in(path); + std::string line; + std::vector m_vec; + if (in) { + while (getline(in, line)) { + m_vec.push_back(line); + } + } else { + std::cout << "no such label file: " << path << ", exit the program..." + << std::endl; + exit(1); + } + return m_vec; +} + +std::map YamlConfig::ReadIndexId(const std::string &path) { + std::ifstream in(path); + std::string line; + std::map m_vec; + if (in) { + while (getline(in, line)) { + std::regex ws_re("\\s+"); + std::vector v( + std::sregex_token_iterator(line.begin(), line.end(), ws_re, -1), + std::sregex_token_iterator()); + if (v.size() != 3) { + std::cout << "The number of element for each line in : " << path + << "must be 3, exit the program..." << std::endl; + exit(1); + } else + m_vec.insert(std::pair(stoi(v[0]), v[2])); + } + } + return m_vec; +} + +YAML::Node YamlConfig::ReadYamlConfig(const std::string &path) { + YAML::Node config; + try { + config = YAML::LoadFile(path); + } catch (YAML::BadFile &e) { + std::cout << "Something wrong in yaml file, please check yaml file" + << std::endl; + exit(1); + } + return config; +} + +void YamlConfig::PrintConfigInfo() { + std::cout << this->config_file << std::endl; + // for (YAML::const_iterator + // it=config_file.begin();it!=config_file.end();++it) + // { + // std::cout << it->as() << "\n"; + // } +} diff --git a/src/PaddleClas/deploy/cpp_shitu/tools/build.sh b/src/PaddleClas/deploy/cpp_shitu/tools/build.sh new file mode 100644 index 0000000..a9e2f92 --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/tools/build.sh @@ -0,0 +1,25 @@ +OPENCV_DIR=${opencv_install_dir} +LIB_DIR=${paddle_inference_dir} +CUDA_LIB_DIR=/usr/local/cuda/lib64 +CUDNN_LIB_DIR=/usr/lib/x86_64-linux-gnu/ +FAISS_DIR=${faiss_install_dir} +FAISS_WITH_MKL=OFF + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DUSE_TENSORRT=OFF \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + -DFAISS_DIR=${FAISS_DIR} \ + -DFAISS_WITH_MKL=${FAISS_WITH_MKL} + +make -j +cd .. diff --git a/src/PaddleClas/deploy/cpp_shitu/tools/transform_id_map.py b/src/PaddleClas/deploy/cpp_shitu/tools/transform_id_map.py new file mode 100644 index 0000000..3ad6b6f --- /dev/null +++ b/src/PaddleClas/deploy/cpp_shitu/tools/transform_id_map.py @@ -0,0 +1,39 @@ +import argparse +import os +import pickle + +import yaml + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('-c', '--config', type=str, required=True) + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + with open(args.config) as fd: + config = yaml.load(fd.read(), yaml.FullLoader) + index_dir = "" + try: + index_dir = config["IndexProcess"]["index_dir"] + except Exception as e: + print("The IndexProcess.index_dir in config_file dose not exist") + exit(1) + id_map_path = os.path.join(index_dir, "id_map.pkl") + assert os.path.exists( + id_map_path), "The id_map file dose not exist: {}".format(id_map_path) + + with open(id_map_path, "rb") as fd: + ids = pickle.load(fd) + with open(os.path.join(index_dir, "id_map.txt"), "w") as fd: + for k, v in ids.items(): + v = v.split("\t")[1] + fd.write(str(k) + " " + v + "\n") + print('Transform id_map sucess') + + +if __name__ == "__main__": + main() diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0.tar b/src/PaddleClas/deploy/drink_dataset_v1.0.tar new file mode 100644 index 0000000..76161a9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0.tar differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/0.jpg new file mode 100644 index 0000000..26879a8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/1.jpg new file mode 100644 index 0000000..71cadc9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/2.jpg new file mode 100644 index 0000000..72fc402 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/3.jpg new file mode 100644 index 0000000..434afbf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/0/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/0.jpg new file mode 100644 index 0000000..83c9d5a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/1.jpg new file mode 100644 index 0000000..0770655 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/2.jpg new file mode 100644 index 0000000..e340b37 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/3.jpg new file mode 100644 index 0000000..225daa1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/4.jpg new file mode 100644 index 0000000..865174b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/1/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/0.jpg new file mode 100644 index 0000000..03beade Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/1.jpg new file mode 100644 index 0000000..c3e76bd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/2.jpg new file mode 100644 index 0000000..b79fde0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/3.jpg new file mode 100644 index 0000000..4842864 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/4.jpg new file mode 100644 index 0000000..67d9119 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/5.jpg new file mode 100644 index 0000000..c87e332 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/10/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/0.jpg new file mode 100644 index 0000000..1fa8b64 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/1.jpg new file mode 100644 index 0000000..b5ffc34 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/2.jpg new file mode 100644 index 0000000..ae45e35 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/3.jpg new file mode 100644 index 0000000..696ebfa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/4.jpg new file mode 100644 index 0000000..10e7de5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/5.jpg new file mode 100644 index 0000000..5edd698 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/100/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/0.jpg new file mode 100644 index 0000000..6ccaa33 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/1.jpg new file mode 100644 index 0000000..bffbadf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/2.jpg new file mode 100644 index 0000000..7a7cdef Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/3.jpg new file mode 100644 index 0000000..2d33651 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/4.jpg new file mode 100644 index 0000000..e028462 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/5.jpg new file mode 100644 index 0000000..e9e7a8b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/6.jpg new file mode 100644 index 0000000..d841be6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/7.jpg new file mode 100644 index 0000000..aded1d0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/101/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/0.jpg new file mode 100644 index 0000000..163fd23 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/1.jpg new file mode 100644 index 0000000..bc01ae6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/2.jpg new file mode 100644 index 0000000..f79341e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/3.jpg new file mode 100644 index 0000000..275fb56 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/4.jpg new file mode 100644 index 0000000..288283b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/102/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/0.jpg new file mode 100644 index 0000000..dab0557 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/1.jpg new file mode 100644 index 0000000..e69caab Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/2.jpg new file mode 100644 index 0000000..3402c78 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/3.jpg new file mode 100644 index 0000000..58d751b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/4.jpg new file mode 100644 index 0000000..4fc7da2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/5.jpg new file mode 100644 index 0000000..7ba118e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/6.jpg new file mode 100644 index 0000000..4cc8fa9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/7.jpg new file mode 100644 index 0000000..a2891fe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/103/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/0.jpg new file mode 100644 index 0000000..d2fd440 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/1.jpg new file mode 100644 index 0000000..e837a28 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/2.jpg new file mode 100644 index 0000000..a6a2cf8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/3.jpg new file mode 100644 index 0000000..05b01aa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/4.jpg new file mode 100644 index 0000000..ab281ca Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/5.jpg new file mode 100644 index 0000000..406df3d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/6.jpg new file mode 100644 index 0000000..0034728 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/104/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/0.jpg new file mode 100644 index 0000000..4257a1e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/1.jpg new file mode 100644 index 0000000..997daad Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/2.jpg new file mode 100644 index 0000000..61e4b2e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/3.jpg new file mode 100644 index 0000000..1b50ce6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/4.jpg new file mode 100644 index 0000000..d23a113 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/5.jpg new file mode 100644 index 0000000..2abb54a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/6.jpg new file mode 100644 index 0000000..6c04001 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/105/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/0.jpg new file mode 100644 index 0000000..860e666 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/1.jpg new file mode 100644 index 0000000..5b22b58 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/2.jpg new file mode 100644 index 0000000..8608236 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/3.jpg new file mode 100644 index 0000000..3307200 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/4.jpg new file mode 100644 index 0000000..a4bcd51 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/106/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/0.jpg new file mode 100644 index 0000000..0ac2757 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/1.jpg new file mode 100644 index 0000000..4a41f15 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/2.jpg new file mode 100644 index 0000000..7164130 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/3.jpg new file mode 100644 index 0000000..502cb55 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/4.jpg new file mode 100644 index 0000000..61f490c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/5.jpg new file mode 100644 index 0000000..58cb5c0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/107/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/0.jpg new file mode 100644 index 0000000..bbd00a6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/1.jpg new file mode 100644 index 0000000..7872d3b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/2.jpg new file mode 100644 index 0000000..269fef6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/3.jpg new file mode 100644 index 0000000..b029295 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/4.jpg new file mode 100644 index 0000000..1437133 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/108/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/0.jpg new file mode 100644 index 0000000..838a2e1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/1.jpg new file mode 100644 index 0000000..079b42e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/2.jpg new file mode 100644 index 0000000..9e8de16 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/3.jpg new file mode 100644 index 0000000..aefbe4d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/4.jpg new file mode 100644 index 0000000..2aa63c2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/5.jpg new file mode 100644 index 0000000..23ff9eb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/6.jpg new file mode 100644 index 0000000..69a97d7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/7.jpg new file mode 100644 index 0000000..c1d78c4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/109/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/0.jpg new file mode 100644 index 0000000..6791a07 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/1.jpg new file mode 100644 index 0000000..05f9bc4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/2.jpg new file mode 100644 index 0000000..78855e1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/3.jpg new file mode 100644 index 0000000..fb06fc8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/4.jpg new file mode 100644 index 0000000..8445180 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/5.jpg new file mode 100644 index 0000000..f37c2d2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/11/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/0.jpg new file mode 100644 index 0000000..051fbde Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/1.jpg new file mode 100644 index 0000000..d23e380 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/2.jpg new file mode 100644 index 0000000..b1fd349 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/3.jpg new file mode 100644 index 0000000..905a924 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/4.jpg new file mode 100644 index 0000000..9858a8f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/5.jpg new file mode 100644 index 0000000..9519af7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/6.jpg new file mode 100644 index 0000000..1d66e93 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/7.jpg new file mode 100644 index 0000000..b519e29 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/110/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._8.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._8.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._8.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._9.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._9.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/._9.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/0.jpg new file mode 100644 index 0000000..751dfa3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/1.jpg new file mode 100644 index 0000000..fbecdc2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/2.jpg new file mode 100644 index 0000000..9e0f507 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/3.jpg new file mode 100644 index 0000000..0c4c05b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/4.jpg new file mode 100644 index 0000000..8cce843 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/5.jpg new file mode 100644 index 0000000..2aa09ad Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/6.jpg new file mode 100644 index 0000000..31c5af9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/7.jpg new file mode 100644 index 0000000..fac3c65 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/8.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/8.jpg new file mode 100644 index 0000000..0f72e3f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/8.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/9.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/9.jpg new file mode 100644 index 0000000..c51f36a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/111/9.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/0.jpg new file mode 100644 index 0000000..128a542 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/1.jpg new file mode 100644 index 0000000..1d18010 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/2.jpg new file mode 100644 index 0000000..a97d89b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/3.jpg new file mode 100644 index 0000000..fb52eb5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/4.jpg new file mode 100644 index 0000000..9d31ecc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/5.jpg new file mode 100644 index 0000000..a4d4b73 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/6.jpg new file mode 100644 index 0000000..2ff80b8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/112/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/0.jpg new file mode 100644 index 0000000..7a96212 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/1.jpg new file mode 100644 index 0000000..b7ccc97 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/2.jpg new file mode 100644 index 0000000..d6dc81e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/3.jpg new file mode 100644 index 0000000..133080a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/4.jpg new file mode 100644 index 0000000..173b2e2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/5.jpg new file mode 100644 index 0000000..1772060 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/113/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/0.jpg new file mode 100644 index 0000000..a0b5e24 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/1.jpg new file mode 100644 index 0000000..47ba147 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/2.jpg new file mode 100644 index 0000000..8236bf9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/3.jpg new file mode 100644 index 0000000..76befd5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/4.jpg new file mode 100644 index 0000000..99880c7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/5.jpg new file mode 100644 index 0000000..dd150ae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/6.jpg new file mode 100644 index 0000000..a0a2e0b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/114/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/0.jpg new file mode 100644 index 0000000..3e88207 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/1.jpg new file mode 100644 index 0000000..9f35817 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/2.jpg new file mode 100644 index 0000000..1390b7e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/3.jpg new file mode 100644 index 0000000..c429a9a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/4.jpg new file mode 100644 index 0000000..dd0f071 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/5.jpg new file mode 100644 index 0000000..a975efc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/6.jpg new file mode 100644 index 0000000..3e037b0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/7.jpg new file mode 100644 index 0000000..a1e2cd6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/115/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/0.jpg new file mode 100644 index 0000000..4e0d3e6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/1.jpg new file mode 100644 index 0000000..5bf5b60 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/2.jpg new file mode 100644 index 0000000..cb98036 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/3.jpg new file mode 100644 index 0000000..7d7e205 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/4.jpg new file mode 100644 index 0000000..7c884b9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/5.jpg new file mode 100644 index 0000000..0833ccc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/116/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/0.jpg new file mode 100644 index 0000000..80e9dca Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/1.jpg new file mode 100644 index 0000000..96f583a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/2.jpg new file mode 100644 index 0000000..fb98ba7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/3.jpg new file mode 100644 index 0000000..3991cde Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/117/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/0.jpg new file mode 100644 index 0000000..d7fce6a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/1.jpg new file mode 100644 index 0000000..a966d19 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/2.jpg new file mode 100644 index 0000000..6fb0404 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/3.jpg new file mode 100644 index 0000000..d2d4787 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/118/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/0.jpg new file mode 100644 index 0000000..41e6960 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/1.jpg new file mode 100644 index 0000000..ddc6d26 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/2.jpg new file mode 100644 index 0000000..1478a1e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/3.jpg new file mode 100644 index 0000000..2419d69 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/4.jpg new file mode 100644 index 0000000..15ca0d9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/119/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/0.jpg new file mode 100644 index 0000000..f429296 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/1.jpg new file mode 100644 index 0000000..f78b4f6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/2.jpg new file mode 100644 index 0000000..2eee949 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/12/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._2.jpg new file mode 100644 index 0000000..89bca33 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._3.jpg new file mode 100644 index 0000000..407e266 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/0.jpg new file mode 100644 index 0000000..c5a8bdf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/1.jpg new file mode 100644 index 0000000..36aa5f1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/2.jpg new file mode 100644 index 0000000..d86db69 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/3.jpg new file mode 100644 index 0000000..4df8a2b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/120/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/0.jpg new file mode 100644 index 0000000..3886ba2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/1.jpg new file mode 100644 index 0000000..a04d600 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/2.jpg new file mode 100644 index 0000000..2fe0579 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/3.jpg new file mode 100644 index 0000000..2836989 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/121/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/0.jpg new file mode 100644 index 0000000..e50acf6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/1.jpg new file mode 100644 index 0000000..1ba14e7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/2.jpg new file mode 100644 index 0000000..5abc55b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/122/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/0.jpg new file mode 100644 index 0000000..8486d8c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/1.jpg new file mode 100644 index 0000000..b7f7bd6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/2.jpg new file mode 100644 index 0000000..e93d612 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/3.jpg new file mode 100644 index 0000000..cc6a6b4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/4.jpg new file mode 100644 index 0000000..7eed06c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/5.jpg new file mode 100644 index 0000000..84e7235 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/123/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/0.jpg new file mode 100644 index 0000000..13732bb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/1.jpg new file mode 100644 index 0000000..8766b4a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/2.jpg new file mode 100644 index 0000000..894cc8d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/3.jpg new file mode 100644 index 0000000..11b27d2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/4.jpg new file mode 100644 index 0000000..800ea28 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/5.jpg new file mode 100644 index 0000000..113d629 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/124/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/0.jpg new file mode 100644 index 0000000..e8f9189 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/1.jpg new file mode 100644 index 0000000..ba8797c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/2.jpg new file mode 100644 index 0000000..8e2f5d8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/3.jpg new file mode 100644 index 0000000..947cfc5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/4.jpg new file mode 100644 index 0000000..8d03257 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/125/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/0.jpg new file mode 100644 index 0000000..5b8cdf0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/1.jpg new file mode 100644 index 0000000..54d0146 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/2.jpg new file mode 100644 index 0000000..ec371f1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/3.jpg new file mode 100644 index 0000000..4437d69 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/4.jpg new file mode 100644 index 0000000..bb7f94e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/126/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/0.jpg new file mode 100644 index 0000000..34d261c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/1.jpg new file mode 100644 index 0000000..4ab974c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/2.jpg new file mode 100644 index 0000000..87386c9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/3.jpg new file mode 100644 index 0000000..07b101d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/127/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/0.jpg new file mode 100644 index 0000000..ba010a7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/1.jpg new file mode 100644 index 0000000..e7014bb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/2.jpg new file mode 100644 index 0000000..e9b9925 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/3.jpg new file mode 100644 index 0000000..a997389 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/128/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/0.jpg new file mode 100644 index 0000000..ee6951f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/1.jpg new file mode 100644 index 0000000..1b0e520 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/2.jpg new file mode 100644 index 0000000..640f699 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/3.jpg new file mode 100644 index 0000000..078c63c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/4.jpg new file mode 100644 index 0000000..cad45b6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/5.jpg new file mode 100644 index 0000000..74d8d0d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/129/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/0.jpg new file mode 100644 index 0000000..1e772f1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/1.jpg new file mode 100644 index 0000000..8b068e2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/2.jpg new file mode 100644 index 0000000..afbdf23 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/3.jpg new file mode 100644 index 0000000..667f06f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/4.jpg new file mode 100644 index 0000000..89591d5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/13/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/0.jpg new file mode 100644 index 0000000..eb995f8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/1.jpg new file mode 100644 index 0000000..1960f03 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/2.jpg new file mode 100644 index 0000000..1506f11 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/3.jpg new file mode 100644 index 0000000..b12bfcc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/130/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._6.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._7.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/0.jpg new file mode 100644 index 0000000..b7bc58a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/1.jpg new file mode 100644 index 0000000..4ba2240 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/2.jpg new file mode 100644 index 0000000..91929bb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/3.jpg new file mode 100644 index 0000000..6d52c67 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/4.jpg new file mode 100644 index 0000000..76be426 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/5.jpg new file mode 100644 index 0000000..1e3d489 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/6.jpg new file mode 100644 index 0000000..b548502 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/7.jpg new file mode 100644 index 0000000..fd01076 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/131/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/0.jpg new file mode 100644 index 0000000..ba16a61 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/1.jpg new file mode 100644 index 0000000..c08a676 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/2.jpg new file mode 100644 index 0000000..d7f52e8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/3.jpg new file mode 100644 index 0000000..7fa14fe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/4.jpg new file mode 100644 index 0000000..4f6ce71 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/132/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/0.jpg new file mode 100644 index 0000000..554c704 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/1.jpg new file mode 100644 index 0000000..3be1bbf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/2.jpg new file mode 100644 index 0000000..9c369b3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/3.jpg new file mode 100644 index 0000000..22a9634 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/4.jpg new file mode 100644 index 0000000..9040336 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/5.jpg new file mode 100644 index 0000000..ba92349 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/133/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/0.jpg new file mode 100644 index 0000000..81756fd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/1.jpg new file mode 100644 index 0000000..66c5d48 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/2.jpg new file mode 100644 index 0000000..ed9cccf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/3.jpg new file mode 100644 index 0000000..7ea4631 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/134/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._6.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/0.jpg new file mode 100644 index 0000000..ab1fc9f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/1.jpg new file mode 100644 index 0000000..f372516 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/2.jpg new file mode 100644 index 0000000..8441459 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/3.jpg new file mode 100644 index 0000000..3b6a178 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/4.jpg new file mode 100644 index 0000000..dadff3e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/5.jpg new file mode 100644 index 0000000..69db067 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/6.jpg new file mode 100644 index 0000000..a5ed75e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/135/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/0.jpg new file mode 100644 index 0000000..10a76ab Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/1.jpg new file mode 100644 index 0000000..4e66974 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/2.jpg new file mode 100644 index 0000000..23c6d25 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/3.jpg new file mode 100644 index 0000000..f477e0e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/4.jpg new file mode 100644 index 0000000..c5f82ff Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/5.jpg new file mode 100644 index 0000000..3b64005 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/136/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/0.jpg new file mode 100644 index 0000000..f441ea2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/1.jpg new file mode 100644 index 0000000..734abe1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/2.jpg new file mode 100644 index 0000000..ef661b3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/3.jpg new file mode 100644 index 0000000..84b1a20 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/4.jpg new file mode 100644 index 0000000..44eb3fe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/5.jpg new file mode 100644 index 0000000..74a2e1f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/137/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._6.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/0.jpg new file mode 100644 index 0000000..6db8d63 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/1.jpg new file mode 100644 index 0000000..bc00a06 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/2.jpg new file mode 100644 index 0000000..3685c93 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/3.jpg new file mode 100644 index 0000000..838baae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/4.jpg new file mode 100644 index 0000000..a676eb4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/5.jpg new file mode 100644 index 0000000..6c59069 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/6.jpg new file mode 100644 index 0000000..9983670 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/138/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/0.jpg new file mode 100644 index 0000000..852aa16 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/1.jpg new file mode 100644 index 0000000..02a88ea Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/2.jpg new file mode 100644 index 0000000..9dd2bde Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/3.jpg new file mode 100644 index 0000000..a215780 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/4.jpg new file mode 100644 index 0000000..a151d53 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/5.jpg new file mode 100644 index 0000000..25ac09c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/139/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/0.jpg new file mode 100644 index 0000000..b4ca2df Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/1.jpg new file mode 100644 index 0000000..35c690b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/2.jpg new file mode 100644 index 0000000..5f199e1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/3.jpg new file mode 100644 index 0000000..9252dc1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/4.jpg new file mode 100644 index 0000000..61ad823 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/5.jpg new file mode 100644 index 0000000..531290f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/14/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/0.jpg new file mode 100644 index 0000000..6f9e2c4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/1.jpg new file mode 100644 index 0000000..6901cc4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/2.jpg new file mode 100644 index 0000000..3b8d4fb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/3.jpg new file mode 100644 index 0000000..53eff81 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/4.jpg new file mode 100644 index 0000000..6ed25d7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/5.jpg new file mode 100644 index 0000000..f79dc9f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/140/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/0.jpg new file mode 100644 index 0000000..2269a9b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/1.jpg new file mode 100644 index 0000000..c26daff Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/2.jpg new file mode 100644 index 0000000..efb65eb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/3.jpg new file mode 100644 index 0000000..de394d2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/141/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/0.jpg new file mode 100644 index 0000000..5f83c11 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/1.jpg new file mode 100644 index 0000000..5b52f1a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/2.jpg new file mode 100644 index 0000000..a36ce68 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/3.jpg new file mode 100644 index 0000000..f52fb72 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/4.jpg new file mode 100644 index 0000000..a5ef8d4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/142/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/0.jpg new file mode 100644 index 0000000..7df0791 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/1.jpg new file mode 100644 index 0000000..7316d50 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/2.jpg new file mode 100644 index 0000000..8711f76 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/3.jpg new file mode 100644 index 0000000..9b87508 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/4.jpg new file mode 100644 index 0000000..1b36959 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/5.jpg new file mode 100644 index 0000000..b46c7c7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/143/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/0.jpg new file mode 100644 index 0000000..320667c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/1.jpg new file mode 100644 index 0000000..5d5f747 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/2.jpg new file mode 100644 index 0000000..0a5751a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/3.jpg new file mode 100644 index 0000000..542d5dd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/4.jpg new file mode 100644 index 0000000..85452bd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/5.jpg new file mode 100644 index 0000000..89ebff4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/144/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/0.jpg new file mode 100644 index 0000000..b385e31 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/1.jpg new file mode 100644 index 0000000..0485ced Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/2.jpg new file mode 100644 index 0000000..453a14c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/3.jpg new file mode 100644 index 0000000..398cdcb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/4.jpg new file mode 100644 index 0000000..b6ffe26 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/5.jpg new file mode 100644 index 0000000..711cbd3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/145/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/0.jpg new file mode 100644 index 0000000..fdbad98 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/1.jpg new file mode 100644 index 0000000..4482aaa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/2.jpg new file mode 100644 index 0000000..4e52779 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/3.jpg new file mode 100644 index 0000000..6ce13cd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/146/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/0.jpg new file mode 100644 index 0000000..3b1451a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/1.jpg new file mode 100644 index 0000000..666e287 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/2.jpg new file mode 100644 index 0000000..1299b4d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/3.jpg new file mode 100644 index 0000000..7ae4820 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/4.jpg new file mode 100644 index 0000000..8ccf48f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/5.jpg new file mode 100644 index 0000000..ea297fc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/147/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/0.jpg new file mode 100644 index 0000000..aa5e59f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/1.jpg new file mode 100644 index 0000000..fa00eae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/2.jpg new file mode 100644 index 0000000..6fbffc1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/3.jpg new file mode 100644 index 0000000..11871b3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/148/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/0.jpg new file mode 100644 index 0000000..27fecb1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/1.jpg new file mode 100644 index 0000000..c25c5fc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/2.jpg new file mode 100644 index 0000000..299491e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/3.jpg new file mode 100644 index 0000000..81172e4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/149/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/0.jpg new file mode 100644 index 0000000..16ea3a4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/1.jpg new file mode 100644 index 0000000..7e23f6f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/2.jpg new file mode 100644 index 0000000..6269795 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/3.jpg new file mode 100644 index 0000000..d9c020b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/4.jpg new file mode 100644 index 0000000..d3c8685 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/15/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/0.jpg new file mode 100644 index 0000000..90a140b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/1.jpg new file mode 100644 index 0000000..ba09761 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/2.jpg new file mode 100644 index 0000000..eeecc02 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/3.jpg new file mode 100644 index 0000000..44f0cca Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/4.jpg new file mode 100644 index 0000000..3a25160 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/150/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/0.jpg new file mode 100644 index 0000000..ff7d921 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/1.jpg new file mode 100644 index 0000000..29f7c11 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/2.jpg new file mode 100644 index 0000000..dedb2aa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/3.jpg new file mode 100644 index 0000000..a767125 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/151/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/0.jpg new file mode 100644 index 0000000..5496afc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/1.jpg new file mode 100644 index 0000000..2df891c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/2.jpg new file mode 100644 index 0000000..14db8a1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/3.jpg new file mode 100644 index 0000000..398d134 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/4.jpg new file mode 100644 index 0000000..4b6fda6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/5.jpg new file mode 100644 index 0000000..52dcd86 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/152/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/0.jpg new file mode 100644 index 0000000..e171ee4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/1.jpg new file mode 100644 index 0000000..f38ad50 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/2.jpg new file mode 100644 index 0000000..4bf07a0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/3.jpg new file mode 100644 index 0000000..f5147f8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/4.jpg new file mode 100644 index 0000000..97a4087 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/5.jpg new file mode 100644 index 0000000..a1a1fa9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/153/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/0.jpg new file mode 100644 index 0000000..39d763e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/1.jpg new file mode 100644 index 0000000..c522622 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/2.jpg new file mode 100644 index 0000000..1084ed7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/3.jpg new file mode 100644 index 0000000..ae4df25 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/154/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/0.jpg new file mode 100644 index 0000000..1c2ac65 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/1.jpg new file mode 100644 index 0000000..09fef39 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/2.jpg new file mode 100644 index 0000000..eab0d32 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/3.jpg new file mode 100644 index 0000000..fc39ef4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/4.jpg new file mode 100644 index 0000000..a8f03d9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/155/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/0.jpg new file mode 100644 index 0000000..0afc989 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/1.jpg new file mode 100644 index 0000000..5945790 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/2.jpg new file mode 100644 index 0000000..c32e812 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/3.jpg new file mode 100644 index 0000000..dadae13 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/156/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/0.jpg new file mode 100644 index 0000000..d3ed61d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/1.jpg new file mode 100644 index 0000000..91af5ec Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/2.jpg new file mode 100644 index 0000000..75d7294 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/3.jpg new file mode 100644 index 0000000..b50b08e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/4.jpg new file mode 100644 index 0000000..ed4dbea Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/5.jpg new file mode 100644 index 0000000..ea73027 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/157/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/0.jpg new file mode 100644 index 0000000..d2e21b5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/1.jpg new file mode 100644 index 0000000..aff483a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/2.jpg new file mode 100644 index 0000000..e776f84 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/3.jpg new file mode 100644 index 0000000..2ea7960 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/4.jpg new file mode 100644 index 0000000..d6289ae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/5.jpg new file mode 100644 index 0000000..d6e2a18 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/158/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/0.jpg new file mode 100644 index 0000000..0a508a2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/1.jpg new file mode 100644 index 0000000..6a49cda Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/2.jpg new file mode 100644 index 0000000..7ae08f0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/3.jpg new file mode 100644 index 0000000..f3b4ec5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/159/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/0.jpg new file mode 100644 index 0000000..9d9fd8f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/1.jpg new file mode 100644 index 0000000..886d01e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/2.jpg new file mode 100644 index 0000000..d8b1617 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/3.jpg new file mode 100644 index 0000000..04574e6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/16/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/0.jpg new file mode 100644 index 0000000..d00b9b3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/1.jpg new file mode 100644 index 0000000..adb078e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/2.jpg new file mode 100644 index 0000000..1097c8a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/3.jpg new file mode 100644 index 0000000..2ebeeea Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/4.jpg new file mode 100644 index 0000000..2b7bf49 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/5.jpg new file mode 100644 index 0000000..7e279b2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/160/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/0.jpg new file mode 100644 index 0000000..94feb98 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/1.jpg new file mode 100644 index 0000000..fc21802 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/2.jpg new file mode 100644 index 0000000..5e9bdbb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/3.jpg new file mode 100644 index 0000000..428e8f2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/161/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/0.jpg new file mode 100644 index 0000000..3914dd0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/1.jpg new file mode 100644 index 0000000..c77794f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/2.jpg new file mode 100644 index 0000000..a8a7eed Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/3.jpg new file mode 100644 index 0000000..2376470 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/162/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/0.jpg new file mode 100644 index 0000000..1ba471c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/1.jpg new file mode 100644 index 0000000..37470fe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/2.jpg new file mode 100644 index 0000000..7edd305 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/3.jpg new file mode 100644 index 0000000..6e54a2d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/163/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._10.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._10.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._10.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._6.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._7.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._8.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._8.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._8.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._9.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._9.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/._9.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/0.jpg new file mode 100644 index 0000000..a3eda27 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/1.jpg new file mode 100644 index 0000000..391acda Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/10.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/10.jpg new file mode 100644 index 0000000..941e6ff Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/10.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/2.jpg new file mode 100644 index 0000000..d282659 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/3.jpg new file mode 100644 index 0000000..369ac56 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/4.jpg new file mode 100644 index 0000000..b4dfdef Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/5.jpg new file mode 100644 index 0000000..5c71ec2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/6.jpg new file mode 100644 index 0000000..e0aac20 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/7.jpg new file mode 100644 index 0000000..b5f1970 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/8.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/8.jpg new file mode 100644 index 0000000..5ca91b4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/8.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/9.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/9.jpg new file mode 100644 index 0000000..bb8bcda Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/164/9.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/0.jpg new file mode 100644 index 0000000..7fab9bd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/1.jpg new file mode 100644 index 0000000..8bcce2b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/2.jpg new file mode 100644 index 0000000..409e160 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/3.jpg new file mode 100644 index 0000000..ea18a11 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/165/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/0.jpg new file mode 100644 index 0000000..5fbf631 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/1.jpg new file mode 100644 index 0000000..0c9cf7b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/2.jpg new file mode 100644 index 0000000..c148c7f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/3.jpg new file mode 100644 index 0000000..f6eacb3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/4.jpg new file mode 100644 index 0000000..34bc12d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/5.jpg new file mode 100644 index 0000000..32b45a5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/166/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/0.jpg new file mode 100644 index 0000000..6bfaa51 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/1.jpg new file mode 100644 index 0000000..7937936 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/2.jpg new file mode 100644 index 0000000..1df7883 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/3.jpg new file mode 100644 index 0000000..86f06c0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/167/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/0.jpg new file mode 100644 index 0000000..fd0a0f3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/1.jpg new file mode 100644 index 0000000..c081bf8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/2.jpg new file mode 100644 index 0000000..69001b5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/3.jpg new file mode 100644 index 0000000..0a16d77 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/4.jpg new file mode 100644 index 0000000..2fe3336 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/5.jpg new file mode 100644 index 0000000..0149297 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/168/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/0.jpg new file mode 100644 index 0000000..e48d117 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/1.jpg new file mode 100644 index 0000000..19482d7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/2.jpg new file mode 100644 index 0000000..9a17945 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/3.jpg new file mode 100644 index 0000000..3301f67 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/4.jpg new file mode 100644 index 0000000..6c9af7b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/5.jpg new file mode 100644 index 0000000..c16565f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/169/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._6.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/0.jpg new file mode 100644 index 0000000..39caa02 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/1.jpg new file mode 100644 index 0000000..de04674 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/2.jpg new file mode 100644 index 0000000..daff4b0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/3.jpg new file mode 100644 index 0000000..9150b05 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/4.jpg new file mode 100644 index 0000000..234a8e0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/5.jpg new file mode 100644 index 0000000..871ce96 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/6.jpg new file mode 100644 index 0000000..7e0dac8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/17/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/0.jpg new file mode 100644 index 0000000..3832b73 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/1.jpg new file mode 100644 index 0000000..eaad32e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/2.jpg new file mode 100644 index 0000000..5be4a15 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/3.jpg new file mode 100644 index 0000000..2ac5373 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/4.jpg new file mode 100644 index 0000000..288b835 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/170/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._6.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/0.jpg new file mode 100644 index 0000000..5743d1d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/1.jpg new file mode 100644 index 0000000..5b795d4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/2.jpg new file mode 100644 index 0000000..09ce834 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/3.jpg new file mode 100644 index 0000000..ba9f23a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/4.jpg new file mode 100644 index 0000000..2136cdd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/5.jpg new file mode 100644 index 0000000..b6698bf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/6.jpg new file mode 100644 index 0000000..14c1613 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/171/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/0.jpg new file mode 100644 index 0000000..e5eee7a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/1.jpg new file mode 100644 index 0000000..b4019e9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/2.jpg new file mode 100644 index 0000000..9f46449 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/3.jpg new file mode 100644 index 0000000..415b852 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/4.jpg new file mode 100644 index 0000000..68517ba Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/172/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._5.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._6.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._7.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/0.jpg new file mode 100644 index 0000000..de69f8f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/1.jpg new file mode 100644 index 0000000..f49d565 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/2.jpg new file mode 100644 index 0000000..d091b18 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/3.jpg new file mode 100644 index 0000000..5092539 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/4.jpg new file mode 100644 index 0000000..d95bf12 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/5.jpg new file mode 100644 index 0000000..14cbb3f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/6.jpg new file mode 100644 index 0000000..bc855d7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/7.jpg new file mode 100644 index 0000000..bd894f9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/173/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._0.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._1.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._2.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._3.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._4.jpg new file mode 100644 index 0000000..e25cff7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/0.jpg new file mode 100644 index 0000000..9b8e703 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/1.jpg new file mode 100644 index 0000000..b5721e1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/2.jpg new file mode 100644 index 0000000..88779d7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/3.jpg new file mode 100644 index 0000000..8990a2b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/4.jpg new file mode 100644 index 0000000..bfc1a12 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/174/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/0.jpg new file mode 100644 index 0000000..86691e4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/1.jpg new file mode 100644 index 0000000..c61c2d1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/2.jpg new file mode 100644 index 0000000..3eedbc6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/3.jpg new file mode 100644 index 0000000..d3dd420 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/175/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/0.jpg new file mode 100644 index 0000000..7a60d61 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/1.jpg new file mode 100644 index 0000000..38ab78b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/2.jpg new file mode 100644 index 0000000..ebe6418 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/176/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/0.jpg new file mode 100644 index 0000000..ecc46f8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/1.jpg new file mode 100644 index 0000000..6090e63 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/2.jpg new file mode 100644 index 0000000..bf4c6e3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/3.jpg new file mode 100644 index 0000000..b91236c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/4.jpg new file mode 100644 index 0000000..ad25b18 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/177/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/0.jpg new file mode 100644 index 0000000..4cf6e02 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/1.jpg new file mode 100644 index 0000000..c56af0a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/2.jpg new file mode 100644 index 0000000..95093fe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/3.jpg new file mode 100644 index 0000000..d6c885b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/4.jpg new file mode 100644 index 0000000..fa0442f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/5.jpg new file mode 100644 index 0000000..349427b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/178/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/0.jpg new file mode 100644 index 0000000..e9a1768 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/1.jpg new file mode 100644 index 0000000..58f913d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/2.jpg new file mode 100644 index 0000000..482158b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/3.jpg new file mode 100644 index 0000000..2603196 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/179/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/0.jpg new file mode 100644 index 0000000..c5bc0f2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/1.jpg new file mode 100644 index 0000000..f16d46f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/2.jpg new file mode 100644 index 0000000..906a84d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/3.jpg new file mode 100644 index 0000000..78b0685 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/4.jpg new file mode 100644 index 0000000..f685e2e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/18/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/0.jpg new file mode 100644 index 0000000..b46cf93 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/1.jpg new file mode 100644 index 0000000..24108ed Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/2.jpg new file mode 100644 index 0000000..bb7b9f4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/3.jpg new file mode 100644 index 0000000..cbf8c98 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/4.jpg new file mode 100644 index 0000000..b69692a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/5.jpg new file mode 100644 index 0000000..9f03018 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/180/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/0.jpg new file mode 100644 index 0000000..57e5ffa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/1.jpg new file mode 100644 index 0000000..fe4adc9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/2.jpg new file mode 100644 index 0000000..a830c8e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/3.jpg new file mode 100644 index 0000000..388f51e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/4.jpg new file mode 100644 index 0000000..d260a64 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/181/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/0.jpg new file mode 100644 index 0000000..4a6d249 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/1.jpg new file mode 100644 index 0000000..742b7bc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/2.jpg new file mode 100644 index 0000000..1c4f0c8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/3.jpg new file mode 100644 index 0000000..a0a1473 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/4.jpg new file mode 100644 index 0000000..844d706 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/5.jpg new file mode 100644 index 0000000..7d1b685 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/182/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/0.jpg new file mode 100644 index 0000000..dff90f6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/1.jpg new file mode 100644 index 0000000..e25d425 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/2.jpg new file mode 100644 index 0000000..cec2c1d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/3.jpg new file mode 100644 index 0000000..60c0617 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/4.jpg new file mode 100644 index 0000000..a5f6821 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/183/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/0.jpg new file mode 100644 index 0000000..14ab2f7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/1.jpg new file mode 100644 index 0000000..da14a62 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/2.jpg new file mode 100644 index 0000000..8103277 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/3.jpg new file mode 100644 index 0000000..3f0de3d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/4.jpg new file mode 100644 index 0000000..089c46b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/184/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/0.jpg new file mode 100644 index 0000000..be5d01a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/1.jpg new file mode 100644 index 0000000..d821eba Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/2.jpg new file mode 100644 index 0000000..4dcbafb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/3.jpg new file mode 100644 index 0000000..d55dc7d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/4.jpg new file mode 100644 index 0000000..042e508 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/5.jpg new file mode 100644 index 0000000..ce81387 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/185/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/0.jpg new file mode 100644 index 0000000..7ac6f7f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/1.jpg new file mode 100644 index 0000000..35c045f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/186/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/0.jpg new file mode 100644 index 0000000..c10da68 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/1.jpg new file mode 100644 index 0000000..065f4f6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/2.jpg new file mode 100644 index 0000000..1674f4b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/3.jpg new file mode 100644 index 0000000..901f573 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/4.jpg new file mode 100644 index 0000000..7fc14b5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/5.jpg new file mode 100644 index 0000000..3a38ea1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/187/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/0.jpg new file mode 100644 index 0000000..15a2f51 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/1.jpg new file mode 100644 index 0000000..f82063a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/2.jpg new file mode 100644 index 0000000..312dcbe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/3.jpg new file mode 100644 index 0000000..ec7a436 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/4.jpg new file mode 100644 index 0000000..d2f4a7f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/188/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/0.jpg new file mode 100644 index 0000000..a46d863 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/1.jpg new file mode 100644 index 0000000..a8045ce Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/189/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/0.jpg new file mode 100644 index 0000000..1e4c73c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/1.jpg new file mode 100644 index 0000000..37a5899 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/2.jpg new file mode 100644 index 0000000..84b2fb4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/3.jpg new file mode 100644 index 0000000..419eb1e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/4.jpg new file mode 100644 index 0000000..9dbf9da Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/19/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/0.jpg new file mode 100644 index 0000000..750d5ce Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/1.jpg new file mode 100644 index 0000000..b006611 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/2.jpg new file mode 100644 index 0000000..a595f32 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/3.jpg new file mode 100644 index 0000000..442811b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/190/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/0.jpg new file mode 100644 index 0000000..78cc51b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/1.jpg new file mode 100644 index 0000000..c21ace5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/2.jpg new file mode 100644 index 0000000..2a583ba Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/3.jpg new file mode 100644 index 0000000..f39343c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/191/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/0.jpg new file mode 100644 index 0000000..d8e9c9b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/1.jpg new file mode 100644 index 0000000..29fc116 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/2.jpg new file mode 100644 index 0000000..94347b2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/3.jpg new file mode 100644 index 0000000..1ffcfe4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/4.jpg new file mode 100644 index 0000000..5c7528b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/192/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/0.jpg new file mode 100644 index 0000000..d8204e9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/1.jpg new file mode 100644 index 0000000..42985a3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/2.jpg new file mode 100644 index 0000000..ef47c2b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/3.jpg new file mode 100644 index 0000000..05be584 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/4.jpg new file mode 100644 index 0000000..62e9d88 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/5.jpg new file mode 100644 index 0000000..31d0f82 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/193/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/0.jpg new file mode 100644 index 0000000..2a038d8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/1.jpg new file mode 100644 index 0000000..ecd8f1b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/2.jpg new file mode 100644 index 0000000..acc14a3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/3.jpg new file mode 100644 index 0000000..ad361a2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/194/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/0.jpg new file mode 100644 index 0000000..1ce575f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/1.jpg new file mode 100644 index 0000000..1ec6c0b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/195/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/0.jpg new file mode 100644 index 0000000..c8a13ed Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/1.jpg new file mode 100644 index 0000000..b45a60e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/2.jpg new file mode 100644 index 0000000..68ba5a0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/3.jpg new file mode 100644 index 0000000..7683578 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/196/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/0.jpg new file mode 100644 index 0000000..241e27f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/1.jpg new file mode 100644 index 0000000..fa52384 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/2.jpg new file mode 100644 index 0000000..3f6382e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/3.jpg new file mode 100644 index 0000000..10eb442 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/4.jpg new file mode 100644 index 0000000..8777ba4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/5.jpg new file mode 100644 index 0000000..fd613eb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/197/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._6.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/0.jpg new file mode 100644 index 0000000..2967afb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/1.jpg new file mode 100644 index 0000000..0a980f6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/2.jpg new file mode 100644 index 0000000..56063bf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/3.jpg new file mode 100644 index 0000000..b662570 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/4.jpg new file mode 100644 index 0000000..4f2be77 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/5.jpg new file mode 100644 index 0000000..39e0543 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/6.jpg new file mode 100644 index 0000000..479aa16 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/198/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/0.jpg new file mode 100644 index 0000000..b91d472 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/1.jpg new file mode 100644 index 0000000..24f6dc4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/2.jpg new file mode 100644 index 0000000..e050fc7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/3.jpg new file mode 100644 index 0000000..2b6b9b2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/199/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._6.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/0.jpg new file mode 100644 index 0000000..e74bc38 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/1.jpg new file mode 100644 index 0000000..0777094 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/2.jpg new file mode 100644 index 0000000..0c95440 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/3.jpg new file mode 100644 index 0000000..e3846ad Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/4.jpg new file mode 100644 index 0000000..ba699de Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/5.jpg new file mode 100644 index 0000000..207ca81 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/6.jpg new file mode 100644 index 0000000..b49c410 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/2/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/0.jpg new file mode 100644 index 0000000..6c73c3c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/1.jpg new file mode 100644 index 0000000..c92bd96 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/2.jpg new file mode 100644 index 0000000..3d40d13 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/3.jpg new file mode 100644 index 0000000..dca87b1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/4.jpg new file mode 100644 index 0000000..09f2a6b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/20/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/0.jpg new file mode 100644 index 0000000..b32e639 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/1.jpg new file mode 100644 index 0000000..090eba3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/2.jpg new file mode 100644 index 0000000..dfe7691 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/3.jpg new file mode 100644 index 0000000..1184c3f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/200/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._6.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/0.jpg new file mode 100644 index 0000000..579f7b3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/1.jpg new file mode 100644 index 0000000..d33f3c1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/2.jpg new file mode 100644 index 0000000..2ab1459 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/3.jpg new file mode 100644 index 0000000..0a55b73 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/4.jpg new file mode 100644 index 0000000..0b81782 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/5.jpg new file mode 100644 index 0000000..1fb98b6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/6.jpg new file mode 100644 index 0000000..927ef0f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/201/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._6.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/0.jpg new file mode 100644 index 0000000..d77b82d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/1.jpg new file mode 100644 index 0000000..0d6d3d1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/2.jpg new file mode 100644 index 0000000..8b20c97 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/3.jpg new file mode 100644 index 0000000..83cb75d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/4.jpg new file mode 100644 index 0000000..32eb535 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/5.jpg new file mode 100644 index 0000000..d91719a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/6.jpg new file mode 100644 index 0000000..fa80dd2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/202/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/0.jpg new file mode 100644 index 0000000..5599e55 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/1.jpg new file mode 100644 index 0000000..6852700 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/2.jpg new file mode 100644 index 0000000..d70d8d8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/203/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/0.jpg new file mode 100644 index 0000000..5b17cef Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/1.jpg new file mode 100644 index 0000000..78193f4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/2.jpg new file mode 100644 index 0000000..78193f4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/3.jpg new file mode 100644 index 0000000..5b17cef Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/4.jpg new file mode 100644 index 0000000..f5668fa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/5.jpg new file mode 100644 index 0000000..f063f07 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/204/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/0.jpg new file mode 100644 index 0000000..d3ebb5d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/1.jpg new file mode 100644 index 0000000..9535bd9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/2.jpg new file mode 100644 index 0000000..f5e4699 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/3.jpg new file mode 100644 index 0000000..2dcd55b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/4.jpg new file mode 100644 index 0000000..a57cef2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/5.jpg new file mode 100644 index 0000000..c4dfb8b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/205/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/0.jpg new file mode 100644 index 0000000..8a15a14 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/1.jpg new file mode 100644 index 0000000..f341e02 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/206/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._6.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/0.jpg new file mode 100644 index 0000000..90c2888 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/1.jpg new file mode 100644 index 0000000..272c02a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/2.jpg new file mode 100644 index 0000000..e31fb38 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/3.jpg new file mode 100644 index 0000000..f8601a7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/4.jpg new file mode 100644 index 0000000..10b4624 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/5.jpg new file mode 100644 index 0000000..7fe8db8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/6.jpg new file mode 100644 index 0000000..9076c97 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/207/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/0.jpg new file mode 100644 index 0000000..a6f9d08 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/1.jpg new file mode 100644 index 0000000..cb16ac5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/2.jpg new file mode 100644 index 0000000..218b1b5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/3.jpg new file mode 100644 index 0000000..ad95cab Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/4.jpg new file mode 100644 index 0000000..0d9c976 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/5.jpg new file mode 100644 index 0000000..804130a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/208/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._5.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/0.jpg new file mode 100644 index 0000000..b6d1f4b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/1.jpg new file mode 100644 index 0000000..ad81e18 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/2.jpg new file mode 100644 index 0000000..1850b2a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/3.jpg new file mode 100644 index 0000000..af880ee Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/4.jpg new file mode 100644 index 0000000..b2ac1ba Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/5.jpg new file mode 100644 index 0000000..4b1a28d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/209/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/0.jpg new file mode 100644 index 0000000..63b9992 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/1.jpg new file mode 100644 index 0000000..6347a10 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/2.jpg new file mode 100644 index 0000000..92636ab Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/3.jpg new file mode 100644 index 0000000..bc6ee00 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/4.jpg new file mode 100644 index 0000000..f174ca0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/21/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/210/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/210/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/210/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/210/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/210/0.jpg new file mode 100644 index 0000000..8382daf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/210/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._4.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/0.jpg new file mode 100644 index 0000000..80eb7c1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/1.jpg new file mode 100644 index 0000000..456d57c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/2.jpg new file mode 100644 index 0000000..a9b5564 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/3.jpg new file mode 100644 index 0000000..0c372cc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/4.jpg new file mode 100644 index 0000000..27fb936 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/211/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._0.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._1.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._2.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._3.jpg new file mode 100644 index 0000000..51feebe Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/0.jpg new file mode 100644 index 0000000..3291b43 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/1.jpg new file mode 100644 index 0000000..6a871e7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/2.jpg new file mode 100644 index 0000000..309231e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/3.jpg new file mode 100644 index 0000000..0065cae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/212/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/0.jpg new file mode 100644 index 0000000..f1322e2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/1.jpg new file mode 100644 index 0000000..7a1aee7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/2.jpg new file mode 100644 index 0000000..ab112a1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/3.jpg new file mode 100644 index 0000000..cb156be Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/22/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/0.jpg new file mode 100644 index 0000000..d4e27c2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/1.jpg new file mode 100644 index 0000000..86167ed Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/2.jpg new file mode 100644 index 0000000..2ce9d5c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/3.jpg new file mode 100644 index 0000000..5bce182 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/4.jpg new file mode 100644 index 0000000..eb5fc49 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/23/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/0.jpg new file mode 100644 index 0000000..7bd8ada Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/1.jpg new file mode 100644 index 0000000..7a79198 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/2.jpg new file mode 100644 index 0000000..b1e699d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/3.jpg new file mode 100644 index 0000000..c78ad08 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/24/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/0.jpg new file mode 100644 index 0000000..e1d714f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/1.jpg new file mode 100644 index 0000000..99d5803 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/2.jpg new file mode 100644 index 0000000..f45d3cf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/3.jpg new file mode 100644 index 0000000..fe25a7b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/4.jpg new file mode 100644 index 0000000..e7c5e4a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/25/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/0.jpg new file mode 100644 index 0000000..e902555 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/1.jpg new file mode 100644 index 0000000..1ce635e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/2.jpg new file mode 100644 index 0000000..7a309e9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/3.jpg new file mode 100644 index 0000000..0e507c7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/4.jpg new file mode 100644 index 0000000..d6876eb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/26/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/0.jpg new file mode 100644 index 0000000..a879f42 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/1.jpg new file mode 100644 index 0000000..6ee14ec Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/2.jpg new file mode 100644 index 0000000..a1317e7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/3.jpg new file mode 100644 index 0000000..7757dbd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/4.jpg new file mode 100644 index 0000000..7704ccb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/27/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/0.jpg new file mode 100644 index 0000000..091b71a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/1.jpg new file mode 100644 index 0000000..36a6368 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/2.jpg new file mode 100644 index 0000000..bcc6961 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/3.jpg new file mode 100644 index 0000000..edeb020 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/4.jpg new file mode 100644 index 0000000..1b8de8d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/28/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/0.jpg new file mode 100644 index 0000000..0abd3cf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/1.jpg new file mode 100644 index 0000000..75ce58f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/2.jpg new file mode 100644 index 0000000..13358b5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/3.jpg new file mode 100644 index 0000000..ac1d527 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/29/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/0.jpg new file mode 100644 index 0000000..2dc366d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/1.jpg new file mode 100644 index 0000000..67f26c5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/2.jpg new file mode 100644 index 0000000..6daea23 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/3.jpg new file mode 100644 index 0000000..77b0dbf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/3/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/0.jpg new file mode 100644 index 0000000..ab9644b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/1.jpg new file mode 100644 index 0000000..409a398 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/2.jpg new file mode 100644 index 0000000..d461991 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/3.jpg new file mode 100644 index 0000000..a627d29 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/4.jpg new file mode 100644 index 0000000..0e2a416 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/5.jpg new file mode 100644 index 0000000..c794078 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/30/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/0.jpg new file mode 100644 index 0000000..acff7e6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/1.jpg new file mode 100644 index 0000000..fd9c5fa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/2.jpg new file mode 100644 index 0000000..52a329f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/3.jpg new file mode 100644 index 0000000..248a864 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/31/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/0.jpg new file mode 100644 index 0000000..6944149 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/1.jpg new file mode 100644 index 0000000..d87e293 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/2.jpg new file mode 100644 index 0000000..d10bcb7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/3.jpg new file mode 100644 index 0000000..4f135dd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/32/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/0.jpg new file mode 100644 index 0000000..720fb4b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/1.jpg new file mode 100644 index 0000000..ae0ae36 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/2.jpg new file mode 100644 index 0000000..82cfd8e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/3.jpg new file mode 100644 index 0000000..812b70c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/4.jpg new file mode 100644 index 0000000..940be9a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/5.jpg new file mode 100644 index 0000000..cf86bc5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/33/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/0.jpg new file mode 100644 index 0000000..f001632 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/1.jpg new file mode 100644 index 0000000..5d61834 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/2.jpg new file mode 100644 index 0000000..0b39598 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/3.jpg new file mode 100644 index 0000000..94712a6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/4.jpg new file mode 100644 index 0000000..50f14bd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/5.jpg new file mode 100644 index 0000000..07b4fdd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/34/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/0.jpg new file mode 100644 index 0000000..c77d82e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/1.jpg new file mode 100644 index 0000000..4fba505 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/2.jpg new file mode 100644 index 0000000..a2cff1d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/3.jpg new file mode 100644 index 0000000..90191cc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/4.jpg new file mode 100644 index 0000000..cead1f2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/35/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/0.jpg new file mode 100644 index 0000000..6d7c92b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/1.jpg new file mode 100644 index 0000000..33ed8b3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/2.jpg new file mode 100644 index 0000000..6ca6e32 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/3.jpg new file mode 100644 index 0000000..e401f4f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/4.jpg new file mode 100644 index 0000000..44b1f21 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/5.jpg new file mode 100644 index 0000000..f22befc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/36/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/0.jpg new file mode 100644 index 0000000..ee290f2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/1.jpg new file mode 100644 index 0000000..fbe1c3d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/2.jpg new file mode 100644 index 0000000..038c533 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/3.jpg new file mode 100644 index 0000000..db206a3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/4.jpg new file mode 100644 index 0000000..2bc10ff Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/37/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/0.jpg new file mode 100644 index 0000000..65cb573 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/1.jpg new file mode 100644 index 0000000..5019c87 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/2.jpg new file mode 100644 index 0000000..fbce06f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/3.jpg new file mode 100644 index 0000000..3a1844a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/4.jpg new file mode 100644 index 0000000..7314850 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/38/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/0.jpg new file mode 100644 index 0000000..b20af2e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/1.jpg new file mode 100644 index 0000000..3e062bf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/2.jpg new file mode 100644 index 0000000..50fe71f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/3.jpg new file mode 100644 index 0000000..3c4249f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/39/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._6.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/0.jpg new file mode 100644 index 0000000..e46ce0f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/1.jpg new file mode 100644 index 0000000..2c55b2c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/2.jpg new file mode 100644 index 0000000..0e4903b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/3.jpg new file mode 100644 index 0000000..345aa5f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/4.jpg new file mode 100644 index 0000000..e5ec0b8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/5.jpg new file mode 100644 index 0000000..d683ec5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/6.jpg new file mode 100644 index 0000000..249bf6a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/4/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/0.jpg new file mode 100644 index 0000000..eee4e50 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/1.jpg new file mode 100644 index 0000000..cab5c27 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/2.jpg new file mode 100644 index 0000000..ed08497 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/3.jpg new file mode 100644 index 0000000..36fb8d6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/41/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._5.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/0.jpg new file mode 100644 index 0000000..eb60535 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/1.jpg new file mode 100644 index 0000000..e2dd715 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/2.jpg new file mode 100644 index 0000000..586c8b2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/3.jpg new file mode 100644 index 0000000..9bb573c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/4.jpg new file mode 100644 index 0000000..632873d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/5.jpg new file mode 100644 index 0000000..b58fc6c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/42/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._5.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/0.jpg new file mode 100644 index 0000000..0dfc3d9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/1.jpg new file mode 100644 index 0000000..97fbf62 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/2.jpg new file mode 100644 index 0000000..bc6b928 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/3.jpg new file mode 100644 index 0000000..17458d2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/4.jpg new file mode 100644 index 0000000..438fcab Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/5.jpg new file mode 100644 index 0000000..7f73104 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/43/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/0.jpg new file mode 100644 index 0000000..179e55f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/1.jpg new file mode 100644 index 0000000..64d0a4c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/2.jpg new file mode 100644 index 0000000..16c3bf5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/44/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/0.jpg new file mode 100644 index 0000000..d93ad74 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/1.jpg new file mode 100644 index 0000000..094fcc7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/2.jpg new file mode 100644 index 0000000..da68740 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/3.jpg new file mode 100644 index 0000000..57a9f0e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/4.jpg new file mode 100644 index 0000000..8933eee Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/45/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/0.jpg new file mode 100644 index 0000000..d93ad74 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/1.jpg new file mode 100644 index 0000000..094fcc7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/2.jpg new file mode 100644 index 0000000..da68740 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/3.jpg new file mode 100644 index 0000000..57a9f0e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/4.jpg new file mode 100644 index 0000000..8933eee Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/46/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._5.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._6.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._7.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/0.jpg new file mode 100644 index 0000000..296362e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/1.jpg new file mode 100644 index 0000000..44e00ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/2.jpg new file mode 100644 index 0000000..edf7acc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/3.jpg new file mode 100644 index 0000000..920ed02 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/4.jpg new file mode 100644 index 0000000..65717e2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/5.jpg new file mode 100644 index 0000000..d1d149d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/6.jpg new file mode 100644 index 0000000..f05e831 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/7.jpg new file mode 100644 index 0000000..51d9aa3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/47/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/0.jpg new file mode 100644 index 0000000..bb7f9ce Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/1.jpg new file mode 100644 index 0000000..d37496a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/2.jpg new file mode 100644 index 0000000..9765f75 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/48/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/0.jpg new file mode 100644 index 0000000..c26e7c9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/1.jpg new file mode 100644 index 0000000..5e9bd04 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/2.jpg new file mode 100644 index 0000000..6947bee Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/49/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/0.jpg new file mode 100644 index 0000000..a668dc3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/1.jpg new file mode 100644 index 0000000..9d5654d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/2.jpg new file mode 100644 index 0000000..5aae98a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/3.jpg new file mode 100644 index 0000000..08b11fc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/4.jpg new file mode 100644 index 0000000..3e5beec Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/5/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/0.jpg new file mode 100644 index 0000000..753684d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/1.jpg new file mode 100644 index 0000000..bc19e28 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/2.jpg new file mode 100644 index 0000000..c359807 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/3.jpg new file mode 100644 index 0000000..f2f1c58 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/4.jpg new file mode 100644 index 0000000..7b5a8f5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/50/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/0.jpg new file mode 100644 index 0000000..3dbfb09 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/1.jpg new file mode 100644 index 0000000..ae70b0e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/2.jpg new file mode 100644 index 0000000..800e75b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/3.jpg new file mode 100644 index 0000000..eea86f0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/51/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/0.jpg new file mode 100644 index 0000000..e24904d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/1.jpg new file mode 100644 index 0000000..20c13d5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/2.jpg new file mode 100644 index 0000000..e45fef3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/52/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/0.jpg new file mode 100644 index 0000000..fa93de1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/1.jpg new file mode 100644 index 0000000..8fabba4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/2.jpg new file mode 100644 index 0000000..b070dae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/53/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/0.jpg new file mode 100644 index 0000000..03ae221 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/1.jpg new file mode 100644 index 0000000..396de7e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/2.jpg new file mode 100644 index 0000000..3af4d94 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/3.jpg new file mode 100644 index 0000000..93cb5e3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/4.jpg new file mode 100644 index 0000000..014ad6b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/54/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._5.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/0.jpg new file mode 100644 index 0000000..0251065 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/1.jpg new file mode 100644 index 0000000..bc71f78 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/2.jpg new file mode 100644 index 0000000..c844b51 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/3.jpg new file mode 100644 index 0000000..c62a8bf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/4.jpg new file mode 100644 index 0000000..ed00604 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/5.jpg new file mode 100644 index 0000000..3e71e14 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/55/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/0.jpg new file mode 100644 index 0000000..680ceef Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/1.jpg new file mode 100644 index 0000000..5b0138e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/2.jpg new file mode 100644 index 0000000..4a5452b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/56/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/0.jpg new file mode 100644 index 0000000..d271d26 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/1.jpg new file mode 100644 index 0000000..02356a0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/2.jpg new file mode 100644 index 0000000..fa715dc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/3.jpg new file mode 100644 index 0000000..32daae5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/4.jpg new file mode 100644 index 0000000..60555d4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/57/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/0.jpg new file mode 100644 index 0000000..86397a0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/1.jpg new file mode 100644 index 0000000..1f90197 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/2.jpg new file mode 100644 index 0000000..26717be Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/58/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/0.jpg new file mode 100644 index 0000000..82cb25a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/1.jpg new file mode 100644 index 0000000..94c6772 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/2.jpg new file mode 100644 index 0000000..fc694cb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/3.jpg new file mode 100644 index 0000000..307dd2f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/4.jpg new file mode 100644 index 0000000..2319351 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/59/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/0.jpg new file mode 100644 index 0000000..c2e2d53 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/1.jpg new file mode 100644 index 0000000..af5c2d7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/2.jpg new file mode 100644 index 0000000..b531894 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/3.jpg new file mode 100644 index 0000000..a32f02e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/4.jpg new file mode 100644 index 0000000..a10027b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/6/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/0.jpg new file mode 100644 index 0000000..e5a76fa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/1.jpg new file mode 100644 index 0000000..e47a692 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/2.jpg new file mode 100644 index 0000000..11a2486 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/3.jpg new file mode 100644 index 0000000..6513dad Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/4.jpg new file mode 100644 index 0000000..36df83b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/60/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/0.jpg new file mode 100644 index 0000000..1fa9d40 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/1.jpg new file mode 100644 index 0000000..55d9fb9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/2.jpg new file mode 100644 index 0000000..8d9b57f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/61/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/0.jpg new file mode 100644 index 0000000..251dad5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/1.jpg new file mode 100644 index 0000000..ca36090 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/2.jpg new file mode 100644 index 0000000..aaea11e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/62/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/0.jpg new file mode 100644 index 0000000..ea904a1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/1.jpg new file mode 100644 index 0000000..9b5d5af Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/2.jpg new file mode 100644 index 0000000..8c15ab0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/3.jpg new file mode 100644 index 0000000..77b837e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/4.jpg new file mode 100644 index 0000000..7a6046e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/63/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/0.jpg new file mode 100644 index 0000000..c1e15c0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/1.jpg new file mode 100644 index 0000000..0fa8329 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/64/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/0.jpg new file mode 100644 index 0000000..5ae0b4c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/1.jpg new file mode 100644 index 0000000..0e7002d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/2.jpg new file mode 100644 index 0000000..5057b1c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/3.jpg new file mode 100644 index 0000000..5a5f9cc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/4.jpg new file mode 100644 index 0000000..16f71d4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/65/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/0.jpg new file mode 100644 index 0000000..4fff846 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/1.jpg new file mode 100644 index 0000000..be0b2be Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/2.jpg new file mode 100644 index 0000000..fac0087 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/66/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/0.jpg new file mode 100644 index 0000000..9d6cce2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/1.jpg new file mode 100644 index 0000000..52c2b87 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/2.jpg new file mode 100644 index 0000000..d89286a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/67/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/0.jpg new file mode 100644 index 0000000..0e6bc9c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/1.jpg new file mode 100644 index 0000000..25cfa61 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/2.jpg new file mode 100644 index 0000000..7296038 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/68/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._5.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/0.jpg new file mode 100644 index 0000000..b14716f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/1.jpg new file mode 100644 index 0000000..0bc18ca Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/2.jpg new file mode 100644 index 0000000..de331f6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/3.jpg new file mode 100644 index 0000000..cc59b8a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/4.jpg new file mode 100644 index 0000000..7031cc7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/5.jpg new file mode 100644 index 0000000..9ba3125 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/69/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._5.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._6.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/0.jpg new file mode 100644 index 0000000..60ddc8b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/1.jpg new file mode 100644 index 0000000..10c7f7f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/2.jpg new file mode 100644 index 0000000..eca8578 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/3.jpg new file mode 100644 index 0000000..7d96755 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/4.jpg new file mode 100644 index 0000000..5df3a63 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/5.jpg new file mode 100644 index 0000000..275851d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/6.jpg new file mode 100644 index 0000000..71cafc3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/7/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/70/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/70/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/70/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/70/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/70/0.jpg new file mode 100644 index 0000000..5a00349 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/70/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/0.jpg new file mode 100644 index 0000000..33fcc2c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/1.jpg new file mode 100644 index 0000000..911fa07 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/2.jpg new file mode 100644 index 0000000..e670ea4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/71/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/0.jpg new file mode 100644 index 0000000..fb76fb1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/1.jpg new file mode 100644 index 0000000..b472f69 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/2.jpg new file mode 100644 index 0000000..ba314a2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/3.jpg new file mode 100644 index 0000000..e6bbc09 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/4.jpg new file mode 100644 index 0000000..0652a85 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/72/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/0.jpg new file mode 100644 index 0000000..9da67a7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/1.jpg new file mode 100644 index 0000000..505ae5c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/2.jpg new file mode 100644 index 0000000..a9108cc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/3.jpg new file mode 100644 index 0000000..36be4cf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/73/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/0.jpg new file mode 100644 index 0000000..f88f748 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/1.jpg new file mode 100644 index 0000000..0d9aba3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/2.jpg new file mode 100644 index 0000000..168f05e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/74/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/0.jpg new file mode 100644 index 0000000..f14aba5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/1.jpg new file mode 100644 index 0000000..0f849a1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/2.jpg new file mode 100644 index 0000000..f0a2b61 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/3.jpg new file mode 100644 index 0000000..bdd7289 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/75/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/0.jpg new file mode 100644 index 0000000..1920e56 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/1.jpg new file mode 100644 index 0000000..58848a4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/2.jpg new file mode 100644 index 0000000..27a3f30 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/76/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/0.jpg new file mode 100644 index 0000000..1844b76 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/1.jpg new file mode 100644 index 0000000..ad716a5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/2.jpg new file mode 100644 index 0000000..6e82bf2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/3.jpg new file mode 100644 index 0000000..f9ef483 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/4.jpg new file mode 100644 index 0000000..9d949ed Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/77/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/78/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/78/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/78/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/78/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/78/0.jpg new file mode 100644 index 0000000..346d8a0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/78/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/0.jpg new file mode 100644 index 0000000..2deb3e2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/1.jpg new file mode 100644 index 0000000..447374a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/2.jpg new file mode 100644 index 0000000..732902a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/79/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/0.jpg new file mode 100644 index 0000000..c1fdd58 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/1.jpg new file mode 100644 index 0000000..1150c7b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/2.jpg new file mode 100644 index 0000000..485c735 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/3.jpg new file mode 100644 index 0000000..8ff45c7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/4.jpg new file mode 100644 index 0000000..60d71d4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/8/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._0.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._1.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._2.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._3.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._4.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._5.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._6.jpg new file mode 100644 index 0000000..d02ed95 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/0.jpg new file mode 100644 index 0000000..22b3e16 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/1.jpg new file mode 100644 index 0000000..f2d3d36 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/2.jpg new file mode 100644 index 0000000..6199566 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/3.jpg new file mode 100644 index 0000000..b181846 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/4.jpg new file mode 100644 index 0000000..b94a0a8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/5.jpg new file mode 100644 index 0000000..3cdf56c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/6.jpg new file mode 100644 index 0000000..bea49fa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/80/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/0.jpg new file mode 100644 index 0000000..121b302 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/1.jpg new file mode 100644 index 0000000..8a8fb94 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/2.jpg new file mode 100644 index 0000000..500c7a7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/3.jpg new file mode 100644 index 0000000..b5f6491 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/81/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/0.jpg new file mode 100644 index 0000000..dd8d0f0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/1.jpg new file mode 100644 index 0000000..8d8194d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/2.jpg new file mode 100644 index 0000000..de06f0c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/3.jpg new file mode 100644 index 0000000..909b383 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/4.jpg new file mode 100644 index 0000000..3342d98 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/82/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/0.jpg new file mode 100644 index 0000000..20c963f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/1.jpg new file mode 100644 index 0000000..7f4777d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/2.jpg new file mode 100644 index 0000000..e6258e1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/3.jpg new file mode 100644 index 0000000..b4daa23 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/4.jpg new file mode 100644 index 0000000..55e43f7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/5.jpg new file mode 100644 index 0000000..10933d4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/83/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/0.jpg new file mode 100644 index 0000000..25c0fa0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/1.jpg new file mode 100644 index 0000000..c7052e7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/2.jpg new file mode 100644 index 0000000..586191f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/3.jpg new file mode 100644 index 0000000..d22ddce Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/4.jpg new file mode 100644 index 0000000..0597433 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/5.jpg new file mode 100644 index 0000000..30023cf Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/6.jpg new file mode 100644 index 0000000..6454cfd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/84/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/0.jpg new file mode 100644 index 0000000..c0e6247 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/1.jpg new file mode 100644 index 0000000..d330375 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/2.jpg new file mode 100644 index 0000000..656debb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/3.jpg new file mode 100644 index 0000000..1aa4b4e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/4.jpg new file mode 100644 index 0000000..4815d7e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/85/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/0.jpg new file mode 100644 index 0000000..0318700 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/1.jpg new file mode 100644 index 0000000..83738b7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/2.jpg new file mode 100644 index 0000000..05d106c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/3.jpg new file mode 100644 index 0000000..13fdf67 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/4.jpg new file mode 100644 index 0000000..59a26a3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/5.jpg new file mode 100644 index 0000000..8188670 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/86/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/0.jpg new file mode 100644 index 0000000..3d6c55c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/1.jpg new file mode 100644 index 0000000..084f39f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/2.jpg new file mode 100644 index 0000000..887dfa5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/3.jpg new file mode 100644 index 0000000..d4412cd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/87/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._6.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._7.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/._7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/0.jpg new file mode 100644 index 0000000..5fac611 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/1.jpg new file mode 100644 index 0000000..16bf91e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/2.jpg new file mode 100644 index 0000000..c43db1d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/3.jpg new file mode 100644 index 0000000..965ebd3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/4.jpg new file mode 100644 index 0000000..1fda380 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/5.jpg new file mode 100644 index 0000000..a1d4510 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/6.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/6.jpg new file mode 100644 index 0000000..1b325d0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/6.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/7.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/7.jpg new file mode 100644 index 0000000..9544dbb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/88/7.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/0.jpg new file mode 100644 index 0000000..6c8ea26 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/1.jpg new file mode 100644 index 0000000..26db41e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/2.jpg new file mode 100644 index 0000000..8815a1d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/3.jpg new file mode 100644 index 0000000..af75a37 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/89/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._0.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._1.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._2.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._3.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._4.jpg new file mode 100644 index 0000000..de93bb2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/0.jpg new file mode 100644 index 0000000..eac59ff Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/1.jpg new file mode 100644 index 0000000..8d73ab7 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/2.jpg new file mode 100644 index 0000000..86c297d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/3.jpg new file mode 100644 index 0000000..f5ea2ae Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/4.jpg new file mode 100644 index 0000000..8dfb796 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/9/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/0.jpg new file mode 100644 index 0000000..7d110e8 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/1.jpg new file mode 100644 index 0000000..d808dee Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/2.jpg new file mode 100644 index 0000000..abdd38d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/3.jpg new file mode 100644 index 0000000..29b6d7c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/4.jpg new file mode 100644 index 0000000..e837e55 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/90/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/0.jpg new file mode 100644 index 0000000..ddb8a38 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/1.jpg new file mode 100644 index 0000000..3a109d5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/2.jpg new file mode 100644 index 0000000..c9ed3b9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/3.jpg new file mode 100644 index 0000000..38edd61 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/4.jpg new file mode 100644 index 0000000..b38dffc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/91/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/0.jpg new file mode 100644 index 0000000..066fa57 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/1.jpg new file mode 100644 index 0000000..f4cedf0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/2.jpg new file mode 100644 index 0000000..d2d5845 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/3.jpg new file mode 100644 index 0000000..7ae7602 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/4.jpg new file mode 100644 index 0000000..869fb75 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/92/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._5.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/._5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/0.jpg new file mode 100644 index 0000000..87d8d67 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/1.jpg new file mode 100644 index 0000000..c3f80de Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/2.jpg new file mode 100644 index 0000000..9f97ddd Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/3.jpg new file mode 100644 index 0000000..021ffd3 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/4.jpg new file mode 100644 index 0000000..a927486 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/5.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/5.jpg new file mode 100644 index 0000000..a3de476 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/93/5.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/0.jpg new file mode 100644 index 0000000..db00bd9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/1.jpg new file mode 100644 index 0000000..f44a59b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/2.jpg new file mode 100644 index 0000000..2718711 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/3.jpg new file mode 100644 index 0000000..a49ece0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/4.jpg new file mode 100644 index 0000000..8e6e11a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/94/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/0.jpg new file mode 100644 index 0000000..bdb0b7f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/1.jpg new file mode 100644 index 0000000..761f6cb Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/2.jpg new file mode 100644 index 0000000..544aaef Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/3.jpg new file mode 100644 index 0000000..e7414f0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/4.jpg new file mode 100644 index 0000000..0e84b0f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/95/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/0.jpg new file mode 100644 index 0000000..078d94a Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/1.jpg new file mode 100644 index 0000000..6e54ac4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/2.jpg new file mode 100644 index 0000000..a889dda Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/3.jpg new file mode 100644 index 0000000..bc3a753 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/4.jpg new file mode 100644 index 0000000..90d2dbc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/96/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/0.jpg new file mode 100644 index 0000000..1035a61 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/1.jpg new file mode 100644 index 0000000..39e4d86 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/2.jpg new file mode 100644 index 0000000..4e81ba0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/3.jpg new file mode 100644 index 0000000..342f2c9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/4.jpg new file mode 100644 index 0000000..17a781f Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/97/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/0.jpg new file mode 100644 index 0000000..cf3e78b Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/1.jpg new file mode 100644 index 0000000..4b03265 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/2.jpg new file mode 100644 index 0000000..53fd3cc Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/3.jpg new file mode 100644 index 0000000..4af3ab1 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/4.jpg new file mode 100644 index 0000000..69d9514 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/98/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._0.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._1.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._2.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._3.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._4.jpg new file mode 100644 index 0000000..8ba66ac Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/._4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/0.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/0.jpg new file mode 100644 index 0000000..84a8a26 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/0.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/1.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/1.jpg new file mode 100644 index 0000000..f0fe284 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/1.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/2.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/2.jpg new file mode 100644 index 0000000..fafb213 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/2.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/3.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/3.jpg new file mode 100644 index 0000000..70f2b53 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/3.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/4.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/4.jpg new file mode 100644 index 0000000..b02b9a5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/99/4.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/drink_label.txt b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/drink_label.txt new file mode 100644 index 0000000..f7e5fca --- /dev/null +++ b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/drink_label.txt @@ -0,0 +1,987 @@ +0/0.jpg 脉动 +0/1.jpg 脉动 +0/2.jpg 脉动 +0/3.jpg 脉动 +1/0.jpg 红牛 +1/1.jpg 红牛 +1/2.jpg 红牛 +1/3.jpg 红牛 +1/4.jpg 红牛 +2/0.jpg 战马 +2/1.jpg 战马 +2/2.jpg 战马 +2/3.jpg 战马 +2/4.jpg 战马 +2/5.jpg 战马 +2/6.jpg 战马 +3/0.jpg 尖叫 +3/1.jpg 尖叫 +3/2.jpg 尖叫 +3/3.jpg 尖叫 +4/0.jpg 启力 +4/1.jpg 启力 +4/2.jpg 启力 +4/3.jpg 启力 +4/4.jpg 启力 +4/5.jpg 启力 +4/6.jpg 启力 +5/0.jpg 乐虎氨基酸维生素功能饮料 +5/1.jpg 乐虎氨基酸维生素功能饮料 +5/2.jpg 乐虎氨基酸维生素功能饮料 +5/3.jpg 乐虎氨基酸维生素功能饮料 +5/4.jpg 乐虎氨基酸维生素功能饮料 +6/0.jpg 日加满氨基酸功能饮料 +6/1.jpg 日加满氨基酸功能饮料 +6/2.jpg 日加满氨基酸功能饮料 +6/3.jpg 日加满氨基酸功能饮料 +6/4.jpg 日加满氨基酸功能饮料 +7/0.jpg 力克 +7/1.jpg 力克 +7/2.jpg 力克 +7/3.jpg 力克 +7/4.jpg 力克 +7/5.jpg 力克 +7/6.jpg 力克 +8/0.jpg 芙丝饮用天然水 +8/1.jpg 芙丝饮用天然水 +8/2.jpg 芙丝饮用天然水 +8/3.jpg 芙丝饮用天然水 +8/4.jpg 芙丝饮用天然水 +9/0.jpg 康师傅矿物质水 +9/1.jpg 康师傅矿物质水 +9/2.jpg 康师傅矿物质水 +9/3.jpg 康师傅矿物质水 +9/4.jpg 康师傅矿物质水 +10/0.jpg 依云天然矿泉水 +10/1.jpg 依云天然矿泉水 +10/2.jpg 依云天然矿泉水 +10/3.jpg 依云天然矿泉水 +10/4.jpg 依云天然矿泉水 +10/5.jpg 依云天然矿泉水 +11/0.jpg 魔爪能量饮料 +11/1.jpg 魔爪能量饮料 +11/2.jpg 魔爪能量饮料 +11/3.jpg 魔爪能量饮料 +11/4.jpg 魔爪能量饮料 +11/5.jpg 魔爪能量饮料 +12/0.jpg 汇多滋淡盐水 +12/1.jpg 汇多滋淡盐水 +12/2.jpg 汇多滋淡盐水 +13/0.jpg 普娜天然泉水 +13/1.jpg 普娜天然泉水 +13/2.jpg 普娜天然泉水 +13/3.jpg 普娜天然泉水 +13/4.jpg 普娜天然泉水 +14/0.jpg 乐虎功能饮料 +14/1.jpg 乐虎功能饮料 +14/2.jpg 乐虎功能饮料 +14/3.jpg 乐虎功能饮料 +14/4.jpg 乐虎功能饮料 +14/5.jpg 乐虎功能饮料 +15/0.jpg 宝矿力水特 +15/1.jpg 宝矿力水特 +15/2.jpg 宝矿力水特 +15/3.jpg 宝矿力水特 +15/4.jpg 宝矿力水特 +16/0.jpg 阿尔卑斯-天然苏打水 +16/1.jpg 阿尔卑斯-天然苏打水 +16/2.jpg 阿尔卑斯-天然苏打水 +16/3.jpg 阿尔卑斯-天然苏打水 +17/0.jpg 农夫山泉-饮用天然水 +17/1.jpg 农夫山泉-饮用天然水 +17/2.jpg 农夫山泉-饮用天然水 +17/3.jpg 农夫山泉-饮用天然水 +17/4.jpg 农夫山泉-饮用天然水 +17/5.jpg 农夫山泉-饮用天然水 +17/6.jpg 农夫山泉-饮用天然水 +18/0.jpg 碱LOVE +18/1.jpg 碱LOVE +18/2.jpg 碱LOVE +18/3.jpg 碱LOVE +18/4.jpg 碱LOVE +19/0.jpg 农夫山泉-天然矿泉水 +19/1.jpg 农夫山泉-天然矿泉水 +19/2.jpg 农夫山泉-天然矿泉水 +19/3.jpg 农夫山泉-天然矿泉水 +19/4.jpg 农夫山泉-天然矿泉水 +20/0.jpg 农夫山泉-泡茶水 +20/1.jpg 农夫山泉-泡茶水 +20/2.jpg 农夫山泉-泡茶水 +20/3.jpg 农夫山泉-泡茶水 +20/4.jpg 农夫山泉-泡茶水 +21/0.jpg 等渗尖叫 +21/1.jpg 等渗尖叫 +21/2.jpg 等渗尖叫 +21/3.jpg 等渗尖叫 +21/4.jpg 等渗尖叫 +22/0.jpg 恒大冰泉 +22/1.jpg 恒大冰泉 +22/2.jpg 恒大冰泉 +22/3.jpg 恒大冰泉 +23/0.jpg 优珍能量 +23/1.jpg 优珍能量 +23/2.jpg 优珍能量 +23/3.jpg 优珍能量 +23/4.jpg 优珍能量 +24/0.jpg 东鹏特饮 +24/1.jpg 东鹏特饮 +24/2.jpg 东鹏特饮 +24/3.jpg 东鹏特饮 +25/0.jpg 纯水乐 +25/1.jpg 纯水乐 +25/2.jpg 纯水乐 +25/3.jpg 纯水乐 +25/4.jpg 纯水乐 +26/0.jpg 白山水 +26/1.jpg 白山水 +26/2.jpg 白山水 +26/3.jpg 白山水 +26/4.jpg 白山水 +27/0.jpg 水动乐 +27/1.jpg 水动乐 +27/2.jpg 水动乐 +27/3.jpg 水动乐 +27/4.jpg 水动乐 +28/0.jpg F6能量饮品 +28/1.jpg F6能量饮品 +28/2.jpg F6能量饮品 +28/3.jpg F6能量饮品 +28/4.jpg F6能量饮品 +29/0.jpg 动益加 +29/1.jpg 动益加 +29/2.jpg 动益加 +29/3.jpg 动益加 +30/0.jpg 凉白开 +30/1.jpg 凉白开 +30/2.jpg 凉白开 +30/3.jpg 凉白开 +30/4.jpg 凉白开 +30/5.jpg 凉白开 +31/0.jpg 佳得乐 +31/1.jpg 佳得乐 +31/2.jpg 佳得乐 +31/3.jpg 佳得乐 +32/0.jpg 三得利 +32/1.jpg 三得利 +32/2.jpg 三得利 +32/3.jpg 三得利 +33/0.jpg 统一-爱夸天然矿泉水 +33/1.jpg 统一-爱夸天然矿泉水 +33/2.jpg 统一-爱夸天然矿泉水 +33/3.jpg 统一-爱夸天然矿泉水 +33/4.jpg 统一-爱夸天然矿泉水 +33/5.jpg 统一-爱夸天然矿泉水 +34/0.jpg 景田-饮用纯净水 +34/1.jpg 景田-饮用纯净水 +34/2.jpg 景田-饮用纯净水 +34/3.jpg 景田-饮用纯净水 +34/4.jpg 景田-饮用纯净水 +34/5.jpg 景田-饮用纯净水 +35/0.jpg 怡宝-魔力氨基酸 +35/1.jpg 怡宝-魔力氨基酸 +35/2.jpg 怡宝-魔力氨基酸 +35/3.jpg 怡宝-魔力氨基酸 +35/4.jpg 怡宝-魔力氨基酸 +36/0.jpg 红牛-强化型 +36/1.jpg 红牛-强化型 +36/2.jpg 红牛-强化型 +36/3.jpg 红牛-强化型 +36/4.jpg 红牛-强化型 +36/5.jpg 红牛-强化型 +37/0.jpg 景田-百岁山 +37/1.jpg 景田-百岁山 +37/2.jpg 景田-百岁山 +37/3.jpg 景田-百岁山 +37/4.jpg 景田-百岁山 +38/0.jpg 雀巢 +38/1.jpg 雀巢 +38/2.jpg 雀巢 +38/3.jpg 雀巢 +38/4.jpg 雀巢 +39/0.jpg 5小时能量饮料 +39/1.jpg 5小时能量饮料 +39/2.jpg 5小时能量饮料 +39/3.jpg 5小时能量饮料 +41/0.jpg 农夫山泉_纯果蔬汁 +41/1.jpg 农夫山泉_纯果蔬汁 +41/2.jpg 农夫山泉_纯果蔬汁 +41/3.jpg 农夫山泉_纯果蔬汁 +42/0.jpg GINNAI/神内_低聚糖代餐果汁 +42/1.jpg GINNAI/神内_低聚糖代餐果汁 +42/2.jpg GINNAI/神内_低聚糖代餐果汁 +42/3.jpg GINNAI/神内_低聚糖代餐果汁 +42/4.jpg GINNAI/神内_低聚糖代餐果汁 +42/5.jpg GINNAI/神内_低聚糖代餐果汁 +43/0.jpg 贝奇野菜_果汁每日C +43/1.jpg 贝奇野菜_果汁每日C +43/2.jpg 贝奇野菜_果汁每日C +43/3.jpg 贝奇野菜_果汁每日C +43/4.jpg 贝奇野菜_果汁每日C +43/5.jpg 贝奇野菜_果汁每日C +44/0.jpg HeyJuice_西柚饮料果蔬 +44/1.jpg HeyJuice_西柚饮料果蔬 +44/2.jpg HeyJuice_西柚饮料果蔬 +45/0.jpg 沛时Perse_纯蔬果汁 +45/1.jpg 沛时Perse_纯蔬果汁 +45/2.jpg 沛时Perse_纯蔬果汁 +45/3.jpg 沛时Perse_纯蔬果汁 +45/4.jpg 沛时Perse_纯蔬果汁 +46/0.jpg 沛时Perse纯蔬果汁 +46/1.jpg 沛时Perse纯蔬果汁 +46/2.jpg 沛时Perse纯蔬果汁 +46/3.jpg 沛时Perse纯蔬果汁 +46/4.jpg 沛时Perse纯蔬果汁 +47/0.jpg 味全_每日C +47/1.jpg 味全_每日C +47/2.jpg 味全_每日C +47/3.jpg 味全_每日C +47/4.jpg 味全_每日C +47/5.jpg 味全_每日C +47/6.jpg 味全_每日C +47/7.jpg 味全_每日C +48/0.jpg 苏醒汇_纯蔬果汁 +48/1.jpg 苏醒汇_纯蔬果汁 +48/2.jpg 苏醒汇_纯蔬果汁 +49/0.jpg 臻富_番茄汁 +49/1.jpg 臻富_番茄汁 +49/2.jpg 臻富_番茄汁 +50/0.jpg 多乐诗_轻断食果蔬汁 +50/1.jpg 多乐诗_轻断食果蔬汁 +50/2.jpg 多乐诗_轻断食果蔬汁 +50/3.jpg 多乐诗_轻断食果蔬汁 +50/4.jpg 多乐诗_轻断食果蔬汁 +51/0.jpg IF/如果_椰子水饮料 +51/1.jpg IF/如果_椰子水饮料 +51/2.jpg IF/如果_椰子水饮料 +51/3.jpg IF/如果_椰子水饮料 +52/0.jpg 伊藤园_果蔬汁 +52/1.jpg 伊藤园_果蔬汁 +52/2.jpg 伊藤园_果蔬汁 +53/0.jpg 艾璞乐_苦瓜汁 +53/1.jpg 艾璞乐_苦瓜汁 +53/2.jpg 艾璞乐_苦瓜汁 +54/0.jpg 屯河_番茄汁 +54/1.jpg 屯河_番茄汁 +54/2.jpg 屯河_番茄汁 +54/3.jpg 屯河_番茄汁 +54/4.jpg 屯河_番茄汁 +55/0.jpg 屯河_杏汁 +55/1.jpg 屯河_杏汁 +55/2.jpg 屯河_杏汁 +55/3.jpg 屯河_杏汁 +55/4.jpg 屯河_杏汁 +55/5.jpg 屯河_杏汁 +56/0.jpg Sunsweet_西梅汁 +56/1.jpg Sunsweet_西梅汁 +56/2.jpg Sunsweet_西梅汁 +57/0.jpg 农夫果园_混合果蔬汁 +57/1.jpg 农夫果园_混合果蔬汁 +57/2.jpg 农夫果园_混合果蔬汁 +57/3.jpg 农夫果园_混合果蔬汁 +57/4.jpg 农夫果园_混合果蔬汁 +58/0.jpg 佳果源_果蔬汁 +58/1.jpg 佳果源_果蔬汁 +58/2.jpg 佳果源_果蔬汁 +59/0.jpg SUNQUICK/新的_浓缩果汁 +59/1.jpg SUNQUICK/新的_浓缩果汁 +59/2.jpg SUNQUICK/新的_浓缩果汁 +59/3.jpg SUNQUICK/新的_浓缩果汁 +59/4.jpg SUNQUICK/新的_浓缩果汁 +60/0.jpg 维果清_蔬菜汁 +60/1.jpg 维果清_蔬菜汁 +60/2.jpg 维果清_蔬菜汁 +60/3.jpg 维果清_蔬菜汁 +60/4.jpg 维果清_蔬菜汁 +61/0.jpg 宝桑园_果蔬汁 +61/1.jpg 宝桑园_果蔬汁 +61/2.jpg 宝桑园_果蔬汁 +62/0.jpg 千纤_莲藕汁 +62/1.jpg 千纤_莲藕汁 +62/2.jpg 千纤_莲藕汁 +63/0.jpg 玉百味_蔗糖玉米汁 +63/1.jpg 玉百味_蔗糖玉米汁 +63/2.jpg 玉百味_蔗糖玉米汁 +63/3.jpg 玉百味_蔗糖玉米汁 +63/4.jpg 玉百味_蔗糖玉米汁 +64/0.jpg 纯粒源_玉米汁饮料 +64/1.jpg 纯粒源_玉米汁饮料 +65/0.jpg 福兰农庄_纯果汁 +65/1.jpg 福兰农庄_纯果汁 +65/2.jpg 福兰农庄_纯果汁 +65/3.jpg 福兰农庄_纯果汁 +65/4.jpg 福兰农庄_纯果汁 +66/0.jpg 乐源_果蔬汁 +66/1.jpg 乐源_果蔬汁 +66/2.jpg 乐源_果蔬汁 +67/0.jpg 统一_番茄汁 +67/1.jpg 统一_番茄汁 +67/2.jpg 统一_番茄汁 +68/0.jpg 小麦欧耶_0脂肪果蔬汁 +68/1.jpg 小麦欧耶_0脂肪果蔬汁 +68/2.jpg 小麦欧耶_0脂肪果蔬汁 +69/0.jpg VITA_果蔬汁 +69/1.jpg VITA_果蔬汁 +69/2.jpg VITA_果蔬汁 +69/3.jpg VITA_果蔬汁 +69/4.jpg VITA_果蔬汁 +69/5.jpg VITA_果蔬汁 +70/0.jpg 倍优能_黑莓原浆果汁 +71/0.jpg 四季乐活_胡萝卜沙棘汁 +71/1.jpg 四季乐活_胡萝卜沙棘汁 +71/2.jpg 四季乐活_胡萝卜沙棘汁 +72/0.jpg 佐餐时间_不老莓原汁 +72/1.jpg 佐餐时间_不老莓原汁 +72/2.jpg 佐餐时间_不老莓原汁 +72/3.jpg 佐餐时间_不老莓原汁 +72/4.jpg 佐餐时间_不老莓原汁 +73/0.jpg 佐餐时间_山楂汁 +73/1.jpg 佐餐时间_山楂汁 +73/2.jpg 佐餐时间_山楂汁 +73/3.jpg 佐餐时间_山楂汁 +74/0.jpg 阳光味道_桑葚汁 +74/1.jpg 阳光味道_桑葚汁 +74/2.jpg 阳光味道_桑葚汁 +75/0.jpg 乐天_葡萄汁 +75/1.jpg 乐天_葡萄汁 +75/2.jpg 乐天_葡萄汁 +75/3.jpg 乐天_葡萄汁 +76/0.jpg 乐天_芒果汁 +76/1.jpg 乐天_芒果汁 +76/2.jpg 乐天_芒果汁 +77/0.jpg 树丫_桔梗梨汁 +77/1.jpg 树丫_桔梗梨汁 +77/2.jpg 树丫_桔梗梨汁 +77/3.jpg 树丫_桔梗梨汁 +77/4.jpg 树丫_桔梗梨汁 +78/0.jpg 成有王记_冰杨梅汁 +79/0.jpg 蓝宝氏_野生蓝莓果肉饮料 +79/1.jpg 蓝宝氏_野生蓝莓果肉饮料 +79/2.jpg 蓝宝氏_野生蓝莓果肉饮料 +80/0.jpg 蓝宝氏_沙棘果肉饮料 +80/1.jpg 蓝宝氏_沙棘果肉饮料 +80/2.jpg 蓝宝氏_沙棘果肉饮料 +80/3.jpg 蓝宝氏_沙棘果肉饮料 +80/4.jpg 蓝宝氏_沙棘果肉饮料 +80/5.jpg 蓝宝氏_沙棘果肉饮料 +80/6.jpg 蓝宝氏_沙棘果肉饮料 +81/0.jpg 雪菲力盐汽水 +81/1.jpg 雪菲力盐汽水 +81/2.jpg 雪菲力盐汽水 +81/3.jpg 雪菲力盐汽水 +82/0.jpg 雪碧 +82/1.jpg 雪碧 +82/2.jpg 雪碧 +82/3.jpg 雪碧 +82/4.jpg 雪碧 +83/0.jpg 芬达 +83/1.jpg 芬达 +83/2.jpg 芬达 +83/3.jpg 芬达 +83/4.jpg 芬达 +83/5.jpg 芬达 +84/0.jpg 美年达 +84/1.jpg 美年达 +84/2.jpg 美年达 +84/3.jpg 美年达 +84/4.jpg 美年达 +84/5.jpg 美年达 +84/6.jpg 美年达 +85/0.jpg 秋林大白梨 +85/1.jpg 秋林大白梨 +85/2.jpg 秋林大白梨 +85/3.jpg 秋林大白梨 +85/4.jpg 秋林大白梨 +86/0.jpg 百事可乐 +86/1.jpg 百事可乐 +86/2.jpg 百事可乐 +86/3.jpg 百事可乐 +86/4.jpg 百事可乐 +86/5.jpg 百事可乐 +87/0.jpg 珍珍菠萝啤 +87/1.jpg 珍珍菠萝啤 +87/2.jpg 珍珍菠萝啤 +87/3.jpg 珍珍菠萝啤 +88/0.jpg 珍珍荔枝味汽水 +88/1.jpg 珍珍荔枝味汽水 +88/2.jpg 珍珍荔枝味汽水 +88/3.jpg 珍珍荔枝味汽水 +88/4.jpg 珍珍荔枝味汽水 +88/5.jpg 珍珍荔枝味汽水 +88/6.jpg 珍珍荔枝味汽水 +88/7.jpg 珍珍荔枝味汽水 +89/0.jpg 珍啵乐果味汽水 +89/1.jpg 珍啵乐果味汽水 +89/2.jpg 珍啵乐果味汽水 +89/3.jpg 珍啵乐果味汽水 +90/0.jpg 汉斯香橙果味饮料 +90/1.jpg 汉斯香橙果味饮料 +90/2.jpg 汉斯香橙果味饮料 +90/3.jpg 汉斯香橙果味饮料 +90/4.jpg 汉斯香橙果味饮料 +91/0.jpg 汉斯菠萝啤 +91/1.jpg 汉斯菠萝啤 +91/2.jpg 汉斯菠萝啤 +91/3.jpg 汉斯菠萝啤 +91/4.jpg 汉斯菠萝啤 +92/0.jpg 汉口二厂 +92/1.jpg 汉口二厂 +92/2.jpg 汉口二厂 +92/3.jpg 汉口二厂 +92/4.jpg 汉口二厂 +93/0.jpg 果子熟了苏打气泡水 +93/1.jpg 果子熟了苏打气泡水 +93/2.jpg 果子熟了苏打气泡水 +93/3.jpg 果子熟了苏打气泡水 +93/4.jpg 果子熟了苏打气泡水 +93/5.jpg 果子熟了苏打气泡水 +94/0.jpg 怡泉 +94/1.jpg 怡泉 +94/2.jpg 怡泉 +94/3.jpg 怡泉 +94/4.jpg 怡泉 +95/0.jpg 延中盐汽水 +95/1.jpg 延中盐汽水 +95/2.jpg 延中盐汽水 +95/3.jpg 延中盐汽水 +95/4.jpg 延中盐汽水 +96/0.jpg 延中乌梅味汽水 +96/1.jpg 延中乌梅味汽水 +96/2.jpg 延中乌梅味汽水 +96/3.jpg 延中乌梅味汽水 +96/4.jpg 延中乌梅味汽水 +97/0.jpg 巴黎水 +97/1.jpg 巴黎水 +97/2.jpg 巴黎水 +97/3.jpg 巴黎水 +97/4.jpg 巴黎水 +98/0.jpg 崂山可乐 +98/1.jpg 崂山可乐 +98/2.jpg 崂山可乐 +98/3.jpg 崂山可乐 +98/4.jpg 崂山可乐 +99/0.jpg 山海关桔汁汽水 +99/1.jpg 山海关桔汁汽水 +99/2.jpg 山海关桔汁汽水 +99/3.jpg 山海关桔汁汽水 +99/4.jpg 山海关桔汁汽水 +100/0.jpg 屈臣氏汤力苏打汽水 +100/1.jpg 屈臣氏汤力苏打汽水 +100/2.jpg 屈臣氏汤力苏打汽水 +100/3.jpg 屈臣氏汤力苏打汽水 +100/4.jpg 屈臣氏汤力苏打汽水 +100/5.jpg 屈臣氏汤力苏打汽水 +101/0.jpg 宾得宝 +101/1.jpg 宾得宝 +101/2.jpg 宾得宝 +101/3.jpg 宾得宝 +101/4.jpg 宾得宝 +101/5.jpg 宾得宝 +101/6.jpg 宾得宝 +101/7.jpg 宾得宝 +102/0.jpg 宏宝莱 +102/1.jpg 宏宝莱 +102/2.jpg 宏宝莱 +102/3.jpg 宏宝莱 +102/4.jpg 宏宝莱 +103/0.jpg 大窑嘉宾 +103/1.jpg 大窑嘉宾 +103/2.jpg 大窑嘉宾 +103/3.jpg 大窑嘉宾 +103/4.jpg 大窑嘉宾 +103/5.jpg 大窑嘉宾 +103/6.jpg 大窑嘉宾 +103/7.jpg 大窑嘉宾 +104/0.jpg 大洋玛盐汽水 +104/1.jpg 大洋玛盐汽水 +104/2.jpg 大洋玛盐汽水 +104/3.jpg 大洋玛盐汽水 +104/4.jpg 大洋玛盐汽水 +104/5.jpg 大洋玛盐汽水 +104/6.jpg 大洋玛盐汽水 +105/0.jpg 圣碧涛 +105/1.jpg 圣碧涛 +105/2.jpg 圣碧涛 +105/3.jpg 圣碧涛 +105/4.jpg 圣碧涛 +105/5.jpg 圣碧涛 +105/6.jpg 圣碧涛 +106/0.jpg 圣培露 +106/1.jpg 圣培露 +106/2.jpg 圣培露 +106/3.jpg 圣培露 +106/4.jpg 圣培露 +107/0.jpg 喜茶无糖气泡水 +107/1.jpg 喜茶无糖气泡水 +107/2.jpg 喜茶无糖气泡水 +107/3.jpg 喜茶无糖气泡水 +107/4.jpg 喜茶无糖气泡水 +107/5.jpg 喜茶无糖气泡水 +108/0.jpg 哈塔弹珠汽水 +108/1.jpg 哈塔弹珠汽水 +108/2.jpg 哈塔弹珠汽水 +108/3.jpg 哈塔弹珠汽水 +108/4.jpg 哈塔弹珠汽水 +109/0.jpg 可口可乐 +109/1.jpg 可口可乐 +109/2.jpg 可口可乐 +109/3.jpg 可口可乐 +109/4.jpg 可口可乐 +109/5.jpg 可口可乐 +109/6.jpg 可口可乐 +109/7.jpg 可口可乐 +110/0.jpg 华洋汽水 +110/1.jpg 华洋汽水 +110/2.jpg 华洋汽水 +110/3.jpg 华洋汽水 +110/4.jpg 华洋汽水 +110/5.jpg 华洋汽水 +110/6.jpg 华洋汽水 +110/7.jpg 华洋汽水 +111/0.jpg 北冰洋 +111/1.jpg 北冰洋 +111/2.jpg 北冰洋 +111/3.jpg 北冰洋 +111/4.jpg 北冰洋 +111/5.jpg 北冰洋 +111/6.jpg 北冰洋 +111/7.jpg 北冰洋 +111/8.jpg 北冰洋 +111/9.jpg 北冰洋 +112/0.jpg 冰峰 +112/1.jpg 冰峰 +112/2.jpg 冰峰 +112/3.jpg 冰峰 +112/4.jpg 冰峰 +112/5.jpg 冰峰 +112/6.jpg 冰峰 +113/0.jpg 农夫山泉苏打气泡水 +113/1.jpg 农夫山泉苏打气泡水 +113/2.jpg 农夫山泉苏打气泡水 +113/3.jpg 农夫山泉苏打气泡水 +113/4.jpg 农夫山泉苏打气泡水 +113/5.jpg 农夫山泉苏打气泡水 +114/0.jpg 元气森林 +114/1.jpg 元气森林 +114/2.jpg 元气森林 +114/3.jpg 元气森林 +114/4.jpg 元气森林 +114/5.jpg 元气森林 +114/6.jpg 元气森林 +115/0.jpg 健力宝 +115/1.jpg 健力宝 +115/2.jpg 健力宝 +115/3.jpg 健力宝 +115/4.jpg 健力宝 +115/5.jpg 健力宝 +115/6.jpg 健力宝 +115/7.jpg 健力宝 +116/0.jpg 亚洲汽水 +116/1.jpg 亚洲汽水 +116/2.jpg 亚洲汽水 +116/3.jpg 亚洲汽水 +116/4.jpg 亚洲汽水 +116/5.jpg 亚洲汽水 +117/0.jpg 乐天妙之吻 +117/1.jpg 乐天妙之吻 +117/2.jpg 乐天妙之吻 +117/3.jpg 乐天妙之吻 +118/0.jpg 三麟大象苏打气泡水 +118/1.jpg 三麟大象苏打气泡水 +118/2.jpg 三麟大象苏打气泡水 +118/3.jpg 三麟大象苏打气泡水 +119/0.jpg 七喜 +119/1.jpg 七喜 +119/2.jpg 七喜 +119/3.jpg 七喜 +119/4.jpg 七喜 +120/0.jpg 统一冰红茶 +120/1.jpg 统一冰红茶 +120/2.jpg 统一冰红茶 +120/3.jpg 统一冰红茶 +121/0.jpg 维他柠檬茶 +121/1.jpg 维他柠檬茶 +121/2.jpg 维他柠檬茶 +121/3.jpg 维他柠檬茶 +122/0.jpg 维他无糖茶 +122/1.jpg 维他无糖茶 +122/2.jpg 维他无糖茶 +123/0.jpg 达利园青梅绿茶 +123/1.jpg 达利园青梅绿茶 +123/2.jpg 达利园青梅绿茶 +123/3.jpg 达利园青梅绿茶 +123/4.jpg 达利园青梅绿茶 +123/5.jpg 达利园青梅绿茶 +124/0.jpg 伊藤园绿茶 +124/1.jpg 伊藤园绿茶 +124/2.jpg 伊藤园绿茶 +124/3.jpg 伊藤园绿茶 +124/4.jpg 伊藤园绿茶 +124/5.jpg 伊藤园绿茶 +125/0.jpg 伊藤园纤维乌龙茶 +125/1.jpg 伊藤园纤维乌龙茶 +125/2.jpg 伊藤园纤维乌龙茶 +125/3.jpg 伊藤园纤维乌龙茶 +125/4.jpg 伊藤园纤维乌龙茶 +126/0.jpg 伊藤园大麦茶 +126/1.jpg 伊藤园大麦茶 +126/2.jpg 伊藤园大麦茶 +126/3.jpg 伊藤园大麦茶 +126/4.jpg 伊藤园大麦茶 +127/0.jpg 伊藤园蜜桃红茶 +127/1.jpg 伊藤园蜜桃红茶 +127/2.jpg 伊藤园蜜桃红茶 +127/3.jpg 伊藤园蜜桃红茶 +128/0.jpg 伊藤园柠檬红茶 +128/1.jpg 伊藤园柠檬红茶 +128/2.jpg 伊藤园柠檬红茶 +128/3.jpg 伊藤园柠檬红茶 +129/0.jpg 伊藤园茉莉白茶 +129/1.jpg 伊藤园茉莉白茶 +129/2.jpg 伊藤园茉莉白茶 +129/3.jpg 伊藤园茉莉白茶 +129/4.jpg 伊藤园茉莉白茶 +129/5.jpg 伊藤园茉莉白茶 +130/0.jpg 伊藤园铁观音 +130/1.jpg 伊藤园铁观音 +130/2.jpg 伊藤园铁观音 +130/3.jpg 伊藤园铁观音 +131/0.jpg 统一绿茶 +131/1.jpg 统一绿茶 +131/2.jpg 统一绿茶 +131/3.jpg 统一绿茶 +131/4.jpg 统一绿茶 +131/5.jpg 统一绿茶 +131/6.jpg 统一绿茶 +131/7.jpg 统一绿茶 +132/0.jpg 伊藤园浓味乌龙茶 +132/1.jpg 伊藤园浓味乌龙茶 +132/2.jpg 伊藤园浓味乌龙茶 +132/3.jpg 伊藤园浓味乌龙茶 +132/4.jpg 伊藤园浓味乌龙茶 +133/0.jpg 伊藤园浓味绿茶 +133/1.jpg 伊藤园浓味绿茶 +133/2.jpg 伊藤园浓味绿茶 +133/3.jpg 伊藤园浓味绿茶 +133/4.jpg 伊藤园浓味绿茶 +133/5.jpg 伊藤园浓味绿茶 +134/0.jpg 统一茶里王 +134/1.jpg 统一茶里王 +134/2.jpg 统一茶里王 +134/3.jpg 统一茶里王 +135/0.jpg 雀巢茶萃 +135/1.jpg 雀巢茶萃 +135/2.jpg 雀巢茶萃 +135/3.jpg 雀巢茶萃 +135/4.jpg 雀巢茶萃 +135/5.jpg 雀巢茶萃 +135/6.jpg 雀巢茶萃 +136/0.jpg 康师傅茉莉蜜茶 +136/1.jpg 康师傅茉莉蜜茶 +136/2.jpg 康师傅茉莉蜜茶 +136/3.jpg 康师傅茉莉蜜茶 +136/4.jpg 康师傅茉莉蜜茶 +136/5.jpg 康师傅茉莉蜜茶 +137/0.jpg 康师傅茉莉清茶 +137/1.jpg 康师傅茉莉清茶 +137/2.jpg 康师傅茉莉清茶 +137/3.jpg 康师傅茉莉清茶 +137/4.jpg 康师傅茉莉清茶 +137/5.jpg 康师傅茉莉清茶 +138/0.jpg 康师傅茉莉花茶 +138/1.jpg 康师傅茉莉花茶 +138/2.jpg 康师傅茉莉花茶 +138/3.jpg 康师傅茉莉花茶 +138/4.jpg 康师傅茉莉花茶 +138/5.jpg 康师傅茉莉花茶 +138/6.jpg 康师傅茉莉花茶 +139/0.jpg 康师傅冷泡绿茶 +139/1.jpg 康师傅冷泡绿茶 +139/2.jpg 康师傅冷泡绿茶 +139/3.jpg 康师傅冷泡绿茶 +139/4.jpg 康师傅冷泡绿茶 +139/5.jpg 康师傅冷泡绿茶 +140/0.jpg 三得利乌龙茶 +140/1.jpg 三得利乌龙茶 +140/2.jpg 三得利乌龙茶 +140/3.jpg 三得利乌龙茶 +140/4.jpg 三得利乌龙茶 +140/5.jpg 三得利乌龙茶 +141/0.jpg 元气森林燃茶 +141/1.jpg 元气森林燃茶 +141/2.jpg 元气森林燃茶 +141/3.jpg 元气森林燃茶 +142/0.jpg 康师傅冰红茶 +142/1.jpg 康师傅冰红茶 +142/2.jpg 康师傅冰红茶 +142/3.jpg 康师傅冰红茶 +142/4.jpg 康师傅冰红茶 +143/0.jpg 三得利果瀑茶 +143/1.jpg 三得利果瀑茶 +143/2.jpg 三得利果瀑茶 +143/3.jpg 三得利果瀑茶 +143/4.jpg 三得利果瀑茶 +143/5.jpg 三得利果瀑茶 +144/0.jpg 喜茶_轻乳茶 +144/1.jpg 喜茶_轻乳茶 +144/2.jpg 喜茶_轻乳茶 +144/3.jpg 喜茶_轻乳茶 +144/4.jpg 喜茶_轻乳茶 +144/5.jpg 喜茶_轻乳茶 +145/0.jpg 麟珑茶室大麦爽茶 +145/1.jpg 麟珑茶室大麦爽茶 +145/2.jpg 麟珑茶室大麦爽茶 +145/3.jpg 麟珑茶室大麦爽茶 +145/4.jpg 麟珑茶室大麦爽茶 +145/5.jpg 麟珑茶室大麦爽茶 +146/0.jpg 麟珑茶室大人茶 +146/1.jpg 麟珑茶室大人茶 +146/2.jpg 麟珑茶室大人茶 +146/3.jpg 麟珑茶室大人茶 +147/0.jpg 麟珑茶室每天绿茶 +147/1.jpg 麟珑茶室每天绿茶 +147/2.jpg 麟珑茶室每天绿茶 +147/3.jpg 麟珑茶室每天绿茶 +147/4.jpg 麟珑茶室每天绿茶 +147/5.jpg 麟珑茶室每天绿茶 +148/0.jpg 麟珑茶室茉莉轻茶 +148/1.jpg 麟珑茶室茉莉轻茶 +148/2.jpg 麟珑茶室茉莉轻茶 +148/3.jpg 麟珑茶室茉莉轻茶 +149/0.jpg 和其正凉茶 +149/1.jpg 和其正凉茶 +149/2.jpg 和其正凉茶 +149/3.jpg 和其正凉茶 +150/0.jpg 王老吉凉茶 +150/1.jpg 王老吉凉茶 +150/2.jpg 王老吉凉茶 +150/3.jpg 王老吉凉茶 +150/4.jpg 王老吉凉茶 +151/0.jpg 加多宝 +151/1.jpg 加多宝 +151/2.jpg 加多宝 +151/3.jpg 加多宝 +152/0.jpg 统一阿萨姆奶茶 +152/1.jpg 统一阿萨姆奶茶 +152/2.jpg 统一阿萨姆奶茶 +152/3.jpg 统一阿萨姆奶茶 +152/4.jpg 统一阿萨姆奶茶 +152/5.jpg 统一阿萨姆奶茶 +153/0.jpg 康师傅绿茶 +153/1.jpg 康师傅绿茶 +153/2.jpg 康师傅绿茶 +153/3.jpg 康师傅绿茶 +153/4.jpg 康师傅绿茶 +153/5.jpg 康师傅绿茶 +154/0.jpg 农夫山泉打奶茶 +154/1.jpg 农夫山泉打奶茶 +154/2.jpg 农夫山泉打奶茶 +154/3.jpg 农夫山泉打奶茶 +155/0.jpg 麒麟午后奶茶 +155/1.jpg 麒麟午后奶茶 +155/2.jpg 麒麟午后奶茶 +155/3.jpg 麒麟午后奶茶 +155/4.jpg 麒麟午后奶茶 +156/0.jpg 康师傅奶茶 +156/1.jpg 康师傅奶茶 +156/2.jpg 康师傅奶茶 +156/3.jpg 康师傅奶茶 +157/0.jpg 可口可乐淳茶舍 +157/1.jpg 可口可乐淳茶舍 +157/2.jpg 可口可乐淳茶舍 +157/3.jpg 可口可乐淳茶舍 +157/4.jpg 可口可乐淳茶舍 +157/5.jpg 可口可乐淳茶舍 +158/0.jpg 元气森林纤茶 +158/1.jpg 元气森林纤茶 +158/2.jpg 元气森林纤茶 +158/3.jpg 元气森林纤茶 +158/4.jpg 元气森林纤茶 +158/5.jpg 元气森林纤茶 +159/0.jpg 雀巢咖啡 +159/1.jpg 雀巢咖啡 +159/2.jpg 雀巢咖啡 +159/3.jpg 雀巢咖啡 +160/0.jpg 雀巢冷萃咖啡 +160/1.jpg 雀巢冷萃咖啡 +160/2.jpg 雀巢冷萃咖啡 +160/3.jpg 雀巢冷萃咖啡 +160/4.jpg 雀巢冷萃咖啡 +160/5.jpg 雀巢冷萃咖啡 +161/0.jpg 星巴克派克市场 +161/1.jpg 星巴克派克市场 +161/2.jpg 星巴克派克市场 +161/3.jpg 星巴克派克市场 +162/0.jpg 星巴克星倍醇咖啡 +162/1.jpg 星巴克星倍醇咖啡 +162/2.jpg 星巴克星倍醇咖啡 +162/3.jpg 星巴克星倍醇咖啡 +163/0.jpg 星巴克星选咖啡 +163/1.jpg 星巴克星选咖啡 +163/2.jpg 星巴克星选咖啡 +163/3.jpg 星巴克星选咖啡 +164/0.jpg 康师傅冰绿茶 +164/1.jpg 康师傅冰绿茶 +164/2.jpg 康师傅冰绿茶 +164/3.jpg 康师傅冰绿茶 +164/4.jpg 康师傅冰绿茶 +164/5.jpg 康师傅冰绿茶 +164/6.jpg 康师傅冰绿茶 +164/7.jpg 康师傅冰绿茶 +164/8.jpg 康师傅冰绿茶 +164/9.jpg 康师傅冰绿茶 +164/10.jpg 康师傅冰绿茶 +165/0.jpg 星巴克星冰乐咖啡 +165/1.jpg 星巴克星冰乐咖啡 +165/2.jpg 星巴克星冰乐咖啡 +165/3.jpg 星巴克星冰乐咖啡 +166/0.jpg costa咖啡 +166/1.jpg costa咖啡 +166/2.jpg costa咖啡 +166/3.jpg costa咖啡 +166/4.jpg costa咖啡 +166/5.jpg costa咖啡 +167/0.jpg 统一雅哈咖啡 +167/1.jpg 统一雅哈咖啡 +167/2.jpg 统一雅哈咖啡 +167/3.jpg 统一雅哈咖啡 +168/0.jpg 麒麟火咖 +168/1.jpg 麒麟火咖 +168/2.jpg 麒麟火咖 +168/3.jpg 麒麟火咖 +168/4.jpg 麒麟火咖 +168/5.jpg 麒麟火咖 +169/0.jpg 农夫山泉炭仌咖啡 +169/1.jpg 农夫山泉炭仌咖啡 +169/2.jpg 农夫山泉炭仌咖啡 +169/3.jpg 农夫山泉炭仌咖啡 +169/4.jpg 农夫山泉炭仌咖啡 +169/5.jpg 农夫山泉炭仌咖啡 +170/0.jpg 味全贝纳颂 +170/1.jpg 味全贝纳颂 +170/2.jpg 味全贝纳颂 +170/3.jpg 味全贝纳颂 +170/4.jpg 味全贝纳颂 +171/0.jpg 康师傅青梅绿茶 +171/1.jpg 康师傅青梅绿茶 +171/2.jpg 康师傅青梅绿茶 +171/3.jpg 康师傅青梅绿茶 +171/4.jpg 康师傅青梅绿茶 +171/5.jpg 康师傅青梅绿茶 +171/6.jpg 康师傅青梅绿茶 +172/0.jpg 东方树叶红茶/玄米茶/绿茶… +172/1.jpg 东方树叶红茶/玄米茶/绿茶… +172/2.jpg 东方树叶红茶/玄米茶/绿茶… +172/3.jpg 东方树叶红茶/玄米茶/绿茶… +172/4.jpg 东方树叶红茶/玄米茶/绿茶… +173/0.jpg 茶π +173/1.jpg 茶π +173/2.jpg 茶π +173/3.jpg 茶π +173/4.jpg 茶π +173/5.jpg 茶π +173/6.jpg 茶π +173/7.jpg 茶π +174/0.jpg 小茗同学 +174/1.jpg 小茗同学 +174/2.jpg 小茗同学 +174/3.jpg 小茗同学 +174/4.jpg 小茗同学 +175/0.jpg 蒙牛_纯甄 +175/1.jpg 蒙牛_纯甄 +175/2.jpg 蒙牛_纯甄 +175/3.jpg 蒙牛_纯甄 +176/0.jpg 蒙牛_未来星 +176/1.jpg 蒙牛_未来星 +176/2.jpg 蒙牛_未来星 +177/0.jpg 蒙牛_真果粒 +177/1.jpg 蒙牛_真果粒 +177/2.jpg 蒙牛_真果粒 +177/3.jpg 蒙牛_真果粒 +177/4.jpg 蒙牛_真果粒 +178/0.jpg 蒙牛_精选牧场 +178/1.jpg 蒙牛_精选牧场 +178/2.jpg 蒙牛_精选牧场 +178/3.jpg 蒙牛_精选牧场 +178/4.jpg 蒙牛_精选牧场 +178/5.jpg 蒙牛_精选牧场 +179/0.jpg 蒙牛_酸酸乳 +179/1.jpg 蒙牛_酸酸乳 +179/2.jpg 蒙牛_酸酸乳 +179/3.jpg 蒙牛_酸酸乳 +180/0.jpg 蒙牛_特仑苏 +180/1.jpg 蒙牛_特仑苏 +180/2.jpg 蒙牛_特仑苏 +180/3.jpg 蒙牛_特仑苏 +180/4.jpg 蒙牛_特仑苏 +180/5.jpg 蒙牛_特仑苏 +181/0.jpg 蒙牛_新养道 +181/1.jpg 蒙牛_新养道 +181/2.jpg 蒙牛_新养道 +181/3.jpg 蒙牛_新养道 +181/4.jpg 蒙牛_新养道 +182/0.jpg 蒙牛_早餐奶 +182/1.jpg 蒙牛_早餐奶 +182/2.jpg 蒙牛_早餐奶 +182/3.jpg 蒙牛_早餐奶 +182/4.jpg 蒙牛_早餐奶 +182/5.jpg 蒙牛_早餐奶 +183/0.jpg 飞鹤_甄爱倍护 +183/1.jpg 飞鹤_甄爱倍护 +183/2.jpg 飞鹤_甄爱倍护 +183/3.jpg 飞鹤_甄爱倍护 +183/4.jpg 飞鹤_甄爱倍护 +184/0.jpg 飞鹤_茁然 +184/1.jpg 飞鹤_茁然 +184/2.jpg 飞鹤_茁然 +184/3.jpg 飞鹤_茁然 +184/4.jpg 飞鹤_茁然 +185/0.jpg 飞鹤_星飞帆 +185/1.jpg 飞鹤_星飞帆 +185/2.jpg 飞鹤_星飞帆 +185/3.jpg 飞鹤_星飞帆 +185/4.jpg 飞鹤_星飞帆 +185/5.jpg 飞鹤_星飞帆 +186/0.jpg 伊利_畅意 +186/1.jpg 伊利_畅意 +187/0.jpg 伊利_舒化 +187/1.jpg 伊利_舒化 +187/2.jpg 伊利_舒化 +187/3.jpg 伊利_舒化 +187/4.jpg 伊利_舒化 +187/5.jpg 伊利_舒化 +188/0.jpg 伊利_金典 +188/1.jpg 伊利_金典 +188/2.jpg 伊利_金典 +188/3.jpg 伊利_金典 +188/4.jpg 伊利_金典 +189/0.jpg 伊利_优酸乳 +189/1.jpg 伊利_优酸乳 +190/0.jpg 伊利_谷粒多 +190/1.jpg 伊利_谷粒多 +190/2.jpg 伊利_谷粒多 +190/3.jpg 伊利_谷粒多 +191/0.jpg 伊利_QQ星 +191/1.jpg 伊利_QQ星 +191/2.jpg 伊利_QQ星 +191/3.jpg 伊利_QQ星 +192/0.jpg 伊利_学生奶 +192/1.jpg 伊利_学生奶 +192/2.jpg 伊利_学生奶 +192/3.jpg 伊利_学生奶 +192/4.jpg 伊利_学生奶 +193/0.jpg 伊利_植选 +193/1.jpg 伊利_植选 +193/2.jpg 伊利_植选 +193/3.jpg 伊利_植选 +193/4.jpg 伊利_植选 +193/5.jpg 伊利_植选 +194/0.jpg 伊利_核桃乳 +194/1.jpg 伊利_核桃乳 +194/2.jpg 伊利_核桃乳 +194/3.jpg 伊利_核桃乳 +195/0.jpg 伊利_安慕希 +195/1.jpg 伊利_安慕希 +196/0.jpg 伊利_味可滋 +196/1.jpg 伊利_味可滋 +196/2.jpg 伊利_味可滋 +196/3.jpg 伊利_味可滋 diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/drink_label_all.txt b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/drink_label_all.txt new file mode 100644 index 0000000..9835f41 --- /dev/null +++ b/src/PaddleClas/deploy/drink_dataset_v1.0/gallery/drink_label_all.txt @@ -0,0 +1,1068 @@ +0/0.jpg 脉动 +0/1.jpg 脉动 +0/2.jpg 脉动 +0/3.jpg 脉动 +1/0.jpg 红牛 +1/1.jpg 红牛 +1/2.jpg 红牛 +1/3.jpg 红牛 +1/4.jpg 红牛 +2/0.jpg 战马 +2/1.jpg 战马 +2/2.jpg 战马 +2/3.jpg 战马 +2/4.jpg 战马 +2/5.jpg 战马 +2/6.jpg 战马 +3/0.jpg 尖叫 +3/1.jpg 尖叫 +3/2.jpg 尖叫 +3/3.jpg 尖叫 +4/0.jpg 启力 +4/1.jpg 启力 +4/2.jpg 启力 +4/3.jpg 启力 +4/4.jpg 启力 +4/5.jpg 启力 +4/6.jpg 启力 +5/0.jpg 乐虎氨基酸维生素功能饮料 +5/1.jpg 乐虎氨基酸维生素功能饮料 +5/2.jpg 乐虎氨基酸维生素功能饮料 +5/3.jpg 乐虎氨基酸维生素功能饮料 +5/4.jpg 乐虎氨基酸维生素功能饮料 +6/0.jpg 日加满氨基酸功能饮料 +6/1.jpg 日加满氨基酸功能饮料 +6/2.jpg 日加满氨基酸功能饮料 +6/3.jpg 日加满氨基酸功能饮料 +6/4.jpg 日加满氨基酸功能饮料 +7/0.jpg 力克 +7/1.jpg 力克 +7/2.jpg 力克 +7/3.jpg 力克 +7/4.jpg 力克 +7/5.jpg 力克 +7/6.jpg 力克 +8/0.jpg 芙丝饮用天然水 +8/1.jpg 芙丝饮用天然水 +8/2.jpg 芙丝饮用天然水 +8/3.jpg 芙丝饮用天然水 +8/4.jpg 芙丝饮用天然水 +9/0.jpg 康师傅矿物质水 +9/1.jpg 康师傅矿物质水 +9/2.jpg 康师傅矿物质水 +9/3.jpg 康师傅矿物质水 +9/4.jpg 康师傅矿物质水 +10/0.jpg 依云天然矿泉水 +10/1.jpg 依云天然矿泉水 +10/2.jpg 依云天然矿泉水 +10/3.jpg 依云天然矿泉水 +10/4.jpg 依云天然矿泉水 +10/5.jpg 依云天然矿泉水 +11/0.jpg 魔爪能量饮料 +11/1.jpg 魔爪能量饮料 +11/2.jpg 魔爪能量饮料 +11/3.jpg 魔爪能量饮料 +11/4.jpg 魔爪能量饮料 +11/5.jpg 魔爪能量饮料 +12/0.jpg 汇多滋淡盐水 +12/1.jpg 汇多滋淡盐水 +12/2.jpg 汇多滋淡盐水 +13/0.jpg 普娜天然泉水 +13/1.jpg 普娜天然泉水 +13/2.jpg 普娜天然泉水 +13/3.jpg 普娜天然泉水 +13/4.jpg 普娜天然泉水 +14/0.jpg 乐虎功能饮料 +14/1.jpg 乐虎功能饮料 +14/2.jpg 乐虎功能饮料 +14/3.jpg 乐虎功能饮料 +14/4.jpg 乐虎功能饮料 +14/5.jpg 乐虎功能饮料 +15/0.jpg 宝矿力水特 +15/1.jpg 宝矿力水特 +15/2.jpg 宝矿力水特 +15/3.jpg 宝矿力水特 +15/4.jpg 宝矿力水特 +16/0.jpg 阿尔卑斯-天然苏打水 +16/1.jpg 阿尔卑斯-天然苏打水 +16/2.jpg 阿尔卑斯-天然苏打水 +16/3.jpg 阿尔卑斯-天然苏打水 +17/0.jpg 农夫山泉-饮用天然水 +17/1.jpg 农夫山泉-饮用天然水 +17/2.jpg 农夫山泉-饮用天然水 +17/3.jpg 农夫山泉-饮用天然水 +17/4.jpg 农夫山泉-饮用天然水 +17/5.jpg 农夫山泉-饮用天然水 +17/6.jpg 农夫山泉-饮用天然水 +18/0.jpg 碱LOVE +18/1.jpg 碱LOVE +18/2.jpg 碱LOVE +18/3.jpg 碱LOVE +18/4.jpg 碱LOVE +19/0.jpg 农夫山泉-天然矿泉水 +19/1.jpg 农夫山泉-天然矿泉水 +19/2.jpg 农夫山泉-天然矿泉水 +19/3.jpg 农夫山泉-天然矿泉水 +19/4.jpg 农夫山泉-天然矿泉水 +20/0.jpg 农夫山泉-泡茶水 +20/1.jpg 农夫山泉-泡茶水 +20/2.jpg 农夫山泉-泡茶水 +20/3.jpg 农夫山泉-泡茶水 +20/4.jpg 农夫山泉-泡茶水 +21/0.jpg 等渗尖叫 +21/1.jpg 等渗尖叫 +21/2.jpg 等渗尖叫 +21/3.jpg 等渗尖叫 +21/4.jpg 等渗尖叫 +22/0.jpg 恒大冰泉 +22/1.jpg 恒大冰泉 +22/2.jpg 恒大冰泉 +22/3.jpg 恒大冰泉 +23/0.jpg 优珍能量 +23/1.jpg 优珍能量 +23/2.jpg 优珍能量 +23/3.jpg 优珍能量 +23/4.jpg 优珍能量 +24/0.jpg 东鹏特饮 +24/1.jpg 东鹏特饮 +24/2.jpg 东鹏特饮 +24/3.jpg 东鹏特饮 +25/0.jpg 纯水乐 +25/1.jpg 纯水乐 +25/2.jpg 纯水乐 +25/3.jpg 纯水乐 +25/4.jpg 纯水乐 +26/0.jpg 白山水 +26/1.jpg 白山水 +26/2.jpg 白山水 +26/3.jpg 白山水 +26/4.jpg 白山水 +27/0.jpg 水动乐 +27/1.jpg 水动乐 +27/2.jpg 水动乐 +27/3.jpg 水动乐 +27/4.jpg 水动乐 +28/0.jpg F6能量饮品 +28/1.jpg F6能量饮品 +28/2.jpg F6能量饮品 +28/3.jpg F6能量饮品 +28/4.jpg F6能量饮品 +29/0.jpg 动益加 +29/1.jpg 动益加 +29/2.jpg 动益加 +29/3.jpg 动益加 +30/0.jpg 凉白开 +30/1.jpg 凉白开 +30/2.jpg 凉白开 +30/3.jpg 凉白开 +30/4.jpg 凉白开 +30/5.jpg 凉白开 +31/0.jpg 佳得乐 +31/1.jpg 佳得乐 +31/2.jpg 佳得乐 +31/3.jpg 佳得乐 +32/0.jpg 三得利 +32/1.jpg 三得利 +32/2.jpg 三得利 +32/3.jpg 三得利 +33/0.jpg 统一-爱夸天然矿泉水 +33/1.jpg 统一-爱夸天然矿泉水 +33/2.jpg 统一-爱夸天然矿泉水 +33/3.jpg 统一-爱夸天然矿泉水 +33/4.jpg 统一-爱夸天然矿泉水 +33/5.jpg 统一-爱夸天然矿泉水 +34/0.jpg 景田-饮用纯净水 +34/1.jpg 景田-饮用纯净水 +34/2.jpg 景田-饮用纯净水 +34/3.jpg 景田-饮用纯净水 +34/4.jpg 景田-饮用纯净水 +34/5.jpg 景田-饮用纯净水 +35/0.jpg 怡宝-魔力氨基酸 +35/1.jpg 怡宝-魔力氨基酸 +35/2.jpg 怡宝-魔力氨基酸 +35/3.jpg 怡宝-魔力氨基酸 +35/4.jpg 怡宝-魔力氨基酸 +36/0.jpg 红牛-强化型 +36/1.jpg 红牛-强化型 +36/2.jpg 红牛-强化型 +36/3.jpg 红牛-强化型 +36/4.jpg 红牛-强化型 +36/5.jpg 红牛-强化型 +37/0.jpg 景田-百岁山 +37/1.jpg 景田-百岁山 +37/2.jpg 景田-百岁山 +37/3.jpg 景田-百岁山 +37/4.jpg 景田-百岁山 +38/0.jpg 雀巢 +38/1.jpg 雀巢 +38/2.jpg 雀巢 +38/3.jpg 雀巢 +38/4.jpg 雀巢 +39/0.jpg 5小时能量饮料 +39/1.jpg 5小时能量饮料 +39/2.jpg 5小时能量饮料 +39/3.jpg 5小时能量饮料 +41/0.jpg 农夫山泉_纯果蔬汁 +41/1.jpg 农夫山泉_纯果蔬汁 +41/2.jpg 农夫山泉_纯果蔬汁 +41/3.jpg 农夫山泉_纯果蔬汁 +42/0.jpg GINNAI/神内_低聚糖代餐果汁 +42/1.jpg GINNAI/神内_低聚糖代餐果汁 +42/2.jpg GINNAI/神内_低聚糖代餐果汁 +42/3.jpg GINNAI/神内_低聚糖代餐果汁 +42/4.jpg GINNAI/神内_低聚糖代餐果汁 +42/5.jpg GINNAI/神内_低聚糖代餐果汁 +43/0.jpg 贝奇野菜_果汁每日C +43/1.jpg 贝奇野菜_果汁每日C +43/2.jpg 贝奇野菜_果汁每日C +43/3.jpg 贝奇野菜_果汁每日C +43/4.jpg 贝奇野菜_果汁每日C +43/5.jpg 贝奇野菜_果汁每日C +44/0.jpg HeyJuice_西柚饮料果蔬 +44/1.jpg HeyJuice_西柚饮料果蔬 +44/2.jpg HeyJuice_西柚饮料果蔬 +45/0.jpg 沛时Perse_纯蔬果汁 +45/1.jpg 沛时Perse_纯蔬果汁 +45/2.jpg 沛时Perse_纯蔬果汁 +45/3.jpg 沛时Perse_纯蔬果汁 +45/4.jpg 沛时Perse_纯蔬果汁 +46/0.jpg 沛时Perse纯蔬果汁 +46/1.jpg 沛时Perse纯蔬果汁 +46/2.jpg 沛时Perse纯蔬果汁 +46/3.jpg 沛时Perse纯蔬果汁 +46/4.jpg 沛时Perse纯蔬果汁 +47/0.jpg 味全_每日C +47/1.jpg 味全_每日C +47/2.jpg 味全_每日C +47/3.jpg 味全_每日C +47/4.jpg 味全_每日C +47/5.jpg 味全_每日C +47/6.jpg 味全_每日C +47/7.jpg 味全_每日C +48/0.jpg 苏醒汇_纯蔬果汁 +48/1.jpg 苏醒汇_纯蔬果汁 +48/2.jpg 苏醒汇_纯蔬果汁 +49/0.jpg 臻富_番茄汁 +49/1.jpg 臻富_番茄汁 +49/2.jpg 臻富_番茄汁 +50/0.jpg 多乐诗_轻断食果蔬汁 +50/1.jpg 多乐诗_轻断食果蔬汁 +50/2.jpg 多乐诗_轻断食果蔬汁 +50/3.jpg 多乐诗_轻断食果蔬汁 +50/4.jpg 多乐诗_轻断食果蔬汁 +51/0.jpg IF/如果_椰子水饮料 +51/1.jpg IF/如果_椰子水饮料 +51/2.jpg IF/如果_椰子水饮料 +51/3.jpg IF/如果_椰子水饮料 +52/0.jpg 伊藤园_果蔬汁 +52/1.jpg 伊藤园_果蔬汁 +52/2.jpg 伊藤园_果蔬汁 +53/0.jpg 艾璞乐_苦瓜汁 +53/1.jpg 艾璞乐_苦瓜汁 +53/2.jpg 艾璞乐_苦瓜汁 +54/0.jpg 屯河_番茄汁 +54/1.jpg 屯河_番茄汁 +54/2.jpg 屯河_番茄汁 +54/3.jpg 屯河_番茄汁 +54/4.jpg 屯河_番茄汁 +55/0.jpg 屯河_杏汁 +55/1.jpg 屯河_杏汁 +55/2.jpg 屯河_杏汁 +55/3.jpg 屯河_杏汁 +55/4.jpg 屯河_杏汁 +55/5.jpg 屯河_杏汁 +56/0.jpg Sunsweet_西梅汁 +56/1.jpg Sunsweet_西梅汁 +56/2.jpg Sunsweet_西梅汁 +57/0.jpg 农夫果园_混合果蔬汁 +57/1.jpg 农夫果园_混合果蔬汁 +57/2.jpg 农夫果园_混合果蔬汁 +57/3.jpg 农夫果园_混合果蔬汁 +57/4.jpg 农夫果园_混合果蔬汁 +58/0.jpg 佳果源_果蔬汁 +58/1.jpg 佳果源_果蔬汁 +58/2.jpg 佳果源_果蔬汁 +59/0.jpg SUNQUICK/新的_浓缩果汁 +59/1.jpg SUNQUICK/新的_浓缩果汁 +59/2.jpg SUNQUICK/新的_浓缩果汁 +59/3.jpg SUNQUICK/新的_浓缩果汁 +59/4.jpg SUNQUICK/新的_浓缩果汁 +60/0.jpg 维果清_蔬菜汁 +60/1.jpg 维果清_蔬菜汁 +60/2.jpg 维果清_蔬菜汁 +60/3.jpg 维果清_蔬菜汁 +60/4.jpg 维果清_蔬菜汁 +61/0.jpg 宝桑园_果蔬汁 +61/1.jpg 宝桑园_果蔬汁 +61/2.jpg 宝桑园_果蔬汁 +62/0.jpg 千纤_莲藕汁 +62/1.jpg 千纤_莲藕汁 +62/2.jpg 千纤_莲藕汁 +63/0.jpg 玉百味_蔗糖玉米汁 +63/1.jpg 玉百味_蔗糖玉米汁 +63/2.jpg 玉百味_蔗糖玉米汁 +63/3.jpg 玉百味_蔗糖玉米汁 +63/4.jpg 玉百味_蔗糖玉米汁 +64/0.jpg 纯粒源_玉米汁饮料 +64/1.jpg 纯粒源_玉米汁饮料 +65/0.jpg 福兰农庄_纯果汁 +65/1.jpg 福兰农庄_纯果汁 +65/2.jpg 福兰农庄_纯果汁 +65/3.jpg 福兰农庄_纯果汁 +65/4.jpg 福兰农庄_纯果汁 +66/0.jpg 乐源_果蔬汁 +66/1.jpg 乐源_果蔬汁 +66/2.jpg 乐源_果蔬汁 +67/0.jpg 统一_番茄汁 +67/1.jpg 统一_番茄汁 +67/2.jpg 统一_番茄汁 +68/0.jpg 小麦欧耶_0脂肪果蔬汁 +68/1.jpg 小麦欧耶_0脂肪果蔬汁 +68/2.jpg 小麦欧耶_0脂肪果蔬汁 +69/0.jpg VITA_果蔬汁 +69/1.jpg VITA_果蔬汁 +69/2.jpg VITA_果蔬汁 +69/3.jpg VITA_果蔬汁 +69/4.jpg VITA_果蔬汁 +69/5.jpg VITA_果蔬汁 +70/0.jpg 倍优能_黑莓原浆果汁 +71/0.jpg 四季乐活_胡萝卜沙棘汁 +71/1.jpg 四季乐活_胡萝卜沙棘汁 +71/2.jpg 四季乐活_胡萝卜沙棘汁 +72/0.jpg 佐餐时间_不老莓原汁 +72/1.jpg 佐餐时间_不老莓原汁 +72/2.jpg 佐餐时间_不老莓原汁 +72/3.jpg 佐餐时间_不老莓原汁 +72/4.jpg 佐餐时间_不老莓原汁 +73/0.jpg 佐餐时间_山楂汁 +73/1.jpg 佐餐时间_山楂汁 +73/2.jpg 佐餐时间_山楂汁 +73/3.jpg 佐餐时间_山楂汁 +74/0.jpg 阳光味道_桑葚汁 +74/1.jpg 阳光味道_桑葚汁 +74/2.jpg 阳光味道_桑葚汁 +75/0.jpg 乐天_葡萄汁 +75/1.jpg 乐天_葡萄汁 +75/2.jpg 乐天_葡萄汁 +75/3.jpg 乐天_葡萄汁 +76/0.jpg 乐天_芒果汁 +76/1.jpg 乐天_芒果汁 +76/2.jpg 乐天_芒果汁 +77/0.jpg 树丫_桔梗梨汁 +77/1.jpg 树丫_桔梗梨汁 +77/2.jpg 树丫_桔梗梨汁 +77/3.jpg 树丫_桔梗梨汁 +77/4.jpg 树丫_桔梗梨汁 +78/0.jpg 成有王记_冰杨梅汁 +79/0.jpg 蓝宝氏_野生蓝莓果肉饮料 +79/1.jpg 蓝宝氏_野生蓝莓果肉饮料 +79/2.jpg 蓝宝氏_野生蓝莓果肉饮料 +80/0.jpg 蓝宝氏_沙棘果肉饮料 +80/1.jpg 蓝宝氏_沙棘果肉饮料 +80/2.jpg 蓝宝氏_沙棘果肉饮料 +80/3.jpg 蓝宝氏_沙棘果肉饮料 +80/4.jpg 蓝宝氏_沙棘果肉饮料 +80/5.jpg 蓝宝氏_沙棘果肉饮料 +80/6.jpg 蓝宝氏_沙棘果肉饮料 +81/0.jpg 雪菲力盐汽水 +81/1.jpg 雪菲力盐汽水 +81/2.jpg 雪菲力盐汽水 +81/3.jpg 雪菲力盐汽水 +82/0.jpg 雪碧 +82/1.jpg 雪碧 +82/2.jpg 雪碧 +82/3.jpg 雪碧 +82/4.jpg 雪碧 +83/0.jpg 芬达 +83/1.jpg 芬达 +83/2.jpg 芬达 +83/3.jpg 芬达 +83/4.jpg 芬达 +83/5.jpg 芬达 +84/0.jpg 美年达 +84/1.jpg 美年达 +84/2.jpg 美年达 +84/3.jpg 美年达 +84/4.jpg 美年达 +84/5.jpg 美年达 +84/6.jpg 美年达 +85/0.jpg 秋林大白梨 +85/1.jpg 秋林大白梨 +85/2.jpg 秋林大白梨 +85/3.jpg 秋林大白梨 +85/4.jpg 秋林大白梨 +86/0.jpg 百事可乐 +86/1.jpg 百事可乐 +86/2.jpg 百事可乐 +86/3.jpg 百事可乐 +86/4.jpg 百事可乐 +86/5.jpg 百事可乐 +87/0.jpg 珍珍菠萝啤 +87/1.jpg 珍珍菠萝啤 +87/2.jpg 珍珍菠萝啤 +87/3.jpg 珍珍菠萝啤 +88/0.jpg 珍珍荔枝味汽水 +88/1.jpg 珍珍荔枝味汽水 +88/2.jpg 珍珍荔枝味汽水 +88/3.jpg 珍珍荔枝味汽水 +88/4.jpg 珍珍荔枝味汽水 +88/5.jpg 珍珍荔枝味汽水 +88/6.jpg 珍珍荔枝味汽水 +88/7.jpg 珍珍荔枝味汽水 +89/0.jpg 珍啵乐果味汽水 +89/1.jpg 珍啵乐果味汽水 +89/2.jpg 珍啵乐果味汽水 +89/3.jpg 珍啵乐果味汽水 +90/0.jpg 汉斯香橙果味饮料 +90/1.jpg 汉斯香橙果味饮料 +90/2.jpg 汉斯香橙果味饮料 +90/3.jpg 汉斯香橙果味饮料 +90/4.jpg 汉斯香橙果味饮料 +91/0.jpg 汉斯菠萝啤 +91/1.jpg 汉斯菠萝啤 +91/2.jpg 汉斯菠萝啤 +91/3.jpg 汉斯菠萝啤 +91/4.jpg 汉斯菠萝啤 +92/0.jpg 汉口二厂 +92/1.jpg 汉口二厂 +92/2.jpg 汉口二厂 +92/3.jpg 汉口二厂 +92/4.jpg 汉口二厂 +93/0.jpg 果子熟了苏打气泡水 +93/1.jpg 果子熟了苏打气泡水 +93/2.jpg 果子熟了苏打气泡水 +93/3.jpg 果子熟了苏打气泡水 +93/4.jpg 果子熟了苏打气泡水 +93/5.jpg 果子熟了苏打气泡水 +94/0.jpg 怡泉 +94/1.jpg 怡泉 +94/2.jpg 怡泉 +94/3.jpg 怡泉 +94/4.jpg 怡泉 +95/0.jpg 延中盐汽水 +95/1.jpg 延中盐汽水 +95/2.jpg 延中盐汽水 +95/3.jpg 延中盐汽水 +95/4.jpg 延中盐汽水 +96/0.jpg 延中乌梅味汽水 +96/1.jpg 延中乌梅味汽水 +96/2.jpg 延中乌梅味汽水 +96/3.jpg 延中乌梅味汽水 +96/4.jpg 延中乌梅味汽水 +97/0.jpg 巴黎水 +97/1.jpg 巴黎水 +97/2.jpg 巴黎水 +97/3.jpg 巴黎水 +97/4.jpg 巴黎水 +98/0.jpg 崂山可乐 +98/1.jpg 崂山可乐 +98/2.jpg 崂山可乐 +98/3.jpg 崂山可乐 +98/4.jpg 崂山可乐 +99/0.jpg 山海关桔汁汽水 +99/1.jpg 山海关桔汁汽水 +99/2.jpg 山海关桔汁汽水 +99/3.jpg 山海关桔汁汽水 +99/4.jpg 山海关桔汁汽水 +100/0.jpg 屈臣氏汤力苏打汽水 +100/1.jpg 屈臣氏汤力苏打汽水 +100/2.jpg 屈臣氏汤力苏打汽水 +100/3.jpg 屈臣氏汤力苏打汽水 +100/4.jpg 屈臣氏汤力苏打汽水 +100/5.jpg 屈臣氏汤力苏打汽水 +101/0.jpg 宾得宝 +101/1.jpg 宾得宝 +101/2.jpg 宾得宝 +101/3.jpg 宾得宝 +101/4.jpg 宾得宝 +101/5.jpg 宾得宝 +101/6.jpg 宾得宝 +101/7.jpg 宾得宝 +102/0.jpg 宏宝莱 +102/1.jpg 宏宝莱 +102/2.jpg 宏宝莱 +102/3.jpg 宏宝莱 +102/4.jpg 宏宝莱 +103/0.jpg 大窑嘉宾 +103/1.jpg 大窑嘉宾 +103/2.jpg 大窑嘉宾 +103/3.jpg 大窑嘉宾 +103/4.jpg 大窑嘉宾 +103/5.jpg 大窑嘉宾 +103/6.jpg 大窑嘉宾 +103/7.jpg 大窑嘉宾 +104/0.jpg 大洋玛盐汽水 +104/1.jpg 大洋玛盐汽水 +104/2.jpg 大洋玛盐汽水 +104/3.jpg 大洋玛盐汽水 +104/4.jpg 大洋玛盐汽水 +104/5.jpg 大洋玛盐汽水 +104/6.jpg 大洋玛盐汽水 +105/0.jpg 圣碧涛 +105/1.jpg 圣碧涛 +105/2.jpg 圣碧涛 +105/3.jpg 圣碧涛 +105/4.jpg 圣碧涛 +105/5.jpg 圣碧涛 +105/6.jpg 圣碧涛 +106/0.jpg 圣培露 +106/1.jpg 圣培露 +106/2.jpg 圣培露 +106/3.jpg 圣培露 +106/4.jpg 圣培露 +107/0.jpg 喜茶无糖气泡水 +107/1.jpg 喜茶无糖气泡水 +107/2.jpg 喜茶无糖气泡水 +107/3.jpg 喜茶无糖气泡水 +107/4.jpg 喜茶无糖气泡水 +107/5.jpg 喜茶无糖气泡水 +108/0.jpg 哈塔弹珠汽水 +108/1.jpg 哈塔弹珠汽水 +108/2.jpg 哈塔弹珠汽水 +108/3.jpg 哈塔弹珠汽水 +108/4.jpg 哈塔弹珠汽水 +109/0.jpg 可口可乐 +109/1.jpg 可口可乐 +109/2.jpg 可口可乐 +109/3.jpg 可口可乐 +109/4.jpg 可口可乐 +109/5.jpg 可口可乐 +109/6.jpg 可口可乐 +109/7.jpg 可口可乐 +110/0.jpg 华洋汽水 +110/1.jpg 华洋汽水 +110/2.jpg 华洋汽水 +110/3.jpg 华洋汽水 +110/4.jpg 华洋汽水 +110/5.jpg 华洋汽水 +110/6.jpg 华洋汽水 +110/7.jpg 华洋汽水 +111/0.jpg 北冰洋 +111/1.jpg 北冰洋 +111/2.jpg 北冰洋 +111/3.jpg 北冰洋 +111/4.jpg 北冰洋 +111/5.jpg 北冰洋 +111/6.jpg 北冰洋 +111/7.jpg 北冰洋 +111/8.jpg 北冰洋 +111/9.jpg 北冰洋 +112/0.jpg 冰峰 +112/1.jpg 冰峰 +112/2.jpg 冰峰 +112/3.jpg 冰峰 +112/4.jpg 冰峰 +112/5.jpg 冰峰 +112/6.jpg 冰峰 +113/0.jpg 农夫山泉苏打气泡水 +113/1.jpg 农夫山泉苏打气泡水 +113/2.jpg 农夫山泉苏打气泡水 +113/3.jpg 农夫山泉苏打气泡水 +113/4.jpg 农夫山泉苏打气泡水 +113/5.jpg 农夫山泉苏打气泡水 +114/0.jpg 元气森林 +114/1.jpg 元气森林 +114/2.jpg 元气森林 +114/3.jpg 元气森林 +114/4.jpg 元气森林 +114/5.jpg 元气森林 +114/6.jpg 元气森林 +115/0.jpg 健力宝 +115/1.jpg 健力宝 +115/2.jpg 健力宝 +115/3.jpg 健力宝 +115/4.jpg 健力宝 +115/5.jpg 健力宝 +115/6.jpg 健力宝 +115/7.jpg 健力宝 +116/0.jpg 亚洲汽水 +116/1.jpg 亚洲汽水 +116/2.jpg 亚洲汽水 +116/3.jpg 亚洲汽水 +116/4.jpg 亚洲汽水 +116/5.jpg 亚洲汽水 +117/0.jpg 乐天妙之吻 +117/1.jpg 乐天妙之吻 +117/2.jpg 乐天妙之吻 +117/3.jpg 乐天妙之吻 +118/0.jpg 三麟大象苏打气泡水 +118/1.jpg 三麟大象苏打气泡水 +118/2.jpg 三麟大象苏打气泡水 +118/3.jpg 三麟大象苏打气泡水 +119/0.jpg 七喜 +119/1.jpg 七喜 +119/2.jpg 七喜 +119/3.jpg 七喜 +119/4.jpg 七喜 +120/0.jpg 统一冰红茶 +120/1.jpg 统一冰红茶 +120/2.jpg 统一冰红茶 +120/3.jpg 统一冰红茶 +121/0.jpg 维他柠檬茶 +121/1.jpg 维他柠檬茶 +121/2.jpg 维他柠檬茶 +121/3.jpg 维他柠檬茶 +122/0.jpg 维他无糖茶 +122/1.jpg 维他无糖茶 +122/2.jpg 维他无糖茶 +123/0.jpg 达利园青梅绿茶 +123/1.jpg 达利园青梅绿茶 +123/2.jpg 达利园青梅绿茶 +123/3.jpg 达利园青梅绿茶 +123/4.jpg 达利园青梅绿茶 +123/5.jpg 达利园青梅绿茶 +124/0.jpg 伊藤园绿茶 +124/1.jpg 伊藤园绿茶 +124/2.jpg 伊藤园绿茶 +124/3.jpg 伊藤园绿茶 +124/4.jpg 伊藤园绿茶 +124/5.jpg 伊藤园绿茶 +125/0.jpg 伊藤园纤维乌龙茶 +125/1.jpg 伊藤园纤维乌龙茶 +125/2.jpg 伊藤园纤维乌龙茶 +125/3.jpg 伊藤园纤维乌龙茶 +125/4.jpg 伊藤园纤维乌龙茶 +126/0.jpg 伊藤园大麦茶 +126/1.jpg 伊藤园大麦茶 +126/2.jpg 伊藤园大麦茶 +126/3.jpg 伊藤园大麦茶 +126/4.jpg 伊藤园大麦茶 +127/0.jpg 伊藤园蜜桃红茶 +127/1.jpg 伊藤园蜜桃红茶 +127/2.jpg 伊藤园蜜桃红茶 +127/3.jpg 伊藤园蜜桃红茶 +128/0.jpg 伊藤园柠檬红茶 +128/1.jpg 伊藤园柠檬红茶 +128/2.jpg 伊藤园柠檬红茶 +128/3.jpg 伊藤园柠檬红茶 +129/0.jpg 伊藤园茉莉白茶 +129/1.jpg 伊藤园茉莉白茶 +129/2.jpg 伊藤园茉莉白茶 +129/3.jpg 伊藤园茉莉白茶 +129/4.jpg 伊藤园茉莉白茶 +129/5.jpg 伊藤园茉莉白茶 +130/0.jpg 伊藤园铁观音 +130/1.jpg 伊藤园铁观音 +130/2.jpg 伊藤园铁观音 +130/3.jpg 伊藤园铁观音 +131/0.jpg 统一绿茶 +131/1.jpg 统一绿茶 +131/2.jpg 统一绿茶 +131/3.jpg 统一绿茶 +131/4.jpg 统一绿茶 +131/5.jpg 统一绿茶 +131/6.jpg 统一绿茶 +131/7.jpg 统一绿茶 +132/0.jpg 伊藤园浓味乌龙茶 +132/1.jpg 伊藤园浓味乌龙茶 +132/2.jpg 伊藤园浓味乌龙茶 +132/3.jpg 伊藤园浓味乌龙茶 +132/4.jpg 伊藤园浓味乌龙茶 +133/0.jpg 伊藤园浓味绿茶 +133/1.jpg 伊藤园浓味绿茶 +133/2.jpg 伊藤园浓味绿茶 +133/3.jpg 伊藤园浓味绿茶 +133/4.jpg 伊藤园浓味绿茶 +133/5.jpg 伊藤园浓味绿茶 +134/0.jpg 统一茶里王 +134/1.jpg 统一茶里王 +134/2.jpg 统一茶里王 +134/3.jpg 统一茶里王 +135/0.jpg 雀巢茶萃 +135/1.jpg 雀巢茶萃 +135/2.jpg 雀巢茶萃 +135/3.jpg 雀巢茶萃 +135/4.jpg 雀巢茶萃 +135/5.jpg 雀巢茶萃 +135/6.jpg 雀巢茶萃 +136/0.jpg 康师傅茉莉蜜茶 +136/1.jpg 康师傅茉莉蜜茶 +136/2.jpg 康师傅茉莉蜜茶 +136/3.jpg 康师傅茉莉蜜茶 +136/4.jpg 康师傅茉莉蜜茶 +136/5.jpg 康师傅茉莉蜜茶 +137/0.jpg 康师傅茉莉清茶 +137/1.jpg 康师傅茉莉清茶 +137/2.jpg 康师傅茉莉清茶 +137/3.jpg 康师傅茉莉清茶 +137/4.jpg 康师傅茉莉清茶 +137/5.jpg 康师傅茉莉清茶 +138/0.jpg 康师傅茉莉花茶 +138/1.jpg 康师傅茉莉花茶 +138/2.jpg 康师傅茉莉花茶 +138/3.jpg 康师傅茉莉花茶 +138/4.jpg 康师傅茉莉花茶 +138/5.jpg 康师傅茉莉花茶 +138/6.jpg 康师傅茉莉花茶 +139/0.jpg 康师傅冷泡绿茶 +139/1.jpg 康师傅冷泡绿茶 +139/2.jpg 康师傅冷泡绿茶 +139/3.jpg 康师傅冷泡绿茶 +139/4.jpg 康师傅冷泡绿茶 +139/5.jpg 康师傅冷泡绿茶 +140/0.jpg 三得利乌龙茶 +140/1.jpg 三得利乌龙茶 +140/2.jpg 三得利乌龙茶 +140/3.jpg 三得利乌龙茶 +140/4.jpg 三得利乌龙茶 +140/5.jpg 三得利乌龙茶 +141/0.jpg 元气森林燃茶 +141/1.jpg 元气森林燃茶 +141/2.jpg 元气森林燃茶 +141/3.jpg 元气森林燃茶 +142/0.jpg 康师傅冰红茶 +142/1.jpg 康师傅冰红茶 +142/2.jpg 康师傅冰红茶 +142/3.jpg 康师傅冰红茶 +142/4.jpg 康师傅冰红茶 +143/0.jpg 三得利果瀑茶 +143/1.jpg 三得利果瀑茶 +143/2.jpg 三得利果瀑茶 +143/3.jpg 三得利果瀑茶 +143/4.jpg 三得利果瀑茶 +143/5.jpg 三得利果瀑茶 +144/0.jpg 喜茶_轻乳茶 +144/1.jpg 喜茶_轻乳茶 +144/2.jpg 喜茶_轻乳茶 +144/3.jpg 喜茶_轻乳茶 +144/4.jpg 喜茶_轻乳茶 +144/5.jpg 喜茶_轻乳茶 +145/0.jpg 麟珑茶室大麦爽茶 +145/1.jpg 麟珑茶室大麦爽茶 +145/2.jpg 麟珑茶室大麦爽茶 +145/3.jpg 麟珑茶室大麦爽茶 +145/4.jpg 麟珑茶室大麦爽茶 +145/5.jpg 麟珑茶室大麦爽茶 +146/0.jpg 麟珑茶室大人茶 +146/1.jpg 麟珑茶室大人茶 +146/2.jpg 麟珑茶室大人茶 +146/3.jpg 麟珑茶室大人茶 +147/0.jpg 麟珑茶室每天绿茶 +147/1.jpg 麟珑茶室每天绿茶 +147/2.jpg 麟珑茶室每天绿茶 +147/3.jpg 麟珑茶室每天绿茶 +147/4.jpg 麟珑茶室每天绿茶 +147/5.jpg 麟珑茶室每天绿茶 +148/0.jpg 麟珑茶室茉莉轻茶 +148/1.jpg 麟珑茶室茉莉轻茶 +148/2.jpg 麟珑茶室茉莉轻茶 +148/3.jpg 麟珑茶室茉莉轻茶 +149/0.jpg 和其正凉茶 +149/1.jpg 和其正凉茶 +149/2.jpg 和其正凉茶 +149/3.jpg 和其正凉茶 +150/0.jpg 王老吉凉茶 +150/1.jpg 王老吉凉茶 +150/2.jpg 王老吉凉茶 +150/3.jpg 王老吉凉茶 +150/4.jpg 王老吉凉茶 +151/0.jpg 加多宝 +151/1.jpg 加多宝 +151/2.jpg 加多宝 +151/3.jpg 加多宝 +152/0.jpg 统一阿萨姆奶茶 +152/1.jpg 统一阿萨姆奶茶 +152/2.jpg 统一阿萨姆奶茶 +152/3.jpg 统一阿萨姆奶茶 +152/4.jpg 统一阿萨姆奶茶 +152/5.jpg 统一阿萨姆奶茶 +153/0.jpg 康师傅绿茶 +153/1.jpg 康师傅绿茶 +153/2.jpg 康师傅绿茶 +153/3.jpg 康师傅绿茶 +153/4.jpg 康师傅绿茶 +153/5.jpg 康师傅绿茶 +154/0.jpg 农夫山泉打奶茶 +154/1.jpg 农夫山泉打奶茶 +154/2.jpg 农夫山泉打奶茶 +154/3.jpg 农夫山泉打奶茶 +155/0.jpg 麒麟午后奶茶 +155/1.jpg 麒麟午后奶茶 +155/2.jpg 麒麟午后奶茶 +155/3.jpg 麒麟午后奶茶 +155/4.jpg 麒麟午后奶茶 +156/0.jpg 康师傅奶茶 +156/1.jpg 康师傅奶茶 +156/2.jpg 康师傅奶茶 +156/3.jpg 康师傅奶茶 +157/0.jpg 可口可乐淳茶舍 +157/1.jpg 可口可乐淳茶舍 +157/2.jpg 可口可乐淳茶舍 +157/3.jpg 可口可乐淳茶舍 +157/4.jpg 可口可乐淳茶舍 +157/5.jpg 可口可乐淳茶舍 +158/0.jpg 元气森林纤茶 +158/1.jpg 元气森林纤茶 +158/2.jpg 元气森林纤茶 +158/3.jpg 元气森林纤茶 +158/4.jpg 元气森林纤茶 +158/5.jpg 元气森林纤茶 +159/0.jpg 雀巢咖啡 +159/1.jpg 雀巢咖啡 +159/2.jpg 雀巢咖啡 +159/3.jpg 雀巢咖啡 +160/0.jpg 雀巢冷萃咖啡 +160/1.jpg 雀巢冷萃咖啡 +160/2.jpg 雀巢冷萃咖啡 +160/3.jpg 雀巢冷萃咖啡 +160/4.jpg 雀巢冷萃咖啡 +160/5.jpg 雀巢冷萃咖啡 +161/0.jpg 星巴克派克市场 +161/1.jpg 星巴克派克市场 +161/2.jpg 星巴克派克市场 +161/3.jpg 星巴克派克市场 +162/0.jpg 星巴克星倍醇咖啡 +162/1.jpg 星巴克星倍醇咖啡 +162/2.jpg 星巴克星倍醇咖啡 +162/3.jpg 星巴克星倍醇咖啡 +163/0.jpg 星巴克星选咖啡 +163/1.jpg 星巴克星选咖啡 +163/2.jpg 星巴克星选咖啡 +163/3.jpg 星巴克星选咖啡 +164/0.jpg 康师傅冰绿茶 +164/1.jpg 康师傅冰绿茶 +164/2.jpg 康师傅冰绿茶 +164/3.jpg 康师傅冰绿茶 +164/4.jpg 康师傅冰绿茶 +164/5.jpg 康师傅冰绿茶 +164/6.jpg 康师傅冰绿茶 +164/7.jpg 康师傅冰绿茶 +164/8.jpg 康师傅冰绿茶 +164/9.jpg 康师傅冰绿茶 +164/10.jpg 康师傅冰绿茶 +165/0.jpg 星巴克星冰乐咖啡 +165/1.jpg 星巴克星冰乐咖啡 +165/2.jpg 星巴克星冰乐咖啡 +165/3.jpg 星巴克星冰乐咖啡 +166/0.jpg costa咖啡 +166/1.jpg costa咖啡 +166/2.jpg costa咖啡 +166/3.jpg costa咖啡 +166/4.jpg costa咖啡 +166/5.jpg costa咖啡 +167/0.jpg 统一雅哈咖啡 +167/1.jpg 统一雅哈咖啡 +167/2.jpg 统一雅哈咖啡 +167/3.jpg 统一雅哈咖啡 +168/0.jpg 麒麟火咖 +168/1.jpg 麒麟火咖 +168/2.jpg 麒麟火咖 +168/3.jpg 麒麟火咖 +168/4.jpg 麒麟火咖 +168/5.jpg 麒麟火咖 +169/0.jpg 农夫山泉炭仌咖啡 +169/1.jpg 农夫山泉炭仌咖啡 +169/2.jpg 农夫山泉炭仌咖啡 +169/3.jpg 农夫山泉炭仌咖啡 +169/4.jpg 农夫山泉炭仌咖啡 +169/5.jpg 农夫山泉炭仌咖啡 +170/0.jpg 味全贝纳颂 +170/1.jpg 味全贝纳颂 +170/2.jpg 味全贝纳颂 +170/3.jpg 味全贝纳颂 +170/4.jpg 味全贝纳颂 +171/0.jpg 康师傅青梅绿茶 +171/1.jpg 康师傅青梅绿茶 +171/2.jpg 康师傅青梅绿茶 +171/3.jpg 康师傅青梅绿茶 +171/4.jpg 康师傅青梅绿茶 +171/5.jpg 康师傅青梅绿茶 +171/6.jpg 康师傅青梅绿茶 +172/0.jpg 东方树叶红茶/玄米茶/绿茶… +172/1.jpg 东方树叶红茶/玄米茶/绿茶… +172/2.jpg 东方树叶红茶/玄米茶/绿茶… +172/3.jpg 东方树叶红茶/玄米茶/绿茶… +172/4.jpg 东方树叶红茶/玄米茶/绿茶… +173/0.jpg 茶π +173/1.jpg 茶π +173/2.jpg 茶π +173/3.jpg 茶π +173/4.jpg 茶π +173/5.jpg 茶π +173/6.jpg 茶π +173/7.jpg 茶π +174/0.jpg 小茗同学 +174/1.jpg 小茗同学 +174/2.jpg 小茗同学 +174/3.jpg 小茗同学 +174/4.jpg 小茗同学 +175/0.jpg 蒙牛_纯甄 +175/1.jpg 蒙牛_纯甄 +175/2.jpg 蒙牛_纯甄 +175/3.jpg 蒙牛_纯甄 +176/0.jpg 蒙牛_未来星 +176/1.jpg 蒙牛_未来星 +176/2.jpg 蒙牛_未来星 +177/0.jpg 蒙牛_真果粒 +177/1.jpg 蒙牛_真果粒 +177/2.jpg 蒙牛_真果粒 +177/3.jpg 蒙牛_真果粒 +177/4.jpg 蒙牛_真果粒 +178/0.jpg 蒙牛_精选牧场 +178/1.jpg 蒙牛_精选牧场 +178/2.jpg 蒙牛_精选牧场 +178/3.jpg 蒙牛_精选牧场 +178/4.jpg 蒙牛_精选牧场 +178/5.jpg 蒙牛_精选牧场 +179/0.jpg 蒙牛_酸酸乳 +179/1.jpg 蒙牛_酸酸乳 +179/2.jpg 蒙牛_酸酸乳 +179/3.jpg 蒙牛_酸酸乳 +180/0.jpg 蒙牛_特仑苏 +180/1.jpg 蒙牛_特仑苏 +180/2.jpg 蒙牛_特仑苏 +180/3.jpg 蒙牛_特仑苏 +180/4.jpg 蒙牛_特仑苏 +180/5.jpg 蒙牛_特仑苏 +181/0.jpg 蒙牛_新养道 +181/1.jpg 蒙牛_新养道 +181/2.jpg 蒙牛_新养道 +181/3.jpg 蒙牛_新养道 +181/4.jpg 蒙牛_新养道 +182/0.jpg 蒙牛_早餐奶 +182/1.jpg 蒙牛_早餐奶 +182/2.jpg 蒙牛_早餐奶 +182/3.jpg 蒙牛_早餐奶 +182/4.jpg 蒙牛_早餐奶 +182/5.jpg 蒙牛_早餐奶 +183/0.jpg 飞鹤_甄爱倍护 +183/1.jpg 飞鹤_甄爱倍护 +183/2.jpg 飞鹤_甄爱倍护 +183/3.jpg 飞鹤_甄爱倍护 +183/4.jpg 飞鹤_甄爱倍护 +184/0.jpg 飞鹤_茁然 +184/1.jpg 飞鹤_茁然 +184/2.jpg 飞鹤_茁然 +184/3.jpg 飞鹤_茁然 +184/4.jpg 飞鹤_茁然 +185/0.jpg 飞鹤_星飞帆 +185/1.jpg 飞鹤_星飞帆 +185/2.jpg 飞鹤_星飞帆 +185/3.jpg 飞鹤_星飞帆 +185/4.jpg 飞鹤_星飞帆 +185/5.jpg 飞鹤_星飞帆 +186/0.jpg 伊利_畅意 +186/1.jpg 伊利_畅意 +187/0.jpg 伊利_舒化 +187/1.jpg 伊利_舒化 +187/2.jpg 伊利_舒化 +187/3.jpg 伊利_舒化 +187/4.jpg 伊利_舒化 +187/5.jpg 伊利_舒化 +188/0.jpg 伊利_金典 +188/1.jpg 伊利_金典 +188/2.jpg 伊利_金典 +188/3.jpg 伊利_金典 +188/4.jpg 伊利_金典 +189/0.jpg 伊利_优酸乳 +189/1.jpg 伊利_优酸乳 +190/0.jpg 伊利_谷粒多 +190/1.jpg 伊利_谷粒多 +190/2.jpg 伊利_谷粒多 +190/3.jpg 伊利_谷粒多 +191/0.jpg 伊利_QQ星 +191/1.jpg 伊利_QQ星 +191/2.jpg 伊利_QQ星 +191/3.jpg 伊利_QQ星 +192/0.jpg 伊利_学生奶 +192/1.jpg 伊利_学生奶 +192/2.jpg 伊利_学生奶 +192/3.jpg 伊利_学生奶 +192/4.jpg 伊利_学生奶 +193/0.jpg 伊利_植选 +193/1.jpg 伊利_植选 +193/2.jpg 伊利_植选 +193/3.jpg 伊利_植选 +193/4.jpg 伊利_植选 +193/5.jpg 伊利_植选 +194/0.jpg 伊利_核桃乳 +194/1.jpg 伊利_核桃乳 +194/2.jpg 伊利_核桃乳 +194/3.jpg 伊利_核桃乳 +195/0.jpg 伊利_安慕希 +195/1.jpg 伊利_安慕希 +196/0.jpg 伊利_味可滋 +196/1.jpg 伊利_味可滋 +196/2.jpg 伊利_味可滋 +196/3.jpg 伊利_味可滋 +197/0.jpg 光明_赏味 +197/1.jpg 光明_赏味 +197/2.jpg 光明_赏味 +197/3.jpg 光明_赏味 +197/4.jpg 光明_赏味 +197/5.jpg 光明_赏味 +198/0.jpg 光明_巧克努力 +198/1.jpg 光明_巧克努力 +198/2.jpg 光明_巧克努力 +198/3.jpg 光明_巧克努力 +198/4.jpg 光明_巧克努力 +198/5.jpg 光明_巧克努力 +198/6.jpg 光明_巧克努力 +199/0.jpg 光明_致优全鲜乳 +199/1.jpg 光明_致优全鲜乳 +199/2.jpg 光明_致优全鲜乳 +199/3.jpg 光明_致优全鲜乳 +200/0.jpg 光明_畅优 +200/1.jpg 光明_畅优 +200/2.jpg 光明_畅优 +200/3.jpg 光明_畅优 +201/0.jpg 光明_巧风 +201/1.jpg 光明_巧风 +201/2.jpg 光明_巧风 +201/3.jpg 光明_巧风 +201/4.jpg 光明_巧风 +201/5.jpg 光明_巧风 +201/6.jpg 光明_巧风 +202/0.jpg 光明_一只椰子 +202/1.jpg 光明_一只椰子 +202/2.jpg 光明_一只椰子 +202/3.jpg 光明_一只椰子 +202/4.jpg 光明_一只椰子 +202/5.jpg 光明_一只椰子 +202/6.jpg 光明_一只椰子 +203/0.jpg 光明_如实 +203/1.jpg 光明_如实 +203/2.jpg 光明_如实 +204/0.jpg 光明_莫斯利安 +204/1.jpg 光明_莫斯利安 +204/2.jpg 光明_莫斯利安 +204/3.jpg 光明_莫斯利安 +204/4.jpg 光明_莫斯利安 +204/5.jpg 光明_莫斯利安 +205/0.jpg 光明_优倍鲜牛奶 +205/1.jpg 光明_优倍鲜牛奶 +205/2.jpg 光明_优倍鲜牛奶 +205/3.jpg 光明_优倍鲜牛奶 +205/4.jpg 光明_优倍鲜牛奶 +205/5.jpg 光明_优倍鲜牛奶 +206/0.jpg 光明_优幼 +206/1.jpg 光明_优幼 +207/0.jpg 光明_植物活力 +207/1.jpg 光明_植物活力 +207/2.jpg 光明_植物活力 +207/3.jpg 光明_植物活力 +207/4.jpg 光明_植物活力 +207/5.jpg 光明_植物活力 +207/6.jpg 光明_植物活力 +208/0.jpg 光明_优加纯牛奶 +208/1.jpg 光明_优加纯牛奶 +208/2.jpg 光明_优加纯牛奶 +208/3.jpg 光明_优加纯牛奶 +208/4.jpg 光明_优加纯牛奶 +208/5.jpg 光明_优加纯牛奶 +209/0.jpg 光明_有机奶 +209/1.jpg 光明_有机奶 +209/2.jpg 光明_有机奶 +209/3.jpg 光明_有机奶 +209/4.jpg 光明_有机奶 +209/5.jpg 光明_有机奶 +210/0.jpg 三元_爱诺星 +211/0.jpg 三元_全家甜 +211/1.jpg 三元_全家甜 +211/2.jpg 三元_全家甜 +211/3.jpg 三元_全家甜 +211/4.jpg 三元_全家甜 +212/0.jpg 三元_爱力优 +212/1.jpg 三元_爱力优 +212/2.jpg 三元_爱力优 +212/3.jpg 三元_爱力优 \ No newline at end of file diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/index/id_map.pkl b/src/PaddleClas/deploy/drink_dataset_v1.0/index/id_map.pkl new file mode 100644 index 0000000..ddf99b2 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/index/id_map.pkl differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/index/vector.index b/src/PaddleClas/deploy/drink_dataset_v1.0/index/vector.index new file mode 100644 index 0000000..af26122 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/index/vector.index differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/001.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/001.jpeg new file mode 100644 index 0000000..2ef10aa Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/001.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/002.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/002.jpeg new file mode 100644 index 0000000..347b82e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/002.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/003.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/003.jpeg new file mode 100644 index 0000000..a2da79c Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/003.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/004.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/004.jpeg new file mode 100644 index 0000000..c4fc6b5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/004.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/005.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/005.jpeg new file mode 100644 index 0000000..97631f5 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/005.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/100.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/100.jpeg new file mode 100644 index 0000000..e5f845e Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/100.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/110.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/110.jpeg new file mode 100644 index 0000000..a2f19e0 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/110.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/1101.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/1101.jpeg new file mode 100644 index 0000000..a23aca4 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/1101.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/112.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/112.jpeg new file mode 100644 index 0000000..e505713 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/112.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/222.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/222.jpeg new file mode 100644 index 0000000..1fe11c9 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/222.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/99.jpg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/99.jpg new file mode 100644 index 0000000..63aa8c6 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/99.jpg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/mosilian.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/mosilian.jpeg new file mode 100644 index 0000000..22c6075 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/mosilian.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/nongfu_spring.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/nongfu_spring.jpeg new file mode 100644 index 0000000..0f4166d Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/nongfu_spring.jpeg differ diff --git a/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/youjia.jpeg b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/youjia.jpeg new file mode 100644 index 0000000..2875a76 Binary files /dev/null and b/src/PaddleClas/deploy/drink_dataset_v1.0/test_images/youjia.jpeg differ diff --git a/src/PaddleClas/deploy/hubserving/ILSVRC2012_val_00006666.JPEG b/src/PaddleClas/deploy/hubserving/ILSVRC2012_val_00006666.JPEG new file mode 100644 index 0000000..f284522 Binary files /dev/null and b/src/PaddleClas/deploy/hubserving/ILSVRC2012_val_00006666.JPEG differ diff --git a/src/PaddleClas/deploy/hubserving/clas/__init__.py b/src/PaddleClas/deploy/hubserving/clas/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/PaddleClas/deploy/hubserving/clas/config.json b/src/PaddleClas/deploy/hubserving/clas/config.json new file mode 100644 index 0000000..647036f --- /dev/null +++ b/src/PaddleClas/deploy/hubserving/clas/config.json @@ -0,0 +1,16 @@ +{ + "modules_info": { + "clas_system": { + "init_args": { + "version": "1.0.0", + "use_gpu": true, + "enable_mkldnn": false + }, + "predict_args": { + } + } + }, + "port": 8866, + "use_multiprocess": false, + "workers": 2 +} diff --git a/src/PaddleClas/deploy/hubserving/clas/module.py b/src/PaddleClas/deploy/hubserving/clas/module.py new file mode 100644 index 0000000..98ec1d9 --- /dev/null +++ b/src/PaddleClas/deploy/hubserving/clas/module.py @@ -0,0 +1,100 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +sys.path.insert(0, ".") + +import time + +import numpy as np +import paddle.nn as nn +from paddlehub.module.module import moduleinfo, serving + +from hubserving.clas.params import get_default_confg +from python.predict_cls import ClsPredictor +from utils import config +from utils.encode_decode import b64_to_np + + +@moduleinfo( + name="clas_system", + version="1.0.0", + summary="class system service", + author="paddle-dev", + author_email="paddle-dev@baidu.com", + type="cv/class") +class ClasSystem(nn.Layer): + def __init__(self, use_gpu=None, enable_mkldnn=None): + """ + initialize with the necessary elements + """ + self._config = self._load_config( + use_gpu=use_gpu, enable_mkldnn=enable_mkldnn) + self.cls_predictor = ClsPredictor(self._config) + + def _load_config(self, use_gpu=None, enable_mkldnn=None): + cfg = get_default_confg() + cfg = config.AttrDict(cfg) + config.create_attr_dict(cfg) + if use_gpu is not None: + cfg.Global.use_gpu = use_gpu + if enable_mkldnn is not None: + cfg.Global.enable_mkldnn = enable_mkldnn + cfg.enable_benchmark = False + if cfg.Global.use_gpu: + try: + _places = os.environ["CUDA_VISIBLE_DEVICES"] + int(_places[0]) + print("Use GPU, GPU Memery:{}".format(cfg.Global.gpu_mem)) + print("CUDA_VISIBLE_DEVICES: ", _places) + except: + raise RuntimeError( + "Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES via export CUDA_VISIBLE_DEVICES=cuda_device_id." + ) + else: + print("Use CPU") + print("Enable MKL-DNN") if enable_mkldnn else None + return cfg + + def predict(self, inputs): + if not isinstance(inputs, list): + raise Exception( + "The input data is inconsistent with expectations.") + + starttime = time.time() + outputs = self.cls_predictor.predict(inputs) + elapse = time.time() - starttime + return {"prediction": outputs, "elapse": elapse} + + @serving + def serving_method(self, images, revert_params): + """ + Run as a service. + """ + input_data = b64_to_np(images, revert_params) + results = self.predict(inputs=list(input_data)) + return results + + +if __name__ == "__main__": + import cv2 + import paddlehub as hub + + module = hub.Module(name="clas_system") + img_path = "./hubserving/ILSVRC2012_val_00006666.JPEG" + img = cv2.imread(img_path)[:, :, ::-1] + img = cv2.resize(img, (224, 224)).transpose((2, 0, 1)) + res = module.predict([img.astype(np.float32)]) + print("The returned result of {}: {}".format(img_path, res)) diff --git a/src/PaddleClas/deploy/hubserving/clas/params.py b/src/PaddleClas/deploy/hubserving/clas/params.py new file mode 100644 index 0000000..9d9c0dd --- /dev/null +++ b/src/PaddleClas/deploy/hubserving/clas/params.py @@ -0,0 +1,42 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + + +def get_default_confg(): + return { + 'Global': { + "inference_model_dir": "../inference/", + "batch_size": 1, + 'use_gpu': False, + 'use_fp16': False, + 'enable_mkldnn': False, + 'cpu_num_threads': 1, + 'use_tensorrt': False, + 'ir_optim': False, + "gpu_mem": 8000, + 'enable_profile': False, + "enable_benchmark": False + }, + 'PostProcess': { + 'main_indicator': 'Topk', + 'Topk': { + 'topk': 5, + 'class_id_map_file': './utils/imagenet1k_label_list.txt' + } + } + } diff --git a/src/PaddleClas/deploy/hubserving/readme.md b/src/PaddleClas/deploy/hubserving/readme.md new file mode 100644 index 0000000..6b2b2dd --- /dev/null +++ b/src/PaddleClas/deploy/hubserving/readme.md @@ -0,0 +1,188 @@ +[English](readme_en.md) | 简体中文 + +# 基于PaddleHub Serving的服务部署 + +hubserving服务部署配置服务包`clas`下包含3个必选文件,目录如下: +``` +hubserving/clas/ + └─ __init__.py 空文件,必选 + └─ config.json 配置文件,可选,使用配置启动服务时作为参数传入 + └─ module.py 主模块,必选,包含服务的完整逻辑 + └─ params.py 参数文件,必选,包含模型路径、前后处理参数等参数 +``` + +## 快速启动服务 +### 1. 准备环境 +```shell +# 安装paddlehub,请安装2.0版本 +pip3 install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple +``` + +### 2. 下载推理模型 +安装服务模块前,需要准备推理模型并放到正确路径,默认模型路径为: +``` +分类推理模型结构文件:PaddleClas/inference/inference.pdmodel +分类推理模型权重文件:PaddleClas/inference/inference.pdiparams +``` + +**注意**: +* 模型文件路径可在`PaddleClas/deploy/hubserving/clas/params.py`中查看和修改: + ```python + "inference_model_dir": "../inference/" + ``` + 需要注意,模型文件(包括.pdmodel与.pdiparams)名称必须为`inference`。 +* 我们也提供了大量基于ImageNet-1k数据集的预训练模型,模型列表及下载地址详见[模型库概览](../../docs/zh_CN/models/models_intro.md),也可以使用自己训练转换好的模型。 + +### 3. 安装服务模块 +针对Linux环境和Windows环境,安装命令如下。 + +* 在Linux环境下,安装示例如下: +```shell +cd PaddleClas/deploy +# 安装服务模块: +hub install hubserving/clas/ +``` + +* 在Windows环境下(文件夹的分隔符为`\`),安装示例如下: + +```shell +cd PaddleClas\deploy +# 安装服务模块: +hub install hubserving\clas\ +``` + +### 4. 启动服务 +#### 方式1. 命令行命令启动(仅支持CPU) +**启动命令:** +```shell +$ hub serving start --modules Module1==Version1 \ + --port XXXX \ + --use_multiprocess \ + --workers \ +``` + +**参数:** +|参数|用途| +|-|-| +|--modules/-m| [**必选**] PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出
*`当不指定Version时,默认选择最新版本`*| +|--port/-p| [**可选**] 服务端口,默认为8866| +|--use_multiprocess| [**可选**] 是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式
*`Windows操作系统只支持单进程方式`*| +|--workers| [**可选**] 在并发方式下指定的并发任务数,默认为`2*cpu_count-1`,其中`cpu_count`为CPU核数| + +如按默认参数启动服务: ```hub serving start -m clas_system``` + +这样就完成了一个服务化API的部署,使用默认端口号8866。 + +#### 方式2. 配置文件启动(支持CPU、GPU) +**启动命令:** +```hub serving start -c config.json``` + +其中,`config.json`格式如下: +```json +{ + "modules_info": { + "clas_system": { + "init_args": { + "version": "1.0.0", + "use_gpu": true, + "enable_mkldnn": false + }, + "predict_args": { + } + } + }, + "port": 8866, + "use_multiprocess": false, + "workers": 2 +} +``` + +- `init_args`中的可配参数与`module.py`中的`_initialize`函数接口一致。其中, + - 当`use_gpu`为`true`时,表示使用GPU启动服务。 + - 当`enable_mkldnn`为`true`时,表示使用MKL-DNN加速。 +- `predict_args`中的可配参数与`module.py`中的`predict`函数接口一致。 + +**注意:** +- 使用配置文件启动服务时,其他参数会被忽略。 +- 如果使用GPU预测(即,`use_gpu`置为`true`),则需要在启动服务之前,设置CUDA_VISIBLE_DEVICES环境变量,如:```export CUDA_VISIBLE_DEVICES=0```,否则不用设置。 +- **`use_gpu`不可与`use_multiprocess`同时为`true`**。 +- **`use_gpu`与`enable_mkldnn`同时为`true`时,将忽略`enable_mkldnn`,而使用GPU**。 + +如,使用GPU 3号卡启动串联服务: +```shell +cd PaddleClas/deploy +export CUDA_VISIBLE_DEVICES=3 +hub serving start -c hubserving/clas/config.json +``` + +## 发送预测请求 +配置好服务端,可使用以下命令发送预测请求,获取预测结果: + +```shell +cd PaddleClas/deploy +python hubserving/test_hubserving.py server_url image_path +``` + +需要给脚本传递2个必须参数: +- **server_url**:服务地址,格式为 +`http://[ip_address]:[port]/predict/[module_name]` +- **image_path**:测试图像路径,可以是单张图片路径,也可以是图像集合目录路径。 +- **batch_size**:[**可选**] 以`batch_size`大小为单位进行预测,默认为`1`。 +- **resize_short**:[**可选**] 预处理时,按短边调整大小,默认为`256`。 +- **crop_size**:[**可选**] 预处理时,居中裁剪的大小,默认为`224`。 +- **normalize**:[**可选**] 预处理时,是否进行`normalize`,默认为`True`。 +- **to_chw**:[**可选**] 预处理时,是否调整为`CHW`顺序,默认为`True`。 + +**注意**:如果使用`Transformer`系列模型,如`DeiT_***_384`, `ViT_***_384`等,请注意模型的输入数据尺寸,需要指定`--resize_short=384 --crop_size=384`。 + + +访问示例: +```shell +python hubserving/test_hubserving.py --server_url http://127.0.0.1:8866/predict/clas_system --image_file ./hubserving/ILSVRC2012_val_00006666.JPEG --batch_size 8 +``` + +### 返回结果格式说明 +返回结果为列表(list),包含top-k个分类结果,以及对应的得分,还有此图片预测耗时,具体如下: +``` +list: 返回结果 +└─ list: 第一张图片结果 + └─ list: 前k个分类结果,依score递减排序 + └─ list: 前k个分类结果对应的score,依score递减排序 + └─ float: 该图分类耗时,单位秒 +``` + +**说明:** 如果需要增加、删除、修改返回字段,可对相应模块进行修改,完整流程参考下一节自定义修改服务模块。 + +## 自定义修改服务模块 +如果需要修改服务逻辑,你一般需要操作以下步骤: + +- 1、 停止服务 +```hub serving stop --port/-p XXXX``` + +- 2、 到相应的`module.py`和`params.py`等文件中根据实际需求修改代码。`module.py`修改后需要重新安装(`hub install hubserving/clas/`)并部署。在进行部署前,可通过`python hubserving/clas/module.py`测试已安装服务模块。 + +- 3、 卸载旧服务包 +```hub uninstall clas_system``` + +- 4、 安装修改后的新服务包 +```hub install hubserving/clas/``` + +- 5、重新启动服务 +```hub serving start -m clas_system``` + +**注意**: +常用参数可在[params.py](./clas/params.py)中修改: + * 更换模型,需要修改模型文件路径参数: + ```python + "inference_model_dir": + ``` + * 更改后处理时返回的`top-k`结果数量: + ```python + 'topk': + ``` + * 更改后处理时的lable与class id对应映射文件: + ```python + 'class_id_map_file': + ``` + +为了避免不必要的延时以及能够以batch_size进行预测,数据预处理逻辑(包括resize、crop等操作)在客户端完成,因此需要在[test_hubserving.py](./test_hubserving.py#L35-L52)中修改。 diff --git a/src/PaddleClas/deploy/hubserving/readme_en.md b/src/PaddleClas/deploy/hubserving/readme_en.md new file mode 100644 index 0000000..bb0ddbd --- /dev/null +++ b/src/PaddleClas/deploy/hubserving/readme_en.md @@ -0,0 +1,199 @@ +English | [简体中文](readme.md) + +# Service deployment based on PaddleHub Serving + +HubServing service pack contains 3 files, the directory is as follows: +``` +hubserving/clas/ + └─ __init__.py Empty file, required + └─ config.json Configuration file, optional, passed in as a parameter when using configuration to start the service + └─ module.py Main module file, required, contains the complete logic of the service + └─ params.py Parameter file, required, including parameters such as model path, pre- and post-processing parameters +``` + +## Quick start service +### 1. Prepare the environment +```shell +# Install version 2.0 of PaddleHub +pip3 install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple +``` + +### 2. Download inference model +Before installing the service module, you need to prepare the inference model and put it in the correct path. The default model path is: + +``` +Model structure file: PaddleClas/inference/inference.pdmodel +Model parameters file: PaddleClas/inference/inference.pdiparams +``` + +* The model file path can be viewed and modified in `PaddleClas/deploy/hubserving/clas/params.py`. + + It should be noted that the prefix of model structure file and model parameters file must be `inference`. + +* More models provided by PaddleClas can be obtained from the [model library](../../docs/en/models/models_intro_en.md). You can also use models trained by yourself. + +### 3. Install Service Module + +* On Linux platform, the examples are as follows. +```shell +cd PaddleClas/deploy +hub install hubserving/clas/ +``` + +* On Windows platform, the examples are as follows. +```shell +cd PaddleClas\deploy +hub install hubserving\clas\ +``` + +### 4. Start service +#### Way 1. Start with command line parameters (CPU only) + +**start command:** +```shell +$ hub serving start --modules Module1==Version1 \ + --port XXXX \ + --use_multiprocess \ + --workers \ +``` +**parameters:** + +|parameters|usage| +|-|-| +|--modules/-m|PaddleHub Serving pre-installed model, listed in the form of multiple Module==Version key-value pairs
*`When Version is not specified, the latest version is selected by default`*| +|--port/-p|Service port, default is 8866| +|--use_multiprocess|Enable concurrent mode, the default is single-process mode, this mode is recommended for multi-core CPU machines
*`Windows operating system only supports single-process mode`*| +|--workers|The number of concurrent tasks specified in concurrent mode, the default is `2*cpu_count-1`, where `cpu_count` is the number of CPU cores| + +For example, start the 2-stage series service: +```shell +hub serving start -m clas_system +``` + +This completes the deployment of a service API, using the default port number 8866. + +#### Way 2. Start with configuration file(CPU、GPU) +**start command:** +```shell +hub serving start --config/-c config.json +``` +Wherein, the format of `config.json` is as follows: +```json +{ + "modules_info": { + "clas_system": { + "init_args": { + "version": "1.0.0", + "use_gpu": true, + "enable_mkldnn": false + }, + "predict_args": { + } + } + }, + "port": 8866, + "use_multiprocess": false, + "workers": 2 +} +``` +- The configurable parameters in `init_args` are consistent with the `_initialize` function interface in `module.py`. Among them, + - when `use_gpu` is `true`, it means that the GPU is used to start the service. + - when `enable_mkldnn` is `true`, it means that use MKL-DNN to accelerate. +- The configurable parameters in `predict_args` are consistent with the `predict` function interface in `module.py`. + +**Note:** +- When using the configuration file to start the service, other parameters will be ignored. +- If you use GPU prediction (that is, `use_gpu` is set to `true`), you need to set the environment variable CUDA_VISIBLE_DEVICES before starting the service, such as: ```export CUDA_VISIBLE_DEVICES=0```, otherwise you do not need to set it. +- **`use_gpu` and `use_multiprocess` cannot be `true` at the same time.** +- **When both `use_gpu` and `enable_mkldnn` are set to `true` at the same time, GPU is used to run and `enable_mkldnn` will be ignored.** + +For example, use GPU card No. 3 to start the 2-stage series service: +```shell +cd PaddleClas/deploy +export CUDA_VISIBLE_DEVICES=3 +hub serving start -c hubserving/clas/config.json +``` + +## Send prediction requests +After the service starts, you can use the following command to send a prediction request to obtain the prediction result: +```shell +cd PaddleClas/deploy +python hubserving/test_hubserving.py server_url image_path +``` + +Two required parameters need to be passed to the script: +- **server_url**: service address,format of which is +`http://[ip_address]:[port]/predict/[module_name]` +- **image_path**: Test image path, can be a single image path or an image directory path +- **batch_size**: [**Optional**] batch_size. Default by `1`. +- **resize_short**: [**Optional**] In preprocessing, resize according to short size. Default by `256`。 +- **crop_size**: [**Optional**] In preprocessing, centor crop size. Default by `224`。 +- **normalize**: [**Optional**] In preprocessing, whether to do `normalize`. Default by `True`。 +- **to_chw**: [**Optional**] In preprocessing, whether to transpose to `CHW`. Default by `True`。 + +**Notice**: +If you want to use `Transformer series models`, such as `DeiT_***_384`, `ViT_***_384`, etc., please pay attention to the input size of model, and need to set `--resize_short=384`, `--crop_size=384`. + +**Eg.** +```shell +python hubserving/test_hubserving.py --server_url http://127.0.0.1:8866/predict/clas_system --image_file ./hubserving/ILSVRC2012_val_00006666.JPEG --batch_size 8 +``` + +### Returned result format +The returned result is a list, including the `top_k`'s classification results, corresponding scores and the time cost of prediction, details as follows. + +``` +list: The returned results +└─ list: The result of first picture + └─ list: The top-k classification results, sorted in descending order of score + └─ list: The scores corresponding to the top-k classification results, sorted in descending order of score + └─ float: The time cost of predicting the picture, unit second +``` + +**Note:** If you need to add, delete or modify the returned fields, you can modify the corresponding module. For the details, refer to the user-defined modification service module in the next section. + +## User defined service module modification +If you need to modify the service logic, the following steps are generally required: + +1. Stop service +```shell +hub serving stop --port/-p XXXX +``` + +2. Modify the code in the corresponding files, like `module.py` and `params.py`, according to the actual needs. You need re-install(hub install hubserving/clas/) and re-deploy after modifing `module.py`. +After modifying and installing and before deploying, you can use `python hubserving/clas/module.py` to test the installed service module. + +For example, if you need to replace the model used by the deployed service, you need to modify model path parameters `cfg.model_file` and `cfg.params_file` in `params.py`. Of course, other related parameters may need to be modified at the same time. Please modify and debug according to the actual situation. + +3. Uninstall old service module +```shell +hub uninstall clas_system +``` + +4. Install modified service module +```shell +hub install hubserving/clas/ +``` + +5. Restart service +```shell +hub serving start -m clas_system +``` + +**Note**: + +Common parameters can be modified in params.py: +* Directory of model files(include model structure file and model parameters file): + ```python + "inference_model_dir": + ``` +* The number of Top-k results returned during post-processing: + ```python + 'topk': + ``` +* Mapping file corresponding to label and class ID during post-processing: + ```python + 'class_id_map_file': + ``` + +In order to avoid unnecessary delay and be able to predict in batch, the preprocessing (include resize, crop and other) is completed in the client, so modify [test_hubserving.py](./test_hubserving.py#L35-L52) if necessary. diff --git a/src/PaddleClas/deploy/hubserving/test_hubserving.py b/src/PaddleClas/deploy/hubserving/test_hubserving.py new file mode 100644 index 0000000..b778a82 --- /dev/null +++ b/src/PaddleClas/deploy/hubserving/test_hubserving.py @@ -0,0 +1,166 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) + +import time +import requests +import json +import base64 +import argparse + +import numpy as np +import cv2 + +from utils import logger +from utils.get_image_list import get_image_list +from utils import config +from utils.encode_decode import np_to_b64 +from python.preprocess import create_operators + + +def get_args(): + def str2bool(v): + return v.lower() in ("true", "t", "1") + + parser = argparse.ArgumentParser() + parser.add_argument("--server_url", type=str) + parser.add_argument("--image_file", type=str) + parser.add_argument("--batch_size", type=int, default=1) + parser.add_argument("--resize_short", type=int, default=256) + parser.add_argument("--crop_size", type=int, default=224) + parser.add_argument("--normalize", type=str2bool, default=True) + parser.add_argument("--to_chw", type=str2bool, default=True) + return parser.parse_args() + + +class PreprocessConfig(object): + def __init__(self, + resize_short=256, + crop_size=224, + normalize=True, + to_chw=True): + self.config = [{ + 'ResizeImage': { + 'resize_short': resize_short + } + }, { + 'CropImage': { + 'size': crop_size + } + }] + if normalize: + self.config.append({ + 'NormalizeImage': { + 'scale': 0.00392157, + 'mean': [0.485, 0.456, 0.406], + 'std': [0.229, 0.224, 0.225], + 'order': '' + } + }) + if to_chw: + self.config.append({'ToCHWImage': None}) + + def __call__(self): + return self.config + + +def main(args): + image_path_list = get_image_list(args.image_file) + headers = {"Content-type": "application/json"} + preprocess_ops = create_operators( + PreprocessConfig(args.resize_short, args.crop_size, args.normalize, + args.to_chw)()) + + cnt = 0 + predict_time = 0 + all_score = 0.0 + start_time = time.time() + + img_data_list = [] + img_name_list = [] + cnt = 0 + for idx, img_path in enumerate(image_path_list): + img = cv2.imread(img_path) + if img is None: + logger.warning( + f"Image file failed to read and has been skipped. The path: {img_path}" + ) + continue + else: + img = img[:, :, ::-1] + for ops in preprocess_ops: + img = ops(img) + img = np.array(img) + img_data_list.append(img) + + img_name = img_path.split('/')[-1] + img_name_list.append(img_name) + cnt += 1 + if cnt % args.batch_size == 0 or (idx + 1) == len(image_path_list): + inputs = np.array(img_data_list) + b64str, revert_shape = np_to_b64(inputs) + data = { + "images": b64str, + "revert_params": { + "shape": revert_shape, + "dtype": str(inputs.dtype) + } + } + try: + r = requests.post( + url=args.server_url, + headers=headers, + data=json.dumps(data)) + r.raise_for_status + if r.json()["status"] != "000": + msg = r.json()["msg"] + raise Exception(msg) + except Exception as e: + logger.error(f"{e}, in file(s): {img_name_list[0]} etc.") + continue + else: + results = r.json()["results"] + preds = results["prediction"] + elapse = results["elapse"] + + cnt += len(preds) + predict_time += elapse + + for number, result_list in enumerate(preds): + all_score += result_list["scores"][0] + pred_str = ", ".join( + [f"{k}: {result_list[k]}" for k in result_list]) + logger.info( + f"File:{img_name_list[number]}, The result(s): {pred_str}" + ) + + finally: + img_data_list = [] + img_name_list = [] + + total_time = time.time() - start_time + logger.info("The average time of prediction cost: {:.3f} s/image".format( + predict_time / cnt)) + logger.info("The average time cost: {:.3f} s/image".format(total_time / + cnt)) + logger.info("The average top-1 score: {:.3f}".format(all_score / cnt)) + + +if __name__ == '__main__': + args = get_args() + main(args) diff --git a/src/PaddleClas/deploy/images/0517_2715693311.jpg b/src/PaddleClas/deploy/images/0517_2715693311.jpg new file mode 100644 index 0000000..bd9d2f6 Binary files /dev/null and b/src/PaddleClas/deploy/images/0517_2715693311.jpg differ diff --git a/src/PaddleClas/deploy/images/ILSVRC2012_val_00000010.jpeg b/src/PaddleClas/deploy/images/ILSVRC2012_val_00000010.jpeg new file mode 100644 index 0000000..6fcafb4 Binary files /dev/null and b/src/PaddleClas/deploy/images/ILSVRC2012_val_00000010.jpeg differ diff --git a/src/PaddleClas/deploy/images/ILSVRC2012_val_00010010.jpeg b/src/PaddleClas/deploy/images/ILSVRC2012_val_00010010.jpeg new file mode 100644 index 0000000..4908ac4 Binary files /dev/null and b/src/PaddleClas/deploy/images/ILSVRC2012_val_00010010.jpeg differ diff --git a/src/PaddleClas/deploy/images/ILSVRC2012_val_00020010.jpeg b/src/PaddleClas/deploy/images/ILSVRC2012_val_00020010.jpeg new file mode 100644 index 0000000..9c6f877 Binary files /dev/null and b/src/PaddleClas/deploy/images/ILSVRC2012_val_00020010.jpeg differ diff --git a/src/PaddleClas/deploy/images/ILSVRC2012_val_00030010.jpeg b/src/PaddleClas/deploy/images/ILSVRC2012_val_00030010.jpeg new file mode 100644 index 0000000..0a073fe Binary files /dev/null and b/src/PaddleClas/deploy/images/ILSVRC2012_val_00030010.jpeg differ diff --git a/src/PaddleClas/deploy/images/anmuxi.jpg b/src/PaddleClas/deploy/images/anmuxi.jpg new file mode 100644 index 0000000..735ea5a Binary files /dev/null and b/src/PaddleClas/deploy/images/anmuxi.jpg differ diff --git a/src/PaddleClas/deploy/images/coco_000000570688.jpg b/src/PaddleClas/deploy/images/coco_000000570688.jpg new file mode 100644 index 0000000..cb304bd Binary files /dev/null and b/src/PaddleClas/deploy/images/coco_000000570688.jpg differ diff --git a/src/PaddleClas/deploy/images/wangzai.jpg b/src/PaddleClas/deploy/images/wangzai.jpg new file mode 100644 index 0000000..fe7aa77 Binary files /dev/null and b/src/PaddleClas/deploy/images/wangzai.jpg differ diff --git a/src/PaddleClas/deploy/lite/Makefile b/src/PaddleClas/deploy/lite/Makefile new file mode 100644 index 0000000..f18864a --- /dev/null +++ b/src/PaddleClas/deploy/lite/Makefile @@ -0,0 +1,68 @@ +ARM_ABI = arm8 +export ARM_ABI + +include ../Makefile.def + +LITE_ROOT=../../../ + +THIRD_PARTY_DIR=${LITE_ROOT}/third_party + +OPENCV_VERSION=opencv4.1.0 + +ifeq (${ARM_ABI}, arm8) + ARM_PATH=arm64-v8a +endif +ifeq (${ARM_ABI}, arm7) + ARM_PATH=armeabi-v7a +endif + +OPENCV_LIBS = ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/libs/libopencv_imgcodecs.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/libs/libopencv_imgproc.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/libs/libopencv_core.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/libtegra_hal.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/liblibjpeg-turbo.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/liblibwebp.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/liblibpng.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/liblibjasper.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/liblibtiff.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/libIlmImf.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/libtbb.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PATH}/3rdparty/libs/libcpufeatures.a + +OPENCV_INCLUDE = -I../../../third_party/${OPENCV_VERSION}/${ARM_PATH}/include + +CXX_INCLUDES = $(INCLUDES) ${OPENCV_INCLUDE} -I$(LITE_ROOT)/cxx/include + +CXX_LIBS = ${OPENCV_LIBS} -L$(LITE_ROOT)/cxx/lib/ -lpaddle_light_api_shared $(SYSTEM_LIBS) + +############################################################### +# How to use one of static libaray: # +# `libpaddle_api_full_bundled.a` # +# `libpaddle_api_light_bundled.a` # +############################################################### +# Note: default use lite's shared library. # +############################################################### +# 1. Comment above line using `libpaddle_light_api_shared.so` +# 2. Undo comment below line using `libpaddle_api_light_bundled.a` + +#CXX_LIBS = $(LITE_ROOT)/cxx/lib/libpaddle_api_light_bundled.a $(SYSTEM_LIBS) + +clas_system: fetch_opencv clas_system.o + $(CC) $(SYSROOT_LINK) $(CXXFLAGS_LINK) clas_system.o -o clas_system $(CXX_LIBS) $(LDFLAGS) + +clas_system.o: image_classfication.cpp + $(CC) $(SYSROOT_COMPLILE) $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o clas_system.o -c image_classfication.cpp + +fetch_opencv: + @ test -d ${THIRD_PARTY_DIR} || mkdir ${THIRD_PARTY_DIR} + @ test -e ${THIRD_PARTY_DIR}/${OPENCV_VERSION}.tar.gz || \ + (echo "fetch opencv libs" && \ + wget -P ${THIRD_PARTY_DIR} https://paddle-inference-dist.bj.bcebos.com/${OPENCV_VERSION}.tar.gz) + @ test -d ${THIRD_PARTY_DIR}/${OPENCV_VERSION} || \ + tar -zxvf ${THIRD_PARTY_DIR}/${OPENCV_VERSION}.tar.gz -C ${THIRD_PARTY_DIR} + + +.PHONY: clean +clean: + rm -f clas_system.o + rm -f clas_system diff --git a/src/PaddleClas/deploy/lite/benchmark/benchmark.sh b/src/PaddleClas/deploy/lite/benchmark/benchmark.sh new file mode 100644 index 0000000..591331e --- /dev/null +++ b/src/PaddleClas/deploy/lite/benchmark/benchmark.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# ref1: https://github.com/PaddlePaddle/Paddle-Lite/blob/58b2d7dd89/lite/api/benchmark.cc +# ref2: https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark.sh + +set -e + +# Check input +if [ $# -lt 3 ]; +then + echo "Input error" + echo "Usage:" + echo " sh benchmark.sh " + echo " sh benchmark.sh " + exit +fi + +# Set benchmark params +ANDROID_DIR=/data/local/tmp +BENCHMARK_BIN=$1 +MODELS_DIR=$2 +RESULT_FILENAME=$3 + +WARMUP=10 +REPEATS=30 +IS_RUN_MODEL_OPTIMIZE=false +IS_RUN_QUANTIZED_MODEL=false +NUM_THREADS_LIST=(1 2 4) +MODELS_LIST=$(ls $MODELS_DIR) + +# Check input +if [ $# -gt 3 ]; +then + IS_RUN_MODEL_OPTIMIZE=$4 +fi + +# Adb push benchmark_bin, models +adb push $BENCHMARK_BIN $ANDROID_DIR/benchmark_bin +adb shell chmod +x $ANDROID_DIR/benchmark_bin +adb push $MODELS_DIR $ANDROID_DIR + +# Run benchmark +adb shell "echo 'PaddleLite Benchmark' > $ANDROID_DIR/$RESULT_FILENAME" +for threads in ${NUM_THREADS_LIST[@]}; do + adb shell "echo Threads=$threads Warmup=$WARMUP Repeats=$REPEATS >> $ANDROID_DIR/$RESULT_FILENAME" + for model_name in ${MODELS_LIST[@]}; do + echo "Model=$model_name Threads=$threads" + if [ "$IS_RUN_MODEL_OPTIMIZE" = true ]; + then + adb shell "$ANDROID_DIR/benchmark_bin \ + --model_dir=$ANDROID_DIR/${MODELS_DIR}/$model_name \ + --model_filename=model \ + --param_filename=params \ + --warmup=$WARMUP \ + --repeats=$REPEATS \ + --threads=$threads \ + --result_filename=$ANDROID_DIR/$RESULT_FILENAME" + else + adb shell "$ANDROID_DIR/benchmark_bin \ + --optimized_model_path=$ANDROID_DIR/${MODELS_DIR}/$model_name \ + --warmup=$WARMUP \ + --repeats=$REPEATS \ + --threads=$threads \ + --result_filename=$ANDROID_DIR/$RESULT_FILENAME" + fi + done + adb shell "echo >> $ANDROID_DIR/$RESULT_FILENAME" +done + +# Adb pull benchmark result, show result +adb pull $ANDROID_DIR/$RESULT_FILENAME . +echo "\n--------------------------------------" +cat $RESULT_FILENAME +echo "--------------------------------------" diff --git a/src/PaddleClas/deploy/lite/config.txt b/src/PaddleClas/deploy/lite/config.txt new file mode 100644 index 0000000..08cee3d --- /dev/null +++ b/src/PaddleClas/deploy/lite/config.txt @@ -0,0 +1,6 @@ +clas_model_file ./MobileNetV3_large_x1_0.nb +label_path ./imagenet1k_label_list.txt +resize_short_size 256 +crop_size 224 +visualize 0 +enable_benchmark 0 diff --git a/src/PaddleClas/deploy/lite/image_classfication.cpp b/src/PaddleClas/deploy/lite/image_classfication.cpp new file mode 100644 index 0000000..535f3c8 --- /dev/null +++ b/src/PaddleClas/deploy/lite/image_classfication.cpp @@ -0,0 +1,344 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle_api.h" // NOLINT +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace paddle::lite_api; // NOLINT +using namespace std; + +struct RESULT { + std::string class_name; + int class_id; + float score; +}; + +std::vector PostProcess(const float *output_data, int output_size, + const std::vector &word_labels, + cv::Mat &output_image) { + const int TOPK = 5; + int max_indices[TOPK]; + double max_scores[TOPK]; + for (int i = 0; i < TOPK; i++) { + max_indices[i] = 0; + max_scores[i] = 0; + } + for (int i = 0; i < output_size; i++) { + float score = output_data[i]; + int index = i; + for (int j = 0; j < TOPK; j++) { + if (score > max_scores[j]) { + index += max_indices[j]; + max_indices[j] = index - max_indices[j]; + index -= max_indices[j]; + score += max_scores[j]; + max_scores[j] = score - max_scores[j]; + score -= max_scores[j]; + } + } + } + + std::vector results(TOPK); + for (int i = 0; i < results.size(); i++) { + results[i].class_name = "Unknown"; + if (max_indices[i] >= 0 && max_indices[i] < word_labels.size()) { + results[i].class_name = word_labels[max_indices[i]]; + } + results[i].score = max_scores[i]; + results[i].class_id = max_indices[i]; + cv::putText(output_image, + "Top" + std::to_string(i + 1) + "." + results[i].class_name + + ":" + std::to_string(results[i].score), + cv::Point2d(5, i * 18 + 20), cv::FONT_HERSHEY_PLAIN, 1, + cv::Scalar(51, 255, 255)); + } + return results; +} + +// fill tensor with mean and scale and trans layout: nhwc -> nchw, neon speed up +void NeonMeanScale(const float *din, float *dout, int size, + const std::vector mean, + const std::vector scale) { + if (mean.size() != 3 || scale.size() != 3) { + std::cerr << "[ERROR] mean or scale size must equal to 3\n"; + exit(1); + } + float32x4_t vmean0 = vdupq_n_f32(mean[0]); + float32x4_t vmean1 = vdupq_n_f32(mean[1]); + float32x4_t vmean2 = vdupq_n_f32(mean[2]); + float32x4_t vscale0 = vdupq_n_f32(scale[0]); + float32x4_t vscale1 = vdupq_n_f32(scale[1]); + float32x4_t vscale2 = vdupq_n_f32(scale[2]); + + float *dout_c0 = dout; + float *dout_c1 = dout + size; + float *dout_c2 = dout + size * 2; + + int i = 0; + for (; i < size - 3; i += 4) { + float32x4x3_t vin3 = vld3q_f32(din); + float32x4_t vsub0 = vsubq_f32(vin3.val[0], vmean0); + float32x4_t vsub1 = vsubq_f32(vin3.val[1], vmean1); + float32x4_t vsub2 = vsubq_f32(vin3.val[2], vmean2); + float32x4_t vs0 = vmulq_f32(vsub0, vscale0); + float32x4_t vs1 = vmulq_f32(vsub1, vscale1); + float32x4_t vs2 = vmulq_f32(vsub2, vscale2); + vst1q_f32(dout_c0, vs0); + vst1q_f32(dout_c1, vs1); + vst1q_f32(dout_c2, vs2); + + din += 12; + dout_c0 += 4; + dout_c1 += 4; + dout_c2 += 4; + } + for (; i < size; i++) { + *(dout_c0++) = (*(din++) - mean[0]) * scale[0]; + *(dout_c1++) = (*(din++) - mean[1]) * scale[1]; + *(dout_c2++) = (*(din++) - mean[2]) * scale[2]; + } +} + +cv::Mat ResizeImage(const cv::Mat &img, const int &resize_short_size) { + int w = img.cols; + int h = img.rows; + + cv::Mat resize_img; + + float ratio = 1.f; + if (h < w) { + ratio = float(resize_short_size) / float(h); + } else { + ratio = float(resize_short_size) / float(w); + } + int resize_h = round(float(h) * ratio); + int resize_w = round(float(w) * ratio); + + cv::resize(img, resize_img, cv::Size(resize_w, resize_h)); + return resize_img; +} + +cv::Mat CenterCropImg(const cv::Mat &img, const int &crop_size) { + int resize_w = img.cols; + int resize_h = img.rows; + int w_start = int((resize_w - crop_size) / 2); + int h_start = int((resize_h - crop_size) / 2); + cv::Rect rect(w_start, h_start, crop_size, crop_size); + cv::Mat crop_img = img(rect); + return crop_img; +} + +std::vector +RunClasModel(std::shared_ptr predictor, const cv::Mat &img, + const std::map &config, + const std::vector &word_labels, double &cost_time) { + // Read img + int resize_short_size = stoi(config.at("resize_short_size")); + int crop_size = stoi(config.at("crop_size")); + int visualize = stoi(config.at("visualize")); + + cv::Mat resize_image = ResizeImage(img, resize_short_size); + + cv::Mat crop_image = CenterCropImg(resize_image, crop_size); + + cv::Mat img_fp; + double e = 1.0 / 255.0; + crop_image.convertTo(img_fp, CV_32FC3, e); + + // Prepare input data from image + std::unique_ptr input_tensor(std::move(predictor->GetInput(0))); + input_tensor->Resize({1, 3, img_fp.rows, img_fp.cols}); + auto *data0 = input_tensor->mutable_data(); + + std::vector mean = {0.485f, 0.456f, 0.406f}; + std::vector scale = {1 / 0.229f, 1 / 0.224f, 1 / 0.225f}; + const float *dimg = reinterpret_cast(img_fp.data); + NeonMeanScale(dimg, data0, img_fp.rows * img_fp.cols, mean, scale); + + auto start = std::chrono::system_clock::now(); + // Run predictor + predictor->Run(); + + // Get output and post process + std::unique_ptr output_tensor( + std::move(predictor->GetOutput(0))); + auto *output_data = output_tensor->data(); + auto end = std::chrono::system_clock::now(); + auto duration = + std::chrono::duration_cast(end - start); + cost_time = double(duration.count()) * + std::chrono::microseconds::period::num / + std::chrono::microseconds::period::den; + + int output_size = 1; + for (auto dim : output_tensor->shape()) { + output_size *= dim; + } + + cv::Mat output_image; + auto results = + PostProcess(output_data, output_size, word_labels, output_image); + + if (visualize) { + std::string output_image_path = "./clas_result.png"; + cv::imwrite(output_image_path, output_image); + std::cout << "save output image into " << output_image_path << std::endl; + } + + return results; +} + +std::shared_ptr LoadModel(std::string model_file) { + MobileConfig config; + config.set_model_from_file(model_file); + + std::shared_ptr predictor = + CreatePaddlePredictor(config); + return predictor; +} + +std::vector split(const std::string &str, + const std::string &delim) { + std::vector res; + if ("" == str) + return res; + char *strs = new char[str.length() + 1]; + std::strcpy(strs, str.c_str()); + + char *d = new char[delim.length() + 1]; + std::strcpy(d, delim.c_str()); + + char *p = std::strtok(strs, d); + while (p) { + string s = p; + res.push_back(s); + p = std::strtok(NULL, d); + } + + return res; +} + +std::vector ReadDict(std::string path) { + std::ifstream in(path); + std::string filename; + std::string line; + std::vector m_vec; + if (in) { + while (getline(in, line)) { + m_vec.push_back(line); + } + } else { + std::cout << "no such file" << std::endl; + } + return m_vec; +} + +std::map LoadConfigTxt(std::string config_path) { + auto config = ReadDict(config_path); + + std::map dict; + for (int i = 0; i < config.size(); i++) { + std::vector res = split(config[i], " "); + dict[res[0]] = res[1]; + } + return dict; +} + +void PrintConfig(const std::map &config) { + std::cout << "=======PaddleClas lite demo config======" << std::endl; + for (auto iter = config.begin(); iter != config.end(); iter++) { + std::cout << iter->first << " : " << iter->second << std::endl; + } + std::cout << "=======End of PaddleClas lite demo config======" << std::endl; +} + +std::vector LoadLabels(const std::string &path) { + std::ifstream file; + std::vector labels; + file.open(path); + while (file) { + std::string line; + std::getline(file, line); + std::string::size_type pos = line.find(" "); + if (pos != std::string::npos) { + line = line.substr(pos); + } + labels.push_back(line); + } + file.clear(); + file.close(); + return labels; +} + +int main(int argc, char **argv) { + if (argc < 3) { + std::cerr << "[ERROR] usage: " << argv[0] << " config_path img_path\n"; + exit(1); + } + + std::string config_path = argv[1]; + std::string img_path = argv[2]; + + // load config + auto config = LoadConfigTxt(config_path); + PrintConfig(config); + + double elapsed_time = 0.0; + int warmup_iter = 10; + + bool enable_benchmark = bool(stoi(config.at("enable_benchmark"))); + int total_cnt = enable_benchmark ? 1000 : 1; + + std::string clas_model_file = config.at("clas_model_file"); + std::string label_path = config.at("label_path"); + + // Load Labels + std::vector word_labels = LoadLabels(label_path); + + auto clas_predictor = LoadModel(clas_model_file); + for (int j = 0; j < total_cnt; ++j) { + cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR); + cv::cvtColor(srcimg, srcimg, cv::COLOR_BGR2RGB); + + double run_time = 0; + std::vector results = + RunClasModel(clas_predictor, srcimg, config, word_labels, run_time); + + std::cout << "===clas result for image: " << img_path << "===" << std::endl; + for (int i = 0; i < results.size(); i++) { + std::cout << "\t" + << "Top-" << i + 1 << ", class_id: " << results[i].class_id + << ", class_name: " << results[i].class_name + << ", score: " << results[i].score << std::endl; + } + if (j >= warmup_iter) { + elapsed_time += run_time; + std::cout << "Current image path: " << img_path << std::endl; + std::cout << "Current time cost: " << run_time << " s, " + << "average time cost in all: " + << elapsed_time / (j + 1 - warmup_iter) << " s." << std::endl; + } else { + std::cout << "Current time cost: " << run_time << " s." << std::endl; + } + } + + return 0; +} diff --git a/src/PaddleClas/deploy/lite/imgs/lite_demo_result.png b/src/PaddleClas/deploy/lite/imgs/lite_demo_result.png new file mode 100644 index 0000000..b778f15 Binary files /dev/null and b/src/PaddleClas/deploy/lite/imgs/lite_demo_result.png differ diff --git a/src/PaddleClas/deploy/lite/imgs/tabby_cat.jpg b/src/PaddleClas/deploy/lite/imgs/tabby_cat.jpg new file mode 100644 index 0000000..6eb5b71 Binary files /dev/null and b/src/PaddleClas/deploy/lite/imgs/tabby_cat.jpg differ diff --git a/src/PaddleClas/deploy/lite/prepare.sh b/src/PaddleClas/deploy/lite/prepare.sh new file mode 100644 index 0000000..ed1f13a --- /dev/null +++ b/src/PaddleClas/deploy/lite/prepare.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ $# != 1 ] ; then +echo "USAGE: $0 your_inference_lite_lib_path" +exit 1; +fi + +mkdir -p $1/demo/cxx/clas/debug/ +cp ../../ppcls/utils/imagenet1k_label_list.txt $1/demo/cxx/clas/debug/ +cp -r ./* $1/demo/cxx/clas/ +cp ./config.txt $1/demo/cxx/clas/debug/ +cp ./imgs/tabby_cat.jpg $1/demo/cxx/clas/debug/ + +echo "Prepare Done" diff --git a/src/PaddleClas/deploy/lite/readme.md b/src/PaddleClas/deploy/lite/readme.md new file mode 100644 index 0000000..176e62c --- /dev/null +++ b/src/PaddleClas/deploy/lite/readme.md @@ -0,0 +1,265 @@ +# 端侧部署 + +本教程将介绍基于[Paddle Lite](https://github.com/PaddlePaddle/Paddle-Lite) 在移动端部署PaddleClas分类模型的详细步骤。 + +Paddle Lite是飞桨轻量化推理引擎,为手机、IOT端提供高效推理能力,并广泛整合跨平台硬件,为端侧部署及应用落地问题提供轻量化的部署方案。如果希望直接测试速度,可以参考[Paddle-Lite移动端benchmark测试教程](../../docs/zh_CN/extension/paddle_mobile_inference.md)。 + + +## 1. 准备环境 + +### 运行准备 +- 电脑(编译Paddle Lite) +- 安卓手机(armv7或armv8) + +### 1.1 准备交叉编译环境 +交叉编译环境用于编译 Paddle Lite 和 PaddleClas 的C++ demo。 +支持多种开发环境,不同开发环境的编译流程请参考对应文档。 + +1. [Docker](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#docker) +2. [Linux](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#linux) +3. [MAC OS](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#mac-os) + +### 1.2 准备预测库 + +预测库有两种获取方式: +1. [建议]直接下载,预测库下载链接如下: + |平台|预测库下载链接| + |-|-| + |Android|[arm7](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/Android/gcc/inference_lite_lib.android.armv7.gcc.c++_static.with_extra.with_cv.tar.gz) / [arm8](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/Android/gcc/inference_lite_lib.android.armv8.gcc.c++_static.with_extra.with_cv.tar.gz)| + |iOS|[arm7](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/iOS/inference_lite_lib.ios.armv7.with_cv.with_extra.tiny_publish.tar.gz) / [arm8](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/iOS/inference_lite_lib.ios.armv8.with_cv.with_extra.tiny_publish.tar.gz)| + + **注**: + 1. 如果是从 Paddle-Lite [官方文档](https://paddle-lite.readthedocs.io/zh/latest/quick_start/release_lib.html#android-toolchain-gcc)下载的预测库, + 注意选择`with_extra=ON,with_cv=ON`的下载链接。 + 2. 如果使用量化的模型部署在端侧,建议使用Paddle-Lite develop分支编译预测库。 + +2. 编译Paddle-Lite得到预测库,Paddle-Lite的编译方式如下: +```shell +git clone https://github.com/PaddlePaddle/Paddle-Lite.git +cd Paddle-Lite +# 如果使用编译方式,建议使用develop分支编译预测库 +git checkout develop +./lite/tools/build_android.sh --arch=armv8 --with_cv=ON --with_extra=ON +``` + +**注意**:编译Paddle-Lite获得预测库时,需要打开`--with_cv=ON --with_extra=ON`两个选项,`--arch`表示`arm`版本,这里指定为armv8,更多编译命令介绍请参考[链接](https://paddle-lite.readthedocs.io/zh/latest/user_guides/Compile/Android.html#id2)。 + +直接下载预测库并解压后,可以得到`inference_lite_lib.android.armv8/`文件夹,通过编译Paddle-Lite得到的预测库位于`Paddle-Lite/build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/`文件夹下。 +预测库的文件目录如下: + +``` +inference_lite_lib.android.armv8/ +|-- cxx C++ 预测库和头文件 +| |-- include C++ 头文件 +| | |-- paddle_api.h +| | |-- paddle_image_preprocess.h +| | |-- paddle_lite_factory_helper.h +| | |-- paddle_place.h +| | |-- paddle_use_kernels.h +| | |-- paddle_use_ops.h +| | `-- paddle_use_passes.h +| `-- lib C++预测库 +| |-- libpaddle_api_light_bundled.a C++静态库 +| `-- libpaddle_light_api_shared.so C++动态库 +|-- java Java预测库 +| |-- jar +| | `-- PaddlePredictor.jar +| |-- so +| | `-- libpaddle_lite_jni.so +| `-- src +|-- demo C++和Java示例代码 +| |-- cxx C++ 预测库demo +| `-- java Java 预测库demo +``` + +## 2 开始运行 + +### 2.1 模型优化 + +Paddle-Lite 提供了多种策略来自动优化原始的模型,其中包括量化、子图融合、混合调度、Kernel优选等方法,使用Paddle-Lite的`opt`工具可以自动对inference模型进行优化,目前支持两种优化方式,优化后的模型更轻量,模型运行速度更快。 + +**注意**:如果已经准备好了 `.nb` 结尾的模型文件,可以跳过此步骤。 + +#### 2.1.1 [建议]pip安装paddlelite并进行转换 + +Python下安装 `paddlelite`,目前最高支持`Python3.7`。 +**注意**:`paddlelite`whl包版本必须和预测库版本对应。 + +```shell +pip install paddlelite==2.8 +``` + +之后使用`paddle_lite_opt`工具可以进行inference模型的转换。`paddle_lite_opt`的部分参数如下 + +|选项|说明| +|-|-| +|--model_dir|待优化的PaddlePaddle模型(非combined形式)的路径| +|--model_file|待优化的PaddlePaddle模型(combined形式)的网络结构文件路径| +|--param_file|待优化的PaddlePaddle模型(combined形式)的权重文件路径| +|--optimize_out_type|输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化实现。若您需要在mobile端执行模型预测,请将此选项设置为naive_buffer。默认为protobuf| +|--optimize_out|优化模型的输出路径| +|--valid_targets|指定模型可执行的backend,默认为arm。目前可支持x86、arm、opencl、npu、xpu,可以同时指定多个backend(以空格分隔),Model Optimize Tool将会自动选择最佳方式。如果需要支持华为NPU(Kirin 810/990 Soc搭载的达芬奇架构NPU),应当设置为npu, arm| +|--record_tailoring_info|当使用 根据模型裁剪库文件 功能时,则设置该选项为true,以记录优化后模型含有的kernel和OP信息,默认为false| + +`--model_file`表示inference模型的model文件地址,`--param_file`表示inference模型的param文件地址;`optimize_out`用于指定输出文件的名称(不需要添加`.nb`的后缀)。直接在命令行中运行`paddle_lite_opt`,也可以查看所有参数及其说明。 + + +#### 2.1.2 源码编译Paddle-Lite生成opt工具 + +模型优化需要Paddle-Lite的`opt`可执行文件,可以通过编译Paddle-Lite源码获得,编译步骤如下: +```shell +# 如果准备环境时已经clone了Paddle-Lite,则不用重新clone Paddle-Lite +git clone https://github.com/PaddlePaddle/Paddle-Lite.git +cd Paddle-Lite +git checkout develop +# 启动编译 +./lite/tools/build.sh build_optimize_tool +``` + +编译完成后,`opt`文件位于`build.opt/lite/api/`下,可通过如下方式查看`opt`的运行选项和使用方式; +```shell +cd build.opt/lite/api/ +./opt +``` + +`opt`的使用方式与参数与上面的`paddle_lite_opt`完全一致。 + + + +#### 2.1.3 转换示例 + +下面以PaddleClas的 `MobileNetV3_large_x1_0` 模型为例,介绍使用`paddle_lite_opt`完成预训练模型到inference模型,再到Paddle-Lite优化模型的转换。 + +```shell +# 进入PaddleClas根目录 +cd PaddleClas_root_path + +# 下载并解压inference模型 +wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/inference/MobileNetV3_large_x1_0_infer.tar +tar -xf MobileNetV3_large_x1_0_infer.tar + +# 将inference模型转化为Paddle-Lite优化模型 +paddle_lite_opt --model_file=./MobileNetV3_large_x1_0_infer/inference.pdmodel --param_file=./MobileNetV3_large_x1_0_infer/inference.pdiparams --optimize_out=./MobileNetV3_large_x1_0 +``` + +最终在当前文件夹下生成`MobileNetV3_large_x1_0.nb`的文件。 + +**注意**:`--optimize_out` 参数为优化后模型的保存路径,无需加后缀`.nb`;`--model_file` 参数为模型结构信息文件的路径,`--param_file` 参数为模型权重信息文件的路径,请注意文件名。 + + +### 2.2 与手机联调 + +首先需要进行一些准备工作。 +1. 准备一台arm8的安卓手机,如果编译的预测库和opt文件是armv7,则需要arm7的手机,并修改Makefile中`ARM_ABI = arm7`。 +2. 电脑上安装ADB工具,用于调试。 ADB安装方式如下: + + 3.1. MAC电脑安装ADB: + + ```shell + brew cask install android-platform-tools + ``` + 3.2. Linux安装ADB + ```shell + sudo apt update + sudo apt install -y wget adb + ``` + 3.3. Window安装ADB + + win上安装需要去谷歌的安卓平台下载ADB软件包进行安装:[链接](https://developer.android.com/studio) + +4. 手机连接电脑后,开启手机`USB调试`选项,选择`文件传输`模式,在电脑终端中输入: + +```shell +adb devices +``` +如果有device输出,则表示安装成功,如下所示: +``` +List of devices attached +744be294 device +``` + +5. 准备优化后的模型、预测库文件、测试图像和类别映射文件。 + +```shell +cd PaddleClas_root_path +cd deploy/lite/ + +# 运行prepare.sh +# prepare.sh 会将预测库文件、测试图像和使用的字典文件放置在预测库中的demo/cxx/clas文件夹下 +sh prepare.sh /{lite prediction library path}/inference_lite_lib.android.armv8 + +# 进入lite demo的工作目录 +cd /{lite prediction library path}/inference_lite_lib.android.armv8/ +cd demo/cxx/clas/ + +# 将C++预测动态库so文件复制到debug文件夹中 +cp ../../../cxx/lib/libpaddle_light_api_shared.so ./debug/ +``` + +`prepare.sh` 以 `PaddleClas/deploy/lite/imgs/tabby_cat.jpg` 作为测试图像,将测试图像复制到`demo/cxx/clas/debug/` 文件夹下。 +将 `paddle_lite_opt` 工具优化后的模型文件放置到 `/{lite prediction library path}/inference_lite_lib.android.armv8/demo/cxx/clas/debug/` 文件夹下。本例中,使用[2.1.3](#2.1.3)生成的 `MobileNetV3_large_x1_0.nb` 模型文件。 + +执行完成后,clas文件夹下将有如下文件格式: + +``` +demo/cxx/clas/ +|-- debug/ +| |--MobileNetV3_large_x1_0.nb 优化后的分类器模型文件 +| |--tabby_cat.jpg 待测试图像 +| |--imagenet1k_label_list.txt 类别映射文件 +| |--libpaddle_light_api_shared.so C++预测库文件 +| |--config.txt 分类预测超参数配置 +|-- config.txt 分类预测超参数配置 +|-- image_classfication.cpp 图像分类代码文件 +|-- Makefile 编译文件 +``` + +#### 注意: +* 上述文件中,`imagenet1k_label_list.txt` 是ImageNet1k数据集的类别映射文件,如果使用自定义的类别,需要更换该类别映射文件。 + +* `config.txt` 包含了分类器的超参数,如下: + +```shell +clas_model_file ./MobileNetV3_large_x1_0.nb # 模型文件地址 +label_path ./imagenet1k_label_list.txt # 类别映射文本文件 +resize_short_size 256 # resize之后的短边边长 +crop_size 224 # 裁剪后用于预测的边长 +visualize 0 # 是否进行可视化,如果选择的话,会在当前文件夹下生成名为clas_result.png的图像文件。 +``` + +5. 启动调试,上述步骤完成后就可以使用ADB将文件夹 `debug/` push到手机上运行,步骤如下: + +```shell +# 执行编译,得到可执行文件clas_system +make -j + +# 将编译得到的可执行文件移动到debug文件夹中 +mv clas_system ./debug/ + +# 将上述debug文件夹push到手机上 +adb push debug /data/local/tmp/ + +adb shell +cd /data/local/tmp/debug +export LD_LIBRARY_PATH=/data/local/tmp/debug:$LD_LIBRARY_PATH + +# clas_system可执行文件的使用方式为: +# ./clas_system 配置文件路径 测试图像路径 +./clas_system ./config.txt ./tabby_cat.jpg +``` + +如果对代码做了修改,则需要重新编译并push到手机上。 + +运行效果如下: + +
+ +
+ + +## FAQ +Q1:如果想更换模型怎么办,需要重新按照流程走一遍吗? +A1:如果已经走通了上述步骤,更换模型只需要替换 `.nb` 模型文件即可,同时要注意修改下配置文件中的 `.nb` 文件路径以及类别映射文件(如有必要)。 + +Q2:换一个图测试怎么做? +A2:替换 debug 下的测试图像为你想要测试的图像,使用 ADB 再次 push 到手机上即可。 diff --git a/src/PaddleClas/deploy/lite/readme_en.md b/src/PaddleClas/deploy/lite/readme_en.md new file mode 100644 index 0000000..1027c78 --- /dev/null +++ b/src/PaddleClas/deploy/lite/readme_en.md @@ -0,0 +1,257 @@ + +# Tutorial of PaddleClas Mobile Deployment + +This tutorial will introduce how to use [Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite) to deploy PaddleClas models on mobile phones. + +Paddle-Lite is a lightweight inference engine for PaddlePaddle. It provides efficient inference capabilities for mobile phones and IoTs, and extensively integrates cross-platform hardware to provide lightweight deployment solutions for mobile-side deployment issues. + +If you only want to test speed, please refer to [The tutorial of Paddle-Lite mobile-side benchmark test](../../docs/zh_CN/extension/paddle_mobile_inference.md). + +## 1. Preparation + +- Computer (for compiling Paddle-Lite) +- Mobile phone (arm7 or arm8) + +## 2. Build Paddle-Lite library + +The cross-compilation environment is used to compile the C++ demos of Paddle-Lite and PaddleClas. + +For the detailed compilation directions of different development environments, please refer to the corresponding documents. + +1. [Docker](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#docker) +2. [Linux](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#linux) +3. [macOS](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#mac-os) + +## 3. Download inference library for Android or iOS + +|Platform|Inference Library Download Link| +|-|-| +|Android|[arm7](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/Android/gcc/inference_lite_lib.android.armv7.gcc.c++_static.with_extra.with_cv.tar.gz) / [arm8](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/Android/gcc/inference_lite_lib.android.armv8.gcc.c++_static.with_extra.with_cv.tar.gz)| +|iOS|[arm7](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/iOS/inference_lite_lib.ios.armv7.with_cv.with_extra.tiny_publish.tar.gz) / [arm8](https://paddlelite-data.bj.bcebos.com/Release/2.8-rc/iOS/inference_lite_lib.ios.armv8.with_cv.with_extra.tiny_publish.tar.gz)| + +**NOTE**: + +1. If you download the inference library from [Paddle-Lite official document](https://paddle-lite.readthedocs.io/zh/latest/quick_start/release_lib.html#android-toolchain-gcc), please choose `with_extra=ON` , `with_cv=ON` . + +2. It is recommended to build inference library using [Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite) develop branch if you want to deploy the [quantitative](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/slim/quantization/README_en.md) model to mobile phones. Please refer to the [link](https://paddle-lite.readthedocs.io/zh/latest/user_guides/Compile/Android.html#id2) for more detailed information about compiling. + + +The structure of the inference library is as follows: + +``` +inference_lite_lib.android.armv8/ +|-- cxx C++ inference library and header files +| |-- include C++ header files +| | |-- paddle_api.h +| | |-- paddle_image_preprocess.h +| | |-- paddle_lite_factory_helper.h +| | |-- paddle_place.h +| | |-- paddle_use_kernels.h +| | |-- paddle_use_ops.h +| | `-- paddle_use_passes.h +| `-- lib C++ inference library +| |-- libpaddle_api_light_bundled.a C++ static library +| `-- libpaddle_light_api_shared.so C++ dynamic library +|-- java Java inference library +| |-- jar +| | `-- PaddlePredictor.jar +| |-- so +| | `-- libpaddle_lite_jni.so +| `-- src +|-- demo C++ and java demos +| |-- cxx C++ demos +| `-- java Java demos +``` + + + +## 4. Inference Model Optimization + +Paddle-Lite provides a variety of strategies to automatically optimize the original training model, including quantization, sub-graph fusion, hybrid scheduling, Kernel optimization and so on. In order to make the optimization process more convenient and easy to use, Paddle-Lite provides `opt` tool to automatically complete the optimization steps and output a lightweight, optimal executable model. + +**NOTE**: If you have already got the `.nb` file, you can skip this step. + + + +### 4.1 [RECOMMEND] Use `pip` to install Paddle-Lite and optimize model + +* Use pip to install Paddle-Lite. The following command uses `pip3.7` . + +```shell +pip install paddlelite==2.8 +``` +**Note**:The version of `paddlelite`'s wheel must match that of inference lib. + +* Use `paddle_lite_opt` to optimize inference model, the parameters of `paddle_lite_opt` are as follows: + +| Parameters | Explanation | +| ----------------------- | ------------------------------------------------------------ | +| --model_dir | Path to the PaddlePaddle model (no-combined) file to be optimized. | +| --model_file | Path to the net structure file of PaddlePaddle model (combined) to be optimized. | +| --param_file | Path to the net weight files of PaddlePaddle model (combined) to be optimized. | +| --optimize_out_type | Type of output model, `protobuf` by default. Supports `protobuf` and `naive_buffer` . Compared with `protobuf`, you can use`naive_buffer` to get a more lightweight serialization/deserialization model. If you need to predict on the mobile-side, please set it to `naive_buffer`. | +| --optimize_out | Path to output model, not needed to add `.nb` suffix. | +| --valid_targets | The executable backend of the model, `arm` by default. Supports one or some of `x86` , `arm` , `opencl` , `npu` , `xpu`. If set more than one, please separate the options by space, and the `opt` tool will choose the best way automatically. If need to support Huawei NPU (DaVinci core carried by Kirin 810/990 SoC), please set it to `npu arm` . | +| --record_tailoring_info | Whether to enable `Cut the Library Files According To the Model` , `false` by default. If need to record kernel and OP infos of optimized model, please set it to `true`. | + +In addition, you can run `paddle_lite_opt` to get more detailed information about how to use. + +### 4.2 Compile Paddle-Lite to generate `opt` tool + +Optimizing model requires Paddle-Lite's `opt` executable file, which can be obtained by compiling the Paddle-Lite. The steps are as follows: + +```shell +# get the Paddle-Lite source code, if have gotten , please skip +git clone https://github.com/PaddlePaddle/Paddle-Lite.git +cd Paddle-Lite +git checkout develop +# compile +./lite/tools/build.sh build_optimize_tool +``` + +After the compilation is complete, the `opt` file is located under `build.opt/lite/api/`. + +`opt` tool is used in the same way as `paddle_lite_opt` , please refer to [4.1](#4.1). + + + +### 4.3 Demo of get the optimized model + +Taking the `MobileNetV3_large_x1_0` model of PaddleClas as an example, we will introduce how to use `paddle_lite_opt` to complete the conversion from the pre-trained model to the inference model, and then to the Paddle-Lite optimized model. + +```shell +# enter PaddleClas root directory +cd PaddleClas_root_path + +# download and uncompress the inference model +wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/inference/MobileNetV3_large_x1_0_infer.tar +tar -xf MobileNetV3_large_x1_0_infer.tar + + +# convert inference model to Paddle-Lite optimized model +paddle_lite_opt --model_file=./MobileNetV3_large_x1_0_infer/inference.pdmodel --param_file=./MobileNetV3_large_x1_0_infer/inference.pdiparams --optimize_out=./MobileNetV3_large_x1_0 +``` + +When the above code command is completed, there will be ``MobileNetV3_large_x1_0.nb` in the current directory, which is the converted model file. + +## 5. Run optimized model on Phone + +1. Prepare an Android phone with `arm8`. If the compiled inference library and `opt` file are `armv7`, you need an `arm7` phone and modify `ARM_ABI = arm7` in the Makefile. + +2. Install the ADB tool on the computer. + + * Install ADB for MAC + + Recommend use homebrew to install. + + ```shell + brew cask install android-platform-tools + ``` + * Install ADB for Linux + + ```shell + sudo apt update + sudo apt install -y wget adb + ``` + * Install ADB for windows + If install ADB fo Windows, you need to download from Google's Android platform: [Download Link](https://developer.android.com/studio). + + First, make sure the phone is connected to the computer, turn on the `USB debugging` option of the phone, and select the `file transfer` mode. Verify whether ADB is installed successfully as follows: + + ```shell + $ adb devices + + List of devices attached + 744be294 device + ``` + + If there is `device` output like the above, it means the installation was successful. + +4. Prepare optimized model, inference library files, test image and dictionary file used. + +```shell +cd PaddleClas_root_path +cd deploy/lite/ + +# prepare.sh will put the inference library files, the test image and the dictionary files in demo/cxx/clas +sh prepare.sh /{lite inference library path}/inference_lite_lib.android.armv8 + +# enter the working directory of lite demo +cd /{lite inference library path}/inference_lite_lib.android.armv8/ +cd demo/cxx/clas/ + +# copy the C++ inference dynamic library file (ie. .so) to the debug folder +cp ../../../cxx/lib/libpaddle_light_api_shared.so ./debug/ +``` + +The `prepare.sh` take `PaddleClas/deploy/lite/imgs/tabby_cat.jpg` as the test image, and copy it to the `demo/cxx/clas/debug/` directory. + +You should put the model that optimized by `paddle_lite_opt` under the `demo/cxx/clas/debug/` directory. In this example, use `MobileNetV3_large_x1_0.nb` model file generated in [2.1.3](#4.3). + +The structure of the clas demo is as follows after the above command is completed: + +``` +demo/cxx/clas/ +|-- debug/ +| |--MobileNetV3_large_x1_0.nb class model +| |--tabby_cat.jpg test image +| |--imagenet1k_label_list.txt dictionary file +| |--libpaddle_light_api_shared.so C++ .so file +| |--config.txt config file +|-- config.txt config file +|-- image_classfication.cpp source code +|-- Makefile compile file +``` + +**NOTE**: + +* `Imagenet1k_label_list.txt` is the category mapping file of the `ImageNet1k` dataset. If use a custom category, you need to replace the category mapping file. +* `config.txt` contains the hyperparameters, as follows: + +```shell +clas_model_file ./MobileNetV3_large_x1_0.nb # path of model file +label_path ./imagenet1k_label_list.txt # path of category mapping file +resize_short_size 256 # the short side length after resize +crop_size 224 # side length used for inference after cropping + +visualize 0 # whether to visualize. If you set it to 1, an image file named 'clas_result.png' will be generated in the current directory. +``` + +5. Run Model on Phone + +```shell +# run compile to get the executable file 'clas_system' +make -j + +# move the compiled executable file to the debug folder +mv clas_system ./debug/ + +# push the debug folder to Phone +adb push debug /data/local/tmp/ + +adb shell +cd /data/local/tmp/debug +export LD_LIBRARY_PATH=/data/local/tmp/debug:$LD_LIBRARY_PATH + +# the usage of clas_system is as follows: +# ./clas_system "path of config file" "path of test image" +./clas_system ./config.txt ./tabby_cat.jpg +``` + +**NOTE**: If you make changes to the code, you need to recompile and repush the `debug ` folder to the phone. + +The result is as follows: + +
+ +
+ + + +## FAQ + +Q1:If I want to change the model, do I need to go through the all process again? +A1:If you have completed the above steps, you only need to replace the `.nb` model file after replacing the model. At the same time, you may need to modify the path of `.nb` file in the config file and change the category mapping file to be compatible the model . + +Q2:How to change the test picture? +A2:Replace the test image under debug folder with the image you want to test,and then repush to the Phone again. diff --git a/src/PaddleClas/deploy/lite_shitu/Makefile b/src/PaddleClas/deploy/lite_shitu/Makefile new file mode 100644 index 0000000..64ee6ae --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/Makefile @@ -0,0 +1,90 @@ +ARM_ABI = arm8#[arm7/arm8] +export ARM_ABI + +ifeq ($(ARM_ABI), arm8) + ARM_PLAT=arm64-v8a +else + ARM_PLAT=armeabi-v7a +endif +${info ARM_ABI: ${ARM_ABI}} +${info ARM_PLAT: ${ARM_PLAT}; option[arm7/arm8]} + +include ../Makefile.def + +LITE_ROOT=../../../ +${info LITE_ROOT: $(abspath ${LITE_ROOT})} + +THIRD_PARTY_DIR=third_party +${info THIRD_PARTY_DIR: $(abspath ${THIRD_PARTY_DIR})} + + +OPENCV_VERSION=opencv4.1.0 +OPENCV_LIBS = ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/libs/libopencv_imgcodecs.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/libs/libopencv_imgproc.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/libs/libopencv_core.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/libtegra_hal.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/liblibjpeg-turbo.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/liblibwebp.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/liblibpng.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/liblibjasper.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/liblibtiff.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/libIlmImf.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/libtbb.a \ + ${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/3rdparty/libs/libcpufeatures.a + + +LITE_LIBS = -L${LITE_ROOT}/cxx/lib/ -lpaddle_light_api_shared +############################################################### +# How to use one of static libaray: # +# `libpaddle_api_full_bundled.a` # +# `libpaddle_api_light_bundled.a` # +############################################################### +# Note: default use lite's shared library. # +############################################################### +# 1. Comment above line using `libpaddle_light_api_shared.so` +# 2. Undo comment below line using `libpaddle_api_light_bundled.a` +# LITE_LIBS = ${LITE_ROOT}/cxx/lib/libpaddle_api_light_bundled.a + +CXX_LIBS = $(LITE_LIBS) ${OPENCV_LIBS} $(SYSTEM_LIBS) + +LOCAL_DIRSRCS=$(wildcard src/*.cc) +LOCAL_SRCS=$(notdir $(LOCAL_DIRSRCS)) +LOCAL_OBJS=$(patsubst %.cpp, %.o, $(patsubst %.cc, %.o, $(LOCAL_SRCS))) + +JSON_OBJS = json_reader.o json_value.o json_writer.o + +pp_shitu: $(LOCAL_OBJS) $(JSON_OBJS) fetch_opencv + $(CC) $(SYSROOT_LINK) $(CXXFLAGS_LINK) $(LOCAL_OBJS) $(JSON_OBJS) -o pp_shitu $(CXX_LIBS) $(LDFLAGS) + +fetch_opencv: + @ test -d ${THIRD_PARTY_DIR} || mkdir ${THIRD_PARTY_DIR} + @ test -e ${THIRD_PARTY_DIR}/${OPENCV_VERSION}.tar.gz || \ + (echo "fetch opencv libs" && \ + wget -P ${THIRD_PARTY_DIR} https://paddle-inference-dist.bj.bcebos.com/${OPENCV_VERSION}.tar.gz) + @ test -d ${THIRD_PARTY_DIR}/${OPENCV_VERSION} || \ + tar -zxf ${THIRD_PARTY_DIR}/${OPENCV_VERSION}.tar.gz -C ${THIRD_PARTY_DIR} + +fetch_json_code: + @ test -d ${THIRD_PARTY_DIR} || mkdir ${THIRD_PARTY_DIR} + @ test -e ${THIRD_PARTY_DIR}/jsoncpp_code.tar.gz || \ + (echo "fetch jsoncpp_code.tar.gz" && \ + wget -P ${THIRD_PARTY_DIR} https://bj.bcebos.com/v1/paddledet/deploy/jsoncpp_code.tar.gz ) + @ test -d ${THIRD_PARTY_DIR}/jsoncpp_code || \ + tar -zxf ${THIRD_PARTY_DIR}/jsoncpp_code.tar.gz -C ${THIRD_PARTY_DIR} + +LOCAL_INCLUDES = -I./ -Iinclude +OPENCV_INCLUDE = -I${THIRD_PARTY_DIR}/${OPENCV_VERSION}/${ARM_PLAT}/include +JSON_INCLUDE = -I${THIRD_PARTY_DIR}/jsoncpp_code/include +CXX_INCLUDES = ${LOCAL_INCLUDES} ${INCLUDES} ${OPENCV_INCLUDE} ${JSON_INCLUDE} -I$(LITE_ROOT)/cxx/include + + +$(LOCAL_OBJS): %.o: src/%.cc fetch_opencv fetch_json_code + $(CC) $(SYSROOT_COMPLILE) $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -c $< -o $@ + +$(JSON_OBJS): %.o: ${THIRD_PARTY_DIR}/jsoncpp_code/%.cpp fetch_json_code + $(CC) $(SYSROOT_COMPLILE) $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -c $< -o $@ + +.PHONY: clean fetch_opencv fetch_json_code +clean: + rm -rf $(LOCAL_OBJS) $(JSON_OBJS) + rm -f pp_shitu diff --git a/src/PaddleClas/deploy/lite_shitu/README.md b/src/PaddleClas/deploy/lite_shitu/README.md new file mode 100644 index 0000000..8f5462f --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/README.md @@ -0,0 +1,218 @@ +# PP-ShiTu在Paddle-Lite端侧部署 + +本教程将介绍基于[Paddle Lite](https://github.com/PaddlePaddle/Paddle-Lite) 在移动端部署PaddleClas PP-ShiTu模型的详细步骤。 + +Paddle Lite是飞桨轻量化推理引擎,为手机、IOT端提供高效推理能力,并广泛整合跨平台硬件,为端侧部署及应用落地问题提供轻量化的部署方案。 + +## 1. 准备环境 + +### 运行准备 +- 电脑(编译Paddle Lite) +- 安卓手机(armv7或armv8) + +### 1.1 准备交叉编译环境 +交叉编译环境用于编译 Paddle Lite 和 PaddleClas 的PP-ShiTu Lite demo。 +支持多种开发环境,不同开发环境的编译流程请参考对应文档,请确保安装完成Java jdk、Android NDK(R17以上)。 + +1. [Docker](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#docker) +2. [Linux](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#linux) +3. [MAC OS](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#mac-os) + +```shell +# 配置完成交叉编译环境后,更新环境变量 +# for docker、Linux +source ~/.bashrc +# for Mac OS +source ~/.bash_profile +``` + +### 1.2 准备预测库 + +预测库有两种获取方式: +1. [**建议**]直接下载,预测库下载链接如下: + |平台| 架构 | 预测库下载链接| + |-|-|-| + |Android| arm7 | [inference_lite_lib](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10-rc/inference_lite_lib.android.armv7.clang.c++_static.with_extra.with_cv.tar.gz) | + | Android | arm8 | [inference_lite_lib](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10-rc/inference_lite_lib.android.armv8.clang.c++_static.with_extra.with_cv.tar.gz) | + | Android | arm8(FP16) | [inference_lite_lib](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10-rc/inference_lite_lib.android.armv8_clang_c++_static_with_extra_with_cv_with_fp16.tiny_publish_427e46.zip) | + +**注意**:1. 如果是从 Paddle-Lite [官方文档](https://paddle-lite.readthedocs.io/zh/latest/quick_start/release_lib.html#android-toolchain-gcc)下载的预测库,注意选择`with_extra=ON,with_cv=ON`的下载链接。2. 目前只提供Android端demo,IOS端demo可以参考[Paddle-Lite IOS demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-ios-demo) + + +2. 编译Paddle-Lite得到预测库,Paddle-Lite的编译方式如下: +```shell +git clone https://github.com/PaddlePaddle/Paddle-Lite.git +cd Paddle-Lite +# 如果使用编译方式,建议使用develop分支编译预测库 +git checkout develop +# FP32 +./lite/tools/build_android.sh --arch=armv8 --toolchain=clang --with_cv=ON --with_extra=ON +# FP16 +./lite/tools/build_android.sh --arch=armv8 --toolchain=clang --with_cv=ON --with_extra=ON --with_arm82_fp16=ON +``` + +**注意**:编译Paddle-Lite获得预测库时,需要打开`--with_cv=ON --with_extra=ON`两个选项,`--arch`表示`arm`版本,这里指定为armv8,更多编译命令介绍请参考[链接](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_andriod.html#id2)。 + +直接下载预测库并解压后,可以得到`inference_lite_lib.android.armv8.clang.c++_static.with_extra.with_cv/`文件夹,通过编译Paddle-Lite得到的预测库位于`Paddle-Lite/build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/`文件夹下。 +预测库的文件目录如下: + +``` +inference_lite_lib.android.armv8/ +|-- cxx C++ 预测库和头文件 +| |-- include C++ 头文件 +| | |-- paddle_api.h +| | |-- paddle_image_preprocess.h +| | |-- paddle_lite_factory_helper.h +| | |-- paddle_place.h +| | |-- paddle_use_kernels.h +| | |-- paddle_use_ops.h +| | `-- paddle_use_passes.h +| `-- lib C++预测库 +| |-- libpaddle_api_light_bundled.a C++静态库 +| `-- libpaddle_light_api_shared.so C++动态库 +|-- java Java预测库 +| |-- jar +| | `-- PaddlePredictor.jar +| |-- so +| | `-- libpaddle_lite_jni.so +| `-- src +|-- demo C++和Java示例代码 +| |-- cxx C++ 预测库demo +| `-- java Java 预测库demo +``` + +## 2 开始运行 + +### 2.1 模型准备 + + +#### 2.1.1 模型准备 + +```shell +# 进入lite_ppshitu目录 +cd $PaddleClas/deploy/lite_shitu +wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/lite/ppshitu_lite_models_v1.0.tar +tar -xf ppshitu_lite_models_v1.0.tar +rm -f ppshitu_lite_models_v1.0.tar +``` + +#### 2.1.2将yaml文件转换成json文件 + +```shell +# 如果测试单张图像 +python generate_json_config.py --det_model_path ppshitu_lite_models_v1.0/mainbody_PPLCNet_x2_5_640_quant_v1.0_lite.nb --rec_model_path ppshitu_lite_models_v1.0/general_PPLCNet_x2_5_quant_v1.0_lite.nb --rec_label_path ppshitu_lite_models_v1.0/label.txt --img_path images/demo.jpg +# or +# 如果测试多张图像 +python generate_json_config.py --det_model_path ppshitu_lite_models_v1.0/mainbody_PPLCNet_x2_5_640_quant_v1.0_lite.nb --rec_model_path ppshitu_lite_models_v1.0/general_PPLCNet_x2_5_quant_v1.0_lite.nb --rec_label_path ppshitu_lite_models_v1.0/label.txt --img_dir images + +# 执行完成后,会在lit_shitu下生成shitu_config.json配置文件 + +``` + +### 2.2 与手机联调 + +首先需要进行一些准备工作。 +1. 准备一台arm8的安卓手机,如果编译的预测库是armv7,则需要arm7的手机,并修改Makefile中`ARM_ABI=arm7`。 +2. 电脑上安装ADB工具,用于调试。 ADB安装方式如下: + + 2.1. MAC电脑安装ADB: + + ```shell + brew cask install android-platform-tools + ``` + 2.2. Linux安装ADB + ```shell + sudo apt update + sudo apt install -y wget adb + ``` + 2.3. Window安装ADB + + win上安装需要去谷歌的安卓平台下载ADB软件包进行安装:[链接](https://developer.android.com/studio) + +3. 手机连接电脑后,开启手机`USB调试`选项,选择`文件传输`模式,在电脑终端中输入: + +```shell +adb devices +``` +如果有device输出,则表示安装成功,如下所示: +``` +List of devices attached +744be294 device +``` + +4. 编译lite部署代码生成移动端可执行文件 + +```shell +cd $PaddleClas/deploy/lite_shitu +# ${lite prediction library path}下载的Paddle-Lite库路径 +inference_lite_path=${lite prediction library path}/inference_lite_lib.android.armv8.gcc.c++_static.with_extra.with_cv/ +mkdir $inference_lite_path/demo/cxx/ppshitu_lite + +cp -r * $inference_lite_path/demo/cxx/ppshitu_lite +cd $inference_lite_path/demo/cxx/ppshitu_lite + +# 执行编译,等待完成后得到可执行文件main +make ARM_ABI=arm8 +#如果是arm7,则执行 make ARM_ABI = arm7 (或者在Makefile中修改该项) +``` + +5. 准备优化后的模型、预测库文件、测试图像。 + +```shell +mkdir deploy +mv ppshitu_lite_models_v1.0 deploy/ +mv images deploy/ +mv shitu_config.json deploy/ +cp pp_shitu deploy/ + +# 将C++预测动态库so文件复制到deploy文件夹中 +cp ../../../cxx/lib/libpaddle_light_api_shared.so deploy/ +``` + +执行完成后,deploy文件夹下将有如下文件格式: + +```shell +deploy/ +|-- ppshitu_lite_models_v1.0/ +| |--mainbody_PPLCNet_x2_5_640_v1.0_lite.nb 优化后的主体检测模型文件 +| |--general_PPLCNet_x2_5_quant_v1.0_lite.nb 优化后的识别模型文件 +| |--label.txt 识别模型的label文件 +|-- images/ +| |--demo.jpg 图片文件 +| ... 图片文件 +|-- pp_shitu 生成的移动端执行文件 +|-- shitu_config.json 执行时参数配置文件 +|-- libpaddle_light_api_shared.so Paddle-Lite库文件 +``` + +**注意:** +* `shitu_config.json` 包含了目标检测的超参数,请按需进行修改 + +6. 启动调试,上述步骤完成后就可以使用ADB将文件夹 `deploy/` push到手机上运行,步骤如下: + +```shell +# 将上述deploy文件夹push到手机上 +adb push deploy /data/local/tmp/ + +adb shell +cd /data/local/tmp/deploy +export LD_LIBRARY_PATH=/data/local/tmp/deploy:$LD_LIBRARY_PATH + +# 修改权限为可执行 +chmod 777 pp_shitu +# 执行程序 +./pp_shitu shitu_config.json +``` + +如果对代码做了修改,则需要重新编译并push到手机上。 + +运行效果如下: + +![](../../docs/images/ppshitu_lite_demo.png) + +## FAQ +Q1:如果想更换模型怎么办,需要重新按照流程走一遍吗? +A1:如果已经走通了上述步骤,更换模型只需要替换 `.nb` 模型文件即可,同时要注意修改下配置文件中的 `.nb` 文件路径以及类别映射文件(如有必要)。 + +Q2:换一个图测试怎么做? +A2:替换 deploy 下的测试图像为你想要测试的图像,并重新生成json配置文件(或者直接修改图像路径),使用 ADB 再次 push 到手机上即可。 diff --git a/src/PaddleClas/deploy/lite_shitu/generate_json_config.py b/src/PaddleClas/deploy/lite_shitu/generate_json_config.py new file mode 100644 index 0000000..1525cda --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/generate_json_config.py @@ -0,0 +1,138 @@ +import argparse +import json +import os + +import yaml + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--yaml_path', type=str, default='../configs/inference_drink.yaml') + parser.add_argument( + '--img_dir', + type=str, + default=None, + help='The dir path for inference images') + parser.add_argument( + '--img_path', + type=str, + default=None, + help='The dir path for inference images') + parser.add_argument( + '--det_model_path', + type=str, + default='./det.nb', + help="The model path for mainbody detection") + parser.add_argument( + '--rec_model_path', + type=str, + default='./rec.nb', + help="The rec model path") + parser.add_argument( + '--rec_label_path', + type=str, + default='./label.txt', + help='The rec model label') + parser.add_argument( + '--arch', + type=str, + default='PicoDet', + help='The model structure for detection model') + parser.add_argument( + '--fpn-stride', + type=list, + default=[8, 16, 32, 64], + help="The fpn strid for detection model") + parser.add_argument( + '--keep_top_k', + type=int, + default=100, + help='The params for nms(postprocess for detection)') + parser.add_argument( + '--nms-name', + type=str, + default='MultiClassNMS', + help='The nms name for postprocess of detection model') + parser.add_argument( + '--nms_threshold', + type=float, + default=0.5, + help='The nms nms_threshold for detection postprocess') + parser.add_argument( + '--nms_top_k', + type=int, + default=1000, + help='The nms_top_k in postprocess of detection model') + parser.add_argument( + '--score_threshold', + type=float, + default=0.3, + help='The score_threshold for postprocess of detection') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + config_yaml = yaml.safe_load(open(args.yaml_path)) + config_json = {} + config_json["Global"] = {} + config_json["Global"][ + "infer_imgs"] = args.img_path if args.img_path else config_yaml[ + "Global"]["infer_imgs"] + if args.img_dir is not None: + config_json["Global"]["infer_imgs_dir"] = args.img_dir + config_json["Global"]["infer_imgs"] = None + else: + config_json["Global"][ + "infer_imgs"] = args.img_path if args.img_path else config_yaml[ + "Global"]["infer_imgs"] + config_json["Global"]["batch_size"] = config_yaml["Global"]["batch_size"] + config_json["Global"]["cpu_num_threads"] = min( + config_yaml["Global"]["cpu_num_threads"], 4) + config_json["Global"]["image_shape"] = config_yaml["Global"]["image_shape"] + config_json["Global"]["det_model_path"] = args.det_model_path + config_json["Global"]["rec_model_path"] = args.rec_model_path + config_json["Global"]["rec_label_path"] = args.rec_label_path + config_json["Global"]["label_list"] = config_yaml["Global"]["labe_list"] + config_json["Global"]["rec_nms_thresold"] = config_yaml["Global"][ + "rec_nms_thresold"] + config_json["Global"]["max_det_results"] = config_yaml["Global"][ + "max_det_results"] + config_json["Global"]["det_fpn_stride"] = args.fpn_stride + config_json["Global"]["det_arch"] = args.arch + config_json["Global"]["return_k"] = config_yaml["IndexProcess"]["return_k"] + + # config_json["DetPreProcess"] = config_yaml["DetPreProcess"] + config_json["DetPreProcess"] = {} + config_json["DetPreProcess"]["transform_ops"] = [] + for x in config_yaml["DetPreProcess"]["transform_ops"]: + k = list(x.keys())[0] + y = x[k] + y['type'] = k + config_json["DetPreProcess"]["transform_ops"].append(y) + + config_json["DetPostProcess"] = { + "keep_top_k": args.keep_top_k, + "name": args.nms_name, + "nms_threshold": args.nms_threshold, + "nms_top_k": args.nms_top_k, + "score_threshold": args.score_threshold + } + # config_json["RecPreProcess"] = config_yaml["RecPreProcess"] + config_json["RecPreProcess"] = {} + config_json["RecPreProcess"]["transform_ops"] = [] + for x in config_yaml["RecPreProcess"]["transform_ops"]: + k = list(x.keys())[0] + y = x[k] + if y is not None: + y["type"] = k + config_json["RecPreProcess"]["transform_ops"].append(y) + + with open('shitu_config.json', 'w') as fd: + json.dump(config_json, fd, indent=4) + + +if __name__ == '__main__': + main() diff --git a/src/PaddleClas/deploy/lite_shitu/images/demo.jpg b/src/PaddleClas/deploy/lite_shitu/images/demo.jpg new file mode 100644 index 0000000..075dc31 Binary files /dev/null and b/src/PaddleClas/deploy/lite_shitu/images/demo.jpg differ diff --git a/src/PaddleClas/deploy/lite_shitu/include/config_parser.h b/src/PaddleClas/deploy/lite_shitu/include/config_parser.h new file mode 100644 index 0000000..dca0e5a --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/include/config_parser.h @@ -0,0 +1,92 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once +#include +#include +#include +#include +#include + +#include "json/json.h" + +#ifdef _WIN32 +#define OS_PATH_SEP "\\" +#else +#define OS_PATH_SEP "/" +#endif + +namespace PPShiTu { + +void load_jsonf(std::string jsonfile, Json::Value& jsondata); + +// Inference model configuration parser +class ConfigPaser { + public: + ConfigPaser() {} + + ~ConfigPaser() {} + + bool load_config(const Json::Value& config) { + + // Get model arch : YOLO, SSD, RetinaNet, RCNN, Face + if (config["Global"].isMember("det_arch")) { + arch_ = config["Global"]["det_arch"].as(); + } else { + std::cerr << "Please set model arch," + << "support value : YOLO, SSD, RetinaNet, RCNN, Face." + << std::endl; + return false; + } + + // Get Preprocess for preprocessing + if (config.isMember("DetPreProcess")) { + preprocess_info_ = config["DetPreProcess"]["transform_ops"]; + } else { + std::cerr << "Please set Preprocess." << std::endl; + return false; + } + // Get label_list for visualization + if (config["Global"].isMember("label_list")) { + label_list_.clear(); + for (auto item : config["Global"]["label_list"]) { + label_list_.emplace_back(item.as()); + } + } else { + std::cerr << "Please set label_list." << std::endl; + return false; + } + + // Get NMS for postprocess + if (config.isMember("DetPostProcess")) { + nms_info_ = config["DetPostProcess"]; + } + // Get fpn_stride in PicoDet + if (config["Global"].isMember("det_fpn_stride")) { + fpn_stride_.clear(); + for (auto item : config["Global"]["det_fpn_stride"]) { + fpn_stride_.emplace_back(item.as()); + } + } + + return true; + } + std::string arch_; + Json::Value preprocess_info_; + Json::Value nms_info_; + std::vector label_list_; + std::vector fpn_stride_; +}; + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/include/object_detector.h b/src/PaddleClas/deploy/lite_shitu/include/object_detector.h new file mode 100644 index 0000000..779cc89 --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/include/object_detector.h @@ -0,0 +1,102 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "json/json.h" + +#include "paddle_api.h" // NOLINT + +#include "include/config_parser.h" +#include "include/preprocess_op.h" +#include "include/utils.h" +#include "include/picodet_postprocess.h" + +using namespace paddle::lite_api; // NOLINT + +namespace PPShiTu { + +// Generate visualization colormap for each class +std::vector GenerateColorMap(int num_class); + +// Visualiztion Detection Result +cv::Mat VisualizeResult(const cv::Mat& img, + const std::vector& results, + const std::vector& lables, + const std::vector& colormap, + const bool is_rbox); + +class ObjectDetector { + public: + explicit ObjectDetector(const Json::Value& config, + const std::string& model_dir, + int cpu_threads = 1, + const int batch_size = 1) { + config_.load_config(config); + printf("config created\n"); + preprocessor_.Init(config_.preprocess_info_); + printf("before object detector\n"); + if(config["Global"]["det_model_path"].as().empty()){ + std::cout << "Please set [det_model_path] in config file" << std::endl; + exit(-1); + } + LoadModel(config["Global"]["det_model_path"].as(), cpu_threads); + printf("create object detector\n"); } + + // Load Paddle inference model + void LoadModel(std::string model_file, int num_theads); + + // Run predictor + void Predict(const std::vector& imgs, + const int warmup = 0, + const int repeats = 1, + std::vector* result = nullptr, + std::vector* bbox_num = nullptr, + std::vector* times = nullptr); + + // Get Model Label list + const std::vector& GetLabelList() const { + return config_.label_list_; + } + + private: + // Preprocess image and copy data to input buffer + void Preprocess(const cv::Mat& image_mat); + // Postprocess result + void Postprocess(const std::vector mats, + std::vector* result, + std::vector bbox_num, + bool is_rbox); + + std::shared_ptr predictor_; + Preprocessor preprocessor_; + ImageBlob inputs_; + std::vector output_data_; + std::vector out_bbox_num_data_; + float threshold_; + ConfigPaser config_; + +}; + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/include/picodet_postprocess.h b/src/PaddleClas/deploy/lite_shitu/include/picodet_postprocess.h new file mode 100644 index 0000000..758795b --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/include/picodet_postprocess.h @@ -0,0 +1,38 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "include/utils.h" + +namespace PPShiTu { + +void PicoDetPostProcess(std::vector* results, + std::vector outs, + std::vector fpn_stride, + std::vector im_shape, + std::vector scale_factor, + float score_threshold = 0.3, + float nms_threshold = 0.5, + int num_class = 80, + int reg_max = 7); + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/include/preprocess_op.h b/src/PaddleClas/deploy/lite_shitu/include/preprocess_op.h new file mode 100644 index 0000000..f7050fa --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/include/preprocess_op.h @@ -0,0 +1,188 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "json/json.h" + +namespace PPShiTu { + +// Object for storing all preprocessed data +class ImageBlob { + public: + // image width and height + std::vector im_shape_; + // Buffer for image data after preprocessing + std::vector im_data_; + // in net data shape(after pad) + std::vector in_net_shape_; + // Evaluation image width and height + // std::vector eval_im_size_f_; + // Scale factor for image size to origin image size + std::vector scale_factor_; +}; + +// Abstraction of preprocessing opration class +class PreprocessOp { + public: + virtual void Init(const Json::Value& item) = 0; + virtual void Run(cv::Mat* im, ImageBlob* data) = 0; +}; + +class InitInfo : public PreprocessOp { + public: + virtual void Init(const Json::Value& item) {} + virtual void Run(cv::Mat* im, ImageBlob* data); +}; + +class NormalizeImage : public PreprocessOp { + public: + virtual void Init(const Json::Value& item) { + mean_.clear(); + scale_.clear(); + for (auto tmp : item["mean"]) { + mean_.emplace_back(tmp.as()); + } + for (auto tmp : item["std"]) { + scale_.emplace_back(tmp.as()); + } + is_scale_ = item["is_scale"].as(); + } + + virtual void Run(cv::Mat* im, ImageBlob* data); + + private: + // CHW or HWC + std::vector mean_; + std::vector scale_; + bool is_scale_; +}; + +class Permute : public PreprocessOp { + public: + virtual void Init(const Json::Value& item) {} + virtual void Run(cv::Mat* im, ImageBlob* data); +}; + +class Resize : public PreprocessOp { + public: + virtual void Init(const Json::Value& item) { + interp_ = item["interp"].as(); + // max_size_ = item["target_size"].as(); + keep_ratio_ = item["keep_ratio"].as(); + target_size_.clear(); + for (auto tmp : item["target_size"]) { + target_size_.emplace_back(tmp.as()); + } + } + + // Compute best resize scale for x-dimension, y-dimension + std::pair GenerateScale(const cv::Mat& im); + + virtual void Run(cv::Mat* im, ImageBlob* data); + + private: + int interp_; + bool keep_ratio_; + std::vector target_size_; + std::vector in_net_shape_; +}; + +// Models with FPN need input shape % stride == 0 +class PadStride : public PreprocessOp { + public: + virtual void Init(const Json::Value& item) { + stride_ = item["stride"].as(); + } + + virtual void Run(cv::Mat* im, ImageBlob* data); + + private: + int stride_; +}; + +class TopDownEvalAffine : public PreprocessOp { + public: + virtual void Init(const Json::Value& item) { + trainsize_.clear(); + for (auto tmp : item["trainsize"]) { + trainsize_.emplace_back(tmp.as()); + } + } + + virtual void Run(cv::Mat* im, ImageBlob* data); + + private: + int interp_ = 1; + std::vector trainsize_; +}; + +void CropImg(cv::Mat& img, + cv::Mat& crop_img, + std::vector& area, + std::vector& center, + std::vector& scale, + float expandratio = 0.15); + +class Preprocessor { + public: + void Init(const Json::Value& config_node) { + // initialize image info at first + ops_["InitInfo"] = std::make_shared(); + for (const auto& item : config_node) { + auto op_name = item["type"].as(); + + ops_[op_name] = CreateOp(op_name); + ops_[op_name]->Init(item); + } + } + + std::shared_ptr CreateOp(const std::string& name) { + if (name == "DetResize") { + return std::make_shared(); + } else if (name == "DetPermute") { + return std::make_shared(); + } else if (name == "DetNormalizeImage") { + return std::make_shared(); + } else if (name == "DetPadStride") { + // use PadStride instead of PadBatch + return std::make_shared(); + } else if (name == "TopDownEvalAffine") { + return std::make_shared(); + } + std::cerr << "can not find function of OP: " << name + << " and return: nullptr" << std::endl; + return nullptr; + } + + void Run(cv::Mat* im, ImageBlob* data); + + public: + static const std::vector RUN_ORDER; + + private: + std::unordered_map> ops_; +}; + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/include/recognition.h b/src/PaddleClas/deploy/lite_shitu/include/recognition.h new file mode 100644 index 0000000..0c45e94 --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/include/recognition.h @@ -0,0 +1,115 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once +#include "paddle_api.h" // NOLINT +#include "json/json.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace paddle::lite_api; // NOLINT +using namespace std; + +namespace PPShiTu { + +struct RESULT { + std::string class_name; + int class_id; + float score; +}; + +class Recognition { + +public: + explicit Recognition(const Json::Value &config_file) { + MobileConfig config; + if (config_file["Global"]["rec_model_path"].as().empty()) { + std::cout << "Please set [rec_model_path] in config file" << std::endl; + exit(-1); + } + config.set_model_from_file( + config_file["Global"]["rec_model_path"].as()); + this->predictor = CreatePaddlePredictor(config); + + if (config_file["Global"]["rec_label_path"].as().empty()) { + std::cout << "Please set [rec_label_path] in config file" << std::endl; + exit(-1); + } + LoadLabel(config_file["Global"]["rec_label_path"].as()); + SetPreProcessParam(config_file["RecPreProcess"]["transform_ops"]); + if (!config_file["Global"].isMember("return_k")){ + this->topk = config_file["Global"]["return_k"].as(); + } + printf("rec model create!\n"); + } + + void LoadLabel(std::string path) { + std::ifstream file; + std::vector label_list; + file.open(path); + while (file) { + std::string line; + std::getline(file, line); + std::string::size_type pos = line.find(" "); + if (pos != std::string::npos) { + line = line.substr(pos); + } + this->label_list.push_back(line); + } + file.clear(); + file.close(); + } + + void SetPreProcessParam(const Json::Value &config_file) { + for (const auto &item : config_file) { + auto op_name = item["type"].as(); + if (op_name == "ResizeImage") { + this->size = item["size"].as(); + } else if (op_name == "NormalizeImage") { + this->mean.clear(); + this->std.clear(); + for (auto tmp : item["mean"]) { + this->mean.emplace_back(tmp.as()); + } + for (auto tmp : item["std"]) { + this->std.emplace_back(1 / tmp.as()); + } + this->scale = item["scale"].as(); + } + } + } + + std::vector RunRecModel(const cv::Mat &img, double &cost_time); + std::vector PostProcess(const float *output_data, int output_size, + cv::Mat &output_image); + cv::Mat ResizeImage(const cv::Mat &img); + void NeonMeanScale(const float *din, float *dout, int size); + +private: + std::shared_ptr predictor; + std::vector label_list; + std::vector mean = {0.485f, 0.456f, 0.406f}; + std::vector std = {1 / 0.229f, 1 / 0.224f, 1 / 0.225f}; + double scale = 0.00392157; + float size = 224; + int topk = 5; +}; +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/include/utils.h b/src/PaddleClas/deploy/lite_shitu/include/utils.h new file mode 100644 index 0000000..18a04cf --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/include/utils.h @@ -0,0 +1,43 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace PPShiTu { + +// Object Detection Result +struct ObjectResult { + // Rectangle coordinates of detected object: left, right, top, down + std::vector rect; + // Class id of detected object + int class_id; + // Confidence of detected object + float confidence; + + // RecModel result + std::vector rec_result; +}; + +void nms(std::vector &input_boxes, float nms_threshold, bool rec_nms=false); + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/src/config_parser.cc b/src/PaddleClas/deploy/lite_shitu/src/config_parser.cc new file mode 100644 index 0000000..d98b2f9 --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/config_parser.cc @@ -0,0 +1,32 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "include/config_parser.h" + +namespace PPShiTu { + +void load_jsonf(std::string jsonfile, Json::Value &jsondata) { + std::ifstream ifs; + ifs.open(jsonfile); + + Json::CharReaderBuilder builder; + builder["collectComments"] = true; + JSONCPP_STRING errs; + if (!parseFromStream(builder, ifs, &jsondata, &errs)) { + std::cout << errs << std::endl; + return; + } +} + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/src/main.cc b/src/PaddleClas/deploy/lite_shitu/src/main.cc new file mode 100644 index 0000000..690162a --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/main.cc @@ -0,0 +1,225 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/config_parser.h" +#include "include/object_detector.h" +#include "include/preprocess_op.h" +#include "include/recognition.h" +#include "json/json.h" + +Json::Value RT_Config; + +static std::string DirName(const std::string &filepath) { + auto pos = filepath.rfind(OS_PATH_SEP); + if (pos == std::string::npos) { + return ""; + } + return filepath.substr(0, pos); +} + +static bool PathExists(const std::string &path) { + struct stat buffer; + return (stat(path.c_str(), &buffer) == 0); +} + +static void MkDir(const std::string &path) { + if (PathExists(path)) + return; + int ret = 0; + ret = mkdir(path.c_str(), 0755); + if (ret != 0) { + std::string path_error(path); + path_error += " mkdir failed!"; + throw std::runtime_error(path_error); + } +} + +static void MkDirs(const std::string &path) { + if (path.empty()) + return; + if (PathExists(path)) + return; + + MkDirs(DirName(path)); + MkDir(path); +} + +void DetPredictImage(const std::vector &batch_imgs, + std::vector &im_result, + const int batch_size_det, const int max_det_num, + const bool run_benchmark, PPShiTu::ObjectDetector *det) { + std::vector det_t = {0, 0, 0}; + int steps = ceil(float(batch_imgs.size()) / batch_size_det); + for (int idx = 0; idx < steps; idx++) { + int left_image_cnt = batch_imgs.size() - idx * batch_size_det; + if (left_image_cnt > batch_size_det) { + left_image_cnt = batch_size_det; + } + // Store all detected result + std::vector result; + std::vector bbox_num; + std::vector det_times; + + bool is_rbox = false; + if (run_benchmark) { + det->Predict(batch_imgs, 50, 50, &result, &bbox_num, &det_times); + } else { + det->Predict(batch_imgs, 0, 1, &result, &bbox_num, &det_times); + } + + int item_start_idx = 0; + for (int i = 0; i < left_image_cnt; i++) { + cv::Mat im = batch_imgs[i]; + // std::vector im_result; + int detect_num = 0; + for (int j = 0; j < min(bbox_num[i], max_det_num); j++) { + PPShiTu::ObjectResult item = result[item_start_idx + j]; + if (item.class_id == -1) { + continue; + } + detect_num += 1; + im_result.push_back(item); + } + item_start_idx = item_start_idx + bbox_num[i]; + } + + det_t[0] += det_times[0]; + det_t[1] += det_times[1]; + det_t[2] += det_times[2]; + } +} + +void PrintResult(const std::string &image_path, + std::vector &det_result) { + printf("%s:\n", image_path.c_str()); + for (int i = 0; i < det_result.size(); ++i) { + printf("\tresult%d: bbox[%d, %d, %d, %d], score: %f, label: %s\n", i, + det_result[i].rect[0], det_result[i].rect[1], det_result[i].rect[2], + det_result[i].rect[3], det_result[i].rec_result[0].score, + det_result[i].rec_result[0].class_name.c_str()); + } +} + +int main(int argc, char **argv) { + std::cout << "Usage: " << argv[0] + << " [config_path](option) [image_dir](option)\n"; + if (argc < 2) { + std::cout << "Usage: ./main det_runtime_config.json" << std::endl; + return -1; + } + std::string config_path = argv[1]; + std::string img_dir = ""; + + if (argc >= 3) { + img_dir = argv[2]; + } + // Parsing command-line + PPShiTu::load_jsonf(config_path, RT_Config); + if (RT_Config["Global"]["det_model_path"].as().empty()) { + std::cout << "Please set [det_model_path] in " << config_path << std::endl; + return -1; + } + + if (!RT_Config["Global"]["infer_imgs_dir"].as().empty() && + img_dir.empty()) { + img_dir = RT_Config["Global"]["infer_imgs_dir"].as(); + } + if (RT_Config["Global"]["infer_imgs"].as().empty() && + img_dir.empty()) { + std::cout << "Please set [infer_imgs] in " << config_path + << " Or use command: <" << argv[0] << " [shitu_config]" + << " [image_dir]>" << std::endl; + return -1; + } + // Load model and create a object detector + PPShiTu::ObjectDetector det( + RT_Config, RT_Config["Global"]["det_model_path"].as(), + RT_Config["Global"]["cpu_num_threads"].as(), + RT_Config["Global"]["batch_size"].as()); + // create rec model + PPShiTu::Recognition rec(RT_Config); + // Do inference on input image + + std::vector det_result; + std::vector batch_imgs; + double rec_time; + if (!RT_Config["Global"]["infer_imgs"].as().empty() || + !img_dir.empty()) { + std::vector all_img_paths; + std::vector cv_all_img_paths; + if (!RT_Config["Global"]["infer_imgs"].as().empty()) { + all_img_paths.push_back( + RT_Config["Global"]["infer_imgs"].as()); + if (RT_Config["Global"]["batch_size"].as() > 1) { + std::cout << "batch_size_det should be 1, when set `image_file`." + << std::endl; + return -1; + } + } else { + cv::glob(img_dir, + cv_all_img_paths); + for (const auto &img_path : cv_all_img_paths) { + all_img_paths.push_back(img_path); + } + } + for (int i = 0; i < all_img_paths.size(); ++i) { + std::string img_path = all_img_paths[i]; + cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR); + if (!srcimg.data) { + std::cerr << "[ERROR] image read failed! image path: " << img_path + << "\n"; + exit(-1); + } + cv::cvtColor(srcimg, srcimg, cv::COLOR_BGR2RGB); + batch_imgs.push_back(srcimg); + DetPredictImage( + batch_imgs, det_result, RT_Config["Global"]["batch_size"].as(), + RT_Config["Global"]["max_det_results"].as(), false, &det); + + // add the whole image for recognition to improve recall + PPShiTu::ObjectResult result_whole_img = { + {0, 0, srcimg.cols, srcimg.rows}, 0, 1.0}; + det_result.push_back(result_whole_img); + + // get rec result + for (int j = 0; j < det_result.size(); ++j) { + int w = det_result[j].rect[2] - det_result[j].rect[0]; + int h = det_result[j].rect[3] - det_result[j].rect[1]; + cv::Rect rect(det_result[j].rect[0], det_result[j].rect[1], w, h); + cv::Mat crop_img = srcimg(rect); + std::vector result = + rec.RunRecModel(crop_img, rec_time); + det_result[j].rec_result.assign(result.begin(), result.end()); + } + // rec nms + PPShiTu::nms(det_result, + RT_Config["Global"]["rec_nms_thresold"].as(), true); + PrintResult(img_path, det_result); + batch_imgs.clear(); + det_result.clear(); + } + } + return 0; +} diff --git a/src/PaddleClas/deploy/lite_shitu/src/object_detector.cc b/src/PaddleClas/deploy/lite_shitu/src/object_detector.cc new file mode 100644 index 0000000..ffea31b --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/object_detector.cc @@ -0,0 +1,329 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include +// for setprecision +#include +#include +#include "include/object_detector.h" + +namespace PPShiTu { + +// Load Model and create model predictor +void ObjectDetector::LoadModel(std::string model_file, int num_theads) { + MobileConfig config; + config.set_threads(num_theads); + config.set_model_from_file(model_file); + config.set_power_mode(LITE_POWER_HIGH); + + predictor_ = CreatePaddlePredictor(config); +} + +// Visualiztion MaskDetector results +cv::Mat VisualizeResult(const cv::Mat& img, + const std::vector& results, + const std::vector& lables, + const std::vector& colormap, + const bool is_rbox = false) { + cv::Mat vis_img = img.clone(); + for (int i = 0; i < results.size(); ++i) { + // Configure color and text size + std::ostringstream oss; + oss << std::setiosflags(std::ios::fixed) << std::setprecision(4); + oss << lables[results[i].class_id] << " "; + oss << results[i].confidence; + std::string text = oss.str(); + int c1 = colormap[3 * results[i].class_id + 0]; + int c2 = colormap[3 * results[i].class_id + 1]; + int c3 = colormap[3 * results[i].class_id + 2]; + cv::Scalar roi_color = cv::Scalar(c1, c2, c3); + int font_face = cv::FONT_HERSHEY_COMPLEX_SMALL; + double font_scale = 0.5f; + float thickness = 0.5; + cv::Size text_size = + cv::getTextSize(text, font_face, font_scale, thickness, nullptr); + cv::Point origin; + + if (is_rbox) { + // Draw object, text, and background + for (int k = 0; k < 4; k++) { + cv::Point pt1 = cv::Point(results[i].rect[(k * 2) % 8], + results[i].rect[(k * 2 + 1) % 8]); + cv::Point pt2 = cv::Point(results[i].rect[(k * 2 + 2) % 8], + results[i].rect[(k * 2 + 3) % 8]); + cv::line(vis_img, pt1, pt2, roi_color, 2); + } + } else { + int w = results[i].rect[2] - results[i].rect[0]; + int h = results[i].rect[3] - results[i].rect[1]; + cv::Rect roi = cv::Rect(results[i].rect[0], results[i].rect[1], w, h); + // Draw roi object, text, and background + cv::rectangle(vis_img, roi, roi_color, 2); + } + + origin.x = results[i].rect[0]; + origin.y = results[i].rect[1]; + + // Configure text background + cv::Rect text_back = cv::Rect(results[i].rect[0], + results[i].rect[1] - text_size.height, + text_size.width, + text_size.height); + // Draw text, and background + cv::rectangle(vis_img, text_back, roi_color, -1); + cv::putText(vis_img, + text, + origin, + font_face, + font_scale, + cv::Scalar(255, 255, 255), + thickness); + } + return vis_img; +} + +void ObjectDetector::Preprocess(const cv::Mat& ori_im) { + // Clone the image : keep the original mat for postprocess + cv::Mat im = ori_im.clone(); + // cv::cvtColor(im, im, cv::COLOR_BGR2RGB); + preprocessor_.Run(&im, &inputs_); +} + +void ObjectDetector::Postprocess(const std::vector mats, + std::vector* result, + std::vector bbox_num, + bool is_rbox = false) { + result->clear(); + int start_idx = 0; + for (int im_id = 0; im_id < mats.size(); im_id++) { + cv::Mat raw_mat = mats[im_id]; + int rh = 1; + int rw = 1; + if (config_.arch_ == "Face") { + rh = raw_mat.rows; + rw = raw_mat.cols; + } + for (int j = start_idx; j < start_idx + bbox_num[im_id]; j++) { + if (is_rbox) { + // Class id + int class_id = static_cast(round(output_data_[0 + j * 10])); + // Confidence score + float score = output_data_[1 + j * 10]; + int x1 = (output_data_[2 + j * 10] * rw); + int y1 = (output_data_[3 + j * 10] * rh); + int x2 = (output_data_[4 + j * 10] * rw); + int y2 = (output_data_[5 + j * 10] * rh); + int x3 = (output_data_[6 + j * 10] * rw); + int y3 = (output_data_[7 + j * 10] * rh); + int x4 = (output_data_[8 + j * 10] * rw); + int y4 = (output_data_[9 + j * 10] * rh); + + PPShiTu::ObjectResult result_item; + result_item.rect = {x1, y1, x2, y2, x3, y3, x4, y4}; + result_item.class_id = class_id; + result_item.confidence = score; + result->push_back(result_item); + } else { + // Class id + int class_id = static_cast(round(output_data_[0 + j * 6])); + // Confidence score + float score = output_data_[1 + j * 6]; + int xmin = (output_data_[2 + j * 6] * rw); + int ymin = (output_data_[3 + j * 6] * rh); + int xmax = (output_data_[4 + j * 6] * rw); + int ymax = (output_data_[5 + j * 6] * rh); + int wd = xmax - xmin; + int hd = ymax - ymin; + + PPShiTu::ObjectResult result_item; + result_item.rect = {xmin, ymin, xmax, ymax}; + result_item.class_id = class_id; + result_item.confidence = score; + result->push_back(result_item); + } + } + start_idx += bbox_num[im_id]; + } +} + +void ObjectDetector::Predict(const std::vector& imgs, + const int warmup, + const int repeats, + std::vector* result, + std::vector* bbox_num, + std::vector* times) { + auto preprocess_start = std::chrono::steady_clock::now(); + int batch_size = imgs.size(); + + // in_data_batch + std::vector in_data_all; + std::vector im_shape_all(batch_size * 2); + std::vector scale_factor_all(batch_size * 2); + // Preprocess image + for (int bs_idx = 0; bs_idx < batch_size; bs_idx++) { + cv::Mat im = imgs.at(bs_idx); + Preprocess(im); + im_shape_all[bs_idx * 2] = inputs_.im_shape_[0]; + im_shape_all[bs_idx * 2 + 1] = inputs_.im_shape_[1]; + + scale_factor_all[bs_idx * 2] = inputs_.scale_factor_[0]; + scale_factor_all[bs_idx * 2 + 1] = inputs_.scale_factor_[1]; + + // TODO: reduce cost time + in_data_all.insert( + in_data_all.end(), inputs_.im_data_.begin(), inputs_.im_data_.end()); + } + auto preprocess_end = std::chrono::steady_clock::now(); + std::vector output_data_list_; + // Prepare input tensor + + auto input_names = predictor_->GetInputNames(); + for (const auto& tensor_name : input_names) { + auto in_tensor = predictor_->GetInputByName(tensor_name); + if (tensor_name == "image") { + int rh = inputs_.in_net_shape_[0]; + int rw = inputs_.in_net_shape_[1]; + in_tensor->Resize({batch_size, 3, rh, rw}); + auto* inptr = in_tensor->mutable_data(); + std::copy_n(in_data_all.data(), in_data_all.size(), inptr); + } else if (tensor_name == "im_shape") { + in_tensor->Resize({batch_size, 2}); + auto* inptr = in_tensor->mutable_data(); + std::copy_n(im_shape_all.data(), im_shape_all.size(), inptr); + } else if (tensor_name == "scale_factor") { + in_tensor->Resize({batch_size, 2}); + auto* inptr = in_tensor->mutable_data(); + std::copy_n(scale_factor_all.data(), scale_factor_all.size(), inptr); + } + } + + // Run predictor + // warmup + for (int i = 0; i < warmup; i++) { + predictor_->Run(); + // Get output tensor + auto output_names = predictor_->GetOutputNames(); + if (config_.arch_ == "PicoDet") { + for (int j = 0; j < output_names.size(); j++) { + auto output_tensor = predictor_->GetTensor(output_names[j]); + const float* outptr = output_tensor->data(); + std::vector output_shape = output_tensor->shape(); + output_data_list_.push_back(outptr); + } + } else { + auto out_tensor = predictor_->GetTensor(output_names[0]); + auto out_bbox_num = predictor_->GetTensor(output_names[1]); + } + } + + bool is_rbox = false; + auto inference_start = std::chrono::steady_clock::now(); + for (int i = 0; i < repeats; i++) { + predictor_->Run(); + } + auto inference_end = std::chrono::steady_clock::now(); + auto postprocess_start = std::chrono::steady_clock::now(); + // Get output tensor + output_data_list_.clear(); + int num_class = 1; + int reg_max = 7; + auto output_names = predictor_->GetOutputNames(); + // TODO: Unified model output. + if (config_.arch_ == "PicoDet") { + for (int i = 0; i < output_names.size(); i++) { + auto output_tensor = predictor_->GetTensor(output_names[i]); + const float* outptr = output_tensor->data(); + std::vector output_shape = output_tensor->shape(); + if (i == 0) { + num_class = output_shape[2]; + } + if (i == config_.fpn_stride_.size()) { + reg_max = output_shape[2] / 4 - 1; + } + output_data_list_.push_back(outptr); + } + } else { + auto output_tensor = predictor_->GetTensor(output_names[0]); + auto output_shape = output_tensor->shape(); + auto out_bbox_num = predictor_->GetTensor(output_names[1]); + auto out_bbox_num_shape = out_bbox_num->shape(); + // Calculate output length + int output_size = 1; + for (int j = 0; j < output_shape.size(); ++j) { + output_size *= output_shape[j]; + } + is_rbox = output_shape[output_shape.size() - 1] % 10 == 0; + + if (output_size < 6) { + std::cerr << "[WARNING] No object detected." << std::endl; + } + output_data_.resize(output_size); + std::copy_n( + output_tensor->mutable_data(), output_size, output_data_.data()); + + int out_bbox_num_size = 1; + for (int j = 0; j < out_bbox_num_shape.size(); ++j) { + out_bbox_num_size *= out_bbox_num_shape[j]; + } + out_bbox_num_data_.resize(out_bbox_num_size); + std::copy_n(out_bbox_num->mutable_data(), + out_bbox_num_size, + out_bbox_num_data_.data()); + } + // Postprocessing result + + result->clear(); + if (config_.arch_ == "PicoDet") { + PPShiTu::PicoDetPostProcess( + result, output_data_list_, config_.fpn_stride_, + inputs_.im_shape_, inputs_.scale_factor_, + config_.nms_info_["score_threshold"].as(), + config_.nms_info_["nms_threshold"].as(), num_class, reg_max); + bbox_num->push_back(result->size()); + } else { + Postprocess(imgs, result, out_bbox_num_data_, is_rbox); + bbox_num->clear(); + for (int k = 0; k < out_bbox_num_data_.size(); k++) { + int tmp = out_bbox_num_data_[k]; + bbox_num->push_back(tmp); + } + } + auto postprocess_end = std::chrono::steady_clock::now(); + + std::chrono::duration preprocess_diff = + preprocess_end - preprocess_start; + times->push_back(double(preprocess_diff.count() * 1000)); + std::chrono::duration inference_diff = inference_end - inference_start; + times->push_back(double(inference_diff.count() / repeats * 1000)); + std::chrono::duration postprocess_diff = + postprocess_end - postprocess_start; + times->push_back(double(postprocess_diff.count() * 1000)); +} + +std::vector GenerateColorMap(int num_class) { + auto colormap = std::vector(3 * num_class, 0); + for (int i = 0; i < num_class; ++i) { + int j = 0; + int lab = i; + while (lab) { + colormap[i * 3] |= (((lab >> 0) & 1) << (7 - j)); + colormap[i * 3 + 1] |= (((lab >> 1) & 1) << (7 - j)); + colormap[i * 3 + 2] |= (((lab >> 2) & 1) << (7 - j)); + ++j; + lab >>= 3; + } + } + return colormap; +} + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/src/picodet_postprocess.cc b/src/PaddleClas/deploy/lite_shitu/src/picodet_postprocess.cc new file mode 100644 index 0000000..cde914c --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/picodet_postprocess.cc @@ -0,0 +1,129 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// The code is based on: +// https://github.com/RangiLyu/nanodet/blob/main/demo_mnn/nanodet_mnn.cpp + +#include "include/picodet_postprocess.h" +#include + +namespace PPShiTu { + +float fast_exp(float x) { + union { + uint32_t i; + float f; + } v{}; + v.i = (1 << 23) * (1.4426950409 * x + 126.93490512f); + return v.f; +} + +template +int activation_function_softmax(const _Tp *src, _Tp *dst, int length) { + const _Tp alpha = *std::max_element(src, src + length); + _Tp denominator{0}; + + for (int i = 0; i < length; ++i) { + dst[i] = fast_exp(src[i] - alpha); + denominator += dst[i]; + } + + for (int i = 0; i < length; ++i) { + dst[i] /= denominator; + } + + return 0; +} + +// PicoDet decode +PPShiTu::ObjectResult +disPred2Bbox(const float *&dfl_det, int label, float score, int x, int y, + int stride, std::vector im_shape, int reg_max) { + float ct_x = (x + 0.5) * stride; + float ct_y = (y + 0.5) * stride; + std::vector dis_pred; + dis_pred.resize(4); + for (int i = 0; i < 4; i++) { + float dis = 0; + float *dis_after_sm = new float[reg_max + 1]; + activation_function_softmax(dfl_det + i * (reg_max + 1), dis_after_sm, + reg_max + 1); + for (int j = 0; j < reg_max + 1; j++) { + dis += j * dis_after_sm[j]; + } + dis *= stride; + dis_pred[i] = dis; + delete[] dis_after_sm; + } + int xmin = (int)(std::max)(ct_x - dis_pred[0], .0f); + int ymin = (int)(std::max)(ct_y - dis_pred[1], .0f); + int xmax = (int)(std::min)(ct_x + dis_pred[2], (float)im_shape[0]); + int ymax = (int)(std::min)(ct_y + dis_pred[3], (float)im_shape[1]); + + PPShiTu::ObjectResult result_item; + result_item.rect = {xmin, ymin, xmax, ymax}; + result_item.class_id = label; + result_item.confidence = score; + + return result_item; +} + +void PicoDetPostProcess(std::vector *results, + std::vector outs, + std::vector fpn_stride, + std::vector im_shape, + std::vector scale_factor, float score_threshold, + float nms_threshold, int num_class, int reg_max) { + std::vector> bbox_results; + bbox_results.resize(num_class); + int in_h = im_shape[0], in_w = im_shape[1]; + for (int i = 0; i < fpn_stride.size(); ++i) { + int feature_h = ceil((float)in_h / fpn_stride[i]); + int feature_w = ceil((float)in_w / fpn_stride[i]); + for (int idx = 0; idx < feature_h * feature_w; idx++) { + const float *scores = outs[i] + (idx * num_class); + + int row = idx / feature_w; + int col = idx % feature_w; + float score = 0; + int cur_label = 0; + for (int label = 0; label < num_class; label++) { + if (scores[label] > score) { + score = scores[label]; + cur_label = label; + } + } + if (score > score_threshold) { + const float *bbox_pred = + outs[i + fpn_stride.size()] + (idx * 4 * (reg_max + 1)); + bbox_results[cur_label].push_back( + disPred2Bbox(bbox_pred, cur_label, score, col, row, fpn_stride[i], + im_shape, reg_max)); + } + } + } + for (int i = 0; i < (int)bbox_results.size(); i++) { + PPShiTu::nms(bbox_results[i], nms_threshold); + + for (auto box : bbox_results[i]) { + box.rect[0] = box.rect[0] / scale_factor[1]; + box.rect[2] = box.rect[2] / scale_factor[1]; + box.rect[1] = box.rect[1] / scale_factor[0]; + box.rect[3] = box.rect[3] / scale_factor[0]; + results->push_back(box); + } + } +} + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/src/preprocess_op.cc b/src/PaddleClas/deploy/lite_shitu/src/preprocess_op.cc new file mode 100644 index 0000000..9c74d6e --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/preprocess_op.cc @@ -0,0 +1,185 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "include/preprocess_op.h" + +namespace PPShiTu { + +void InitInfo::Run(cv::Mat* im, ImageBlob* data) { + data->im_shape_ = {static_cast(im->rows), + static_cast(im->cols)}; + data->scale_factor_ = {1., 1.}; + data->in_net_shape_ = {static_cast(im->rows), + static_cast(im->cols)}; +} + +void NormalizeImage::Run(cv::Mat* im, ImageBlob* data) { + double e = 1.0; + if (is_scale_) { + e *= 1./255.0; + } + (*im).convertTo(*im, CV_32FC3, e); + for (int h = 0; h < im->rows; h++) { + for (int w = 0; w < im->cols; w++) { + im->at(h, w)[0] = + (im->at(h, w)[0] - mean_[0]) / scale_[0]; + im->at(h, w)[1] = + (im->at(h, w)[1] - mean_[1]) / scale_[1]; + im->at(h, w)[2] = + (im->at(h, w)[2] - mean_[2]) / scale_[2]; + } + } +} + +void Permute::Run(cv::Mat* im, ImageBlob* data) { + (*im).convertTo(*im, CV_32FC3); + int rh = im->rows; + int rw = im->cols; + int rc = im->channels(); + (data->im_data_).resize(rc * rh * rw); + float* base = (data->im_data_).data(); + for (int i = 0; i < rc; ++i) { + cv::extractChannel(*im, cv::Mat(rh, rw, CV_32FC1, base + i * rh * rw), i); + } +} + +void Resize::Run(cv::Mat* im, ImageBlob* data) { + auto resize_scale = GenerateScale(*im); + data->im_shape_ = {static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second)}; + data->in_net_shape_ = {static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second)}; + cv::resize( + *im, *im, cv::Size(), resize_scale.first, resize_scale.second, interp_); + data->im_shape_ = { + static_cast(im->rows), static_cast(im->cols), + }; + data->scale_factor_ = { + resize_scale.second, resize_scale.first, + }; +} + +std::pair Resize::GenerateScale(const cv::Mat& im) { + std::pair resize_scale; + int origin_w = im.cols; + int origin_h = im.rows; + + if (keep_ratio_) { + int im_size_max = std::max(origin_w, origin_h); + int im_size_min = std::min(origin_w, origin_h); + int target_size_max = + *std::max_element(target_size_.begin(), target_size_.end()); + int target_size_min = + *std::min_element(target_size_.begin(), target_size_.end()); + float scale_min = + static_cast(target_size_min) / static_cast(im_size_min); + float scale_max = + static_cast(target_size_max) / static_cast(im_size_max); + float scale_ratio = std::min(scale_min, scale_max); + resize_scale = {scale_ratio, scale_ratio}; + } else { + resize_scale.first = + static_cast(target_size_[1]) / static_cast(origin_w); + resize_scale.second = + static_cast(target_size_[0]) / static_cast(origin_h); + } + return resize_scale; +} + +void PadStride::Run(cv::Mat* im, ImageBlob* data) { + if (stride_ <= 0) { + return; + } + int rc = im->channels(); + int rh = im->rows; + int rw = im->cols; + int nh = (rh / stride_) * stride_ + (rh % stride_ != 0) * stride_; + int nw = (rw / stride_) * stride_ + (rw % stride_ != 0) * stride_; + cv::copyMakeBorder( + *im, *im, 0, nh - rh, 0, nw - rw, cv::BORDER_CONSTANT, cv::Scalar(0)); + data->in_net_shape_ = { + static_cast(im->rows), static_cast(im->cols), + }; +} + +void TopDownEvalAffine::Run(cv::Mat* im, ImageBlob* data) { + cv::resize(*im, *im, cv::Size(trainsize_[0], trainsize_[1]), 0, 0, interp_); + // todo: Simd::ResizeBilinear(); + data->in_net_shape_ = { + static_cast(trainsize_[1]), static_cast(trainsize_[0]), + }; +} + +// Preprocessor op running order +const std::vector Preprocessor::RUN_ORDER = {"InitInfo", + "DetTopDownEvalAffine", + "DetResize", + "DetNormalizeImage", + "DetPadStride", + "DetPermute"}; + +void Preprocessor::Run(cv::Mat* im, ImageBlob* data) { + for (const auto& name : RUN_ORDER) { + if (ops_.find(name) != ops_.end()) { + ops_[name]->Run(im, data); + } + } +} + +void CropImg(cv::Mat& img, + cv::Mat& crop_img, + std::vector& area, + std::vector& center, + std::vector& scale, + float expandratio) { + int crop_x1 = std::max(0, area[0]); + int crop_y1 = std::max(0, area[1]); + int crop_x2 = std::min(img.cols - 1, area[2]); + int crop_y2 = std::min(img.rows - 1, area[3]); + + int center_x = (crop_x1 + crop_x2) / 2.; + int center_y = (crop_y1 + crop_y2) / 2.; + int half_h = (crop_y2 - crop_y1) / 2.; + int half_w = (crop_x2 - crop_x1) / 2.; + + if (half_h * 3 > half_w * 4) { + half_w = static_cast(half_h * 0.75); + } else { + half_h = static_cast(half_w * 4 / 3); + } + + crop_x1 = + std::max(0, center_x - static_cast(half_w * (1 + expandratio))); + crop_y1 = + std::max(0, center_y - static_cast(half_h * (1 + expandratio))); + crop_x2 = std::min(img.cols - 1, + static_cast(center_x + half_w * (1 + expandratio))); + crop_y2 = std::min(img.rows - 1, + static_cast(center_y + half_h * (1 + expandratio))); + crop_img = + img(cv::Range(crop_y1, crop_y2 + 1), cv::Range(crop_x1, crop_x2 + 1)); + + center.clear(); + center.emplace_back((crop_x1 + crop_x2) / 2); + center.emplace_back((crop_y1 + crop_y2) / 2); + scale.clear(); + scale.emplace_back((crop_x2 - crop_x1)); + scale.emplace_back((crop_y2 - crop_y1)); +} + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/lite_shitu/src/recognition.cc b/src/PaddleClas/deploy/lite_shitu/src/recognition.cc new file mode 100644 index 0000000..0e711f3 --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/recognition.cc @@ -0,0 +1,143 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "include/recognition.h" + +namespace PPShiTu { +std::vector Recognition::RunRecModel(const cv::Mat &img, + double &cost_time) { + + // Read img + cv::Mat resize_image = ResizeImage(img); + + cv::Mat img_fp; + resize_image.convertTo(img_fp, CV_32FC3, scale); + + // Prepare input data from image + std::unique_ptr input_tensor(std::move(this->predictor->GetInput(0))); + input_tensor->Resize({1, 3, img_fp.rows, img_fp.cols}); + auto *data0 = input_tensor->mutable_data(); + + const float *dimg = reinterpret_cast(img_fp.data); + NeonMeanScale(dimg, data0, img_fp.rows * img_fp.cols); + + auto start = std::chrono::system_clock::now(); + // Run predictor + this->predictor->Run(); + + // Get output and post process + std::unique_ptr output_tensor( + std::move(this->predictor->GetOutput(1))); + auto *output_data = output_tensor->data(); + auto end = std::chrono::system_clock::now(); + auto duration = + std::chrono::duration_cast(end - start); + cost_time = double(duration.count()) * + std::chrono::microseconds::period::num / + std::chrono::microseconds::period::den; + + int output_size = 1; + for (auto dim : output_tensor->shape()) { + output_size *= dim; + } + + cv::Mat output_image; + auto results = PostProcess(output_data, output_size, output_image); + return results; +} + +void Recognition::NeonMeanScale(const float *din, float *dout, int size) { + + if (this->mean.size() != 3 || this->std.size() != 3) { + std::cerr << "[ERROR] mean or scale size must equal to 3\n"; + exit(1); + } + float32x4_t vmean0 = vdupq_n_f32(mean[0]); + float32x4_t vmean1 = vdupq_n_f32(mean[1]); + float32x4_t vmean2 = vdupq_n_f32(mean[2]); + float32x4_t vscale0 = vdupq_n_f32(std[0]); + float32x4_t vscale1 = vdupq_n_f32(std[1]); + float32x4_t vscale2 = vdupq_n_f32(std[2]); + + float *dout_c0 = dout; + float *dout_c1 = dout + size; + float *dout_c2 = dout + size * 2; + + int i = 0; + for (; i < size - 3; i += 4) { + float32x4x3_t vin3 = vld3q_f32(din); + float32x4_t vsub0 = vsubq_f32(vin3.val[0], vmean0); + float32x4_t vsub1 = vsubq_f32(vin3.val[1], vmean1); + float32x4_t vsub2 = vsubq_f32(vin3.val[2], vmean2); + float32x4_t vs0 = vmulq_f32(vsub0, vscale0); + float32x4_t vs1 = vmulq_f32(vsub1, vscale1); + float32x4_t vs2 = vmulq_f32(vsub2, vscale2); + vst1q_f32(dout_c0, vs0); + vst1q_f32(dout_c1, vs1); + vst1q_f32(dout_c2, vs2); + + din += 12; + dout_c0 += 4; + dout_c1 += 4; + dout_c2 += 4; + } + for (; i < size; i++) { + *(dout_c0++) = (*(din++) - this->mean[0]) * this->std[0]; + *(dout_c1++) = (*(din++) - this->mean[1]) * this->std[1]; + *(dout_c2++) = (*(din++) - this->mean[2]) * this->std[2]; + } +} + +cv::Mat Recognition::ResizeImage(const cv::Mat &img) { + cv::Mat resize_img; + cv::resize(img, resize_img, cv::Size(this->size, this->size)); + return resize_img; +} +std::vector Recognition::PostProcess(const float *output_data, + int output_size, + cv::Mat &output_image) { + + int max_indices[this->topk]; + double max_scores[this->topk]; + for (int i = 0; i < this->topk; i++) { + max_indices[i] = 0; + max_scores[i] = 0; + } + for (int i = 0; i < output_size; i++) { + float score = output_data[i]; + int index = i; + for (int j = 0; j < this->topk; j++) { + if (score > max_scores[j]) { + index += max_indices[j]; + max_indices[j] = index - max_indices[j]; + index -= max_indices[j]; + score += max_scores[j]; + max_scores[j] = score - max_scores[j]; + score -= max_scores[j]; + } + } + } + + std::vector results(this->topk); + for (int i = 0; i < results.size(); i++) { + results[i].class_name = "Unknown"; + if (max_indices[i] >= 0 && max_indices[i] < this->label_list.size()) { + results[i].class_name = this->label_list[max_indices[i]]; + } + results[i].score = max_scores[i]; + results[i].class_id = max_indices[i]; + } + return results; +} +} diff --git a/src/PaddleClas/deploy/lite_shitu/src/utils.cc b/src/PaddleClas/deploy/lite_shitu/src/utils.cc new file mode 100644 index 0000000..3bc4617 --- /dev/null +++ b/src/PaddleClas/deploy/lite_shitu/src/utils.cc @@ -0,0 +1,57 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "include/utils.h" + +namespace PPShiTu { + +void nms(std::vector &input_boxes, float nms_threshold, + bool rec_nms) { + if (!rec_nms) { + std::sort(input_boxes.begin(), input_boxes.end(), + [](ObjectResult a, ObjectResult b) { + return a.confidence > b.confidence; + }); + } else { + std::sort(input_boxes.begin(), input_boxes.end(), + [](ObjectResult a, ObjectResult b) { + return a.rec_result[0].score > b.rec_result[0].score; + }); + } + std::vector vArea(input_boxes.size()); + for (int i = 0; i < int(input_boxes.size()); ++i) { + vArea[i] = (input_boxes.at(i).rect[2] - input_boxes.at(i).rect[0] + 1) * + (input_boxes.at(i).rect[3] - input_boxes.at(i).rect[1] + 1); + } + for (int i = 0; i < int(input_boxes.size()); ++i) { + for (int j = i + 1; j < int(input_boxes.size());) { + float xx1 = (std::max)(input_boxes[i].rect[0], input_boxes[j].rect[0]); + float yy1 = (std::max)(input_boxes[i].rect[1], input_boxes[j].rect[1]); + float xx2 = (std::min)(input_boxes[i].rect[2], input_boxes[j].rect[2]); + float yy2 = (std::min)(input_boxes[i].rect[3], input_boxes[j].rect[3]); + float w = (std::max)(float(0), xx2 - xx1 + 1); + float h = (std::max)(float(0), yy2 - yy1 + 1); + float inter = w * h; + float ovr = inter / (vArea[i] + vArea[j] - inter); + if (ovr >= nms_threshold) { + input_boxes.erase(input_boxes.begin() + j); + vArea.erase(vArea.begin() + j); + } else { + j++; + } + } + } +} + +} // namespace PPShiTu diff --git a/src/PaddleClas/deploy/models/general_PPLCNet_x2_5_lite_v1.0_infer/inference.pdiparams b/src/PaddleClas/deploy/models/general_PPLCNet_x2_5_lite_v1.0_infer/inference.pdiparams new file mode 100644 index 0000000..014e7c2 Binary files /dev/null and b/src/PaddleClas/deploy/models/general_PPLCNet_x2_5_lite_v1.0_infer/inference.pdiparams differ diff --git a/src/PaddleClas/deploy/models/general_PPLCNet_x2_5_lite_v1.0_infer/inference.pdmodel b/src/PaddleClas/deploy/models/general_PPLCNet_x2_5_lite_v1.0_infer/inference.pdmodel new file mode 100644 index 0000000..a444c2d Binary files /dev/null and b/src/PaddleClas/deploy/models/general_PPLCNet_x2_5_lite_v1.0_infer/inference.pdmodel differ diff --git a/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/infer_cfg.yml b/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/infer_cfg.yml new file mode 100644 index 0000000..42f78c0 --- /dev/null +++ b/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/infer_cfg.yml @@ -0,0 +1,28 @@ +mode: fluid +draw_threshold: 0.5 +metric: COCO +use_dynamic_shape: false +arch: PicoDet +min_subgraph_size: 3 +Preprocess: +- interp: 2 + keep_ratio: false + target_size: + - 416 + - 416 + type: Resize +- is_scale: true + mean: + - 0.485 + - 0.456 + - 0.406 + std: + - 0.229 + - 0.224 + - 0.225 + type: NormalizeImage +- type: Permute +- stride: 32 + type: PadStride +label_list: +- foreground diff --git a/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/inference.pdiparams b/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/inference.pdiparams new file mode 100644 index 0000000..9d74bb0 Binary files /dev/null and b/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/inference.pdiparams differ diff --git a/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/inference.pdmodel b/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/inference.pdmodel new file mode 100644 index 0000000..544cbcd Binary files /dev/null and b/src/PaddleClas/deploy/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer/inference.pdmodel differ diff --git a/src/PaddleClas/deploy/output/110.jpeg b/src/PaddleClas/deploy/output/110.jpeg new file mode 100644 index 0000000..b5c60c0 Binary files /dev/null and b/src/PaddleClas/deploy/output/110.jpeg differ diff --git a/src/PaddleClas/deploy/output/1101.jpeg b/src/PaddleClas/deploy/output/1101.jpeg new file mode 100644 index 0000000..12fcd0d Binary files /dev/null and b/src/PaddleClas/deploy/output/1101.jpeg differ diff --git a/src/PaddleClas/deploy/output/157333-1868444027.jpg b/src/PaddleClas/deploy/output/157333-1868444027.jpg new file mode 100644 index 0000000..1988409 Binary files /dev/null and b/src/PaddleClas/deploy/output/157333-1868444027.jpg differ diff --git a/src/PaddleClas/deploy/output/202103160813194077.jpg b/src/PaddleClas/deploy/output/202103160813194077.jpg new file mode 100644 index 0000000..b953d58 Binary files /dev/null and b/src/PaddleClas/deploy/output/202103160813194077.jpg differ diff --git a/src/PaddleClas/deploy/output/202103160813194078.jpg b/src/PaddleClas/deploy/output/202103160813194078.jpg new file mode 100644 index 0000000..8e9314e Binary files /dev/null and b/src/PaddleClas/deploy/output/202103160813194078.jpg differ diff --git a/src/PaddleClas/deploy/output/5645c5659bc39.jpg b/src/PaddleClas/deploy/output/5645c5659bc39.jpg new file mode 100644 index 0000000..efaa287 Binary files /dev/null and b/src/PaddleClas/deploy/output/5645c5659bc39.jpg differ diff --git a/src/PaddleClas/deploy/output/90.jpeg b/src/PaddleClas/deploy/output/90.jpeg new file mode 100644 index 0000000..191cc1c Binary files /dev/null and b/src/PaddleClas/deploy/output/90.jpeg differ diff --git a/src/PaddleClas/deploy/output/DSCF4020.jpg b/src/PaddleClas/deploy/output/DSCF4020.jpg new file mode 100644 index 0000000..8a882f2 Binary files /dev/null and b/src/PaddleClas/deploy/output/DSCF4020.jpg differ diff --git a/src/PaddleClas/deploy/output/Image_25.jpg b/src/PaddleClas/deploy/output/Image_25.jpg new file mode 100644 index 0000000..e057020 Binary files /dev/null and b/src/PaddleClas/deploy/output/Image_25.jpg differ diff --git a/src/PaddleClas/deploy/output/Image_4.png b/src/PaddleClas/deploy/output/Image_4.png new file mode 100644 index 0000000..1eef66e Binary files /dev/null and b/src/PaddleClas/deploy/output/Image_4.png differ diff --git a/src/PaddleClas/deploy/output/Image_5.png b/src/PaddleClas/deploy/output/Image_5.png new file mode 100644 index 0000000..e1a04c9 Binary files /dev/null and b/src/PaddleClas/deploy/output/Image_5.png differ diff --git a/src/PaddleClas/deploy/output/Image_6.jpg b/src/PaddleClas/deploy/output/Image_6.jpg new file mode 100644 index 0000000..0a9daf1 Binary files /dev/null and b/src/PaddleClas/deploy/output/Image_6.jpg differ diff --git a/src/PaddleClas/deploy/output/Image_99.jpg b/src/PaddleClas/deploy/output/Image_99.jpg new file mode 100644 index 0000000..a6ee6cd Binary files /dev/null and b/src/PaddleClas/deploy/output/Image_99.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00017.jpg b/src/PaddleClas/deploy/output/image_00017.jpg new file mode 100644 index 0000000..3f68667 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00017.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00023.jpg b/src/PaddleClas/deploy/output/image_00023.jpg new file mode 100644 index 0000000..02dfac0 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00023.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00038.jpg b/src/PaddleClas/deploy/output/image_00038.jpg new file mode 100644 index 0000000..27d0cb3 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00038.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00055.jpg b/src/PaddleClas/deploy/output/image_00055.jpg new file mode 100644 index 0000000..982ad4a Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00055.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00082.jpg b/src/PaddleClas/deploy/output/image_00082.jpg new file mode 100644 index 0000000..b9851da Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00082.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00083.jpg b/src/PaddleClas/deploy/output/image_00083.jpg new file mode 100644 index 0000000..b664aa6 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00083.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00094.jpg b/src/PaddleClas/deploy/output/image_00094.jpg new file mode 100644 index 0000000..d1f5178 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00094.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00169.jpg b/src/PaddleClas/deploy/output/image_00169.jpg new file mode 100644 index 0000000..4bbcbca Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00169.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00212.jpg b/src/PaddleClas/deploy/output/image_00212.jpg new file mode 100644 index 0000000..a5a12c8 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00212.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00222.jpg b/src/PaddleClas/deploy/output/image_00222.jpg new file mode 100644 index 0000000..513d1d9 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00222.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00255.jpg b/src/PaddleClas/deploy/output/image_00255.jpg new file mode 100644 index 0000000..86a661d Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00255.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00269.jpg b/src/PaddleClas/deploy/output/image_00269.jpg new file mode 100644 index 0000000..7bc7ca5 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00269.jpg differ diff --git a/src/PaddleClas/deploy/output/image_00285.jpg b/src/PaddleClas/deploy/output/image_00285.jpg new file mode 100644 index 0000000..dd04ab2 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_00285.jpg differ diff --git a/src/PaddleClas/deploy/output/image_06734.jpg b/src/PaddleClas/deploy/output/image_06734.jpg new file mode 100644 index 0000000..1f0ba33 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_06734.jpg differ diff --git a/src/PaddleClas/deploy/output/image_06734.png b/src/PaddleClas/deploy/output/image_06734.png new file mode 100644 index 0000000..71e5cc2 Binary files /dev/null and b/src/PaddleClas/deploy/output/image_06734.png differ diff --git a/src/PaddleClas/deploy/output/mosilian.jpeg b/src/PaddleClas/deploy/output/mosilian.jpeg new file mode 100644 index 0000000..df7817d Binary files /dev/null and b/src/PaddleClas/deploy/output/mosilian.jpeg differ diff --git a/src/PaddleClas/deploy/output/nongfu_spring.jpeg b/src/PaddleClas/deploy/output/nongfu_spring.jpeg new file mode 100644 index 0000000..2354e01 Binary files /dev/null and b/src/PaddleClas/deploy/output/nongfu_spring.jpeg differ diff --git a/src/PaddleClas/deploy/output/sy_20110730200033739060.jpg b/src/PaddleClas/deploy/output/sy_20110730200033739060.jpg new file mode 100644 index 0000000..2fb2195 Binary files /dev/null and b/src/PaddleClas/deploy/output/sy_20110730200033739060.jpg differ diff --git a/src/PaddleClas/deploy/output/v2-b9c2666c76372cefc49c292ffa9d5903_r.jpg b/src/PaddleClas/deploy/output/v2-b9c2666c76372cefc49c292ffa9d5903_r.jpg new file mode 100644 index 0000000..49873a5 Binary files /dev/null and b/src/PaddleClas/deploy/output/v2-b9c2666c76372cefc49c292ffa9d5903_r.jpg differ diff --git a/src/PaddleClas/deploy/output/xpic9231.jpg b/src/PaddleClas/deploy/output/xpic9231.jpg new file mode 100644 index 0000000..2a2a2a3 Binary files /dev/null and b/src/PaddleClas/deploy/output/xpic9231.jpg differ diff --git a/src/PaddleClas/deploy/paddle2onnx/readme.md b/src/PaddleClas/deploy/paddle2onnx/readme.md new file mode 100644 index 0000000..d1307ea --- /dev/null +++ b/src/PaddleClas/deploy/paddle2onnx/readme.md @@ -0,0 +1,61 @@ +# paddle2onnx 模型转化与预测 + +本章节介绍 ResNet50_vd 模型如何转化为 ONNX 模型,并基于 ONNX 引擎预测。 + +## 1. 环境准备 + +需要准备 Paddle2ONNX 模型转化环境,和 ONNX 模型预测环境。 + +Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式,算子目前稳定支持导出 ONNX Opset 9~11,部分Paddle算子支持更低的ONNX Opset转换。 +更多细节可参考 [Paddle2ONNX](https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md) + +- 安装 Paddle2ONNX +``` +python3.7 -m pip install paddle2onnx +``` + +- 安装 ONNX 运行时 +``` +python3.7 -m pip install onnxruntime +``` + +## 2. 模型转换 + +- ResNet50_vd inference模型下载 + +``` +cd deploy +mkdir models && cd models +wget -nc https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/inference/ResNet50_vd_infer.tar && tar xf ResNet50_vd_infer.tar +cd .. +``` + +- 模型转换 + +使用 Paddle2ONNX 将 Paddle 静态图模型转换为 ONNX 模型格式: +``` +paddle2onnx --model_dir=./models/ResNet50_vd_infer/ \ +--model_filename=inference.pdmodel \ +--params_filename=inference.pdiparams \ +--save_file=./models/ResNet50_vd_infer/inference.onnx \ +--opset_version=10 \ +--enable_onnx_checker=True +``` + +执行完毕后,ONNX 模型 `inference.onnx` 会被保存在 `./models/ResNet50_vd_infer/` 路径下 + +## 3. onnx 预测 + +执行如下命令: +``` +python3.7 python/predict_cls.py \ +-c configs/inference_cls.yaml \ +-o Global.use_onnx=True \ +-o Global.use_gpu=False \ +-o Global.inference_model_dir=./models/ResNet50_vd_infer +``` + +结果如下: +``` +ILSVRC2012_val_00000010.jpeg: class id(s): [153, 204, 229, 332, 155], score(s): [0.69, 0.10, 0.02, 0.01, 0.01], label_name(s): ['Maltese dog, Maltese terrier, Maltese', 'Lhasa, Lhasa apso', 'Old English sheepdog, bobtail', 'Angora, Angora rabbit', 'Shih-Tzu'] +``` diff --git a/src/PaddleClas/deploy/paddleserving/__init__.py b/src/PaddleClas/deploy/paddleserving/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/PaddleClas/deploy/paddleserving/classification_web_service.py b/src/PaddleClas/deploy/paddleserving/classification_web_service.py new file mode 100644 index 0000000..75eb335 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/classification_web_service.py @@ -0,0 +1,74 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import sys +from paddle_serving_app.reader import Sequential, URL2Image, Resize, CenterCrop, RGB2BGR, Transpose, Div, Normalize, Base64ToImage +try: + from paddle_serving_server_gpu.web_service import WebService, Op +except ImportError: + from paddle_serving_server.web_service import WebService, Op +import logging +import numpy as np +import base64, cv2 + + +class ImagenetOp(Op): + def init_op(self): + self.seq = Sequential([ + Resize(256), CenterCrop(224), RGB2BGR(), Transpose((2, 0, 1)), + Div(255), Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], + True) + ]) + self.label_dict = {} + label_idx = 0 + with open("imagenet.label") as fin: + for line in fin: + self.label_dict[label_idx] = line.strip() + label_idx += 1 + + def preprocess(self, input_dicts, data_id, log_id): + (_, input_dict), = input_dicts.items() + batch_size = len(input_dict.keys()) + imgs = [] + for key in input_dict.keys(): + data = base64.b64decode(input_dict[key].encode('utf8')) + data = np.fromstring(data, np.uint8) + im = cv2.imdecode(data, cv2.IMREAD_COLOR) + img = self.seq(im) + imgs.append(img[np.newaxis, :].copy()) + input_imgs = np.concatenate(imgs, axis=0) + return {"inputs": input_imgs}, False, None, "" + + def postprocess(self, input_dicts, fetch_dict, data_id, log_id): + score_list = fetch_dict["prediction"] + result = {"label": [], "prob": []} + for score in score_list: + score = score.tolist() + max_score = max(score) + result["label"].append(self.label_dict[score.index(max_score)] + .strip().replace(",", "")) + result["prob"].append(max_score) + result["label"] = str(result["label"]) + result["prob"] = str(result["prob"]) + return result, None, "" + + +class ImageService(WebService): + def get_pipeline_response(self, read_op): + image_op = ImagenetOp(name="imagenet", input_ops=[read_op]) + return image_op + + +uci_service = ImageService(name="imagenet") +uci_service.prepare_pipeline_config("config.yml") +uci_service.run_service() diff --git a/src/PaddleClas/deploy/paddleserving/config.yml b/src/PaddleClas/deploy/paddleserving/config.yml new file mode 100644 index 0000000..d9f464d --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/config.yml @@ -0,0 +1,33 @@ +#worker_num, 最大并发数。当build_dag_each_worker=True时, 框架会创建worker_num个进程,每个进程内构建grpcSever和DAG +##当build_dag_each_worker=False时,框架会设置主线程grpc线程池的max_workers=worker_num +worker_num: 1 + +#http端口, rpc_port和http_port不允许同时为空。当rpc_port可用且http_port为空时,不自动生成http_port +http_port: 18080 +rpc_port: 9993 + +dag: + #op资源类型, True, 为线程模型;False,为进程模型 + is_thread_op: False +op: + imagenet: + #并发数,is_thread_op=True时,为线程并发;否则为进程并发 + concurrency: 1 + + #当op配置没有server_endpoints时,从local_service_conf读取本地服务配置 + local_service_conf: + + #uci模型路径 + model_config: ResNet50_vd_serving + + #计算硬件类型: 空缺时由devices决定(CPU/GPU),0=cpu, 1=gpu, 2=tensorRT, 3=arm cpu, 4=kunlun xpu + device_type: 1 + + #计算硬件ID,当devices为""或不写时为CPU预测;当devices为"0", "0,1,2"时为GPU预测,表示使用的GPU卡 + devices: "0" # "0,1" + + #client类型,包括brpc, grpc和local_predictor.local_predictor不启动Serving服务,进程内预测 + client_type: local_predictor + + #Fetch结果列表,以client_config中fetch_var的alias_name为准 + fetch_list: ["prediction"] diff --git a/src/PaddleClas/deploy/paddleserving/cpu_utilization.py b/src/PaddleClas/deploy/paddleserving/cpu_utilization.py new file mode 100644 index 0000000..984c723 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/cpu_utilization.py @@ -0,0 +1,4 @@ +import psutil +cpu_utilization=psutil.cpu_percent(1,False) +print('CPU_UTILIZATION:', cpu_utilization) + diff --git a/src/PaddleClas/deploy/paddleserving/daisy.jpg b/src/PaddleClas/deploy/paddleserving/daisy.jpg new file mode 100644 index 0000000..7edeca6 Binary files /dev/null and b/src/PaddleClas/deploy/paddleserving/daisy.jpg differ diff --git a/src/PaddleClas/deploy/paddleserving/imagenet.label b/src/PaddleClas/deploy/paddleserving/imagenet.label new file mode 100644 index 0000000..d714673 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/imagenet.label @@ -0,0 +1,1000 @@ +tench, Tinca tinca, +goldfish, Carassius auratus, +great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias, +tiger shark, Galeocerdo cuvieri, +hammerhead, hammerhead shark, +electric ray, crampfish, numbfish, torpedo, +stingray, +cock, +hen, +ostrich, Struthio camelus, +brambling, Fringilla montifringilla, +goldfinch, Carduelis carduelis, +house finch, linnet, Carpodacus mexicanus, +junco, snowbird, +indigo bunting, indigo finch, indigo bird, Passerina cyanea, +robin, American robin, Turdus migratorius, +bulbul, +jay, +magpie, +chickadee, +water ouzel, dipper, +kite, +bald eagle, American eagle, Haliaeetus leucocephalus, +vulture, +great grey owl, great gray owl, Strix nebulosa, +European fire salamander, Salamandra salamandra, +common newt, Triturus vulgaris, +eft, +spotted salamander, Ambystoma maculatum, +axolotl, mud puppy, Ambystoma mexicanum, +bullfrog, Rana catesbeiana, +tree frog, tree-frog, +tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui, +loggerhead, loggerhead turtle, Caretta caretta, +leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea, +mud turtle, +terrapin, +box turtle, box tortoise, +banded gecko, +common iguana, iguana, Iguana iguana, +American chameleon, anole, Anolis carolinensis, +whiptail, whiptail lizard, +agama, +frilled lizard, Chlamydosaurus kingi, +alligator lizard, +Gila monster, Heloderma suspectum, +green lizard, Lacerta viridis, +African chameleon, Chamaeleo chamaeleon, +Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis, +African crocodile, Nile crocodile, Crocodylus niloticus, +American alligator, Alligator mississipiensis, +triceratops, +thunder snake, worm snake, Carphophis amoenus, +ringneck snake, ring-necked snake, ring snake, +hognose snake, puff adder, sand viper, +green snake, grass snake, +king snake, kingsnake, +garter snake, grass snake, +water snake, +vine snake, +night snake, Hypsiglena torquata, +boa constrictor, Constrictor constrictor, +rock python, rock snake, Python sebae, +Indian cobra, Naja naja, +green mamba, +sea snake, +horned viper, cerastes, sand viper, horned asp, Cerastes cornutus, +diamondback, diamondback rattlesnake, Crotalus adamanteus, +sidewinder, horned rattlesnake, Crotalus cerastes, +trilobite, +harvestman, daddy longlegs, Phalangium opilio, +scorpion, +black and gold garden spider, Argiope aurantia, +barn spider, Araneus cavaticus, +garden spider, Aranea diademata, +black widow, Latrodectus mactans, +tarantula, +wolf spider, hunting spider, +tick, +centipede, +black grouse, +ptarmigan, +ruffed grouse, partridge, Bonasa umbellus, +prairie chicken, prairie grouse, prairie fowl, +peacock, +quail, +partridge, +African grey, African gray, Psittacus erithacus, +macaw, +sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita, +lorikeet, +coucal, +bee eater, +hornbill, +hummingbird, +jacamar, +toucan, +drake, +red-breasted merganser, Mergus serrator, +goose, +black swan, Cygnus atratus, +tusker, +echidna, spiny anteater, anteater, +platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus, +wallaby, brush kangaroo, +koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus, +wombat, +jellyfish, +sea anemone, anemone, +brain coral, +flatworm, platyhelminth, +nematode, nematode worm, roundworm, +conch, +snail, +slug, +sea slug, nudibranch, +chiton, coat-of-mail shell, sea cradle, polyplacophore, +chambered nautilus, pearly nautilus, nautilus, +Dungeness crab, Cancer magister, +rock crab, Cancer irroratus, +fiddler crab, +king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica, +American lobster, Northern lobster, Maine lobster, Homarus americanus, +spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish, +crayfish, crawfish, crawdad, crawdaddy, +hermit crab, +isopod, +white stork, Ciconia ciconia, +black stork, Ciconia nigra, +spoonbill, +flamingo, +little blue heron, Egretta caerulea, +American egret, great white heron, Egretta albus, +bittern, +crane, +limpkin, Aramus pictus, +European gallinule, Porphyrio porphyrio, +American coot, marsh hen, mud hen, water hen, Fulica americana, +bustard, +ruddy turnstone, Arenaria interpres, +red-backed sandpiper, dunlin, Erolia alpina, +redshank, Tringa totanus, +dowitcher, +oystercatcher, oyster catcher, +pelican, +king penguin, Aptenodytes patagonica, +albatross, mollymawk, +grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus, +killer whale, killer, orca, grampus, sea wolf, Orcinus orca, +dugong, Dugong dugon, +sea lion, +Chihuahua, +Japanese spaniel, +Maltese dog, Maltese terrier, Maltese, +Pekinese, Pekingese, Peke, +Shih-Tzu, +Blenheim spaniel, +papillon, +toy terrier, +Rhodesian ridgeback, +Afghan hound, Afghan, +basset, basset hound, +beagle, +bloodhound, sleuthhound, +bluetick, +black-and-tan coonhound, +Walker hound, Walker foxhound, +English foxhound, +redbone, +borzoi, Russian wolfhound, +Irish wolfhound, +Italian greyhound, +whippet, +Ibizan hound, Ibizan Podenco, +Norwegian elkhound, elkhound, +otterhound, otter hound, +Saluki, gazelle hound, +Scottish deerhound, deerhound, +Weimaraner, +Staffordshire bullterrier, Staffordshire bull terrier, +American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier, +Bedlington terrier, +Border terrier, +Kerry blue terrier, +Irish terrier, +Norfolk terrier, +Norwich terrier, +Yorkshire terrier, +wire-haired fox terrier, +Lakeland terrier, +Sealyham terrier, Sealyham, +Airedale, Airedale terrier, +cairn, cairn terrier, +Australian terrier, +Dandie Dinmont, Dandie Dinmont terrier, +Boston bull, Boston terrier, +miniature schnauzer, +giant schnauzer, +standard schnauzer, +Scotch terrier, Scottish terrier, Scottie, +Tibetan terrier, chrysanthemum dog, +silky terrier, Sydney silky, +soft-coated wheaten terrier, +West Highland white terrier, +Lhasa, Lhasa apso, +flat-coated retriever, +curly-coated retriever, +golden retriever, +Labrador retriever, +Chesapeake Bay retriever, +German short-haired pointer, +vizsla, Hungarian pointer, +English setter, +Irish setter, red setter, +Gordon setter, +Brittany spaniel, +clumber, clumber spaniel, +English springer, English springer spaniel, +Welsh springer spaniel, +cocker spaniel, English cocker spaniel, cocker, +Sussex spaniel, +Irish water spaniel, +kuvasz, +schipperke, +groenendael, +malinois, +briard, +kelpie, +komondor, +Old English sheepdog, bobtail, +Shetland sheepdog, Shetland sheep dog, Shetland, +collie, +Border collie, +Bouvier des Flandres, Bouviers des Flandres, +Rottweiler, +German shepherd, German shepherd dog, German police dog, alsatian, +Doberman, Doberman pinscher, +miniature pinscher, +Greater Swiss Mountain dog, +Bernese mountain dog, +Appenzeller, +EntleBucher, +boxer, +bull mastiff, +Tibetan mastiff, +French bulldog, +Great Dane, +Saint Bernard, St Bernard, +Eskimo dog, husky, +malamute, malemute, Alaskan malamute, +Siberian husky, +dalmatian, coach dog, carriage dog, +affenpinscher, monkey pinscher, monkey dog, +basenji, +pug, pug-dog, +Leonberg, +Newfoundland, Newfoundland dog, +Great Pyrenees, +Samoyed, Samoyede, +Pomeranian, +chow, chow chow, +keeshond, +Brabancon griffon, +Pembroke, Pembroke Welsh corgi, +Cardigan, Cardigan Welsh corgi, +toy poodle, +miniature poodle, +standard poodle, +Mexican hairless, +timber wolf, grey wolf, gray wolf, Canis lupus, +white wolf, Arctic wolf, Canis lupus tundrarum, +red wolf, maned wolf, Canis rufus, Canis niger, +coyote, prairie wolf, brush wolf, Canis latrans, +dingo, warrigal, warragal, Canis dingo, +dhole, Cuon alpinus, +African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus, +hyena, hyaena, +red fox, Vulpes vulpes, +kit fox, Vulpes macrotis, +Arctic fox, white fox, Alopex lagopus, +grey fox, gray fox, Urocyon cinereoargenteus, +tabby, tabby cat, +tiger cat, +Persian cat, +Siamese cat, Siamese, +Egyptian cat, +cougar, puma, catamount, mountain lion, painter, panther, Felis concolor, +lynx, catamount, +leopard, Panthera pardus, +snow leopard, ounce, Panthera uncia, +jaguar, panther, Panthera onca, Felis onca, +lion, king of beasts, Panthera leo, +tiger, Panthera tigris, +cheetah, chetah, Acinonyx jubatus, +brown bear, bruin, Ursus arctos, +American black bear, black bear, Ursus americanus, Euarctos americanus, +ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus, +sloth bear, Melursus ursinus, Ursus ursinus, +mongoose, +meerkat, mierkat, +tiger beetle, +ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle, +ground beetle, carabid beetle, +long-horned beetle, longicorn, longicorn beetle, +leaf beetle, chrysomelid, +dung beetle, +rhinoceros beetle, +weevil, +fly, +bee, +ant, emmet, pismire, +grasshopper, hopper, +cricket, +walking stick, walkingstick, stick insect, +cockroach, roach, +mantis, mantid, +cicada, cicala, +leafhopper, +lacewing, lacewing fly, +"dragonfly, darning needle, devils darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk", +damselfly, +admiral, +ringlet, ringlet butterfly, +monarch, monarch butterfly, milkweed butterfly, Danaus plexippus, +cabbage butterfly, +sulphur butterfly, sulfur butterfly, +lycaenid, lycaenid butterfly, +starfish, sea star, +sea urchin, +sea cucumber, holothurian, +wood rabbit, cottontail, cottontail rabbit, +hare, +Angora, Angora rabbit, +hamster, +porcupine, hedgehog, +fox squirrel, eastern fox squirrel, Sciurus niger, +marmot, +beaver, +guinea pig, Cavia cobaya, +sorrel, +zebra, +hog, pig, grunter, squealer, Sus scrofa, +wild boar, boar, Sus scrofa, +warthog, +hippopotamus, hippo, river horse, Hippopotamus amphibius, +ox, +water buffalo, water ox, Asiatic buffalo, Bubalus bubalis, +bison, +ram, tup, +bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis, +ibex, Capra ibex, +hartebeest, +impala, Aepyceros melampus, +gazelle, +Arabian camel, dromedary, Camelus dromedarius, +llama, +weasel, +mink, +polecat, fitch, foulmart, foumart, Mustela putorius, +black-footed ferret, ferret, Mustela nigripes, +otter, +skunk, polecat, wood pussy, +badger, +armadillo, +three-toed sloth, ai, Bradypus tridactylus, +orangutan, orang, orangutang, Pongo pygmaeus, +gorilla, Gorilla gorilla, +chimpanzee, chimp, Pan troglodytes, +gibbon, Hylobates lar, +siamang, Hylobates syndactylus, Symphalangus syndactylus, +guenon, guenon monkey, +patas, hussar monkey, Erythrocebus patas, +baboon, +macaque, +langur, +colobus, colobus monkey, +proboscis monkey, Nasalis larvatus, +marmoset, +capuchin, ringtail, Cebus capucinus, +howler monkey, howler, +titi, titi monkey, +spider monkey, Ateles geoffroyi, +squirrel monkey, Saimiri sciureus, +Madagascar cat, ring-tailed lemur, Lemur catta, +indri, indris, Indri indri, Indri brevicaudatus, +Indian elephant, Elephas maximus, +African elephant, Loxodonta africana, +lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens, +giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca, +barracouta, snoek, +eel, +coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch, +rock beauty, Holocanthus tricolor, +anemone fish, +sturgeon, +gar, garfish, garpike, billfish, Lepisosteus osseus, +lionfish, +puffer, pufferfish, blowfish, globefish, +abacus, +abaya, +"academic gown, academic robe, judges robe", +accordion, piano accordion, squeeze box, +acoustic guitar, +aircraft carrier, carrier, flattop, attack aircraft carrier, +airliner, +airship, dirigible, +altar, +ambulance, +amphibian, amphibious vehicle, +analog clock, +apiary, bee house, +apron, +ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin, +assault rifle, assault gun, +backpack, back pack, knapsack, packsack, rucksack, haversack, +bakery, bakeshop, bakehouse, +balance beam, beam, +balloon, +ballpoint, ballpoint pen, ballpen, Biro, +Band Aid, +banjo, +bannister, banister, balustrade, balusters, handrail, +barbell, +barber chair, +barbershop, +barn, +barometer, +barrel, cask, +barrow, garden cart, lawn cart, wheelbarrow, +baseball, +basketball, +bassinet, +bassoon, +bathing cap, swimming cap, +bath towel, +bathtub, bathing tub, bath, tub, +beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon, +beacon, lighthouse, beacon light, pharos, +beaker, +bearskin, busby, shako, +beer bottle, +beer glass, +bell cote, bell cot, +bib, +bicycle-built-for-two, tandem bicycle, tandem, +bikini, two-piece, +binder, ring-binder, +binoculars, field glasses, opera glasses, +birdhouse, +boathouse, +bobsled, bobsleigh, bob, +bolo tie, bolo, bola tie, bola, +bonnet, poke bonnet, +bookcase, +bookshop, bookstore, bookstall, +bottlecap, +bow, +bow tie, bow-tie, bowtie, +brass, memorial tablet, plaque, +brassiere, bra, bandeau, +breakwater, groin, groyne, mole, bulwark, seawall, jetty, +breastplate, aegis, egis, +broom, +bucket, pail, +buckle, +bulletproof vest, +bullet train, bullet, +butcher shop, meat market, +cab, hack, taxi, taxicab, +caldron, cauldron, +candle, taper, wax light, +cannon, +canoe, +can opener, tin opener, +cardigan, +car mirror, +carousel, carrousel, merry-go-round, roundabout, whirligig, +"carpenters kit, tool kit", +carton, +car wheel, +cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM, +cassette, +cassette player, +castle, +catamaran, +CD player, +cello, violoncello, +cellular telephone, cellular phone, cellphone, cell, mobile phone, +chain, +chainlink fence, +chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour, +chain saw, chainsaw, +chest, +chiffonier, commode, +chime, bell, gong, +china cabinet, china closet, +Christmas stocking, +church, church building, +cinema, movie theater, movie theatre, movie house, picture palace, +cleaver, meat cleaver, chopper, +cliff dwelling, +cloak, +clog, geta, patten, sabot, +cocktail shaker, +coffee mug, +coffeepot, +coil, spiral, volute, whorl, helix, +combination lock, +computer keyboard, keypad, +confectionery, confectionary, candy store, +container ship, containership, container vessel, +convertible, +corkscrew, bottle screw, +cornet, horn, trumpet, trump, +cowboy boot, +cowboy hat, ten-gallon hat, +cradle, +crane, +crash helmet, +crate, +crib, cot, +Crock Pot, +croquet ball, +crutch, +cuirass, +dam, dike, dyke, +desk, +desktop computer, +dial telephone, dial phone, +diaper, nappy, napkin, +digital clock, +digital watch, +dining table, board, +dishrag, dishcloth, +dishwasher, dish washer, dishwashing machine, +disk brake, disc brake, +dock, dockage, docking facility, +dogsled, dog sled, dog sleigh, +dome, +doormat, welcome mat, +drilling platform, offshore rig, +drum, membranophone, tympan, +drumstick, +dumbbell, +Dutch oven, +electric fan, blower, +electric guitar, +electric locomotive, +entertainment center, +envelope, +espresso maker, +face powder, +feather boa, boa, +file, file cabinet, filing cabinet, +fireboat, +fire engine, fire truck, +fire screen, fireguard, +flagpole, flagstaff, +flute, transverse flute, +folding chair, +football helmet, +forklift, +fountain, +fountain pen, +four-poster, +freight car, +French horn, horn, +frying pan, frypan, skillet, +fur coat, +garbage truck, dustcart, +gasmask, respirator, gas helmet, +gas pump, gasoline pump, petrol pump, island dispenser, +goblet, +go-kart, +golf ball, +golfcart, golf cart, +gondola, +gong, tam-tam, +gown, +grand piano, grand, +greenhouse, nursery, glasshouse, +grille, radiator grille, +grocery store, grocery, food market, market, +guillotine, +hair slide, +hair spray, +half track, +hammer, +hamper, +hand blower, blow dryer, blow drier, hair dryer, hair drier, +hand-held computer, hand-held microcomputer, +handkerchief, hankie, hanky, hankey, +hard disc, hard disk, fixed disk, +harmonica, mouth organ, harp, mouth harp, +harp, +harvester, reaper, +hatchet, +holster, +home theater, home theatre, +honeycomb, +hook, claw, +hoopskirt, crinoline, +horizontal bar, high bar, +horse cart, horse-cart, +hourglass, +iPod, +iron, smoothing iron, +"jack-o-lantern", +jean, blue jean, denim, +jeep, landrover, +jersey, T-shirt, tee shirt, +jigsaw puzzle, +jinrikisha, ricksha, rickshaw, +joystick, +kimono, +knee pad, +knot, +lab coat, laboratory coat, +ladle, +lampshade, lamp shade, +laptop, laptop computer, +lawn mower, mower, +lens cap, lens cover, +letter opener, paper knife, paperknife, +library, +lifeboat, +lighter, light, igniter, ignitor, +limousine, limo, +liner, ocean liner, +lipstick, lip rouge, +Loafer, +lotion, +loudspeaker, speaker, speaker unit, loudspeaker system, speaker system, +"loupe, jewelers loupe", +lumbermill, sawmill, +magnetic compass, +mailbag, postbag, +mailbox, letter box, +maillot, +maillot, tank suit, +manhole cover, +maraca, +marimba, xylophone, +mask, +matchstick, +maypole, +maze, labyrinth, +measuring cup, +medicine chest, medicine cabinet, +megalith, megalithic structure, +microphone, mike, +microwave, microwave oven, +military uniform, +milk can, +minibus, +miniskirt, mini, +minivan, +missile, +mitten, +mixing bowl, +mobile home, manufactured home, +Model T, +modem, +monastery, +monitor, +moped, +mortar, +mortarboard, +mosque, +mosquito net, +motor scooter, scooter, +mountain bike, all-terrain bike, off-roader, +mountain tent, +mouse, computer mouse, +mousetrap, +moving van, +muzzle, +nail, +neck brace, +necklace, +nipple, +notebook, notebook computer, +obelisk, +oboe, hautboy, hautbois, +ocarina, sweet potato, +odometer, hodometer, mileometer, milometer, +oil filter, +organ, pipe organ, +oscilloscope, scope, cathode-ray oscilloscope, CRO, +overskirt, +oxcart, +oxygen mask, +packet, +paddle, boat paddle, +paddlewheel, paddle wheel, +padlock, +paintbrush, +"pajama, pyjama, pjs, jammies", +palace, +panpipe, pandean pipe, syrinx, +paper towel, +parachute, chute, +parallel bars, bars, +park bench, +parking meter, +passenger car, coach, carriage, +patio, terrace, +pay-phone, pay-station, +pedestal, plinth, footstall, +pencil box, pencil case, +pencil sharpener, +perfume, essence, +Petri dish, +photocopier, +pick, plectrum, plectron, +pickelhaube, +picket fence, paling, +pickup, pickup truck, +pier, +piggy bank, penny bank, +pill bottle, +pillow, +ping-pong ball, +pinwheel, +pirate, pirate ship, +pitcher, ewer, +"plane, carpenters plane, woodworking plane", +planetarium, +plastic bag, +plate rack, +plow, plough, +"plunger, plumbers helper", +Polaroid camera, Polaroid Land camera, +pole, +police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria, +poncho, +pool table, billiard table, snooker table, +pop bottle, soda bottle, +pot, flowerpot, +"potters wheel", +power drill, +prayer rug, prayer mat, +printer, +prison, prison house, +projectile, missile, +projector, +puck, hockey puck, +punching bag, punch bag, punching ball, punchball, +purse, +quill, quill pen, +quilt, comforter, comfort, puff, +racer, race car, racing car, +racket, racquet, +radiator, +radio, wireless, +radio telescope, radio reflector, +rain barrel, +recreational vehicle, RV, R.V., +reel, +reflex camera, +refrigerator, icebox, +remote control, remote, +restaurant, eating house, eating place, eatery, +revolver, six-gun, six-shooter, +rifle, +rocking chair, rocker, +rotisserie, +rubber eraser, rubber, pencil eraser, +rugby ball, +rule, ruler, +running shoe, +safe, +safety pin, +saltshaker, salt shaker, +sandal, +sarong, +sax, saxophone, +scabbard, +scale, weighing machine, +school bus, +schooner, +scoreboard, +screen, CRT screen, +screw, +screwdriver, +seat belt, seatbelt, +sewing machine, +shield, buckler, +shoe shop, shoe-shop, shoe store, +shoji, +shopping basket, +shopping cart, +shovel, +shower cap, +shower curtain, +ski, +ski mask, +sleeping bag, +slide rule, slipstick, +sliding door, +slot, one-armed bandit, +snorkel, +snowmobile, +snowplow, snowplough, +soap dispenser, +soccer ball, +sock, +solar dish, solar collector, solar furnace, +sombrero, +soup bowl, +space bar, +space heater, +space shuttle, +spatula, +speedboat, +"spider web, spiders web", +spindle, +sports car, sport car, +spotlight, spot, +stage, +steam locomotive, +steel arch bridge, +steel drum, +stethoscope, +stole, +stone wall, +stopwatch, stop watch, +stove, +strainer, +streetcar, tram, tramcar, trolley, trolley car, +stretcher, +studio couch, day bed, +stupa, tope, +submarine, pigboat, sub, U-boat, +suit, suit of clothes, +sundial, +sunglass, +sunglasses, dark glasses, shades, +sunscreen, sunblock, sun blocker, +suspension bridge, +swab, swob, mop, +sweatshirt, +swimming trunks, bathing trunks, +swing, +switch, electric switch, electrical switch, +syringe, +table lamp, +tank, army tank, armored combat vehicle, armoured combat vehicle, +tape player, +teapot, +teddy, teddy bear, +television, television system, +tennis ball, +thatch, thatched roof, +theater curtain, theatre curtain, +thimble, +thresher, thrasher, threshing machine, +throne, +tile roof, +toaster, +tobacco shop, tobacconist shop, tobacconist, +toilet seat, +torch, +totem pole, +tow truck, tow car, wrecker, +toyshop, +tractor, +trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi, +tray, +trench coat, +tricycle, trike, velocipede, +trimaran, +tripod, +triumphal arch, +trolleybus, trolley coach, trackless trolley, +trombone, +tub, vat, +turnstile, +typewriter keyboard, +umbrella, +unicycle, monocycle, +upright, upright piano, +vacuum, vacuum cleaner, +vase, +vault, +velvet, +vending machine, +vestment, +viaduct, +violin, fiddle, +volleyball, +waffle iron, +wall clock, +wallet, billfold, notecase, pocketbook, +wardrobe, closet, press, +warplane, military plane, +washbasin, handbasin, washbowl, lavabo, wash-hand basin, +washer, automatic washer, washing machine, +water bottle, +water jug, +water tower, +whiskey jug, +whistle, +wig, +window screen, +window shade, +Windsor tie, +wine bottle, +wing, +wok, +wooden spoon, +wool, woolen, woollen, +worm fence, snake fence, snake-rail fence, Virginia fence, +wreck, +yawl, +yurt, +web site, website, internet site, site, +comic book, +crossword puzzle, crossword, +street sign, +traffic light, traffic signal, stoplight, +book jacket, dust cover, dust jacket, dust wrapper, +menu, +plate, +guacamole, +consomme, +hot pot, hotpot, +trifle, +ice cream, icecream, +ice lolly, lolly, lollipop, popsicle, +French loaf, +bagel, beigel, +pretzel, +cheeseburger, +hotdog, hot dog, red hot, +mashed potato, +head cabbage, +broccoli, +cauliflower, +zucchini, courgette, +spaghetti squash, +acorn squash, +butternut squash, +cucumber, cuke, +artichoke, globe artichoke, +bell pepper, +cardoon, +mushroom, +Granny Smith, +strawberry, +orange, +lemon, +fig, +pineapple, ananas, +banana, +jackfruit, jak, jack, +custard apple, +pomegranate, +hay, +carbonara, +chocolate sauce, chocolate syrup, +dough, +meat loaf, meatloaf, +pizza, pizza pie, +potpie, +burrito, +red wine, +espresso, +cup, +eggnog, +alp, +bubble, +cliff, drop, drop-off, +coral reef, +geyser, +lakeside, lakeshore, +promontory, headland, head, foreland, +sandbar, sand bar, +seashore, coast, seacoast, sea-coast, +valley, vale, +volcano, +ballplayer, baseball player, +groom, bridegroom, +scuba diver, +rapeseed, +daisy, +"yellow ladys slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum", +corn, +acorn, +hip, rose hip, rosehip, +buckeye, horse chestnut, conker, +coral fungus, +agaric, +gyromitra, +stinkhorn, carrion fungus, +earthstar, +hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa, +bolete, +ear, spike, capitulum, +toilet tissue, toilet paper, bathroom tissue diff --git a/src/PaddleClas/deploy/paddleserving/imgs/results.png b/src/PaddleClas/deploy/paddleserving/imgs/results.png new file mode 100644 index 0000000..ad44083 Binary files /dev/null and b/src/PaddleClas/deploy/paddleserving/imgs/results.png differ diff --git a/src/PaddleClas/deploy/paddleserving/imgs/results_shitu.png b/src/PaddleClas/deploy/paddleserving/imgs/results_shitu.png new file mode 100644 index 0000000..5c09949 Binary files /dev/null and b/src/PaddleClas/deploy/paddleserving/imgs/results_shitu.png differ diff --git a/src/PaddleClas/deploy/paddleserving/imgs/start_server.png b/src/PaddleClas/deploy/paddleserving/imgs/start_server.png new file mode 100644 index 0000000..8294e19 Binary files /dev/null and b/src/PaddleClas/deploy/paddleserving/imgs/start_server.png differ diff --git a/src/PaddleClas/deploy/paddleserving/imgs/start_server_shitu.png b/src/PaddleClas/deploy/paddleserving/imgs/start_server_shitu.png new file mode 100644 index 0000000..f2709ec Binary files /dev/null and b/src/PaddleClas/deploy/paddleserving/imgs/start_server_shitu.png differ diff --git a/src/PaddleClas/deploy/paddleserving/pipeline_http_client.py b/src/PaddleClas/deploy/paddleserving/pipeline_http_client.py new file mode 100644 index 0000000..290d647 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/pipeline_http_client.py @@ -0,0 +1,20 @@ +import requests +import json +import base64 +import os + + +def cv2_to_base64(image): + return base64.b64encode(image).decode('utf8') + + +if __name__ == "__main__": + url = "http://127.0.0.1:18080/imagenet/prediction" + with open(os.path.join(".", "daisy.jpg"), 'rb') as file: + image_data1 = file.read() + image = cv2_to_base64(image_data1) + + data = {"key": ["image"], "value": [image]} + for i in range(1): + r = requests.post(url=url, data=json.dumps(data)) + print(r.json()) diff --git a/src/PaddleClas/deploy/paddleserving/pipeline_rpc_client.py b/src/PaddleClas/deploy/paddleserving/pipeline_rpc_client.py new file mode 100644 index 0000000..75bcae0 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/pipeline_rpc_client.py @@ -0,0 +1,33 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +try: + from paddle_serving_server_gpu.pipeline import PipelineClient +except ImportError: + from paddle_serving_server.pipeline import PipelineClient +import base64 + +client = PipelineClient() +client.connect(['127.0.0.1:9993']) + +def cv2_to_base64(image): + return base64.b64encode(image).decode('utf8') + +if __name__ == "__main__": + with open("daisy.jpg", 'rb') as file: + image_data = file.read() + image = cv2_to_base64(image_data) + + for i in range(1): + ret = client.predict(feed_dict={"image": image}, fetch=["label", "prob"]) + print(ret) diff --git a/src/PaddleClas/deploy/paddleserving/readme.md b/src/PaddleClas/deploy/paddleserving/readme.md new file mode 100644 index 0000000..a2fdec2 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/readme.md @@ -0,0 +1 @@ +../../docs/zh_CN/inference_deployment/paddle_serving_deploy.md \ No newline at end of file diff --git a/src/PaddleClas/deploy/paddleserving/recognition/__init__.py b/src/PaddleClas/deploy/paddleserving/recognition/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/PaddleClas/deploy/paddleserving/recognition/config.yml b/src/PaddleClas/deploy/paddleserving/recognition/config.yml new file mode 100644 index 0000000..6ecc32e --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/config.yml @@ -0,0 +1,43 @@ +#worker_num, 最大并发数。当build_dag_each_worker=True时, 框架会创建worker_num个进程,每个进程内构建grpcSever和DAG +##当build_dag_each_worker=False时,框架会设置主线程grpc线程池的max_workers=worker_num +worker_num: 1 + +#http端口, rpc_port和http_port不允许同时为空。当rpc_port可用且http_port为空时,不自动生成http_port +http_port: 18081 +rpc_port: 9994 + +dag: + #op资源类型, True, 为线程模型;False,为进程模型 + is_thread_op: False +op: + rec: + #并发数,is_thread_op=True时,为线程并发;否则为进程并发 + concurrency: 1 + + #当op配置没有server_endpoints时,从local_service_conf读取本地服务配置 + local_service_conf: + + #uci模型路径 + model_config: ../../models/general_PPLCNet_x2_5_lite_v1.0_serving + + #计算硬件类型: 空缺时由devices决定(CPU/GPU),0=cpu, 1=gpu, 2=tensorRT, 3=arm cpu, 4=kunlun xpu + device_type: 1 + + #计算硬件ID,当devices为""或不写时为CPU预测;当devices为"0", "0,1,2"时为GPU预测,表示使用的GPU卡 + devices: "0" # "0,1" + + #client类型,包括brpc, grpc和local_predictor.local_predictor不启动Serving服务,进程内预测 + client_type: local_predictor + + #Fetch结果列表,以client_config中fetch_var的alias_name为准 + fetch_list: ["features"] + + det: + concurrency: 1 + local_service_conf: + client_type: local_predictor + device_type: 1 + devices: '0' + fetch_list: + - save_infer_model/scale_0.tmp_1 + model_config: ../../models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_serving/ diff --git a/src/PaddleClas/deploy/paddleserving/recognition/daoxiangcunjinzhubing_6.jpg b/src/PaddleClas/deploy/paddleserving/recognition/daoxiangcunjinzhubing_6.jpg new file mode 100644 index 0000000..fc64a95 Binary files /dev/null and b/src/PaddleClas/deploy/paddleserving/recognition/daoxiangcunjinzhubing_6.jpg differ diff --git a/src/PaddleClas/deploy/paddleserving/recognition/label_list.txt b/src/PaddleClas/deploy/paddleserving/recognition/label_list.txt new file mode 100644 index 0000000..35e26a6 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/label_list.txt @@ -0,0 +1,2 @@ +foreground +background \ No newline at end of file diff --git a/src/PaddleClas/deploy/paddleserving/recognition/pipeline_http_client.py b/src/PaddleClas/deploy/paddleserving/recognition/pipeline_http_client.py new file mode 100644 index 0000000..efc0f3a --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/pipeline_http_client.py @@ -0,0 +1,21 @@ +import requests +import json +import base64 +import os + +imgpath = "../../drink_dataset_v1.0/test_images/001.jpeg" + +def cv2_to_base64(image): + return base64.b64encode(image).decode('utf8') + +if __name__ == "__main__": + url = "http://127.0.0.1:18081/recognition/prediction" + + with open(os.path.join(".", imgpath), 'rb') as file: + image_data1 = file.read() + image = cv2_to_base64(image_data1) + data = {"key": ["image"], "value": [image]} + + for i in range(1): + r = requests.post(url=url, data=json.dumps(data)) + print(r.json()) diff --git a/src/PaddleClas/deploy/paddleserving/recognition/pipeline_rpc_client.py b/src/PaddleClas/deploy/paddleserving/recognition/pipeline_rpc_client.py new file mode 100644 index 0000000..50a1e42 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/pipeline_rpc_client.py @@ -0,0 +1,34 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +try: + from paddle_serving_server_gpu.pipeline import PipelineClient +except ImportError: + from paddle_serving_server.pipeline import PipelineClient +import base64 + +client = PipelineClient() +client.connect(['127.0.0.1:9994']) +imgpath = "../../drink_dataset_v1.0/test_images/001.jpeg" + +def cv2_to_base64(image): + return base64.b64encode(image).decode('utf8') + +if __name__ == "__main__": + with open(imgpath, 'rb') as file: + image_data = file.read() + image = cv2_to_base64(image_data) + + for i in range(1): + ret = client.predict(feed_dict={"image": image}, fetch=["result"]) + print(ret) diff --git a/src/PaddleClas/deploy/paddleserving/recognition/recognition_web_service.py b/src/PaddleClas/deploy/paddleserving/recognition/recognition_web_service.py new file mode 100644 index 0000000..4a3478b --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/recognition_web_service.py @@ -0,0 +1,209 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from paddle_serving_server.web_service import WebService, Op +import logging +import numpy as np +import sys +import cv2 +from paddle_serving_app.reader import * +import base64 +import os +import faiss +import pickle +import json + + +class DetOp(Op): + def init_op(self): + self.img_preprocess = Sequential([ + BGR2RGB(), Div(255.0), + Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], False), + Resize((640, 640)), Transpose((2, 0, 1)) + ]) + + self.img_postprocess = RCNNPostprocess("label_list.txt", "output") + self.threshold = 0.2 + self.max_det_results = 5 + + def generate_scale(self, im): + """ + Args: + im (np.ndarray): image (np.ndarray) + Returns: + im_scale_x: the resize ratio of X + im_scale_y: the resize ratio of Y + """ + target_size = [640, 640] + origin_shape = im.shape[:2] + resize_h, resize_w = target_size + im_scale_y = resize_h / float(origin_shape[0]) + im_scale_x = resize_w / float(origin_shape[1]) + return im_scale_y, im_scale_x + + def preprocess(self, input_dicts, data_id, log_id): + (_, input_dict), = input_dicts.items() + imgs = [] + raw_imgs = [] + for key in input_dict.keys(): + data = base64.b64decode(input_dict[key].encode('utf8')) + raw_imgs.append(data) + data = np.fromstring(data, np.uint8) + raw_im = cv2.imdecode(data, cv2.IMREAD_COLOR) + + im_scale_y, im_scale_x = self.generate_scale(raw_im) + im = self.img_preprocess(raw_im) + + im_shape = np.array(im.shape[1:]).reshape(-1) + scale_factor = np.array([im_scale_y, im_scale_x]).reshape(-1) + imgs.append({ + "image": im[np.newaxis, :], + "im_shape": im_shape[np.newaxis, :], + "scale_factor": scale_factor[np.newaxis, :], + }) + self.raw_img = raw_imgs + + feed_dict = { + "image": np.concatenate( + [x["image"] for x in imgs], axis=0), + "im_shape": np.concatenate( + [x["im_shape"] for x in imgs], axis=0), + "scale_factor": np.concatenate( + [x["scale_factor"] for x in imgs], axis=0) + } + return feed_dict, False, None, "" + + def postprocess(self, input_dicts, fetch_dict, data_id, log_id): + boxes = self.img_postprocess(fetch_dict, visualize=False) + boxes.sort(key=lambda x: x["score"], reverse=True) + boxes = filter(lambda x: x["score"] >= self.threshold, + boxes[:self.max_det_results]) + boxes = list(boxes) + for i in range(len(boxes)): + boxes[i]["bbox"][2] += boxes[i]["bbox"][0] - 1 + boxes[i]["bbox"][3] += boxes[i]["bbox"][1] - 1 + result = json.dumps(boxes) + res_dict = {"bbox_result": result, "image": self.raw_img} + return res_dict, None, "" + + +class RecOp(Op): + def init_op(self): + self.seq = Sequential([ + BGR2RGB(), Resize((224, 224)), Div(255), + Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], + False), Transpose((2, 0, 1)) + ]) + + index_dir = "../../drink_dataset_v1.0/index" + assert os.path.exists(os.path.join( + index_dir, "vector.index")), "vector.index not found ..." + assert os.path.exists(os.path.join( + index_dir, "id_map.pkl")), "id_map.pkl not found ... " + + self.searcher = faiss.read_index( + os.path.join(index_dir, "vector.index")) + + with open(os.path.join(index_dir, "id_map.pkl"), "rb") as fd: + self.id_map = pickle.load(fd) + + self.rec_nms_thresold = 0.05 + self.rec_score_thres = 0.5 + self.feature_normalize = True + self.return_k = 1 + + def preprocess(self, input_dicts, data_id, log_id): + (_, input_dict), = input_dicts.items() + raw_img = input_dict["image"][0] + data = np.frombuffer(raw_img, np.uint8) + origin_img = cv2.imdecode(data, cv2.IMREAD_COLOR) + dt_boxes = input_dict["bbox_result"] + boxes = json.loads(dt_boxes) + boxes.append({ + "category_id": 0, + "score": 1.0, + "bbox": [0, 0, origin_img.shape[1], origin_img.shape[0]] + }) + self.det_boxes = boxes + + #construct batch images for rec + imgs = [] + for box in boxes: + box = [int(x) for x in box["bbox"]] + im = origin_img[box[1]:box[3], box[0]:box[2]].copy() + img = self.seq(im) + imgs.append(img[np.newaxis, :].copy()) + + input_imgs = np.concatenate(imgs, axis=0) + return {"x": input_imgs}, False, None, "" + + def nms_to_rec_results(self, results, thresh=0.1): + filtered_results = [] + x1 = np.array([r["bbox"][0] for r in results]).astype("float32") + y1 = np.array([r["bbox"][1] for r in results]).astype("float32") + x2 = np.array([r["bbox"][2] for r in results]).astype("float32") + y2 = np.array([r["bbox"][3] for r in results]).astype("float32") + scores = np.array([r["rec_scores"] for r in results]) + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + while order.size > 0: + i = order[0] + xx1 = np.maximum(x1[i], x1[order[1:]]) + yy1 = np.maximum(y1[i], y1[order[1:]]) + xx2 = np.minimum(x2[i], x2[order[1:]]) + yy2 = np.minimum(y2[i], y2[order[1:]]) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (areas[i] + areas[order[1:]] - inter) + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + filtered_results.append(results[i]) + return filtered_results + + def postprocess(self, input_dicts, fetch_dict, data_id, log_id): + batch_features = fetch_dict["features"] + + if self.feature_normalize: + feas_norm = np.sqrt( + np.sum(np.square(batch_features), axis=1, keepdims=True)) + batch_features = np.divide(batch_features, feas_norm) + + scores, docs = self.searcher.search(batch_features, self.return_k) + + results = [] + for i in range(scores.shape[0]): + pred = {} + if scores[i][0] >= self.rec_score_thres: + pred["bbox"] = [int(x) for x in self.det_boxes[i]["bbox"]] + pred["rec_docs"] = self.id_map[docs[i][0]].split()[1] + pred["rec_scores"] = scores[i][0] + results.append(pred) + + #do nms + results = self.nms_to_rec_results(results, self.rec_nms_thresold) + return {"result": str(results)}, None, "" + + +class RecognitionService(WebService): + def get_pipeline_response(self, read_op): + det_op = DetOp(name="det", input_ops=[read_op]) + rec_op = RecOp(name="rec", input_ops=[det_op]) + return rec_op + + +product_recog_service = RecognitionService(name="recognition") +product_recog_service.prepare_pipeline_config("config.yml") +product_recog_service.run_service() diff --git a/src/PaddleClas/deploy/paddleserving/recognition/run_cpp_serving.sh b/src/PaddleClas/deploy/paddleserving/recognition/run_cpp_serving.sh new file mode 100644 index 0000000..affca99 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/run_cpp_serving.sh @@ -0,0 +1,7 @@ +nohup python3 -m paddle_serving_server.serve \ +--model ../../models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_serving \ + --port 9293 >>log_mainbody_detection.txt 1&>2 & + +nohup python3 -m paddle_serving_server.serve \ +--model ../../models/general_PPLCNet_x2_5_lite_v1.0_serving \ +--port 9294 >>log_feature_extraction.txt 1&>2 & diff --git a/src/PaddleClas/deploy/paddleserving/recognition/test_cpp_serving_client.py b/src/PaddleClas/deploy/paddleserving/recognition/test_cpp_serving_client.py new file mode 100644 index 0000000..a2bf1ae --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/recognition/test_cpp_serving_client.py @@ -0,0 +1,202 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +import numpy as np + +from paddle_serving_client import Client +from paddle_serving_app.reader import * +import cv2 +import faiss +import os +import pickle + + +class MainbodyDetect(): + """ + pp-shitu mainbody detect. + include preprocess, process, postprocess + return detect results + Attention: Postprocess include num limit and box filter; no nms + """ + + def __init__(self): + self.preprocess = DetectionSequential([ + DetectionFile2Image(), DetectionNormalize( + [0.485, 0.456, 0.406], [0.229, 0.224, 0.225], True), + DetectionResize( + (640, 640), False, interpolation=2), DetectionTranspose( + (2, 0, 1)) + ]) + + self.client = Client() + self.client.load_client_config( + "../../models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_client/serving_client_conf.prototxt" + ) + self.client.connect(['127.0.0.1:9293']) + + self.max_det_result = 5 + self.conf_threshold = 0.2 + + def predict(self, imgpath): + im, im_info = self.preprocess(imgpath) + im_shape = np.array(im.shape[1:]).reshape(-1) + scale_factor = np.array(list(im_info['scale_factor'])).reshape(-1) + + fetch_map = self.client.predict( + feed={ + "image": im, + "im_shape": im_shape, + "scale_factor": scale_factor, + }, + fetch=["save_infer_model/scale_0.tmp_1"], + batch=False) + return self.postprocess(fetch_map, imgpath) + + def postprocess(self, fetch_map, imgpath): + #1. get top max_det_result + det_results = fetch_map["save_infer_model/scale_0.tmp_1"] + if len(det_results) > self.max_det_result: + boxes_reserved = fetch_map[ + "save_infer_model/scale_0.tmp_1"][:self.max_det_result] + else: + boxes_reserved = det_results + + #2. do conf threshold + boxes_list = [] + for i in range(boxes_reserved.shape[0]): + if (boxes_reserved[i, 1]) > self.conf_threshold: + boxes_list.append(boxes_reserved[i, :]) + + #3. add origin image box + origin_img = cv2.imread(imgpath) + boxes_list.append( + np.array([0, 1.0, 0, 0, origin_img.shape[1], origin_img.shape[0]])) + return np.array(boxes_list) + + +class ObjectRecognition(): + """ + pp-shitu object recognion for all objects detected by MainbodyDetect. + include preprocess, process, postprocess + preprocess include preprocess for each image and batching. + Batch process + postprocess include retrieval and nms + """ + + def __init__(self): + self.client = Client() + self.client.load_client_config( + "../../models/general_PPLCNet_x2_5_lite_v1.0_client/serving_client_conf.prototxt" + ) + self.client.connect(["127.0.0.1:9294"]) + + self.seq = Sequential([ + BGR2RGB(), Resize((224, 224)), Div(255), + Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], + False), Transpose((2, 0, 1)) + ]) + + self.searcher, self.id_map = self.init_index() + + self.rec_nms_thresold = 0.05 + self.rec_score_thres = 0.5 + self.feature_normalize = True + self.return_k = 1 + + def init_index(self): + index_dir = "../../drink_dataset_v1.0/index" + assert os.path.exists(os.path.join( + index_dir, "vector.index")), "vector.index not found ..." + assert os.path.exists(os.path.join( + index_dir, "id_map.pkl")), "id_map.pkl not found ... " + + searcher = faiss.read_index(os.path.join(index_dir, "vector.index")) + + with open(os.path.join(index_dir, "id_map.pkl"), "rb") as fd: + id_map = pickle.load(fd) + return searcher, id_map + + def predict(self, det_boxes, imgpath): + #1. preprocess + batch_imgs = [] + origin_img = cv2.imread(imgpath) + for i in range(det_boxes.shape[0]): + box = det_boxes[i] + x1, y1, x2, y2 = [int(x) for x in box[2:]] + cropped_img = origin_img[y1:y2, x1:x2, :].copy() + tmp = self.seq(cropped_img) + batch_imgs.append(tmp) + batch_imgs = np.array(batch_imgs) + + #2. process + fetch_map = self.client.predict( + feed={"x": batch_imgs}, fetch=["features"], batch=True) + batch_features = fetch_map["features"] + + #3. postprocess + if self.feature_normalize: + feas_norm = np.sqrt( + np.sum(np.square(batch_features), axis=1, keepdims=True)) + batch_features = np.divide(batch_features, feas_norm) + scores, docs = self.searcher.search(batch_features, self.return_k) + + results = [] + for i in range(scores.shape[0]): + pred = {} + if scores[i][0] >= self.rec_score_thres: + pred["bbox"] = [int(x) for x in det_boxes[i, 2:]] + pred["rec_docs"] = self.id_map[docs[i][0]].split()[1] + pred["rec_scores"] = scores[i][0] + results.append(pred) + return self.nms_to_rec_results(results) + + def nms_to_rec_results(self, results): + filtered_results = [] + x1 = np.array([r["bbox"][0] for r in results]).astype("float32") + y1 = np.array([r["bbox"][1] for r in results]).astype("float32") + x2 = np.array([r["bbox"][2] for r in results]).astype("float32") + y2 = np.array([r["bbox"][3] for r in results]).astype("float32") + scores = np.array([r["rec_scores"] for r in results]) + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + while order.size > 0: + i = order[0] + xx1 = np.maximum(x1[i], x1[order[1:]]) + yy1 = np.maximum(y1[i], y1[order[1:]]) + xx2 = np.minimum(x2[i], x2[order[1:]]) + yy2 = np.minimum(y2[i], y2[order[1:]]) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (areas[i] + areas[order[1:]] - inter) + inds = np.where(ovr <= self.rec_nms_thresold)[0] + order = order[inds + 1] + filtered_results.append(results[i]) + return filtered_results + + +if __name__ == "__main__": + det = MainbodyDetect() + rec = ObjectRecognition() + + #1. get det_results + imgpath = "../../drink_dataset_v1.0/test_images/001.jpeg" + det_results = det.predict(imgpath) + + #2. get rec_results + rec_results = rec.predict(det_results, imgpath) + print(rec_results) diff --git a/src/PaddleClas/deploy/paddleserving/run_cpp_serving.sh b/src/PaddleClas/deploy/paddleserving/run_cpp_serving.sh new file mode 100644 index 0000000..05794b7 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/run_cpp_serving.sh @@ -0,0 +1,2 @@ +#run cls server: +nohup python3 -m paddle_serving_server.serve --model ResNet50_vd_serving --port 9292 & diff --git a/src/PaddleClas/deploy/paddleserving/test_cpp_serving_client.py b/src/PaddleClas/deploy/paddleserving/test_cpp_serving_client.py new file mode 100644 index 0000000..50794b3 --- /dev/null +++ b/src/PaddleClas/deploy/paddleserving/test_cpp_serving_client.py @@ -0,0 +1,52 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +from paddle_serving_client import Client + +#app +from paddle_serving_app.reader import Sequential, URL2Image, Resize +from paddle_serving_app.reader import CenterCrop, RGB2BGR, Transpose, Div, Normalize +import time + +client = Client() +client.load_client_config("./ResNet50_vd_serving/serving_server_conf.prototxt") +client.connect(["127.0.0.1:9292"]) + +label_dict = {} +label_idx = 0 +with open("imagenet.label") as fin: + for line in fin: + label_dict[label_idx] = line.strip() + label_idx += 1 + +#preprocess +seq = Sequential([ + URL2Image(), Resize(256), CenterCrop(224), RGB2BGR(), Transpose((2, 0, 1)), + Div(255), Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], True) +]) + +start = time.time() +image_file = "https://paddle-serving.bj.bcebos.com/imagenet-example/daisy.jpg" +for i in range(1): + img = seq(image_file) + fetch_map = client.predict( + feed={"inputs": img}, fetch=["prediction"], batch=False) + + prob = max(fetch_map["prediction"][0]) + label = label_dict[fetch_map["prediction"][0].tolist().index(prob)].strip( + ).replace(",", "") + print("prediction: {}, probability: {}".format(label, prob)) +end = time.time() +print(end - start) diff --git a/src/PaddleClas/deploy/python/.idea/.gitignore b/src/PaddleClas/deploy/python/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/src/PaddleClas/deploy/python/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/src/PaddleClas/deploy/python/.idea/inspectionProfiles/profiles_settings.xml b/src/PaddleClas/deploy/python/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/src/PaddleClas/deploy/python/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/python/.idea/misc.xml b/src/PaddleClas/deploy/python/.idea/misc.xml new file mode 100644 index 0000000..e2aaded --- /dev/null +++ b/src/PaddleClas/deploy/python/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/python/.idea/modules.xml b/src/PaddleClas/deploy/python/.idea/modules.xml new file mode 100644 index 0000000..614b3c1 --- /dev/null +++ b/src/PaddleClas/deploy/python/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/python/.idea/python.iml b/src/PaddleClas/deploy/python/.idea/python.iml new file mode 100644 index 0000000..db04eee --- /dev/null +++ b/src/PaddleClas/deploy/python/.idea/python.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/PaddleClas/deploy/python/__init__.py b/src/PaddleClas/deploy/python/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/PaddleClas/deploy/python/__pycache__/__init__.cpython-39.pyc b/src/PaddleClas/deploy/python/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..e55c2a9 Binary files /dev/null and b/src/PaddleClas/deploy/python/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/python/__pycache__/det_preprocess.cpython-39.pyc b/src/PaddleClas/deploy/python/__pycache__/det_preprocess.cpython-39.pyc new file mode 100644 index 0000000..89f6758 Binary files /dev/null and b/src/PaddleClas/deploy/python/__pycache__/det_preprocess.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/python/__pycache__/postprocess.cpython-39.pyc b/src/PaddleClas/deploy/python/__pycache__/postprocess.cpython-39.pyc new file mode 100644 index 0000000..a1bf4f1 Binary files /dev/null and b/src/PaddleClas/deploy/python/__pycache__/postprocess.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/python/__pycache__/predict_det.cpython-39.pyc b/src/PaddleClas/deploy/python/__pycache__/predict_det.cpython-39.pyc new file mode 100644 index 0000000..18ad706 Binary files /dev/null and b/src/PaddleClas/deploy/python/__pycache__/predict_det.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/python/__pycache__/predict_rec.cpython-39.pyc b/src/PaddleClas/deploy/python/__pycache__/predict_rec.cpython-39.pyc new file mode 100644 index 0000000..1bbf0c9 Binary files /dev/null and b/src/PaddleClas/deploy/python/__pycache__/predict_rec.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/python/__pycache__/preprocess.cpython-39.pyc b/src/PaddleClas/deploy/python/__pycache__/preprocess.cpython-39.pyc new file mode 100644 index 0000000..16e5e7a Binary files /dev/null and b/src/PaddleClas/deploy/python/__pycache__/preprocess.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/python/build_gallery.py b/src/PaddleClas/deploy/python/build_gallery.py new file mode 100644 index 0000000..7b69a04 --- /dev/null +++ b/src/PaddleClas/deploy/python/build_gallery.py @@ -0,0 +1,214 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import sys + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) + +import cv2 +import faiss +import numpy as np +from tqdm import tqdm +import pickle + +from python.predict_rec import RecPredictor + +from utils import logger +from utils import config + + +def split_datafile(data_file, image_root, delimiter="\t"): + ''' + data_file: image path and info, which can be splitted by spacer + image_root: image path root + delimiter: delimiter + ''' + gallery_images = [] + gallery_docs = [] + with open(data_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + for _, ori_line in enumerate(lines): + line = ori_line.strip().split(delimiter) + text_num = len(line) + assert text_num >= 2, f"line({ori_line}) must be splitted into at least 2 parts, but got {text_num}" + image_file = os.path.join(image_root, line[0]) + + gallery_images.append(image_file) + gallery_docs.append(ori_line.strip()) + + return gallery_images, gallery_docs + + +class GalleryBuilder(object): + def __init__(self, config): + + self.config = config + self.rec_predictor = RecPredictor(config) + assert 'IndexProcess' in config.keys(), "Index config not found ... " + self.build(config['IndexProcess']) + + def build(self, config): + ''' + build index from scratch + ''' + operation_method = config.get("index_operation", "new").lower() + + gallery_images, gallery_docs = split_datafile( + config['data_file'], config['image_root'], config['delimiter']) + + # when remove data in index, do not need extract fatures + if operation_method != "remove": + gallery_features = self._extract_features(gallery_images, config) + assert operation_method in [ + "new", "remove", "append" + ], "Only append, remove and new operation are supported" + + # vector.index: faiss index file + # id_map.pkl: use this file to map id to image_doc + if operation_method in ["remove", "append"]: + # if remove or append, vector.index and id_map.pkl must exist + assert os.path.join( + config["index_dir"], "vector.index" + ), "The vector.index dose not exist in {} when 'index_operation' is not None".format( + config["index_dir"]) + assert os.path.join( + config["index_dir"], "id_map.pkl" + ), "The id_map.pkl dose not exist in {} when 'index_operation' is not None".format( + config["index_dir"]) + index = faiss.read_index( + os.path.join(config["index_dir"], "vector.index")) + with open(os.path.join(config["index_dir"], "id_map.pkl"), + 'rb') as fd: + ids = pickle.load(fd) + assert index.ntotal == len(ids.keys( + )), "data number in index is not equal in in id_map" + else: + if not os.path.exists(config["index_dir"]): + os.makedirs(config["index_dir"], exist_ok=True) + index_method = config.get("index_method", "HNSW32") + + # if IVF method, cal ivf number automaticlly + if index_method == "IVF": + index_method = index_method + str( + min(int(len(gallery_images) // 8), 65536)) + ",Flat" + + # for binary index, add B at head of index_method + if config["dist_type"] == "hamming": + index_method = "B" + index_method + + #dist_type + dist_type = faiss.METRIC_INNER_PRODUCT if config[ + "dist_type"] == "IP" else faiss.METRIC_L2 + + #build index + if config["dist_type"] == "hamming": + index = faiss.index_binary_factory(config["embedding_size"], + index_method) + else: + index = faiss.index_factory(config["embedding_size"], + index_method, dist_type) + index = faiss.IndexIDMap2(index) + ids = {} + + if config["index_method"] == "HNSW32": + logger.warning( + "The HNSW32 method dose not support 'remove' operation") + + if operation_method != "remove": + # calculate id for new data + start_id = max(ids.keys()) + 1 if ids else 0 + ids_now = ( + np.arange(0, len(gallery_images)) + start_id).astype(np.int64) + + # only train when new index file + if operation_method == "new": + if config["dist_type"] == "hamming": + index.add(gallery_features) + else: + index.train(gallery_features) + + if not config["dist_type"] == "hamming": + index.add_with_ids(gallery_features, ids_now) + + for i, d in zip(list(ids_now), gallery_docs): + ids[i] = d + else: + if config["index_method"] == "HNSW32": + raise RuntimeError( + "The index_method: HNSW32 dose not support 'remove' operation" + ) + # remove ids in id_map, remove index data in faiss index + remove_ids = list( + filter(lambda k: ids.get(k) in gallery_docs, ids.keys())) + remove_ids = np.asarray(remove_ids) + index.remove_ids(remove_ids) + for k in remove_ids: + del ids[k] + + # store faiss index file and id_map file + if config["dist_type"] == "hamming": + faiss.write_index_binary( + index, os.path.join(config["index_dir"], "vector.index")) + else: + faiss.write_index( + index, os.path.join(config["index_dir"], "vector.index")) + + with open(os.path.join(config["index_dir"], "id_map.pkl"), 'wb') as fd: + pickle.dump(ids, fd) + + def _extract_features(self, gallery_images, config): + # extract gallery features + if config["dist_type"] == "hamming": + gallery_features = np.zeros( + [len(gallery_images), config['embedding_size'] // 8], + dtype=np.uint8) + else: + gallery_features = np.zeros( + [len(gallery_images), config['embedding_size']], + dtype=np.float32) + + #construct batch imgs and do inference + batch_size = config.get("batch_size", 32) + batch_img = [] + for i, image_file in enumerate(tqdm(gallery_images)): + img = cv2.imread(image_file) + if img is None: + logger.error("img empty, please check {}".format(image_file)) + exit() + img = img[:, :, ::-1] + batch_img.append(img) + + if (i + 1) % batch_size == 0: + rec_feat = self.rec_predictor.predict(batch_img) + gallery_features[i - batch_size + 1:i + 1, :] = rec_feat + batch_img = [] + + if len(batch_img) > 0: + rec_feat = self.rec_predictor.predict(batch_img) + gallery_features[-len(batch_img):, :] = rec_feat + batch_img = [] + + return gallery_features + + +def main(config): + GalleryBuilder(config) + return + + +if __name__ == "__main__": + args = config.parse_args() + config = config.get_config(args.config, overrides=args.override, show=True) + main(config) diff --git a/src/PaddleClas/deploy/python/det_preprocess.py b/src/PaddleClas/deploy/python/det_preprocess.py new file mode 100644 index 0000000..5f5760e --- /dev/null +++ b/src/PaddleClas/deploy/python/det_preprocess.py @@ -0,0 +1,205 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import cv2 +import numpy as np + + +def decode_image(im_file, im_info): + """read rgb image + Args: + im_file (str|np.ndarray): input can be image path or np.ndarray + im_info (dict): info of image + Returns: + im (np.ndarray): processed image (np.ndarray) + im_info (dict): info of processed image + """ + if isinstance(im_file, str): + with open(im_file, 'rb') as f: + im_read = f.read() + data = np.frombuffer(im_read, dtype='uint8') + im = cv2.imdecode(data, 1) # BGR mode, but need RGB mode + im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) + else: + im = im_file + im_info['im_shape'] = np.array(im.shape[:2], dtype=np.float32) + im_info['scale_factor'] = np.array([1., 1.], dtype=np.float32) + return im, im_info + + +class DetResize(object): + """resize image by target_size and max_size + Args: + target_size (int): the target size of image + keep_ratio (bool): whether keep_ratio or not, default true + interp (int): method of resize + """ + + def __init__( + self, + target_size, + keep_ratio=True, + interp=cv2.INTER_LINEAR, ): + if isinstance(target_size, int): + target_size = [target_size, target_size] + self.target_size = target_size + self.keep_ratio = keep_ratio + self.interp = interp + + def __call__(self, im, im_info): + """ + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + Returns: + im (np.ndarray): processed image (np.ndarray) + im_info (dict): info of processed image + """ + assert len(self.target_size) == 2 + assert self.target_size[0] > 0 and self.target_size[1] > 0 + im_channel = im.shape[2] + im_scale_y, im_scale_x = self.generate_scale(im) + # set image_shape + im_info['input_shape'][1] = int(im_scale_y * im.shape[0]) + im_info['input_shape'][2] = int(im_scale_x * im.shape[1]) + im = cv2.resize( + im, + None, + None, + fx=im_scale_x, + fy=im_scale_y, + interpolation=self.interp) + im_info['im_shape'] = np.array(im.shape[:2]).astype('float32') + im_info['scale_factor'] = np.array( + [im_scale_y, im_scale_x]).astype('float32') + return im, im_info + + def generate_scale(self, im): + """ + Args: + im (np.ndarray): image (np.ndarray) + Returns: + im_scale_x: the resize ratio of X + im_scale_y: the resize ratio of Y + """ + origin_shape = im.shape[:2] + im_c = im.shape[2] + if self.keep_ratio: + im_size_min = np.min(origin_shape) + im_size_max = np.max(origin_shape) + target_size_min = np.min(self.target_size) + target_size_max = np.max(self.target_size) + im_scale = float(target_size_min) / float(im_size_min) + if np.round(im_scale * im_size_max) > target_size_max: + im_scale = float(target_size_max) / float(im_size_max) + im_scale_x = im_scale + im_scale_y = im_scale + else: + resize_h, resize_w = self.target_size + im_scale_y = resize_h / float(origin_shape[0]) + im_scale_x = resize_w / float(origin_shape[1]) + return im_scale_y, im_scale_x + + +class DetNormalizeImage(object): + """normalize image + Args: + mean (list): im - mean + std (list): im / std + is_scale (bool): whether need im / 255 + is_channel_first (bool): if True: image shape is CHW, else: HWC + """ + + def __init__(self, mean, std, is_scale=True): + self.mean = mean + self.std = std + self.is_scale = is_scale + + def __call__(self, im, im_info): + """ + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + Returns: + im (np.ndarray): processed image (np.ndarray) + im_info (dict): info of processed image + """ + im = im.astype(np.float32, copy=False) + mean = np.array(self.mean)[np.newaxis, np.newaxis, :] + std = np.array(self.std)[np.newaxis, np.newaxis, :] + + if self.is_scale: + im = im / 255.0 + + im -= mean + im /= std + return im, im_info + + +class DetPermute(object): + """permute image + Args: + to_bgr (bool): whether convert RGB to BGR + channel_first (bool): whether convert HWC to CHW + """ + + def __init__(self, ): + super().__init__() + + def __call__(self, im, im_info): + """ + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + Returns: + im (np.ndarray): processed image (np.ndarray) + im_info (dict): info of processed image + """ + im = im.transpose((2, 0, 1)).copy() + return im, im_info + + +class DetPadStride(object): + """ padding image for model with FPN , instead PadBatch(pad_to_stride, pad_gt) in original config + Args: + stride (bool): model with FPN need image shape % stride == 0 + """ + + def __init__(self, stride=0): + self.coarsest_stride = stride + + def __call__(self, im, im_info): + """ + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + Returns: + im (np.ndarray): processed image (np.ndarray) + im_info (dict): info of processed image + """ + coarsest_stride = self.coarsest_stride + if coarsest_stride <= 0: + return im, im_info + im_c, im_h, im_w = im.shape + pad_h = int(np.ceil(float(im_h) / coarsest_stride) * coarsest_stride) + pad_w = int(np.ceil(float(im_w) / coarsest_stride) * coarsest_stride) + padding_im = np.zeros((im_c, pad_h, pad_w), dtype=np.float32) + padding_im[:, :im_h, :im_w] = im + return padding_im, im_info + + +def det_preprocess(im, im_info, preprocess_ops): + for operator in preprocess_ops: + im, im_info = operator(im, im_info) + return im, im_info diff --git a/src/PaddleClas/deploy/python/postprocess.py b/src/PaddleClas/deploy/python/postprocess.py new file mode 100644 index 0000000..d26cbaa --- /dev/null +++ b/src/PaddleClas/deploy/python/postprocess.py @@ -0,0 +1,161 @@ +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import copy +import shutil +from functools import partial +import importlib +import numpy as np +import paddle +import paddle.nn.functional as F + + +def build_postprocess(config): + if config is None: + return None + + mod = importlib.import_module(__name__) + config = copy.deepcopy(config) + + main_indicator = config.pop( + "main_indicator") if "main_indicator" in config else None + main_indicator = main_indicator if main_indicator else "" + + func_list = [] + for func in config: + func_list.append(getattr(mod, func)(**config[func])) + return PostProcesser(func_list, main_indicator) + + +class PostProcesser(object): + def __init__(self, func_list, main_indicator="Topk"): + self.func_list = func_list + self.main_indicator = main_indicator + + def __call__(self, x, image_file=None): + rtn = None + for func in self.func_list: + tmp = func(x, image_file) + if type(func).__name__ in self.main_indicator: + rtn = tmp + return rtn + + +class Topk(object): + def __init__(self, topk=1, class_id_map_file=None): + assert isinstance(topk, (int, )) + self.class_id_map = self.parse_class_id_map(class_id_map_file) + self.topk = topk + + def parse_class_id_map(self, class_id_map_file): + if class_id_map_file is None: + return None + + if not os.path.exists(class_id_map_file): + print( + "Warning: If want to use your own label_dict, please input legal path!\nOtherwise label_names will be empty!" + ) + return None + + try: + class_id_map = {} + with open(class_id_map_file, "r") as fin: + lines = fin.readlines() + for line in lines: + partition = line.split("\n")[0].partition(" ") + class_id_map[int(partition[0])] = str(partition[-1]) + except Exception as ex: + print(ex) + class_id_map = None + return class_id_map + + def __call__(self, x, file_names=None, multilabel=False): + if file_names is not None: + assert x.shape[0] == len(file_names) + y = [] + for idx, probs in enumerate(x): + index = probs.argsort(axis=0)[-self.topk:][::-1].astype( + "int32") if not multilabel else np.where( + probs >= 0.5)[0].astype("int32") + clas_id_list = [] + score_list = [] + label_name_list = [] + for i in index: + clas_id_list.append(i.item()) + score_list.append(probs[i].item()) + if self.class_id_map is not None: + label_name_list.append(self.class_id_map[i.item()]) + result = { + "class_ids": clas_id_list, + "scores": np.around( + score_list, decimals=5).tolist(), + } + if file_names is not None: + result["file_name"] = file_names[idx] + if label_name_list is not None: + result["label_names"] = label_name_list + y.append(result) + return y + + +class MultiLabelTopk(Topk): + def __init__(self, topk=1, class_id_map_file=None): + super().__init__() + + def __call__(self, x, file_names=None): + return super().__call__(x, file_names, multilabel=True) + + +class SavePreLabel(object): + def __init__(self, save_dir): + if save_dir is None: + raise Exception( + "Please specify save_dir if SavePreLabel specified.") + self.save_dir = partial(os.path.join, save_dir) + + def __call__(self, x, file_names=None): + if file_names is None: + return + assert x.shape[0] == len(file_names) + for idx, probs in enumerate(x): + index = probs.argsort(axis=0)[-1].astype("int32") + self.save(index, file_names[idx]) + + def save(self, id, image_file): + output_dir = self.save_dir(str(id)) + os.makedirs(output_dir, exist_ok=True) + shutil.copy(image_file, output_dir) + + +class Binarize(object): + def __init__(self, method="round"): + self.method = method + self.unit = np.array([[128, 64, 32, 16, 8, 4, 2, 1]]).T + + def __call__(self, x, file_names=None): + if self.method == "round": + x = np.round(x + 1).astype("uint8") - 1 + + if self.method == "sign": + x = ((np.sign(x) + 1) / 2).astype("uint8") + + embedding_size = x.shape[1] + assert embedding_size % 8 == 0, "The Binary index only support vectors with sizes multiple of 8" + + byte = np.zeros([x.shape[0], embedding_size // 8], dtype=np.uint8) + for i in range(embedding_size // 8): + byte[:, i:i + 1] = np.dot(x[:, i * 8:(i + 1) * 8], self.unit) + + return byte diff --git a/src/PaddleClas/deploy/python/predict_cls.py b/src/PaddleClas/deploy/python/predict_cls.py new file mode 100644 index 0000000..574caa3 --- /dev/null +++ b/src/PaddleClas/deploy/python/predict_cls.py @@ -0,0 +1,153 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import sys + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) + +import cv2 +import numpy as np + +from utils import logger +from utils import config +from utils.predictor import Predictor +from utils.get_image_list import get_image_list +from python.preprocess import create_operators +from python.postprocess import build_postprocess + + +class ClsPredictor(Predictor): + def __init__(self, config): + super().__init__(config["Global"]) + + self.preprocess_ops = [] + self.postprocess = None + if "PreProcess" in config: + if "transform_ops" in config["PreProcess"]: + self.preprocess_ops = create_operators(config["PreProcess"][ + "transform_ops"]) + if "PostProcess" in config: + self.postprocess = build_postprocess(config["PostProcess"]) + + # for whole_chain project to test each repo of paddle + self.benchmark = config["Global"].get("benchmark", False) + if self.benchmark: + import auto_log + import os + pid = os.getpid() + size = config["PreProcess"]["transform_ops"][1]["CropImage"][ + "size"] + self.auto_logger = auto_log.AutoLogger( + model_name=config["Global"].get("model_name", "cls"), + model_precision='fp16' + if config["Global"]["use_fp16"] else 'fp32', + batch_size=config["Global"].get("batch_size", 1), + data_shape=[3, size, size], + save_path=config["Global"].get("save_log_path", + "./auto_log.log"), + inference_config=self.config, + pids=pid, + process_name=None, + gpu_ids=None, + time_keys=[ + 'preprocess_time', 'inference_time', 'postprocess_time' + ], + warmup=2) + + def predict(self, images): + use_onnx = self.args.get("use_onnx", False) + if not use_onnx: + input_names = self.predictor.get_input_names() + input_tensor = self.predictor.get_input_handle(input_names[0]) + + output_names = self.predictor.get_output_names() + output_tensor = self.predictor.get_output_handle(output_names[0]) + else: + input_names = self.predictor.get_inputs()[0].name + output_names = self.predictor.get_outputs()[0].name + + if self.benchmark: + self.auto_logger.times.start() + if not isinstance(images, (list, )): + images = [images] + for idx in range(len(images)): + for ops in self.preprocess_ops: + images[idx] = ops(images[idx]) + image = np.array(images) + if self.benchmark: + self.auto_logger.times.stamp() + + if not use_onnx: + input_tensor.copy_from_cpu(image) + self.predictor.run() + batch_output = output_tensor.copy_to_cpu() + else: + batch_output = self.predictor.run( + output_names=[output_names], + input_feed={input_names: image})[0] + + if self.benchmark: + self.auto_logger.times.stamp() + if self.postprocess is not None: + batch_output = self.postprocess(batch_output) + if self.benchmark: + self.auto_logger.times.end(stamp=True) + return batch_output + + +def main(config): + cls_predictor = ClsPredictor(config) + image_list = get_image_list(config["Global"]["infer_imgs"]) + + batch_imgs = [] + batch_names = [] + cnt = 0 + for idx, img_path in enumerate(image_list): + img = cv2.imread(img_path) + if img is None: + logger.warning( + "Image file failed to read and has been skipped. The path: {}". + format(img_path)) + else: + img = img[:, :, ::-1] + batch_imgs.append(img) + img_name = os.path.basename(img_path) + batch_names.append(img_name) + cnt += 1 + + if cnt % config["Global"]["batch_size"] == 0 or (idx + 1 + ) == len(image_list): + if len(batch_imgs) == 0: + continue + batch_results = cls_predictor.predict(batch_imgs) + for number, result_dict in enumerate(batch_results): + filename = batch_names[number] + clas_ids = result_dict["class_ids"] + scores_str = "[{}]".format(", ".join("{:.2f}".format( + r) for r in result_dict["scores"])) + label_names = result_dict["label_names"] + print("{}:\tclass id(s): {}, score(s): {}, label_name(s): {}". + format(filename, clas_ids, scores_str, label_names)) + batch_imgs = [] + batch_names = [] + if cls_predictor.benchmark: + cls_predictor.auto_logger.report() + return + + +if __name__ == "__main__": + args = config.parse_args() + config = config.get_config(args.config, overrides=args.override, show=True) + main(config) diff --git a/src/PaddleClas/deploy/python/predict_det.py b/src/PaddleClas/deploy/python/predict_det.py new file mode 100644 index 0000000..e4e0a24 --- /dev/null +++ b/src/PaddleClas/deploy/python/predict_det.py @@ -0,0 +1,157 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import sys + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) + +from utils import logger +from utils import config +from utils.predictor import Predictor +from utils.get_image_list import get_image_list +from det_preprocess import det_preprocess +from preprocess import create_operators + +import os +import argparse +import time +import yaml +import ast +from functools import reduce +import cv2 +import numpy as np +import paddle + + +class DetPredictor(Predictor): + def __init__(self, config): + super().__init__(config["Global"], + config["Global"]["det_inference_model_dir"]) + + self.preprocess_ops = create_operators(config["DetPreProcess"][ + "transform_ops"]) + self.config = config + + def preprocess(self, img): + im_info = { + 'scale_factor': np.array( + [1., 1.], dtype=np.float32), + 'im_shape': np.array( + img.shape[:2], dtype=np.float32), + 'input_shape': self.config["Global"]["image_shape"], + "scale_factor": np.array( + [1., 1.], dtype=np.float32) + } + im, im_info = det_preprocess(img, im_info, self.preprocess_ops) + inputs = self.create_inputs(im, im_info) + return inputs + + def create_inputs(self, im, im_info): + """generate input for different model type + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + model_arch (str): model type + Returns: + inputs (dict): input of model + """ + inputs = {} + inputs['image'] = np.array((im, )).astype('float32') + inputs['im_shape'] = np.array( + (im_info['im_shape'], )).astype('float32') + inputs['scale_factor'] = np.array( + (im_info['scale_factor'], )).astype('float32') + + return inputs + + def parse_det_results(self, pred, threshold, label_list): + max_det_results = self.config["Global"]["max_det_results"] + keep_indexes = pred[:, 1].argsort()[::-1][:max_det_results] + results = [] + for idx in keep_indexes: + single_res = pred[idx] + class_id = int(single_res[0]) + score = single_res[1] + bbox = single_res[2:] + if score < threshold: + continue + label_name = label_list[class_id] + results.append({ + "class_id": class_id, + "score": score, + "bbox": bbox, + "label_name": label_name, + }) + return results + + def predict(self, image, threshold=0.5, run_benchmark=False): + ''' + Args: + image (str/np.ndarray): path of image/ np.ndarray read by cv2 + threshold (float): threshold of predicted box' score + Returns: + results (dict): include 'boxes': np.ndarray: shape:[N,6], N: number of box, + matix element:[class, score, x_min, y_min, x_max, y_max] + MaskRCNN's results include 'masks': np.ndarray: + shape: [N, im_h, im_w] + ''' + inputs = self.preprocess(image) + np_boxes = None + input_names = self.predictor.get_input_names() + + for i in range(len(input_names)): + input_tensor = self.predictor.get_input_handle(input_names[i]) + input_tensor.copy_from_cpu(inputs[input_names[i]]) + + t1 = time.time() + self.predictor.run() + output_names = self.predictor.get_output_names() + boxes_tensor = self.predictor.get_output_handle(output_names[0]) + np_boxes = boxes_tensor.copy_to_cpu() + t2 = time.time() + + print("Inference: {} ms per batch image".format((t2 - t1) * 1000.0)) + + # do not perform postprocess in benchmark mode + results = [] + if reduce(lambda x, y: x * y, np_boxes.shape) < 6: + print('[WARNNING] No object detected.') + results = np.array([]) + else: + results = np_boxes + + results = self.parse_det_results(results, + self.config["Global"]["threshold"], + self.config["Global"]["labe_list"]) + return results + + +def main(config): + det_predictor = DetPredictor(config) + image_list = get_image_list(config["Global"]["infer_imgs"]) + + assert config["Global"]["batch_size"] == 1 + for idx, image_file in enumerate(image_list): + img = cv2.imread(image_file)[:, :, ::-1] + output = det_predictor.predict(img) + print(output) + + return + + +if __name__ == "__main__": + args = config.parse_args() + config = config.get_config(args.config, overrides=args.override, show=True) + main(config) diff --git a/src/PaddleClas/deploy/python/predict_rec.py b/src/PaddleClas/deploy/python/predict_rec.py new file mode 100644 index 0000000..e243358 --- /dev/null +++ b/src/PaddleClas/deploy/python/predict_rec.py @@ -0,0 +1,148 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import sys + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) + +import cv2 +import numpy as np + +from utils import logger +from utils import config +from utils.predictor import Predictor +from utils.get_image_list import get_image_list +from preprocess import create_operators +from postprocess import build_postprocess + + +class RecPredictor(Predictor): + def __init__(self, config): + super().__init__(config["Global"], + config["Global"]["rec_inference_model_dir"]) + self.preprocess_ops = create_operators(config["RecPreProcess"][ + "transform_ops"]) + self.postprocess = build_postprocess(config["RecPostProcess"]) + self.benchmark = config["Global"].get("benchmark", False) + + if self.benchmark: + import auto_log + pid = os.getpid() + self.auto_logger = auto_log.AutoLogger( + model_name=config["Global"].get("model_name", "rec"), + model_precision='fp16' + if config["Global"]["use_fp16"] else 'fp32', + batch_size=config["Global"].get("batch_size", 1), + data_shape=[3, 224, 224], + save_path=config["Global"].get("save_log_path", + "./auto_log.log"), + inference_config=self.config, + pids=pid, + process_name=None, + gpu_ids=None, + time_keys=[ + 'preprocess_time', 'inference_time', 'postprocess_time' + ], + warmup=2) + + def predict(self, images, feature_normalize=True): + use_onnx = self.args.get("use_onnx", False) + if not use_onnx: + input_names = self.predictor.get_input_names() + input_tensor = self.predictor.get_input_handle(input_names[0]) + + output_names = self.predictor.get_output_names() + output_tensor = self.predictor.get_output_handle(output_names[0]) + else: + input_names = self.predictor.get_inputs()[0].name + output_names = self.predictor.get_outputs()[0].name + + if self.benchmark: + self.auto_logger.times.start() + if not isinstance(images, (list, )): + images = [images] + for idx in range(len(images)): + for ops in self.preprocess_ops: + images[idx] = ops(images[idx]) + image = np.array(images) + if self.benchmark: + self.auto_logger.times.stamp() + + if not use_onnx: + input_tensor.copy_from_cpu(image) + self.predictor.run() + batch_output = output_tensor.copy_to_cpu() + else: + batch_output = self.predictor.run( + output_names=[output_names], + input_feed={input_names: image})[0] + + if self.benchmark: + self.auto_logger.times.stamp() + + if feature_normalize: + feas_norm = np.sqrt( + np.sum(np.square(batch_output), axis=1, keepdims=True)) + batch_output = np.divide(batch_output, feas_norm) + + if self.postprocess is not None: + batch_output = self.postprocess(batch_output) + + if self.benchmark: + self.auto_logger.times.end(stamp=True) + return batch_output + + +def main(config): + rec_predictor = RecPredictor(config) + image_list = get_image_list(config["Global"]["infer_imgs"]) + + batch_imgs = [] + batch_names = [] + cnt = 0 + for idx, img_path in enumerate(image_list): + img = cv2.imread(img_path) + if img is None: + logger.warning( + "Image file failed to read and has been skipped. The path: {}". + format(img_path)) + else: + img = img[:, :, ::-1] + batch_imgs.append(img) + img_name = os.path.basename(img_path) + batch_names.append(img_name) + cnt += 1 + + if cnt % config["Global"]["batch_size"] == 0 or (idx + 1 + ) == len(image_list): + if len(batch_imgs) == 0: + continue + + batch_results = rec_predictor.predict(batch_imgs) + for number, result_dict in enumerate(batch_results): + filename = batch_names[number] + print("{}:\t{}".format(filename, result_dict)) + batch_imgs = [] + batch_names = [] + if rec_predictor.benchmark: + rec_predictor.auto_logger.report() + + return + + +if __name__ == "__main__": + args = config.parse_args() + config = config.get_config(args.config, overrides=args.override, show=True) + main(config) diff --git a/src/PaddleClas/deploy/python/predict_system.py b/src/PaddleClas/deploy/python/predict_system.py new file mode 100644 index 0000000..e45ee16 --- /dev/null +++ b/src/PaddleClas/deploy/python/predict_system.py @@ -0,0 +1,155 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import sys + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) + +import copy +import cv2 +import numpy as np +import faiss +import pickle + +from python.predict_rec import RecPredictor +from python.predict_det import DetPredictor + +from utils import logger +from utils import config +from utils.get_image_list import get_image_list +from utils.draw_bbox import draw_bbox_results + + +class SystemPredictor(object): + def __init__(self, config): + + self.config = config + self.rec_predictor = RecPredictor(config) + self.det_predictor = DetPredictor(config) + + assert 'IndexProcess' in config.keys(), "Index config not found ... " + self.return_k = self.config['IndexProcess']['return_k'] + + index_dir = self.config["IndexProcess"]["index_dir"] + assert os.path.exists(os.path.join( + index_dir, "vector.index")), "vector.index not found ..." + assert os.path.exists(os.path.join( + index_dir, "id_map.pkl")), "id_map.pkl not found ... " + + if config['IndexProcess'].get("dist_type") == "hamming": + self.Searcher = faiss.read_index_binary( + os.path.join(index_dir, "vector.index")) + else: + self.Searcher = faiss.read_index( + os.path.join(index_dir, "vector.index")) + + with open(os.path.join(index_dir, "id_map.pkl"), "rb") as fd: + self.id_map = pickle.load(fd) + + def append_self(self, results, shape): + results.append({ + "class_id": 0, + "score": 1.0, + "bbox": + np.array([0, 0, shape[1], shape[0]]), # xmin, ymin, xmax, ymax + "label_name": "foreground", + }) + return results + + def nms_to_rec_results(self, results, thresh=0.1): + filtered_results = [] + x1 = np.array([r["bbox"][0] for r in results]).astype("float32") + y1 = np.array([r["bbox"][1] for r in results]).astype("float32") + x2 = np.array([r["bbox"][2] for r in results]).astype("float32") + y2 = np.array([r["bbox"][3] for r in results]).astype("float32") + scores = np.array([r["rec_scores"] for r in results]) + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + while order.size > 0: + i = order[0] + xx1 = np.maximum(x1[i], x1[order[1:]]) + yy1 = np.maximum(y1[i], y1[order[1:]]) + xx2 = np.minimum(x2[i], x2[order[1:]]) + yy2 = np.minimum(y2[i], y2[order[1:]]) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (areas[i] + areas[order[1:]] - inter) + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + filtered_results.append(results[i]) + + return filtered_results + + def predict(self, img): + output = [] + # st1: get all detection results + results = self.det_predictor.predict(img) + + # st2: add the whole image for recognition to improve recall + results = self.append_self(results, img.shape) + + # st3: recognition process, use score_thres to ensure accuracy + for result in results: + preds = {} + xmin, ymin, xmax, ymax = result["bbox"].astype("int") + crop_img = img[ymin:ymax, xmin:xmax, :].copy() + rec_results = self.rec_predictor.predict(crop_img) + preds["bbox"] = [xmin, ymin, xmax, ymax] + scores, docs = self.Searcher.search(rec_results, self.return_k) + + # just top-1 result will be returned for the final + if self.config["IndexProcess"]["dist_type"] == "hamming": + if scores[0][0] <= self.config["IndexProcess"][ + "hamming_radius"]: + preds["rec_docs"] = self.id_map[docs[0][0]].split()[1] + preds["rec_scores"] = scores[0][0] + output.append(preds) + else: + if scores[0][0] >= self.config["IndexProcess"]["score_thres"]: + preds["rec_docs"] = self.id_map[docs[0][0]].split()[1] + preds["rec_scores"] = scores[0][0] + output.append(preds) + + # st5: nms to the final results to avoid fetching duplicate results + output = self.nms_to_rec_results( + output, self.config["Global"]["rec_nms_thresold"]) + + return output + + +def main(config): + system_predictor = SystemPredictor(config) + image_list = get_image_list(config["Global"]["infer_imgs"]) + + assert config["Global"]["batch_size"] == 1 + for idx, image_file in enumerate(image_list): + img = cv2.imread(image_file)[:, :, ::-1] + cv2.imshow('IMG', img) + cv2.waitKey() + cv2.destroyAllWindows() + output = system_predictor.predict(img) + draw_bbox_results(img, output, image_file) + print(output) + + return + + +if __name__ == "__main__": + args = config.parse_args() + config = config.get_config(args.config, overrides=args.override, show=True) + main(config) diff --git a/src/PaddleClas/deploy/python/preprocess.py b/src/PaddleClas/deploy/python/preprocess.py new file mode 100644 index 0000000..1da32ad --- /dev/null +++ b/src/PaddleClas/deploy/python/preprocess.py @@ -0,0 +1,337 @@ +""" +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +from functools import partial +import six +import math +import random +import cv2 +import numpy as np +import importlib +from PIL import Image + +from python.det_preprocess import DetNormalizeImage, DetPadStride, DetPermute, DetResize + + +def create_operators(params): + """ + create operators based on the config + + Args: + params(list): a dict list, used to create some operators + """ + assert isinstance(params, list), ('operator config should be a list') + mod = importlib.import_module(__name__) + ops = [] + for operator in params: + assert isinstance(operator, + dict) and len(operator) == 1, "yaml format error" + op_name = list(operator)[0] + param = {} if operator[op_name] is None else operator[op_name] + op = getattr(mod, op_name)(**param) + ops.append(op) + + return ops + + +class UnifiedResize(object): + def __init__(self, interpolation=None, backend="cv2"): + _cv2_interp_from_str = { + 'nearest': cv2.INTER_NEAREST, + 'bilinear': cv2.INTER_LINEAR, + 'area': cv2.INTER_AREA, + 'bicubic': cv2.INTER_CUBIC, + 'lanczos': cv2.INTER_LANCZOS4 + } + _pil_interp_from_str = { + 'nearest': Image.NEAREST, + 'bilinear': Image.BILINEAR, + 'bicubic': Image.BICUBIC, + 'box': Image.BOX, + 'lanczos': Image.LANCZOS, + 'hamming': Image.HAMMING + } + + def _pil_resize(src, size, resample): + pil_img = Image.fromarray(src) + pil_img = pil_img.resize(size, resample) + return np.asarray(pil_img) + + if backend.lower() == "cv2": + if isinstance(interpolation, str): + interpolation = _cv2_interp_from_str[interpolation.lower()] + # compatible with opencv < version 4.4.0 + elif interpolation is None: + interpolation = cv2.INTER_LINEAR + self.resize_func = partial(cv2.resize, interpolation=interpolation) + elif backend.lower() == "pil": + if isinstance(interpolation, str): + interpolation = _pil_interp_from_str[interpolation.lower()] + self.resize_func = partial(_pil_resize, resample=interpolation) + else: + logger.warning( + f"The backend of Resize only support \"cv2\" or \"PIL\". \"f{backend}\" is unavailable. Use \"cv2\" instead." + ) + self.resize_func = cv2.resize + + def __call__(self, src, size): + return self.resize_func(src, size) + + +class OperatorParamError(ValueError): + """ OperatorParamError + """ + pass + + +class DecodeImage(object): + """ decode image """ + + def __init__(self, to_rgb=True, to_np=False, channel_first=False): + self.to_rgb = to_rgb + self.to_np = to_np # to numpy + self.channel_first = channel_first # only enabled when to_np is True + + def __call__(self, img): + if six.PY2: + assert type(img) is str and len( + img) > 0, "invalid input 'img' in DecodeImage" + else: + assert type(img) is bytes and len( + img) > 0, "invalid input 'img' in DecodeImage" + data = np.frombuffer(img, dtype='uint8') + img = cv2.imdecode(data, 1) + if self.to_rgb: + assert img.shape[2] == 3, 'invalid shape of image[%s]' % ( + img.shape) + img = img[:, :, ::-1] + + if self.channel_first: + img = img.transpose((2, 0, 1)) + + return img + + +class ResizeImage(object): + """ resize image """ + + def __init__(self, + size=None, + resize_short=None, + interpolation=None, + backend="cv2"): + if resize_short is not None and resize_short > 0: + self.resize_short = resize_short + self.w = None + self.h = None + elif size is not None: + self.resize_short = None + self.w = size if type(size) is int else size[0] + self.h = size if type(size) is int else size[1] + else: + raise OperatorParamError("invalid params for ReisizeImage for '\ + 'both 'size' and 'resize_short' are None") + + self._resize_func = UnifiedResize( + interpolation=interpolation, backend=backend) + + def __call__(self, img): + img_h, img_w = img.shape[:2] + if self.resize_short is not None: + percent = float(self.resize_short) / min(img_w, img_h) + w = int(round(img_w * percent)) + h = int(round(img_h * percent)) + else: + w = self.w + h = self.h + return self._resize_func(img, (w, h)) + + +class CropImage(object): + """ crop image """ + + def __init__(self, size): + if type(size) is int: + self.size = (size, size) + else: + self.size = size # (h, w) + + def __call__(self, img): + w, h = self.size + img_h, img_w = img.shape[:2] + + if img_h < h or img_w < w: + raise Exception( + f"The size({h}, {w}) of CropImage must be greater than size({img_h}, {img_w}) of image. Please check image original size and size of ResizeImage if used." + ) + + w_start = (img_w - w) // 2 + h_start = (img_h - h) // 2 + + w_end = w_start + w + h_end = h_start + h + return img[h_start:h_end, w_start:w_end, :] + + +class RandCropImage(object): + """ random crop image """ + + def __init__(self, + size, + scale=None, + ratio=None, + interpolation=None, + backend="cv2"): + if type(size) is int: + self.size = (size, size) # (h, w) + else: + self.size = size + + self.scale = [0.08, 1.0] if scale is None else scale + self.ratio = [3. / 4., 4. / 3.] if ratio is None else ratio + + self._resize_func = UnifiedResize( + interpolation=interpolation, backend=backend) + + def __call__(self, img): + size = self.size + scale = self.scale + ratio = self.ratio + + aspect_ratio = math.sqrt(random.uniform(*ratio)) + w = 1. * aspect_ratio + h = 1. / aspect_ratio + + img_h, img_w = img.shape[:2] + + bound = min((float(img_w) / img_h) / (w**2), + (float(img_h) / img_w) / (h**2)) + scale_max = min(scale[1], bound) + scale_min = min(scale[0], bound) + + target_area = img_w * img_h * random.uniform(scale_min, scale_max) + target_size = math.sqrt(target_area) + w = int(target_size * w) + h = int(target_size * h) + + i = random.randint(0, img_w - w) + j = random.randint(0, img_h - h) + + img = img[j:j + h, i:i + w, :] + + return self._resize_func(img, size) + + +class RandFlipImage(object): + """ random flip image + flip_code: + 1: Flipped Horizontally + 0: Flipped Vertically + -1: Flipped Horizontally & Vertically + """ + + def __init__(self, flip_code=1): + assert flip_code in [-1, 0, 1 + ], "flip_code should be a value in [-1, 0, 1]" + self.flip_code = flip_code + + def __call__(self, img): + if random.randint(0, 1) == 1: + return cv2.flip(img, self.flip_code) + else: + return img + + +class AutoAugment(object): + def __init__(self): + self.policy = ImageNetPolicy() + + def __call__(self, img): + from PIL import Image + img = np.ascontiguousarray(img) + img = Image.fromarray(img) + img = self.policy(img) + img = np.asarray(img) + + +class NormalizeImage(object): + """ normalize image such as substract mean, divide std + """ + + def __init__(self, + scale=None, + mean=None, + std=None, + order='chw', + output_fp16=False, + channel_num=3): + if isinstance(scale, str): + scale = eval(scale) + assert channel_num in [ + 3, 4 + ], "channel number of input image should be set to 3 or 4." + self.channel_num = channel_num + self.output_dtype = 'float16' if output_fp16 else 'float32' + self.scale = np.float32(scale if scale is not None else 1.0 / 255.0) + self.order = order + mean = mean if mean is not None else [0.485, 0.456, 0.406] + std = std if std is not None else [0.229, 0.224, 0.225] + + shape = (3, 1, 1) if self.order == 'chw' else (1, 1, 3) + self.mean = np.array(mean).reshape(shape).astype('float32') + self.std = np.array(std).reshape(shape).astype('float32') + + def __call__(self, img): + from PIL import Image + if isinstance(img, Image.Image): + img = np.array(img) + + assert isinstance(img, + np.ndarray), "invalid input 'img' in NormalizeImage" + + img = (img.astype('float32') * self.scale - self.mean) / self.std + + if self.channel_num == 4: + img_h = img.shape[1] if self.order == 'chw' else img.shape[0] + img_w = img.shape[2] if self.order == 'chw' else img.shape[1] + pad_zeros = np.zeros( + (1, img_h, img_w)) if self.order == 'chw' else np.zeros( + (img_h, img_w, 1)) + img = (np.concatenate( + (img, pad_zeros), axis=0) + if self.order == 'chw' else np.concatenate( + (img, pad_zeros), axis=2)) + return img.astype(self.output_dtype) + + +class ToCHWImage(object): + """ convert hwc image to chw image + """ + + def __init__(self): + pass + + def __call__(self, img): + from PIL import Image + if isinstance(img, Image.Image): + img = np.array(img) + + return img.transpose((2, 0, 1)) diff --git a/src/PaddleClas/deploy/shell/predict.sh b/src/PaddleClas/deploy/shell/predict.sh new file mode 100644 index 0000000..f0f59f4 --- /dev/null +++ b/src/PaddleClas/deploy/shell/predict.sh @@ -0,0 +1,18 @@ +# classification +python3.7 python/predict_cls.py -c configs/inference_cls.yaml + +# multilabel_classification +#python3.7 python/predict_cls.py -c configs/inference_multilabel_cls.yaml + +# feature extractor +# python3.7 python/predict_rec.py -c configs/inference_rec.yaml + +# detection +# python3.7 python/predict_det.py -c configs/inference_rec.yaml + + +# build system +#python3.7 python/build_gallery.py -c configs/build_logo.yaml + +# inference system +# python3.7 python/predict_system.py -c configs/inference_logo.yaml diff --git a/src/PaddleClas/deploy/slim/README.md b/src/PaddleClas/deploy/slim/README.md new file mode 100644 index 0000000..eed8aa3 --- /dev/null +++ b/src/PaddleClas/deploy/slim/README.md @@ -0,0 +1,144 @@ + +## Slim功能介绍 +复杂的模型有利于提高模型的性能,但也导致模型中存在一定冗余。此部分提供精简模型的功能,包括两部分:模型量化(量化训练、离线量化)、模型剪枝。 + +其中模型量化将全精度缩减到定点数减少这种冗余,达到减少模型计算复杂度,提高模型推理性能的目的。 +模型量化可以在基本不损失模型的精度的情况下,将FP32精度的模型参数转换为Int8精度,减小模型参数大小并加速计算,使用量化后的模型在移动端等部署时更具备速度优势。 + +模型剪枝将CNN中不重要的卷积核裁剪掉,减少模型参数量,从而降低模型计算复杂度。 + +本教程将介绍如何使用飞桨模型压缩库PaddleSlim做PaddleClas模型的压缩。 +[PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim) 集成了模型剪枝、量化(包括量化训练和离线量化)、蒸馏和神经网络搜索等多种业界常用且领先的模型压缩功能,如果您感兴趣,可以关注并了解。 + +在开始本教程之前,建议先了解[PaddleClas模型的训练方法](../../docs/zh_CN/tutorials/getting_started.md)以及[PaddleSlim](https://paddleslim.readthedocs.io/zh_CN/latest/index.html) + + +## 快速开始 +当训练出一个模型后,如果希望进一步的压缩模型大小并加速预测,可使用量化或者剪枝的方法压缩模型。 + +模型压缩主要包括五个步骤: +1. 安装 PaddleSlim +2. 准备训练好的模型 +3. 模型压缩 +4. 导出量化推理模型 +5. 量化模型预测部署 + +### 1. 安装PaddleSlim + +* 可以通过pip install的方式进行安装。 + +```bash +pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple +``` + +* 如果获取PaddleSlim的最新特性,可以从源码安装。 + +```bash +git clone https://github.com/PaddlePaddle/PaddleSlim.git +cd Paddleslim +python3.7 setup.py install +``` + +### 2. 准备训练好的模型 + +PaddleClas提供了一系列训练好的[模型](../../docs/zh_CN/models/models_intro.md),如果待量化的模型不在列表中,需要按照[常规训练](../../docs/zh_CN/tutorials/getting_started.md)方法得到训练好的模型。 + +### 3. 模型压缩 + +进入PaddleClas根目录 + +```bash +cd PaddleClas +``` + +`slim`训练相关代码已经集成到`ppcls/engine/`下,离线量化代码位于`deploy/slim/quant_post_static.py`。 + +#### 3.1 模型量化 + +量化训练包括离线量化训练和在线量化训练,在线量化训练效果更好,需加载预训练模型,在定义好量化策略后即可对模型进行量化。 + +##### 3.1.1 在线量化训练 + +训练指令如下: + +* CPU/单卡GPU + +以CPU为例,若使用GPU,则将命令中改成`cpu`改成`gpu` + +```bash +python3.7 tools/train.py -c ppcls/configs/slim/ResNet50_vd_quantization.yaml -o Global.device=cpu +``` + +其中`yaml`文件解析详见[参考文档](../../docs/zh_CN/tutorials/config_description.md)。为了保证精度,`yaml`文件中已经使用`pretrained model`. + + +* 单机多卡/多机多卡启动 + +```bash +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python3.7 -m paddle.distributed.launch \ + --gpus="0,1,2,3" \ + tools/train.py \ + -c ppcls/configs/slim/ResNet50_vd_quantization.yaml +``` + +##### 3.1.2 离线量化 + +**注意**:目前离线量化,必须使用已经训练好的模型,导出的`inference model`进行量化。一般模型导出`inference model`可参考[教程](../../docs/zh_CN/inference.md). + +一般来说,离线量化损失模型精度较多。 + +生成`inference model`后,离线量化运行方式如下 + +```bash +python3.7 deploy/slim/quant_post_static.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.save_inference_dir=./deploy/models/class_ResNet50_vd_ImageNet_infer +``` + +`Global.save_inference_dir`是`inference model`存放的目录。 + +执行成功后,在`Global.save_inference_dir`的目录下,生成`quant_post_static_model`文件夹,其中存储生成的离线量化模型,其可以直接进行预测部署,无需再重新导出模型。 + +#### 3.2 模型剪枝 + +训练指令如下: + +- CPU/单卡GPU + +以CPU为例,若使用GPU,则将命令中改成`cpu`改成`gpu` + +```bash +python3.7 tools/train.py -c ppcls/configs/slim/ResNet50_vd_prune.yaml -o Global.device=cpu +``` + +- 单机单卡/单机多卡/多机多卡启动 + +```bash +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python3.7 -m paddle.distributed.launch \ + --gpus="0,1,2,3" \ + tools/train.py \ + -c ppcls/configs/slim/ResNet50_vd_prune.yaml +``` + +### 4. 导出模型 + +在得到在线量化训练、模型剪枝保存的模型后,可以将其导出为inference model,用于预测部署,以模型剪枝为例: + +```bash +python3.7 tools/export.py \ + -c ppcls/configs/slim/ResNet50_vd_prune.yaml \ + -o Global.pretrained_model=./output/ResNet50_vd/best_model \ + -o Global.save_inference_dir=./inference +``` + + +### 5. 模型部署 + +上述步骤导出的模型可以通过PaddleLite的opt模型转换工具完成模型转换。 +模型部署的可参考 [移动端模型部署](../lite/readme.md) + + +## 训练超参数建议 + +* 量化训练时,建议加载常规训练得到的预训练模型,加速量化训练收敛。 +* 量化训练时,建议初始学习率修改为常规训练的`1/20~1/10`,同时将训练epoch数修改为常规训练的`1/5~1/2`,学习率策略方面,加上Warmup,其他配置信息不建议修改。 diff --git a/src/PaddleClas/deploy/slim/README_en.md b/src/PaddleClas/deploy/slim/README_en.md new file mode 100644 index 0000000..d7a978f --- /dev/null +++ b/src/PaddleClas/deploy/slim/README_en.md @@ -0,0 +1,144 @@ + +## Introduction to Slim + +Generally, a more complex model would achive better performance in the task, but it also leads to some redundancy in the model. This part provides the function of compressing the model, including two parts: model quantization (offline quantization training and online quantization training) and model pruning. +Quantization is a technique that reduces this redundancy by reducing the full precision data to a fixed number, so as to reduce model calculation complexity and improve model inference performance. + +Model pruning cuts off the unimportant convolution kernel in CNN to reduce the amount of model parameters, so as to reduce the computational complexity of the model. + +It is recommended that you could understand following pages before reading this example: +- [The training strategy of PaddleClas models](../../docs/en/tutorials/getting_started_en.md) +- [PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim) + +## Quick Start + After training a model, if you want to further compress the model size and speed up the prediction, you can use quantization or pruning to compress the model according to the following steps. + +1. Install PaddleSlim +2. Prepare trained model +3. Model compression +4. Export inference model +5. Deploy quantization inference model + + +### 1. Install PaddleSlim + +* Install by pip. + +```bash +pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple +``` + +* Install from source code to get the lastest features. + +```bash +git clone https://github.com/PaddlePaddle/PaddleSlim.git +cd Paddleslim +python setup.py install +``` + + +### 2. Download Pretrain Model +PaddleClas provides a series of trained [models](../../docs/en/models/models_intro_en.md). +If the model to be quantified is not in the list, you need to follow the [Regular Training](../../docs/en/tutorials/getting_started_en.md) method to get the trained model. + +### 3. Model Compression + +Go to the root directory of PaddleClas + +```bash +cd PaddleClase +``` + +The training related codes have been integrated into `ppcls/engine/`. The offline quantization code is located in `deploy/slim/quant_post_static.py` + +#### 3.1 Model Quantization + +Quantization training includes offline quantization and online quantization training. + +##### 3.1.1 Online quantization training + +Online quantization training is more effective. It is necessary to load the pre-trained model. +After the quantization strategy is defined, the model can be quantified. + +The training command is as follow: + +* CPU/Single GPU + +If using GPU, change the `cpu` to `gpu` in the following command. + +```bash +python3.7 tools/train.py -c ppcls/configs/slim/ResNet50_vd_quantization.yaml -o Global.device=cpu +``` + +The description of `yaml` file can be found in this [doc](../../docs/en/tutorials/config_en.md). To get better accuracy, the `pretrained model`is used in `yaml`. + + +* Distributed training + +```bash +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python3.7 -m paddle.distributed.launch \ + --gpus="0,1,2,3" \ + tools/train.py \ + -m train \ + -c ppcls/configs/slim/ResNet50_vd_quantization.yaml +``` + +##### 3.1.2 Offline quantization + +**Attention**: At present, offline quantization must use `inference model` as input, which can be exported by trained model. The process of exporting `inference model` for trained model can refer to this [doc](../../docs/en/inference.md). + +Generally speaking, the offline quantization gets more loss of accuracy than online qutization training. + +After getting `inference model`, we can run following command to get offline quantization model. + +``` +python3.7 deploy/slim/quant_post_static.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.save_inference_dir=./deploy/models/class_ResNet50_vd_ImageNet_infer +``` + +`Global.save_inference_dir` is the directory storing the `inference model`. + +If run successfully, the directory `quant_post_static_model` is generated in `Global.save_inference_dir`, which stores the offline quantization model that can be used for deploy directly. + +#### 3.2 Model Pruning + +- CPU/Single GPU + +If using GPU, change the `cpu` to `gpu` in the following command. + +```bash +python3.7 tools/train.py -c ppcls/configs/slim/ResNet50_vd_prune.yaml -o Global.device=cpu +``` + +- Distributed training + +```bash +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python3.7 -m paddle.distributed.launch \ + --gpus="0,1,2,3" \ + tools/train.py \ + -c ppcls/configs/slim/ResNet50_vd_prune.yaml +``` + + + +### 4. Export inference model + +After getting the compressed model, we can export it as inference model for predictive deployment. Using pruned model as example: + +```bash +python3.7 tools/export.py \ + -c ppcls/configs/slim/ResNet50_vd_prune.yaml \ + -o Global.pretrained_model=./output/ResNet50_vd/best_model + -o Global.save_inference_dir=./inference +``` + +### 5. Deploy +The derived model can be converted through the `opt tool` of PaddleLite. + +For compresed model deployment, please refer to [Mobile terminal model deployment](../lite/readme_en.md) + +## Notes: + +* In quantitative training, it is suggested to load the pre-trained model obtained from conventional training to accelerate the convergence of quantitative training. +* In quantitative training, it is suggested that the initial learning rate should be changed to `1 / 20 ~ 1 / 10` of the conventional training, and the training epoch number should be changed to `1 / 5 ~ 1 / 2` of the conventional training. In terms of learning rate strategy, it's better to train with warmup, other configuration information is not recommended to be changed. diff --git a/src/PaddleClas/deploy/slim/quant_post_static.py b/src/PaddleClas/deploy/slim/quant_post_static.py new file mode 100644 index 0000000..5c84697 --- /dev/null +++ b/src/PaddleClas/deploy/slim/quant_post_static.py @@ -0,0 +1,74 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import os +import sys + +import numpy as np +import paddle +import paddleslim +from paddle.jit import to_static +from paddleslim.analysis import dygraph_flops as flops + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../../'))) +from paddleslim.dygraph.quant import QAT + +from ppcls.data import build_dataloader +from ppcls.utils import config as conf +from ppcls.utils.logger import init_logger + + +def main(): + args = conf.parse_args() + config = conf.get_config(args.config, overrides=args.override, show=False) + + assert os.path.exists( + os.path.join(config["Global"]["save_inference_dir"], + 'inference.pdmodel')) and os.path.exists( + os.path.join(config["Global"]["save_inference_dir"], + 'inference.pdiparams')) + config["DataLoader"]["Eval"]["sampler"]["batch_size"] = 1 + config["DataLoader"]["Eval"]["loader"]["num_workers"] = 0 + init_logger() + device = paddle.set_device("cpu") + train_dataloader = build_dataloader(config["DataLoader"], "Eval", device, + False) + + def sample_generator(loader): + def __reader__(): + for indx, data in enumerate(loader): + images = np.array(data[0]) + yield images + + return __reader__ + + paddle.enable_static() + place = paddle.CPUPlace() + exe = paddle.static.Executor(place) + paddleslim.quant.quant_post_static( + executor=exe, + model_dir=config["Global"]["save_inference_dir"], + model_filename='inference.pdmodel', + params_filename='inference.pdiparams', + quantize_model_path=os.path.join( + config["Global"]["save_inference_dir"], "quant_post_static_model"), + sample_generator=sample_generator(train_dataloader), + batch_nums=10) + + +if __name__ == "__main__": + main() diff --git a/src/PaddleClas/deploy/utils/__init__.py b/src/PaddleClas/deploy/utils/__init__.py new file mode 100644 index 0000000..baf14a9 --- /dev/null +++ b/src/PaddleClas/deploy/utils/__init__.py @@ -0,0 +1,5 @@ +from . import logger +from . import config +from . import get_image_list +from . import predictor +from . import encode_decode \ No newline at end of file diff --git a/src/PaddleClas/deploy/utils/__pycache__/__init__.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..f58ada7 Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/__pycache__/config.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/config.cpython-39.pyc new file mode 100644 index 0000000..b6b1f27 Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/config.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/__pycache__/draw_bbox.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/draw_bbox.cpython-39.pyc new file mode 100644 index 0000000..cb0d460 Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/draw_bbox.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/__pycache__/encode_decode.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/encode_decode.cpython-39.pyc new file mode 100644 index 0000000..5a166f8 Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/encode_decode.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/__pycache__/get_image_list.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/get_image_list.cpython-39.pyc new file mode 100644 index 0000000..0819645 Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/get_image_list.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/__pycache__/logger.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/logger.cpython-39.pyc new file mode 100644 index 0000000..945660e Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/logger.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/__pycache__/predictor.cpython-39.pyc b/src/PaddleClas/deploy/utils/__pycache__/predictor.cpython-39.pyc new file mode 100644 index 0000000..ba1cd2b Binary files /dev/null and b/src/PaddleClas/deploy/utils/__pycache__/predictor.cpython-39.pyc differ diff --git a/src/PaddleClas/deploy/utils/config.py b/src/PaddleClas/deploy/utils/config.py new file mode 100644 index 0000000..7e7ffb7 --- /dev/null +++ b/src/PaddleClas/deploy/utils/config.py @@ -0,0 +1,197 @@ +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import copy +import argparse +import yaml + +from utils import logger + +__all__ = ['get_config'] + + +class AttrDict(dict): + def __getattr__(self, key): + return self[key] + + def __setattr__(self, key, value): + if key in self.__dict__: + self.__dict__[key] = value + else: + self[key] = value + + def __deepcopy__(self, content): + return copy.deepcopy(dict(self)) + + +def create_attr_dict(yaml_config): + from ast import literal_eval + for key, value in yaml_config.items(): + if type(value) is dict: + yaml_config[key] = value = AttrDict(value) + if isinstance(value, str): + try: + value = literal_eval(value) + except BaseException: + pass + if isinstance(value, AttrDict): + create_attr_dict(yaml_config[key]) + else: + yaml_config[key] = value + + +def parse_config(cfg_file): + """Load a config file into AttrDict""" + with open(cfg_file, 'r') as fopen: + yaml_config = AttrDict(yaml.load(fopen, Loader=yaml.SafeLoader)) + create_attr_dict(yaml_config) + return yaml_config + + +def print_dict(d, delimiter=0): + """ + Recursively visualize a dict and + indenting acrrording by the relationship of keys. + """ + placeholder = "-" * 60 + for k, v in sorted(d.items()): + if isinstance(v, dict): + logger.info("{}{} : ".format(delimiter * " ", + logger.coloring(k, "HEADER"))) + print_dict(v, delimiter + 4) + elif isinstance(v, list) and len(v) >= 1 and isinstance(v[0], dict): + logger.info("{}{} : ".format(delimiter * " ", + logger.coloring(str(k), "HEADER"))) + for value in v: + print_dict(value, delimiter + 4) + else: + logger.info("{}{} : {}".format(delimiter * " ", + logger.coloring(k, "HEADER"), + logger.coloring(v, "OKGREEN"))) + if k.isupper(): + logger.info(placeholder) + + +def print_config(config): + """ + visualize configs + Arguments: + config: configs + """ + logger.advertise() + print_dict(config) + + +def override(dl, ks, v): + """ + Recursively replace dict of list + Args: + dl(dict or list): dict or list to be replaced + ks(list): list of keys + v(str): value to be replaced + """ + + def str2num(v): + try: + return eval(v) + except Exception: + return v + + assert isinstance(dl, (list, dict)), ("{} should be a list or a dict") + assert len(ks) > 0, ('lenght of keys should larger than 0') + if isinstance(dl, list): + k = str2num(ks[0]) + if len(ks) == 1: + assert k < len(dl), ('index({}) out of range({})'.format(k, dl)) + dl[k] = str2num(v) + else: + override(dl[k], ks[1:], v) + else: + if len(ks) == 1: + # assert ks[0] in dl, ('{} is not exist in {}'.format(ks[0], dl)) + if not ks[0] in dl: + logger.warning('A new filed ({}) detected!'.format(ks[0])) + dl[ks[0]] = str2num(v) + else: + override(dl[ks[0]], ks[1:], v) + + +def override_config(config, options=None): + """ + Recursively override the config + Args: + config(dict): dict to be replaced + options(list): list of pairs(key0.key1.idx.key2=value) + such as: [ + 'topk=2', + 'VALID.transforms.1.ResizeImage.resize_short=300' + ] + Returns: + config(dict): replaced config + """ + if options is not None: + for opt in options: + assert isinstance(opt, str), ( + "option({}) should be a str".format(opt)) + assert "=" in opt, ( + "option({}) should contain a =" + "to distinguish between key and value".format(opt)) + pair = opt.split('=') + assert len(pair) == 2, ("there can be only a = in the option") + key, value = pair + keys = key.split('.') + override(config, keys, value) + return config + + +def get_config(fname, overrides=None, show=True): + """ + Read config from file + """ + assert os.path.exists(fname), ( + 'config file({}) is not exist'.format(fname)) + config = parse_config(fname) + override_config(config, overrides) + if show: + print_config(config) + # check_config(config) + return config + + +def parser(): + parser = argparse.ArgumentParser("generic-image-rec train script") + parser.add_argument( + '-c', + '--config', + type=str, + default='configs/config.yaml', + help='config file path') + parser.add_argument( + '-o', + '--override', + action='append', + default=[], + help='config options to be overridden') + parser.add_argument( + '-v', + '--verbose', + action='store_true', + help='wheather print the config info') + return parser + + +def parse_args(): + args = parser().parse_args() + return args diff --git a/src/PaddleClas/deploy/utils/draw_bbox.py b/src/PaddleClas/deploy/utils/draw_bbox.py new file mode 100644 index 0000000..b1b6d17 --- /dev/null +++ b/src/PaddleClas/deploy/utils/draw_bbox.py @@ -0,0 +1,62 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import numpy as np +import cv2 +from PIL import Image, ImageDraw, ImageFont + + +def draw_bbox_results(image, + results, + input_path, + font_path="./utils/simfang.ttf", + save_dir=None): + if isinstance(image, np.ndarray): + image = Image.fromarray(image) + draw = ImageDraw.Draw(image) + font_size = 18 + font = ImageFont.truetype(font_path, font_size, encoding="utf-8") + + color = (0, 102, 255) + + for result in results: + # empty results + if result["rec_docs"] is None: + continue + + xmin, ymin, xmax, ymax = result["bbox"] + text = "{}, {:.2f}".format(result["rec_docs"], result["rec_scores"]) + th = font_size + tw = font.getsize(text)[0] + # tw = int(len(result["rec_docs"]) * font_size) + 60 + start_y = max(0, ymin - th) + + draw.rectangle( + [(xmin + 1, start_y), (xmin + tw + 1, start_y + th)], fill=color) + + draw.text((xmin + 1, start_y), text, fill=(255, 255, 255), font=font) + + draw.rectangle( + [(xmin, ymin), (xmax, ymax)], outline=(255, 0, 0), width=2) + + image_name = os.path.basename(input_path) + if save_dir is None: + save_dir = "output" + os.makedirs(save_dir, exist_ok=True) + output_path = os.path.join(save_dir, image_name) + + image.save(output_path, quality=95) + image.show() + return np.array(image) diff --git a/src/PaddleClas/deploy/utils/encode_decode.py b/src/PaddleClas/deploy/utils/encode_decode.py new file mode 100644 index 0000000..d76a529 --- /dev/null +++ b/src/PaddleClas/deploy/utils/encode_decode.py @@ -0,0 +1,31 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import base64 + +import numpy as np + + +def np_to_b64(images): + img_str = base64.b64encode(images).decode('utf8') + return img_str, images.shape + + +def b64_to_np(b64str, revert_params): + shape = revert_params["shape"] + dtype = revert_params["dtype"] + dtype = getattr(np, dtype) if isinstance(str, type(dtype)) else dtype + data = base64.b64decode(b64str.encode('utf8')) + data = np.fromstring(data, dtype).reshape(shape) + return data \ No newline at end of file diff --git a/src/PaddleClas/deploy/utils/get_image_list.py b/src/PaddleClas/deploy/utils/get_image_list.py new file mode 100644 index 0000000..6f10935 --- /dev/null +++ b/src/PaddleClas/deploy/utils/get_image_list.py @@ -0,0 +1,49 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import argparse +import base64 +import numpy as np + + +def get_image_list(img_file): + imgs_lists = [] + if img_file is None or not os.path.exists(img_file): + raise Exception("not found any img file in {}".format(img_file)) + + img_end = ['jpg', 'png', 'jpeg', 'JPEG', 'JPG', 'bmp'] + if os.path.isfile(img_file) and img_file.split('.')[-1] in img_end: + imgs_lists.append(img_file) + elif os.path.isdir(img_file): + for single_file in os.listdir(img_file): + if single_file.split('.')[-1] in img_end: + imgs_lists.append(os.path.join(img_file, single_file)) + if len(imgs_lists) == 0: + raise Exception("not found any img file in {}".format(img_file)) + imgs_lists = sorted(imgs_lists) + return imgs_lists + + +def get_image_list_from_label_file(image_path, label_file_path): + imgs_lists = [] + gt_labels = [] + with open(label_file_path, "r") as fin: + lines = fin.readlines() + for line in lines: + image_name, label = line.strip("\n").split() + label = int(label) + imgs_lists.append(os.path.join(image_path, image_name)) + gt_labels.append(int(label)) + return imgs_lists, gt_labels diff --git a/src/PaddleClas/deploy/utils/imagenet1k_label_list.txt b/src/PaddleClas/deploy/utils/imagenet1k_label_list.txt new file mode 100644 index 0000000..376e180 --- /dev/null +++ b/src/PaddleClas/deploy/utils/imagenet1k_label_list.txt @@ -0,0 +1,1000 @@ +0 tench, Tinca tinca +1 goldfish, Carassius auratus +2 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias +3 tiger shark, Galeocerdo cuvieri +4 hammerhead, hammerhead shark +5 electric ray, crampfish, numbfish, torpedo +6 stingray +7 cock +8 hen +9 ostrich, Struthio camelus +10 brambling, Fringilla montifringilla +11 goldfinch, Carduelis carduelis +12 house finch, linnet, Carpodacus mexicanus +13 junco, snowbird +14 indigo bunting, indigo finch, indigo bird, Passerina cyanea +15 robin, American robin, Turdus migratorius +16 bulbul +17 jay +18 magpie +19 chickadee +20 water ouzel, dipper +21 kite +22 bald eagle, American eagle, Haliaeetus leucocephalus +23 vulture +24 great grey owl, great gray owl, Strix nebulosa +25 European fire salamander, Salamandra salamandra +26 common newt, Triturus vulgaris +27 eft +28 spotted salamander, Ambystoma maculatum +29 axolotl, mud puppy, Ambystoma mexicanum +30 bullfrog, Rana catesbeiana +31 tree frog, tree-frog +32 tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui +33 loggerhead, loggerhead turtle, Caretta caretta +34 leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea +35 mud turtle +36 terrapin +37 box turtle, box tortoise +38 banded gecko +39 common iguana, iguana, Iguana iguana +40 American chameleon, anole, Anolis carolinensis +41 whiptail, whiptail lizard +42 agama +43 frilled lizard, Chlamydosaurus kingi +44 alligator lizard +45 Gila monster, Heloderma suspectum +46 green lizard, Lacerta viridis +47 African chameleon, Chamaeleo chamaeleon +48 Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis +49 African crocodile, Nile crocodile, Crocodylus niloticus +50 American alligator, Alligator mississipiensis +51 triceratops +52 thunder snake, worm snake, Carphophis amoenus +53 ringneck snake, ring-necked snake, ring snake +54 hognose snake, puff adder, sand viper +55 green snake, grass snake +56 king snake, kingsnake +57 garter snake, grass snake +58 water snake +59 vine snake +60 night snake, Hypsiglena torquata +61 boa constrictor, Constrictor constrictor +62 rock python, rock snake, Python sebae +63 Indian cobra, Naja naja +64 green mamba +65 sea snake +66 horned viper, cerastes, sand viper, horned asp, Cerastes cornutus +67 diamondback, diamondback rattlesnake, Crotalus adamanteus +68 sidewinder, horned rattlesnake, Crotalus cerastes +69 trilobite +70 harvestman, daddy longlegs, Phalangium opilio +71 scorpion +72 black and gold garden spider, Argiope aurantia +73 barn spider, Araneus cavaticus +74 garden spider, Aranea diademata +75 black widow, Latrodectus mactans +76 tarantula +77 wolf spider, hunting spider +78 tick +79 centipede +80 black grouse +81 ptarmigan +82 ruffed grouse, partridge, Bonasa umbellus +83 prairie chicken, prairie grouse, prairie fowl +84 peacock +85 quail +86 partridge +87 African grey, African gray, Psittacus erithacus +88 macaw +89 sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita +90 lorikeet +91 coucal +92 bee eater +93 hornbill +94 hummingbird +95 jacamar +96 toucan +97 drake +98 red-breasted merganser, Mergus serrator +99 goose +100 black swan, Cygnus atratus +101 tusker +102 echidna, spiny anteater, anteater +103 platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus +104 wallaby, brush kangaroo +105 koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus +106 wombat +107 jellyfish +108 sea anemone, anemone +109 brain coral +110 flatworm, platyhelminth +111 nematode, nematode worm, roundworm +112 conch +113 snail +114 slug +115 sea slug, nudibranch +116 chiton, coat-of-mail shell, sea cradle, polyplacophore +117 chambered nautilus, pearly nautilus, nautilus +118 Dungeness crab, Cancer magister +119 rock crab, Cancer irroratus +120 fiddler crab +121 king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica +122 American lobster, Northern lobster, Maine lobster, Homarus americanus +123 spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish +124 crayfish, crawfish, crawdad, crawdaddy +125 hermit crab +126 isopod +127 white stork, Ciconia ciconia +128 black stork, Ciconia nigra +129 spoonbill +130 flamingo +131 little blue heron, Egretta caerulea +132 American egret, great white heron, Egretta albus +133 bittern +134 crane +135 limpkin, Aramus pictus +136 European gallinule, Porphyrio porphyrio +137 American coot, marsh hen, mud hen, water hen, Fulica americana +138 bustard +139 ruddy turnstone, Arenaria interpres +140 red-backed sandpiper, dunlin, Erolia alpina +141 redshank, Tringa totanus +142 dowitcher +143 oystercatcher, oyster catcher +144 pelican +145 king penguin, Aptenodytes patagonica +146 albatross, mollymawk +147 grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus +148 killer whale, killer, orca, grampus, sea wolf, Orcinus orca +149 dugong, Dugong dugon +150 sea lion +151 Chihuahua +152 Japanese spaniel +153 Maltese dog, Maltese terrier, Maltese +154 Pekinese, Pekingese, Peke +155 Shih-Tzu +156 Blenheim spaniel +157 papillon +158 toy terrier +159 Rhodesian ridgeback +160 Afghan hound, Afghan +161 basset, basset hound +162 beagle +163 bloodhound, sleuthhound +164 bluetick +165 black-and-tan coonhound +166 Walker hound, Walker foxhound +167 English foxhound +168 redbone +169 borzoi, Russian wolfhound +170 Irish wolfhound +171 Italian greyhound +172 whippet +173 Ibizan hound, Ibizan Podenco +174 Norwegian elkhound, elkhound +175 otterhound, otter hound +176 Saluki, gazelle hound +177 Scottish deerhound, deerhound +178 Weimaraner +179 Staffordshire bullterrier, Staffordshire bull terrier +180 American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier +181 Bedlington terrier +182 Border terrier +183 Kerry blue terrier +184 Irish terrier +185 Norfolk terrier +186 Norwich terrier +187 Yorkshire terrier +188 wire-haired fox terrier +189 Lakeland terrier +190 Sealyham terrier, Sealyham +191 Airedale, Airedale terrier +192 cairn, cairn terrier +193 Australian terrier +194 Dandie Dinmont, Dandie Dinmont terrier +195 Boston bull, Boston terrier +196 miniature schnauzer +197 giant schnauzer +198 standard schnauzer +199 Scotch terrier, Scottish terrier, Scottie +200 Tibetan terrier, chrysanthemum dog +201 silky terrier, Sydney silky +202 soft-coated wheaten terrier +203 West Highland white terrier +204 Lhasa, Lhasa apso +205 flat-coated retriever +206 curly-coated retriever +207 golden retriever +208 Labrador retriever +209 Chesapeake Bay retriever +210 German short-haired pointer +211 vizsla, Hungarian pointer +212 English setter +213 Irish setter, red setter +214 Gordon setter +215 Brittany spaniel +216 clumber, clumber spaniel +217 English springer, English springer spaniel +218 Welsh springer spaniel +219 cocker spaniel, English cocker spaniel, cocker +220 Sussex spaniel +221 Irish water spaniel +222 kuvasz +223 schipperke +224 groenendael +225 malinois +226 briard +227 kelpie +228 komondor +229 Old English sheepdog, bobtail +230 Shetland sheepdog, Shetland sheep dog, Shetland +231 collie +232 Border collie +233 Bouvier des Flandres, Bouviers des Flandres +234 Rottweiler +235 German shepherd, German shepherd dog, German police dog, alsatian +236 Doberman, Doberman pinscher +237 miniature pinscher +238 Greater Swiss Mountain dog +239 Bernese mountain dog +240 Appenzeller +241 EntleBucher +242 boxer +243 bull mastiff +244 Tibetan mastiff +245 French bulldog +246 Great Dane +247 Saint Bernard, St Bernard +248 Eskimo dog, husky +249 malamute, malemute, Alaskan malamute +250 Siberian husky +251 dalmatian, coach dog, carriage dog +252 affenpinscher, monkey pinscher, monkey dog +253 basenji +254 pug, pug-dog +255 Leonberg +256 Newfoundland, Newfoundland dog +257 Great Pyrenees +258 Samoyed, Samoyede +259 Pomeranian +260 chow, chow chow +261 keeshond +262 Brabancon griffon +263 Pembroke, Pembroke Welsh corgi +264 Cardigan, Cardigan Welsh corgi +265 toy poodle +266 miniature poodle +267 standard poodle +268 Mexican hairless +269 timber wolf, grey wolf, gray wolf, Canis lupus +270 white wolf, Arctic wolf, Canis lupus tundrarum +271 red wolf, maned wolf, Canis rufus, Canis niger +272 coyote, prairie wolf, brush wolf, Canis latrans +273 dingo, warrigal, warragal, Canis dingo +274 dhole, Cuon alpinus +275 African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus +276 hyena, hyaena +277 red fox, Vulpes vulpes +278 kit fox, Vulpes macrotis +279 Arctic fox, white fox, Alopex lagopus +280 grey fox, gray fox, Urocyon cinereoargenteus +281 tabby, tabby cat +282 tiger cat +283 Persian cat +284 Siamese cat, Siamese +285 Egyptian cat +286 cougar, puma, catamount, mountain lion, painter, panther, Felis concolor +287 lynx, catamount +288 leopard, Panthera pardus +289 snow leopard, ounce, Panthera uncia +290 jaguar, panther, Panthera onca, Felis onca +291 lion, king of beasts, Panthera leo +292 tiger, Panthera tigris +293 cheetah, chetah, Acinonyx jubatus +294 brown bear, bruin, Ursus arctos +295 American black bear, black bear, Ursus americanus, Euarctos americanus +296 ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus +297 sloth bear, Melursus ursinus, Ursus ursinus +298 mongoose +299 meerkat, mierkat +300 tiger beetle +301 ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle +302 ground beetle, carabid beetle +303 long-horned beetle, longicorn, longicorn beetle +304 leaf beetle, chrysomelid +305 dung beetle +306 rhinoceros beetle +307 weevil +308 fly +309 bee +310 ant, emmet, pismire +311 grasshopper, hopper +312 cricket +313 walking stick, walkingstick, stick insect +314 cockroach, roach +315 mantis, mantid +316 cicada, cicala +317 leafhopper +318 lacewing, lacewing fly +319 dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk +320 damselfly +321 admiral +322 ringlet, ringlet butterfly +323 monarch, monarch butterfly, milkweed butterfly, Danaus plexippus +324 cabbage butterfly +325 sulphur butterfly, sulfur butterfly +326 lycaenid, lycaenid butterfly +327 starfish, sea star +328 sea urchin +329 sea cucumber, holothurian +330 wood rabbit, cottontail, cottontail rabbit +331 hare +332 Angora, Angora rabbit +333 hamster +334 porcupine, hedgehog +335 fox squirrel, eastern fox squirrel, Sciurus niger +336 marmot +337 beaver +338 guinea pig, Cavia cobaya +339 sorrel +340 zebra +341 hog, pig, grunter, squealer, Sus scrofa +342 wild boar, boar, Sus scrofa +343 warthog +344 hippopotamus, hippo, river horse, Hippopotamus amphibius +345 ox +346 water buffalo, water ox, Asiatic buffalo, Bubalus bubalis +347 bison +348 ram, tup +349 bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis +350 ibex, Capra ibex +351 hartebeest +352 impala, Aepyceros melampus +353 gazelle +354 Arabian camel, dromedary, Camelus dromedarius +355 llama +356 weasel +357 mink +358 polecat, fitch, foulmart, foumart, Mustela putorius +359 black-footed ferret, ferret, Mustela nigripes +360 otter +361 skunk, polecat, wood pussy +362 badger +363 armadillo +364 three-toed sloth, ai, Bradypus tridactylus +365 orangutan, orang, orangutang, Pongo pygmaeus +366 gorilla, Gorilla gorilla +367 chimpanzee, chimp, Pan troglodytes +368 gibbon, Hylobates lar +369 siamang, Hylobates syndactylus, Symphalangus syndactylus +370 guenon, guenon monkey +371 patas, hussar monkey, Erythrocebus patas +372 baboon +373 macaque +374 langur +375 colobus, colobus monkey +376 proboscis monkey, Nasalis larvatus +377 marmoset +378 capuchin, ringtail, Cebus capucinus +379 howler monkey, howler +380 titi, titi monkey +381 spider monkey, Ateles geoffroyi +382 squirrel monkey, Saimiri sciureus +383 Madagascar cat, ring-tailed lemur, Lemur catta +384 indri, indris, Indri indri, Indri brevicaudatus +385 Indian elephant, Elephas maximus +386 African elephant, Loxodonta africana +387 lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens +388 giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca +389 barracouta, snoek +390 eel +391 coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch +392 rock beauty, Holocanthus tricolor +393 anemone fish +394 sturgeon +395 gar, garfish, garpike, billfish, Lepisosteus osseus +396 lionfish +397 puffer, pufferfish, blowfish, globefish +398 abacus +399 abaya +400 academic gown, academic robe, judge's robe +401 accordion, piano accordion, squeeze box +402 acoustic guitar +403 aircraft carrier, carrier, flattop, attack aircraft carrier +404 airliner +405 airship, dirigible +406 altar +407 ambulance +408 amphibian, amphibious vehicle +409 analog clock +410 apiary, bee house +411 apron +412 ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin +413 assault rifle, assault gun +414 backpack, back pack, knapsack, packsack, rucksack, haversack +415 bakery, bakeshop, bakehouse +416 balance beam, beam +417 balloon +418 ballpoint, ballpoint pen, ballpen, Biro +419 Band Aid +420 banjo +421 bannister, banister, balustrade, balusters, handrail +422 barbell +423 barber chair +424 barbershop +425 barn +426 barometer +427 barrel, cask +428 barrow, garden cart, lawn cart, wheelbarrow +429 baseball +430 basketball +431 bassinet +432 bassoon +433 bathing cap, swimming cap +434 bath towel +435 bathtub, bathing tub, bath, tub +436 beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon +437 beacon, lighthouse, beacon light, pharos +438 beaker +439 bearskin, busby, shako +440 beer bottle +441 beer glass +442 bell cote, bell cot +443 bib +444 bicycle-built-for-two, tandem bicycle, tandem +445 bikini, two-piece +446 binder, ring-binder +447 binoculars, field glasses, opera glasses +448 birdhouse +449 boathouse +450 bobsled, bobsleigh, bob +451 bolo tie, bolo, bola tie, bola +452 bonnet, poke bonnet +453 bookcase +454 bookshop, bookstore, bookstall +455 bottlecap +456 bow +457 bow tie, bow-tie, bowtie +458 brass, memorial tablet, plaque +459 brassiere, bra, bandeau +460 breakwater, groin, groyne, mole, bulwark, seawall, jetty +461 breastplate, aegis, egis +462 broom +463 bucket, pail +464 buckle +465 bulletproof vest +466 bullet train, bullet +467 butcher shop, meat market +468 cab, hack, taxi, taxicab +469 caldron, cauldron +470 candle, taper, wax light +471 cannon +472 canoe +473 can opener, tin opener +474 cardigan +475 car mirror +476 carousel, carrousel, merry-go-round, roundabout, whirligig +477 carpenter's kit, tool kit +478 carton +479 car wheel +480 cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM +481 cassette +482 cassette player +483 castle +484 catamaran +485 CD player +486 cello, violoncello +487 cellular telephone, cellular phone, cellphone, cell, mobile phone +488 chain +489 chainlink fence +490 chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour +491 chain saw, chainsaw +492 chest +493 chiffonier, commode +494 chime, bell, gong +495 china cabinet, china closet +496 Christmas stocking +497 church, church building +498 cinema, movie theater, movie theatre, movie house, picture palace +499 cleaver, meat cleaver, chopper +500 cliff dwelling +501 cloak +502 clog, geta, patten, sabot +503 cocktail shaker +504 coffee mug +505 coffeepot +506 coil, spiral, volute, whorl, helix +507 combination lock +508 computer keyboard, keypad +509 confectionery, confectionary, candy store +510 container ship, containership, container vessel +511 convertible +512 corkscrew, bottle screw +513 cornet, horn, trumpet, trump +514 cowboy boot +515 cowboy hat, ten-gallon hat +516 cradle +517 crane +518 crash helmet +519 crate +520 crib, cot +521 Crock Pot +522 croquet ball +523 crutch +524 cuirass +525 dam, dike, dyke +526 desk +527 desktop computer +528 dial telephone, dial phone +529 diaper, nappy, napkin +530 digital clock +531 digital watch +532 dining table, board +533 dishrag, dishcloth +534 dishwasher, dish washer, dishwashing machine +535 disk brake, disc brake +536 dock, dockage, docking facility +537 dogsled, dog sled, dog sleigh +538 dome +539 doormat, welcome mat +540 drilling platform, offshore rig +541 drum, membranophone, tympan +542 drumstick +543 dumbbell +544 Dutch oven +545 electric fan, blower +546 electric guitar +547 electric locomotive +548 entertainment center +549 envelope +550 espresso maker +551 face powder +552 feather boa, boa +553 file, file cabinet, filing cabinet +554 fireboat +555 fire engine, fire truck +556 fire screen, fireguard +557 flagpole, flagstaff +558 flute, transverse flute +559 folding chair +560 football helmet +561 forklift +562 fountain +563 fountain pen +564 four-poster +565 freight car +566 French horn, horn +567 frying pan, frypan, skillet +568 fur coat +569 garbage truck, dustcart +570 gasmask, respirator, gas helmet +571 gas pump, gasoline pump, petrol pump, island dispenser +572 goblet +573 go-kart +574 golf ball +575 golfcart, golf cart +576 gondola +577 gong, tam-tam +578 gown +579 grand piano, grand +580 greenhouse, nursery, glasshouse +581 grille, radiator grille +582 grocery store, grocery, food market, market +583 guillotine +584 hair slide +585 hair spray +586 half track +587 hammer +588 hamper +589 hand blower, blow dryer, blow drier, hair dryer, hair drier +590 hand-held computer, hand-held microcomputer +591 handkerchief, hankie, hanky, hankey +592 hard disc, hard disk, fixed disk +593 harmonica, mouth organ, harp, mouth harp +594 harp +595 harvester, reaper +596 hatchet +597 holster +598 home theater, home theatre +599 honeycomb +600 hook, claw +601 hoopskirt, crinoline +602 horizontal bar, high bar +603 horse cart, horse-cart +604 hourglass +605 iPod +606 iron, smoothing iron +607 jack-o'-lantern +608 jean, blue jean, denim +609 jeep, landrover +610 jersey, T-shirt, tee shirt +611 jigsaw puzzle +612 jinrikisha, ricksha, rickshaw +613 joystick +614 kimono +615 knee pad +616 knot +617 lab coat, laboratory coat +618 ladle +619 lampshade, lamp shade +620 laptop, laptop computer +621 lawn mower, mower +622 lens cap, lens cover +623 letter opener, paper knife, paperknife +624 library +625 lifeboat +626 lighter, light, igniter, ignitor +627 limousine, limo +628 liner, ocean liner +629 lipstick, lip rouge +630 Loafer +631 lotion +632 loudspeaker, speaker, speaker unit, loudspeaker system, speaker system +633 loupe, jeweler's loupe +634 lumbermill, sawmill +635 magnetic compass +636 mailbag, postbag +637 mailbox, letter box +638 maillot +639 maillot, tank suit +640 manhole cover +641 maraca +642 marimba, xylophone +643 mask +644 matchstick +645 maypole +646 maze, labyrinth +647 measuring cup +648 medicine chest, medicine cabinet +649 megalith, megalithic structure +650 microphone, mike +651 microwave, microwave oven +652 military uniform +653 milk can +654 minibus +655 miniskirt, mini +656 minivan +657 missile +658 mitten +659 mixing bowl +660 mobile home, manufactured home +661 Model T +662 modem +663 monastery +664 monitor +665 moped +666 mortar +667 mortarboard +668 mosque +669 mosquito net +670 motor scooter, scooter +671 mountain bike, all-terrain bike, off-roader +672 mountain tent +673 mouse, computer mouse +674 mousetrap +675 moving van +676 muzzle +677 nail +678 neck brace +679 necklace +680 nipple +681 notebook, notebook computer +682 obelisk +683 oboe, hautboy, hautbois +684 ocarina, sweet potato +685 odometer, hodometer, mileometer, milometer +686 oil filter +687 organ, pipe organ +688 oscilloscope, scope, cathode-ray oscilloscope, CRO +689 overskirt +690 oxcart +691 oxygen mask +692 packet +693 paddle, boat paddle +694 paddlewheel, paddle wheel +695 padlock +696 paintbrush +697 pajama, pyjama, pj's, jammies +698 palace +699 panpipe, pandean pipe, syrinx +700 paper towel +701 parachute, chute +702 parallel bars, bars +703 park bench +704 parking meter +705 passenger car, coach, carriage +706 patio, terrace +707 pay-phone, pay-station +708 pedestal, plinth, footstall +709 pencil box, pencil case +710 pencil sharpener +711 perfume, essence +712 Petri dish +713 photocopier +714 pick, plectrum, plectron +715 pickelhaube +716 picket fence, paling +717 pickup, pickup truck +718 pier +719 piggy bank, penny bank +720 pill bottle +721 pillow +722 ping-pong ball +723 pinwheel +724 pirate, pirate ship +725 pitcher, ewer +726 plane, carpenter's plane, woodworking plane +727 planetarium +728 plastic bag +729 plate rack +730 plow, plough +731 plunger, plumber's helper +732 Polaroid camera, Polaroid Land camera +733 pole +734 police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria +735 poncho +736 pool table, billiard table, snooker table +737 pop bottle, soda bottle +738 pot, flowerpot +739 potter's wheel +740 power drill +741 prayer rug, prayer mat +742 printer +743 prison, prison house +744 projectile, missile +745 projector +746 puck, hockey puck +747 punching bag, punch bag, punching ball, punchball +748 purse +749 quill, quill pen +750 quilt, comforter, comfort, puff +751 racer, race car, racing car +752 racket, racquet +753 radiator +754 radio, wireless +755 radio telescope, radio reflector +756 rain barrel +757 recreational vehicle, RV, R.V. +758 reel +759 reflex camera +760 refrigerator, icebox +761 remote control, remote +762 restaurant, eating house, eating place, eatery +763 revolver, six-gun, six-shooter +764 rifle +765 rocking chair, rocker +766 rotisserie +767 rubber eraser, rubber, pencil eraser +768 rugby ball +769 rule, ruler +770 running shoe +771 safe +772 safety pin +773 saltshaker, salt shaker +774 sandal +775 sarong +776 sax, saxophone +777 scabbard +778 scale, weighing machine +779 school bus +780 schooner +781 scoreboard +782 screen, CRT screen +783 screw +784 screwdriver +785 seat belt, seatbelt +786 sewing machine +787 shield, buckler +788 shoe shop, shoe-shop, shoe store +789 shoji +790 shopping basket +791 shopping cart +792 shovel +793 shower cap +794 shower curtain +795 ski +796 ski mask +797 sleeping bag +798 slide rule, slipstick +799 sliding door +800 slot, one-armed bandit +801 snorkel +802 snowmobile +803 snowplow, snowplough +804 soap dispenser +805 soccer ball +806 sock +807 solar dish, solar collector, solar furnace +808 sombrero +809 soup bowl +810 space bar +811 space heater +812 space shuttle +813 spatula +814 speedboat +815 spider web, spider's web +816 spindle +817 sports car, sport car +818 spotlight, spot +819 stage +820 steam locomotive +821 steel arch bridge +822 steel drum +823 stethoscope +824 stole +825 stone wall +826 stopwatch, stop watch +827 stove +828 strainer +829 streetcar, tram, tramcar, trolley, trolley car +830 stretcher +831 studio couch, day bed +832 stupa, tope +833 submarine, pigboat, sub, U-boat +834 suit, suit of clothes +835 sundial +836 sunglass +837 sunglasses, dark glasses, shades +838 sunscreen, sunblock, sun blocker +839 suspension bridge +840 swab, swob, mop +841 sweatshirt +842 swimming trunks, bathing trunks +843 swing +844 switch, electric switch, electrical switch +845 syringe +846 table lamp +847 tank, army tank, armored combat vehicle, armoured combat vehicle +848 tape player +849 teapot +850 teddy, teddy bear +851 television, television system +852 tennis ball +853 thatch, thatched roof +854 theater curtain, theatre curtain +855 thimble +856 thresher, thrasher, threshing machine +857 throne +858 tile roof +859 toaster +860 tobacco shop, tobacconist shop, tobacconist +861 toilet seat +862 torch +863 totem pole +864 tow truck, tow car, wrecker +865 toyshop +866 tractor +867 trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi +868 tray +869 trench coat +870 tricycle, trike, velocipede +871 trimaran +872 tripod +873 triumphal arch +874 trolleybus, trolley coach, trackless trolley +875 trombone +876 tub, vat +877 turnstile +878 typewriter keyboard +879 umbrella +880 unicycle, monocycle +881 upright, upright piano +882 vacuum, vacuum cleaner +883 vase +884 vault +885 velvet +886 vending machine +887 vestment +888 viaduct +889 violin, fiddle +890 volleyball +891 waffle iron +892 wall clock +893 wallet, billfold, notecase, pocketbook +894 wardrobe, closet, press +895 warplane, military plane +896 washbasin, handbasin, washbowl, lavabo, wash-hand basin +897 washer, automatic washer, washing machine +898 water bottle +899 water jug +900 water tower +901 whiskey jug +902 whistle +903 wig +904 window screen +905 window shade +906 Windsor tie +907 wine bottle +908 wing +909 wok +910 wooden spoon +911 wool, woolen, woollen +912 worm fence, snake fence, snake-rail fence, Virginia fence +913 wreck +914 yawl +915 yurt +916 web site, website, internet site, site +917 comic book +918 crossword puzzle, crossword +919 street sign +920 traffic light, traffic signal, stoplight +921 book jacket, dust cover, dust jacket, dust wrapper +922 menu +923 plate +924 guacamole +925 consomme +926 hot pot, hotpot +927 trifle +928 ice cream, icecream +929 ice lolly, lolly, lollipop, popsicle +930 French loaf +931 bagel, beigel +932 pretzel +933 cheeseburger +934 hotdog, hot dog, red hot +935 mashed potato +936 head cabbage +937 broccoli +938 cauliflower +939 zucchini, courgette +940 spaghetti squash +941 acorn squash +942 butternut squash +943 cucumber, cuke +944 artichoke, globe artichoke +945 bell pepper +946 cardoon +947 mushroom +948 Granny Smith +949 strawberry +950 orange +951 lemon +952 fig +953 pineapple, ananas +954 banana +955 jackfruit, jak, jack +956 custard apple +957 pomegranate +958 hay +959 carbonara +960 chocolate sauce, chocolate syrup +961 dough +962 meat loaf, meatloaf +963 pizza, pizza pie +964 potpie +965 burrito +966 red wine +967 espresso +968 cup +969 eggnog +970 alp +971 bubble +972 cliff, drop, drop-off +973 coral reef +974 geyser +975 lakeside, lakeshore +976 promontory, headland, head, foreland +977 sandbar, sand bar +978 seashore, coast, seacoast, sea-coast +979 valley, vale +980 volcano +981 ballplayer, baseball player +982 groom, bridegroom +983 scuba diver +984 rapeseed +985 daisy +986 yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum +987 corn +988 acorn +989 hip, rose hip, rosehip +990 buckeye, horse chestnut, conker +991 coral fungus +992 agaric +993 gyromitra +994 stinkhorn, carrion fungus +995 earthstar +996 hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa +997 bolete +998 ear, spike, capitulum +999 toilet tissue, toilet paper, bathroom tissue diff --git a/src/PaddleClas/deploy/utils/logger.py b/src/PaddleClas/deploy/utils/logger.py new file mode 100644 index 0000000..ece8526 --- /dev/null +++ b/src/PaddleClas/deploy/utils/logger.py @@ -0,0 +1,120 @@ +# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +import datetime + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s %(levelname)s: %(message)s", + datefmt="%Y-%m-%d %H:%M:%S") + + +def time_zone(sec, fmt): + real_time = datetime.datetime.now() + return real_time.timetuple() + + +logging.Formatter.converter = time_zone +_logger = logging.getLogger(__name__) + +Color = { + 'RED': '\033[31m', + 'HEADER': '\033[35m', # deep purple + 'PURPLE': '\033[95m', # purple + 'OKBLUE': '\033[94m', + 'OKGREEN': '\033[92m', + 'WARNING': '\033[93m', + 'FAIL': '\033[91m', + 'ENDC': '\033[0m' +} + + +def coloring(message, color="OKGREEN"): + assert color in Color.keys() + if os.environ.get('PADDLECLAS_COLORING', False): + return Color[color] + str(message) + Color["ENDC"] + else: + return message + + +def anti_fleet(log): + """ + logs will print multi-times when calling Fleet API. + Only display single log and ignore the others. + """ + + def wrapper(fmt, *args): + if int(os.getenv("PADDLE_TRAINER_ID", 0)) == 0: + log(fmt, *args) + + return wrapper + + +@anti_fleet +def info(fmt, *args): + _logger.info(fmt, *args) + + +@anti_fleet +def warning(fmt, *args): + _logger.warning(coloring(fmt, "RED"), *args) + + +@anti_fleet +def error(fmt, *args): + _logger.error(coloring(fmt, "FAIL"), *args) + + +def scaler(name, value, step, writer): + """ + This function will draw a scalar curve generated by the visualdl. + Usage: Install visualdl: pip3 install visualdl==2.0.0b4 + and then: + visualdl --logdir ./scalar --host 0.0.0.0 --port 8830 + to preview loss corve in real time. + """ + writer.add_scalar(tag=name, step=step, value=value) + + +def advertise(): + """ + Show the advertising message like the following: + + =========================================================== + == PaddleClas is powered by PaddlePaddle ! == + =========================================================== + == == + == For more info please go to the following website. == + == == + == https://github.com/PaddlePaddle/PaddleClas == + =========================================================== + + """ + copyright = "PaddleClas is powered by PaddlePaddle !" + ad = "For more info please go to the following website." + website = "https://github.com/PaddlePaddle/PaddleClas" + AD_LEN = 6 + len(max([copyright, ad, website], key=len)) + + info( + coloring("\n{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n".format( + "=" * (AD_LEN + 4), + "=={}==".format(copyright.center(AD_LEN)), + "=" * (AD_LEN + 4), + "=={}==".format(' ' * AD_LEN), + "=={}==".format(ad.center(AD_LEN)), + "=={}==".format(' ' * AD_LEN), + "=={}==".format(website.center(AD_LEN)), + "=" * (AD_LEN + 4), ), "RED")) diff --git a/src/PaddleClas/deploy/utils/predictor.py b/src/PaddleClas/deploy/utils/predictor.py new file mode 100644 index 0000000..7fd1d6d --- /dev/null +++ b/src/PaddleClas/deploy/utils/predictor.py @@ -0,0 +1,95 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import platform +import os +import argparse +import base64 +import shutil +import cv2 +import numpy as np + +from paddle.inference import Config +from paddle.inference import create_predictor + + +class Predictor(object): + def __init__(self, args, inference_model_dir=None): + # HALF precission predict only work when using tensorrt + if args.use_fp16 is True: + assert args.use_tensorrt is True + self.args = args + if self.args.get("use_onnx", False): + self.predictor, self.config = self.create_onnx_predictor( + args, inference_model_dir) + else: + self.predictor, self.config = self.create_paddle_predictor( + args, inference_model_dir) + + def predict(self, image): + raise NotImplementedError + + def create_paddle_predictor(self, args, inference_model_dir=None): + if inference_model_dir is None: + inference_model_dir = args.inference_model_dir + params_file = os.path.join(inference_model_dir, "inference.pdiparams") + model_file = os.path.join(inference_model_dir, "inference.pdmodel") + config = Config(model_file, params_file) + + if args.use_gpu: + config.enable_use_gpu(args.gpu_mem, 0) + else: + config.disable_gpu() + if args.enable_mkldnn: + # there is no set_mkldnn_cache_capatity() on macOS + if platform.system() != "Darwin": + # cache 10 different shapes for mkldnn to avoid memory leak + config.set_mkldnn_cache_capacity(10) + config.enable_mkldnn() + config.set_cpu_math_library_num_threads(args.cpu_num_threads) + + if args.enable_profile: + config.enable_profile() + config.disable_glog_info() + config.switch_ir_optim(args.ir_optim) # default true + if args.use_tensorrt: + config.enable_tensorrt_engine( + precision_mode=Config.Precision.Half + if args.use_fp16 else Config.Precision.Float32, + max_batch_size=args.batch_size, + workspace_size=1 << 30, + min_subgraph_size=30) + + config.enable_memory_optim() + # use zero copy + config.switch_use_feed_fetch_ops(False) + predictor = create_predictor(config) + + return predictor, config + + def create_onnx_predictor(self, args, inference_model_dir=None): + import onnxruntime as ort + if inference_model_dir is None: + inference_model_dir = args.inference_model_dir + model_file = os.path.join(inference_model_dir, "inference.onnx") + config = ort.SessionOptions() + if args.use_gpu: + raise ValueError( + "onnx inference now only supports cpu! please specify use_gpu false." + ) + else: + config.intra_op_num_threads = args.cpu_num_threads + if args.ir_optim: + config.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL + predictor = ort.InferenceSession(model_file, sess_options=config) + return predictor, config diff --git a/src/PaddleClas/deploy/utils/simfang.ttf b/src/PaddleClas/deploy/utils/simfang.ttf new file mode 100644 index 0000000..2b59eae Binary files /dev/null and b/src/PaddleClas/deploy/utils/simfang.ttf differ diff --git a/src/PaddleClas/deploy/vector_search/Makefile b/src/PaddleClas/deploy/vector_search/Makefile new file mode 100644 index 0000000..ec2df59 --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/Makefile @@ -0,0 +1,15 @@ +CXX=g++ + +ifeq ($(OS),Windows_NT) + postfix=dll +else + postfix=so +endif + +all : index + +index : src/config.h src/graph.h src/data.h interface.cc + ${CXX} -shared -fPIC interface.cc -o index.${postfix} -std=c++11 -Ofast -march=native -g -flto -funroll-loops -DOMP -fopenmp + +clean : + rm index.${postfix} \ No newline at end of file diff --git a/src/PaddleClas/deploy/vector_search/README.md b/src/PaddleClas/deploy/vector_search/README.md new file mode 100644 index 0000000..afa1dc2 --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/README.md @@ -0,0 +1,93 @@ +# 向量检索 + +**注意**:由于系统适配性问题,在新版本中,此检索算法将被废弃。新版本中将使用[faiss](https://github.com/facebookresearch/faiss),整体检索的过程保持不变,但建立索引及检索时的yaml文件有所修改。 +## 1. 简介 + +一些垂域识别任务(如车辆、商品等)需要识别的类别数较大,往往采用基于检索的方式,通过查询向量与底库向量进行快速的最近邻搜索,获得匹配的预测类别。向量检索模块提供基础的近似最近邻搜索算法,基于百度自研的Möbius算法,一种基于图的近似最近邻搜索算法,用于最大内积搜索 (MIPS)。 该模块提供python接口,支持numpy和 tensor类型向量,支持L2和Inner Product距离计算。 + +Mobius 算法细节详见论文 ([Möbius Transformation for Fast Inner Product Search on Graph](http://research.baidu.com/Public/uploads/5e189d36b5cf6.PDF), [Code](https://github.com/sunbelbd/mobius)) + + + +## 2. 安装 + +### 2.1 直接使用提供的库文件 + +该文件夹下有已经编译好的`index.so`(gcc8.2.0下编译,用于Linux)以及`index.dll`(gcc10.3.0下编译,用于Windows),可以跳过2.2与2.3节,直接使用。 + +如果因为gcc版本过低或者环境不兼容的问题,导致库文件无法使用,则需要在不同的平台下手动编译库文件。 + +**注意:** +请确保您的 C++ 编译器支持 C++11 标准。 + + +### 2.2 Linux上编译生成库文件 + +运行下面的命令,安装gcc与g++。 + +```shell +sudo apt-get update +sudo apt-get upgrade -y +sudo apt-get install build-essential gcc g++ +``` + +可以通过命令`gcc -v`查看gcc版本。 + +进入该文件夹,直接运行`make`即可,如果希望重新生成`index.so`文件,可以首先使用`make clean`清除已经生成的缓存,再使用`make`生成更新之后的库文件。 + +### 2.3 Windows上编译生成库文件 + +Windows上首先需要安装gcc编译工具,推荐使用[TDM-GCC](https://jmeubank.github.io/tdm-gcc/articles/2020-03/9.2.0-release),进入官网之后,可以选择合适的版本进行下载。推荐下载[tdm64-gcc-10.3.0-2.exe](https://github.com/jmeubank/tdm-gcc/releases/download/v10.3.0-tdm64-2/tdm64-gcc-10.3.0-2.exe)。 + +下载完成之后,按照默认的安装步骤进行安装即可。这里有3点需要注意: +1. 向量检索模块依赖于openmp,因此在安装到`choose components`步骤的时候,需要勾选上`openmp`的安装选项,否则之后编译的时候会报错`libgomp.spec: No such file or directory`,[参考链接](https://github.com/dmlc/xgboost/issues/1027) +2. 安装过程中会提示是否需要添加到系统的环境变量中,这里建议勾选上,否则之后使用的时候还需要手动添加系统环境变量。 +3. Linux上的编译命令为`make`,Windows上为`mingw32-make`,这里需要区分一下。 + + +安装完成后,可以打开一个命令行终端,通过命令`gcc -v`查看gcc版本。 + +在该文件夹(deploy/vector_search)下,运行命令`mingw32-make`,即可生成`index.dll`库文件。如果希望重新生成`index.dll`文件,可以首先使用`mingw32-make clean`清除已经生成的缓存,再使用`mingw32-make`生成更新之后的库文件。 + +### 2.4 MacOS上编译生成库文件 + +运行下面的命令,安装gcc与g++: + +```shell +brew install gcc +``` +#### 注意: +1. 若提示 `Error: Running Homebrew as root is extremely dangerous and no longer supported...`, 参考该[链接](https://jingyan.baidu.com/article/e52e3615057a2840c60c519c.html)处理 +2. 若提示 `Error: Failure while executing; `tar --extract --no-same-owner --file...`, 参考该[链接](https://blog.csdn.net/Dawn510/article/details/117787358)处理 + +在安装之后编译后的可执行程序会被复制到/usr/local/bin下面,查看这个文件夹下的gcc: +``` +ls /usr/local/bin/gcc* +``` +可以看到本地gcc对应的版本号为gcc-11,编译命令如下: (如果本地gcc版本为gcc-9, 则相应命令修改为`CXX=g++-9 make`) +``` +CXX=g++-11 make +``` + +## 3. 快速使用 + + import numpy as np + from interface import Graph_Index + + # 随机产生样本 + index_vectors = np.random.rand(100000,128).astype(np.float32) + query_vector = np.random.rand(128).astype(np.float32) + index_docs = ["ID_"+str(i) for i in range(100000)] + + # 初始化索引结构 + indexer = Graph_Index(dist_type="IP") #支持"IP"和"L2" + indexer.build(gallery_vectors=index_vectors, gallery_docs=index_docs, pq_size=100, index_path='test') + + # 查询 + scores, docs = indexer.search(query=query_vector, return_k=10, search_budget=100) + print(scores) + print(docs) + + # 保存与加载 + indexer.dump(index_path="test") + indexer.load(index_path="test") diff --git a/src/PaddleClas/deploy/vector_search/README_en.md b/src/PaddleClas/deploy/vector_search/README_en.md new file mode 100644 index 0000000..aecadfd --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/README_en.md @@ -0,0 +1,97 @@ +# Vector search + +**Attention**: Due to the system adaptability problem, this retrieval algorithm will be abandoned in the new version. [faiss](https://github.com/facebookresearch/faiss) will be used in the new version. The use process of the overall retrieval system base will remain unchanged, but the yaml files for build indexes and retrieval will be modified. + +## 1. Introduction + +Some vertical domain recognition tasks (e.g., vehicles, commodities, etc.) require a large number of recognized categories, and often use a retrieval-based approach to obtain matching predicted categories by performing a fast nearest neighbor search with query vectors and underlying library vectors. The vector search module provides the basic approximate nearest neighbor search algorithm based on Baidu's self-developed Möbius algorithm, a graph-based approximate nearest neighbor search algorithm for maximum inner product search (MIPS). This module provides python interface, supports numpy and tensor type vectors, and supports L2 and Inner Product distance calculation. + +Details of the Mobius algorithm can be found in the paper.([Möbius Transformation for Fast Inner Product Search on Graph](http://research.baidu.com/Public/uploads/5e189d36b5cf6.PDF), [Code](https://github.com/sunbelbd/mobius)) + +## 2. Installation + +### 2.1 Use the provided library files directly + +This folder contains the compiled `index.so` (compiled under gcc8.2.0 for Linux) and `index.dll` (compiled under gcc10.3.0 for Windows), which can be used directly, skipping sections 2.2 and 2.3. + +If the library files are not available due to a low gcc version or an incompatible environment, you need to manually compile the library files under a different platform. + +**Note:** Make sure that C++ compiler supports the C++11 standard. + +### 2.2 Compile and generate library files on Linux + +Run the following command to install gcc and g++. + +``` +sudo apt-get update +sudo apt-get upgrade -y +sudo apt-get install build-essential gcc g++ +``` + +Check the gcc version by the command `gcc -v`. + +`make` can be operated directly. If you wish to regenerate the `index.so`, you can first use `make clean` to clear the cache, and then use `make` to generate the updated library file. + +### 2.3 Compile and generate library files on Windows + +You need to install gcc compiler tool first, we recommend using [TDM-GCC](https://jmeubank.github.io/tdm-gcc/articles/2020-03/9.2.0-release), you can choose the right version on the official website. We recommend downloading [tdm64-gcc-10.3.0-2.exe](https://github.com/jmeubank/tdm-gcc/releases/download/v10.3.0-tdm64-2/tdm64-gcc-10.3.0-2.exe). + +After the downloading, follow the default installation steps to install. There are 3 points to note here: + +1. The vector search module depends on openmp, so you need to check the `openmp` installation option when going on to `choose components` step, otherwise it will report an error `libgomp.spec: No such file or directory`, [reference link](https://github.com/dmlc/xgboost/issues/1027) +2. When being asked whether to add to the system environment variables, it is recommended to check here, otherwise you need to add the system environment variables manually later. +3. The compile command is `make` on Linux and `mingw32-make` on Windows, so you need to distinguish here. + +After installation, you can open a command line terminal and check the gcc version with the command `gcc -v`. + +Run the command `mingw32-make` to generate the `index.dll` library file under the folder (deploy/vector_search). If you want to regenerate the `index.dll` file, you can first use `mingw32-make clean` to clear the cache, and then use `mingw32-make` to generate the updated library file. + +### 2.4 Compile and generate library files on MacOS + +Run the following command to install gcc and g++: + +``` +brew install gcc +``` + +#### Caution: + +1. If prompted with `Error: Running Homebrew as root is extremely dangerous and no longer supported... `, refer to this [link](https://jingyan.baidu.com/article/e52e3615057a2840c60c519c.html) +2. If prompted with `Error: Failure while executing; tar --extract --no-same-owner --file... `, refer to this [link](https://blog.csdn.net/Dawn510/article/details/117787358). + +After installation the compiled executable is copied under /usr/local/bin, look at the gcc in this folder: + +``` +ls /usr/local/bin/gcc* +``` + +The local gcc version is gcc-11, and the compile command is as follows: (If the local gcc version is gcc-9, the corresponding command should be `CXX=g++-9 make`) + +``` +CXX=g++-11 make +``` + +## 3. Quick use + +``` +import numpy as np +from interface import Graph_Index + +# Random sample generation +index_vectors = np.random.rand(100000,128).astype(np.float32) +query_vector = np.random.rand(128).astype(np.float32) +index_docs = ["ID_"+str(i) for i in range(100000)] + +# Initialize index structure +indexer = Graph_Index(dist_type="IP") #support "IP" and "L2" +indexer.build(gallery_vectors=index_vectors, gallery_docs=index_docs, pq_size=100, index_path='test') + +# Query +scores, docs = indexer.search(query=query_vector, return_k=10, search_budget=100) +print(scores) +print(docs) + +# Save and load +indexer.dump(index_path="test") +indexer.load(index_path="test") +``` diff --git a/src/PaddleClas/deploy/vector_search/__init__.py b/src/PaddleClas/deploy/vector_search/__init__.py new file mode 100644 index 0000000..4ee26df --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/__init__.py @@ -0,0 +1 @@ +from .interface import Graph_Index diff --git a/src/PaddleClas/deploy/vector_search/index.dll b/src/PaddleClas/deploy/vector_search/index.dll new file mode 100644 index 0000000..5d54753 Binary files /dev/null and b/src/PaddleClas/deploy/vector_search/index.dll differ diff --git a/src/PaddleClas/deploy/vector_search/index.so b/src/PaddleClas/deploy/vector_search/index.so new file mode 100644 index 0000000..d58d4f7 Binary files /dev/null and b/src/PaddleClas/deploy/vector_search/index.so differ diff --git a/src/PaddleClas/deploy/vector_search/interface.cc b/src/PaddleClas/deploy/vector_search/interface.cc new file mode 100644 index 0000000..4013668 --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/interface.cc @@ -0,0 +1,266 @@ +//MIT License +// +//Copyright (c) 2021 Mobius Authors + +//Permission is hereby granted, free of charge, to any person obtaining a copy +//of this software and associated documentation files (the "Software"), to deal +//in the Software without restriction, including without limitation the rights +//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +//copies of the Software, and to permit persons to whom the Software is +//furnished to do so, subject to the following conditions: + +//The above copyright notice and this permission notice shall be included in all +//copies or substantial portions of the Software. + +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//SOFTWARE. + +//from https://github.com/sunbelbd/mobius/blob/e2d166547d61d791da8f06747a63b9cd38f02c71/main.cc + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include"src/data.h" +#include"src/graph.h" + +struct IndexContext{ + void* graph; + void* data; +}; + + +int topk = 0; +int display_topk = 1; +int build_idx_offset = 0; +int query_idx_offset = 0; + +void flush_add_buffer( + std::vector>>>& add_buffer, + GraphWrapper* graph){ + #pragma omp parallel for + for(int i = 0;i < add_buffer.size();++i){ + auto& idx = add_buffer[i].first; + auto& point = add_buffer[i].second; + graph->add_vertex_lock(idx,point); + } + add_buffer.clear(); +} + + +extern "C"{ +// for mobius IP index +void build_mobius_index(float* dense_mat,int row,int dim, int pq_size, double mobius_pow , const char* prefix){ + std::unique_ptr data; + std::unique_ptr data_original; + std::unique_ptr graph; + int topk = 0; + int display_topk = 1; + int build_idx_offset = 0; + int query_idx_offset = 0; + + ++row; + data = std::unique_ptr(new Data(row,dim)); + graph = std::unique_ptr(new FixedDegreeGraph<3>(data.get())); + graph->set_construct_pq_size(pq_size); + + std::vector>>> add_buffer; + + ((FixedDegreeGraph<3>*)graph.get())->get_data()->mobius_pow = mobius_pow; + data_original = std::unique_ptr(new Data(row,dim)); + + std::vector> dummy_mobius_point; + for(int i = 0;i < dim;++i) + dummy_mobius_point.push_back(std::make_pair(i,0)); + + //idx += build_idx_offset; + + for(int i = 0;i < row - 1;++i){ + + std::vector> point; + point.reserve(dim); + for(int j = 0;j < dim;++j) + point.push_back(std::make_pair(j,dense_mat[i * dim + j])); + + data_original->add(i,point); + data->add_mobius(i,point); + if(i < 1000){ + graph->add_vertex(i,point); + }else{ + add_buffer.push_back(std::make_pair(i,point)); + } + if(add_buffer.size() >= 1000000) + flush_add_buffer(add_buffer,graph.get()); + } + flush_add_buffer(add_buffer,graph.get()); + graph->add_vertex(row - 1,dummy_mobius_point); + data.swap(data_original); + + std::string str = std::string(prefix); + data->dump(str + ".data"); + graph->dump(str + ".graph"); + +} + +void load_mobius_index_prefix(int row,int dim,IndexContext* index_context,const char* prefix){ + std::string str = std::string(prefix); + + ++row; + Data* data = new Data(row,dim); + GraphWrapper* graph = new FixedDegreeGraph<1>(data); + + //idx += build_idx_offset; + data->load(str + ".data"); + graph->load(str + ".graph"); + + ((FixedDegreeGraph<1>*)graph)->search_start_point = row - 1; + ((FixedDegreeGraph<1>*)graph)->ignore_startpoint = true; + + index_context->graph = graph; + index_context->data = data; +} + +void save_mobius_index_prefix(IndexContext* index_context,const char* prefix){ + std::string str = std::string(prefix); + Data* data = (Data*)(index_context->data); + GraphWrapper* graph = (GraphWrapper*)(index_context->graph); + + data->dump(str + ".data"); + graph->dump(str + ".graph"); +} + +void search_mobius_index(float* dense_vec,int dim,int search_budget,int return_k, IndexContext* index_context,idx_t* ret_id,double* ret_score){ + int topk = 0; + int display_topk = 1; + int build_idx_offset = 0; + int query_idx_offset = 0; + + Data* data = reinterpret_cast(index_context->data); + GraphWrapper* graph = reinterpret_cast(index_context->graph); + + + //auto flag = (data==NULL); + //std::cout<> point; + point.reserve(dim); + for(int j = 0;j < dim;++j) + point.push_back(std::make_pair(j,dense_vec[j])); + std::vector topN; + std::vector score; + graph->search_top_k_with_score(point,search_budget,topN,score); + for(int i = 0;i < topN.size() && i < return_k;++i){ + ret_id[i] = topN[i]; + ret_score[i] = score[i]; + } +} + + +// For L2 index +void build_l2_index(float* dense_mat,int row,int dim, int pq_size, const char* prefix){ + std::unique_ptr data; + std::unique_ptr graph; + int topk = 0; + int display_topk = 1; + int build_idx_offset = 0; + int query_idx_offset = 0; + + data = std::unique_ptr(new Data(row,dim)); + graph = std::unique_ptr(new FixedDegreeGraph<3>(data.get())); + graph->set_construct_pq_size(pq_size); + + std::vector>>> add_buffer; + + for(int i = 0;i < row;++i){ + std::vector> point; + point.reserve(dim); + for(int j = 0;j < dim;++j) + point.push_back(std::make_pair(j,dense_mat[i * dim + j])); + data->add(i,point); + if(i < 1000){ + graph->add_vertex(i,point); + }else{ + add_buffer.push_back(std::make_pair(i,point)); + } + if(add_buffer.size() >= 1000000) + flush_add_buffer(add_buffer,graph.get()); + } + flush_add_buffer(add_buffer,graph.get()); + + std::string str = std::string(prefix); + data->dump(str + ".data"); + graph->dump(str + ".graph"); + +} + +void load_l2_index_prefix(int row,int dim,IndexContext* index_context,const char* prefix){ + std::string str = std::string(prefix); + + Data* data = new Data(row,dim); + GraphWrapper* graph = new FixedDegreeGraph<3>(data); + + //idx += build_idx_offset; + + data->load(str + ".data"); + graph->load(str + ".graph"); + + index_context->graph = graph; + index_context->data = data; +} + +void save_l2_index_prefix(IndexContext* index_context,const char* prefix){ + std::string str = std::string(prefix); + Data* data = (Data*)(index_context->data); + GraphWrapper* graph = (GraphWrapper*)(index_context->graph); + + data->dump(str + ".data"); + graph->dump(str + ".graph"); +} + + + +void search_l2_index(float* dense_vec,int dim,int search_budget,int return_k, IndexContext* index_context,idx_t* ret_id,double* ret_score){ + int topk = 0; + int display_topk = 1; + int build_idx_offset = 0; + int query_idx_offset = 0; + + Data* data = reinterpret_cast(index_context->data); + GraphWrapper* graph = reinterpret_cast(index_context->graph); + + std::vector> point; + point.reserve(dim); + for(int j = 0;j < dim;++j) + point.push_back(std::make_pair(j,dense_vec[j])); + std::vector topN; + std::vector score; + graph->search_top_k_with_score(point,search_budget,topN,score); + for(int i = 0;i < topN.size() && i < return_k;++i){ +// printf("%d: (%zu, %f)\n",i,topN[i],score[i]); + ret_id[i] = topN[i]; + ret_score[i] = score[i]; + } +} + + +void release_context(IndexContext* index_context){ + delete (Data*)(index_context->data); + delete (GraphWrapper*)(index_context->graph); +} + +} // extern "C" + diff --git a/src/PaddleClas/deploy/vector_search/interface.py b/src/PaddleClas/deploy/vector_search/interface.py new file mode 100644 index 0000000..8dcd86f --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/interface.py @@ -0,0 +1,272 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import ctypes +import paddle +import numpy.ctypeslib as ctl +import numpy as np +import os +import sys +import json +import platform + +from ctypes import * +from numpy.ctypeslib import ndpointer + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +winmode = None +if platform.system() == "Windows": + lib_filename = "index.dll" + if sys.version_info.minor >= 8: + winmode = 0x8 +else: + lib_filename = "index.so" +so_path = os.path.join(__dir__, lib_filename) +try: + if winmode is not None: + lib = ctypes.CDLL(so_path, winmode=winmode) + else: + lib = ctypes.CDLL(so_path) +except Exception as ex: + readme_path = os.path.join(__dir__, "README.md") + print( + f"Error happened when load lib {so_path} with msg {ex},\nplease refer to {readme_path} to rebuild your library." + ) + exit(-1) + + +class IndexContext(Structure): + _fields_ = [("graph", c_void_p), ("data", c_void_p)] + + +# for mobius IP index +build_mobius_index = lib.build_mobius_index +build_mobius_index.restype = None +build_mobius_index.argtypes = [ + ctl.ndpointer( + np.float32, flags='aligned, c_contiguous'), ctypes.c_int, ctypes.c_int, + ctypes.c_int, ctypes.c_double, ctypes.c_char_p +] + +search_mobius_index = lib.search_mobius_index +search_mobius_index.restype = None +search_mobius_index.argtypes = [ + ctl.ndpointer( + np.float32, flags='aligned, c_contiguous'), ctypes.c_int, ctypes.c_int, + ctypes.c_int, POINTER(IndexContext), ctl.ndpointer( + np.uint64, flags='aligned, c_contiguous'), ctl.ndpointer( + np.float64, flags='aligned, c_contiguous') +] + +load_mobius_index_prefix = lib.load_mobius_index_prefix +load_mobius_index_prefix.restype = None +load_mobius_index_prefix.argtypes = [ + ctypes.c_int, ctypes.c_int, POINTER(IndexContext), ctypes.c_char_p +] + +save_mobius_index_prefix = lib.save_mobius_index_prefix +save_mobius_index_prefix.restype = None +save_mobius_index_prefix.argtypes = [POINTER(IndexContext), ctypes.c_char_p] + +# for L2 index +build_l2_index = lib.build_l2_index +build_l2_index.restype = None +build_l2_index.argtypes = [ + ctl.ndpointer( + np.float32, flags='aligned, c_contiguous'), ctypes.c_int, ctypes.c_int, + ctypes.c_int, ctypes.c_char_p +] + +search_l2_index = lib.search_l2_index +search_l2_index.restype = None +search_l2_index.argtypes = [ + ctl.ndpointer( + np.float32, flags='aligned, c_contiguous'), ctypes.c_int, ctypes.c_int, + ctypes.c_int, POINTER(IndexContext), ctl.ndpointer( + np.uint64, flags='aligned, c_contiguous'), ctl.ndpointer( + np.float64, flags='aligned, c_contiguous') +] + +load_l2_index_prefix = lib.load_l2_index_prefix +load_l2_index_prefix.restype = None +load_l2_index_prefix.argtypes = [ + ctypes.c_int, ctypes.c_int, POINTER(IndexContext), ctypes.c_char_p +] + +save_l2_index_prefix = lib.save_l2_index_prefix +save_l2_index_prefix.restype = None +save_l2_index_prefix.argtypes = [POINTER(IndexContext), ctypes.c_char_p] + +release_context = lib.release_context +release_context.restype = None +release_context.argtypes = [POINTER(IndexContext)] + + +class Graph_Index(object): + """ + graph index + """ + + def __init__(self, dist_type="IP"): + self.dim = 0 + self.total_num = 0 + self.dist_type = dist_type + self.mobius_pow = 2.0 + self.index_context = IndexContext(0, 0) + self.gallery_doc_dict = {} + self.with_attr = False + assert dist_type in ["IP", "L2"], "Only support IP and L2 distance ..." + + def build(self, + gallery_vectors, + gallery_docs=[], + pq_size=100, + index_path='graph_index/', + append_index=False): + """ + build index + """ + if paddle.is_tensor(gallery_vectors): + gallery_vectors = gallery_vectors.numpy() + assert gallery_vectors.ndim == 2, "Input vector must be 2D ..." + + self.total_num = gallery_vectors.shape[0] + self.dim = gallery_vectors.shape[1] + + assert (len(gallery_docs) == self.total_num + if len(gallery_docs) > 0 else True) + + print("training index -> num: {}, dim: {}, dist_type: {}".format( + self.total_num, self.dim, self.dist_type)) + + if not os.path.exists(index_path): + os.makedirs(index_path) + + if self.dist_type == "IP": + build_mobius_index( + gallery_vectors, self.total_num, self.dim, pq_size, + self.mobius_pow, + create_string_buffer((index_path + "/index").encode('utf-8'))) + load_mobius_index_prefix( + self.total_num, self.dim, + ctypes.byref(self.index_context), + create_string_buffer((index_path + "/index").encode('utf-8'))) + else: + build_l2_index( + gallery_vectors, self.total_num, self.dim, pq_size, + create_string_buffer((index_path + "/index").encode('utf-8'))) + load_l2_index_prefix( + self.total_num, self.dim, + ctypes.byref(self.index_context), + create_string_buffer((index_path + "/index").encode('utf-8'))) + + self.gallery_doc_dict = {} + if len(gallery_docs) > 0: + self.with_attr = True + for i in range(gallery_vectors.shape[0]): + self.gallery_doc_dict[str(i)] = gallery_docs[i] + + self.gallery_doc_dict["total_num"] = self.total_num + self.gallery_doc_dict["dim"] = self.dim + self.gallery_doc_dict["dist_type"] = self.dist_type + self.gallery_doc_dict["with_attr"] = self.with_attr + + output_path = os.path.join(index_path, "info.json") + if append_index is True and os.path.exists(output_path): + with open(output_path, "r") as fin: + lines = fin.readlines()[0] + ori_gallery_doc_dict = json.loads(lines) + assert ori_gallery_doc_dict["dist_type"] == self.gallery_doc_dict[ + "dist_type"] + assert ori_gallery_doc_dict["dim"] == self.gallery_doc_dict["dim"] + assert ori_gallery_doc_dict["with_attr"] == self.gallery_doc_dict[ + "with_attr"] + offset = ori_gallery_doc_dict["total_num"] + for i in range(0, self.gallery_doc_dict["total_num"]): + ori_gallery_doc_dict[str(i + offset)] = self.gallery_doc_dict[ + str(i)] + + ori_gallery_doc_dict["total_num"] += self.gallery_doc_dict[ + "total_num"] + self.gallery_doc_dict = ori_gallery_doc_dict + with open(output_path, "w") as f: + json.dump(self.gallery_doc_dict, f) + + print("finished creating index ...") + + def search(self, query, return_k=10, search_budget=100): + """ + search + """ + ret_id = np.zeros(return_k, dtype=np.uint64) + ret_score = np.zeros(return_k, dtype=np.float64) + + if paddle.is_tensor(query): + query = query.numpy() + if self.dist_type == "IP": + search_mobius_index(query, self.dim, search_budget, return_k, + ctypes.byref(self.index_context), ret_id, + ret_score) + else: + search_l2_index(query, self.dim, search_budget, return_k, + ctypes.byref(self.index_context), ret_id, + ret_score) + + ret_id = ret_id.tolist() + ret_doc = [] + if self.with_attr: + for i in range(return_k): + ret_doc.append(self.gallery_doc_dict[str(ret_id[i])]) + return ret_score, ret_doc + else: + return ret_score, ret_id + + def dump(self, index_path): + + if not os.path.exists(index_path): + os.makedirs(index_path) + + if self.dist_type == "IP": + save_mobius_index_prefix( + ctypes.byref(self.index_context), + create_string_buffer((index_path + "/index").encode('utf-8'))) + else: + save_l2_index_prefix( + ctypes.byref(self.index_context), + create_string_buffer((index_path + "/index").encode('utf-8'))) + + with open(index_path + "/info.json", "w") as f: + json.dump(self.gallery_doc_dict, f) + + def load(self, index_path): + self.gallery_doc_dict = {} + + with open(index_path + "/info.json", "r") as f: + self.gallery_doc_dict = json.load(f) + + self.total_num = self.gallery_doc_dict["total_num"] + self.dim = self.gallery_doc_dict["dim"] + self.dist_type = self.gallery_doc_dict["dist_type"] + self.with_attr = self.gallery_doc_dict["with_attr"] + + if self.dist_type == "IP": + load_mobius_index_prefix( + self.total_num, self.dim, + ctypes.byref(self.index_context), + create_string_buffer((index_path + "/index").encode('utf-8'))) + else: + load_l2_index_prefix( + self.total_num, self.dim, + ctypes.byref(self.index_context), + create_string_buffer((index_path + "/index").encode('utf-8'))) diff --git a/src/PaddleClas/deploy/vector_search/src/config.h b/src/PaddleClas/deploy/vector_search/src/config.h new file mode 100644 index 0000000..352d684 --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/src/config.h @@ -0,0 +1,43 @@ +//MIT License +// +//Copyright (c) 2021 Mobius Authors + +//Permission is hereby granted, free of charge, to any person obtaining a copy +//of this software and associated documentation files (the "Software"), to deal +//in the Software without restriction, including without limitation the rights +//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +//copies of the Software, and to permit persons to whom the Software is +//furnished to do so, subject to the following conditions: + +//The above copyright notice and this permission notice shall be included in all +//copies or substantial portions of the Software. + +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//SOFTWARE. + + +//from https://github.com/sunbelbd/mobius/blob/e2d166547d61d791da8f06747a63b9cd38f02c71/config.h + +#pragma once + + +typedef float value_t; +//typedef double dist_t; +typedef float dist_t; +typedef size_t idx_t; +typedef int UINT; + + +#define ACC_BATCH_SIZE 4096 +#define FIXED_DEGREE 31 +#define FIXED_DEGREE_SHIFT 5 + + +//for construction +#define SEARCH_DEGREE 15 +#define CONSTRUCT_SEARCH_BUDGET 150 diff --git a/src/PaddleClas/deploy/vector_search/src/data.h b/src/PaddleClas/deploy/vector_search/src/data.h new file mode 100644 index 0000000..ea65e70 --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/src/data.h @@ -0,0 +1,365 @@ +//MIT License +// +//Copyright (c) 2021 Mobius Authors + +//Permission is hereby granted, free of charge, to any person obtaining a copy +//of this software and associated documentation files (the "Software"), to deal +//in the Software without restriction, including without limitation the rights +//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +//copies of the Software, and to permit persons to whom the Software is +//furnished to do so, subject to the following conditions: + +//The above copyright notice and this permission notice shall be included in all +//copies or substantial portions of the Software. + +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//SOFTWARE. + +//from https://github.com/sunbelbd/mobius/blob/e2d166547d61d791da8f06747a63b9cd38f02c71/data.h + +#pragma once + +#include +#include +#include + +#include"config.h" + +#define ZERO_EPS 1e-10 + +#define _SCALE_WORLD_DENSE_DATA + +#ifdef _SCALE_WORLD_DENSE_DATA +//dense data +class Data{ +private: + std::unique_ptr data; + size_t num; + size_t curr_num = 0; + int dim; + +public: + value_t mobius_pow = 2; + value_t max_ip_norm = 1; + value_t max_ip_norm2 = 1; + + Data(size_t num, int dim) : num(num),dim(dim){ + data = std::unique_ptr(new value_t[num * dim]); + memset(data.get(),0,sizeof(value_t) * num * dim); + } + + value_t* get(idx_t idx) const{ + return data.get() + idx * dim; + } + + template + dist_t ipwrap_l2_query_distance(idx_t a,T& v) const{ + auto pa = get(a); + dist_t ret = 0; + dist_t normu = 0; + for(int i = 0;i < dim;++i){ + auto diff = (*(pa + i) / max_ip_norm) - v[i]; + ret += diff * diff; + normu += (*(pa + i)) * (*(pa + i)); + } + ret += 1 - normu / max_ip_norm2; + return ret; + } + + template + dist_t ipwrap_l2_build_distance(idx_t a,T& v) const{ + auto pa = get(a); + dist_t ret = 0; + dist_t normu = 0; + dist_t normv = 0; + for(int i = 0;i < dim;++i){ + auto diff = *(pa + i) - v[i]; + ret += diff * diff; + normu += (*(pa + i)) * (*(pa + i)); + normv += v[i] * v[i]; + } + dist_t wrap_termu = sqrt(1 - normu / max_ip_norm2); + dist_t wrap_termv = sqrt(1 - normv / max_ip_norm2); + dist_t diff_wrap = wrap_termu - wrap_termv; + ret = ret / max_ip_norm2 + diff_wrap * diff_wrap; + return ret; + } + + template + dist_t l2_distance(idx_t a,T& v) const{ + auto pa = get(a); + dist_t ret = 0; + for(int i = 0;i < dim;++i){ + auto diff = *(pa + i) - v[i]; + ret += diff * diff; + } + return ret; + } + + template + dist_t negative_inner_prod_distance(idx_t a,T& v) const{ + auto pa = get(a); + dist_t ret = 0; + for(int i = 0;i < dim;++i){ + ret -= (*(pa + i)) * v[i]; + } + return ret; + } + + template + dist_t negative_cosine_distance(idx_t a,T& v) const{ + auto pa = get(a); + dist_t ret = 0; + value_t lena = 0,lenv = 0; + for(int i = 0;i < dim;++i){ + ret += (*(pa + i)) * v[i]; + lena += (*(pa + i)) * (*(pa + i)); + lenv += v[i] * v[i]; + } + int sign = ret < 0 ? 1 : -1; +// return sign * (ret * ret / lena);// / lenv); + return sign * (ret * ret / lena / lenv); + } + + template + dist_t mobius_l2_distance(idx_t a,T& v) const{ + auto pa = get(a); + dist_t ret = 0; + value_t lena = 0,lenv = 0; + for(int i = 0;i < dim;++i){ + lena += (*(pa + i)) * (*(pa + i)); + lenv += v[i] * v[i]; + } + value_t modifier_a = pow(lena,0.5 * mobius_pow); + value_t modifier_v = pow(lenv,0.5 * mobius_pow); + if(fabs(modifier_a) < ZERO_EPS) + modifier_a = 1; + if(fabs(modifier_v) < ZERO_EPS) + modifier_v = 1; + for(int i = 0;i < dim;++i){ + value_t tmp = (*(pa + i)) / modifier_a - v[i] / modifier_v; + ret += tmp * tmp; + } + return ret; + } + + template + dist_t real_nn(T& v) const{ + dist_t minn = 1e100; + for(size_t i = 0;i < curr_num;++i){ + auto res = l2_distance(i,v); + if(res < minn){ + minn = res; + } + } + return minn; + } + + std::vector organize_point_mobius(const std::vector>& v){ + std::vector ret(dim,0); + value_t lena = 0; + for(const auto& p : v){ +// ret[p.first] = p.second; + lena += p.second * p.second; + } + value_t modifier_a = pow(lena,0.5 * mobius_pow); + if(fabs(modifier_a) < ZERO_EPS) + modifier_a = 1; + for(const auto& p : v){ + ret[p.first] = p.second / modifier_a; + } + return std::move(ret); + } + + std::vector organize_point(const std::vector>& v){ + std::vector ret(dim,0); + for(const auto& p : v){ + if(p.first >= dim) + printf("error %d %d\n",p.first,dim); + ret[p.first] = p.second; + } + return std::move(ret); + } + + value_t vec_sum2(const std::vector>& v){ + value_t ret = 0; + for(const auto& p : v){ + if(p.first >= dim) + printf("error %d %d\n",p.first,dim); + ret += p.second * p.second; + } + return std::move(ret); + } + + + void add(idx_t idx, std::vector>& value){ + //printf("adding %zu\n",idx); + //for(auto p : value) + // printf("%zu %d %f\n",idx,p.first,p.second); + curr_num = std::max(curr_num,idx); + auto p = get(idx); + for(const auto& v : value) + *(p + v.first) = v.second; + } + + void add_mobius(idx_t idx, std::vector>& value){ + //printf("adding %zu\n",idx); + //for(auto p : value) + // printf("%zu %d %f\n",idx,p.first,p.second); + curr_num = std::max(curr_num,idx); + auto p = get(idx); + value_t lena = 0; + for(const auto& v : value){ + *(p + v.first) = v.second; + lena += v.second * v.second; + } + value_t modifier_a = pow(lena,0.5 * mobius_pow); + if(fabs(modifier_a) < ZERO_EPS) + modifier_a = 1; + for(const auto& v : value){ + *(p + v.first) = v.second / modifier_a; + } + } + + inline size_t max_vertices(){ + return num; + } + + inline size_t curr_vertices(){ + return curr_num; + } + + void print(){ + for(int i = 0;i < num && i < 10;++i) + printf("%f ",*(data.get() + i)); + printf("\n"); + } + + int get_dim(){ + return dim; + } + + void dump(std::string path = "bfsg.data"){ + FILE* fp = fopen(path.c_str(),"wb"); + fwrite(data.get(),sizeof(value_t) * num * dim,1,fp); + fclose(fp); + } + + void load(std::string path = "bfsg.data"){ + curr_num = num; + FILE* fp = fopen(path.c_str(),"rb"); + auto cnt = fread(data.get(),sizeof(value_t) * num * dim,1,fp); + fclose(fp); + } + +}; +template<> +dist_t Data::ipwrap_l2_build_distance(idx_t a,idx_t& b) const{ + auto pa = get(a); + auto pb = get(b); + dist_t ret = 0; + dist_t normu = 0; + dist_t normv = 0; + for(int i = 0;i < dim;++i){ + auto diff = *(pa + i) - *(pb + i); + ret += diff * diff; + normu += (*(pa + i)) * (*(pa + i)); + normv += (*(pb + i)) * (*(pb + i)); + } + dist_t wrap_termu = sqrt(1 - normu / max_ip_norm2); + dist_t wrap_termv = sqrt(1 - normv / max_ip_norm2); + dist_t diff_wrap = wrap_termu - wrap_termv; + ret = ret / max_ip_norm2 + diff_wrap * diff_wrap; + return ret; +} +template<> +dist_t Data::ipwrap_l2_query_distance(idx_t a,idx_t& b) const{ + auto pa = get(a); + auto pb = get(b); + dist_t ret = 0; + dist_t normu = 0; + for(int i = 0;i < dim;++i){ + auto diff = (*(pa + i) / max_ip_norm) - *(pb + i); + ret += diff * diff; + normu += (*(pa + i)) * (*(pa + i)); + } + ret += 1 - normu / max_ip_norm2; + return ret; +} +template<> +dist_t Data::l2_distance(idx_t a,idx_t& b) const{ + auto pa = get(a), + pb = get(b); + dist_t ret = 0; + for(int i = 0;i < dim;++i){ + auto diff = *(pa + i) - *(pb + i); + ret += diff * diff; + } + return ret; +} + +template<> +dist_t Data::negative_inner_prod_distance(idx_t a,idx_t& b) const{ + auto pa = get(a), + pb = get(b); + dist_t ret = 0; + for(int i = 0;i < dim;++i){ + ret -= (*(pa + i)) * (*(pb + i)); + } + return ret; +} + +template<> +dist_t Data::negative_cosine_distance(idx_t a,idx_t& b) const{ + auto pa = get(a), + pb = get(b); + dist_t ret = 0; + value_t lena = 0,lenv = 0; + for(int i = 0;i < dim;++i){ + ret += (*(pa + i)) * (*(pb + i)); + lena += (*(pa + i)) * (*(pa + i)); + lenv += (*(pb + i)) * (*(pb + i)); + } + int sign = ret < 0 ? 1 : -1; +// return sign * (ret * ret / lena); + return sign * (ret * ret / lena / lenv); +} + +template<> +dist_t Data::mobius_l2_distance(idx_t a,idx_t& b) const{ + auto pa = get(a), + pb = get(b); + dist_t ret = 0; + value_t lena = 0,lenv = 0; + for(int i = 0;i < dim;++i){ + lena += (*(pa + i)) * (*(pa + i)); + lenv += (*(pb + i)) * (*(pb + i)); + } + value_t modifier_a = pow(lena,0.5 * mobius_pow); + value_t modifier_v = pow(lenv,0.5 * mobius_pow); + if(fabs(modifier_a) < ZERO_EPS) + modifier_a = 1; + if(fabs(modifier_v) < ZERO_EPS) + modifier_v = 1; + for(int i = 0;i < dim;++i){ + value_t tmp = (*(pa + i)) / modifier_a - (*(pb + i)) / modifier_v; + ret += tmp * tmp; + } + return ret; +} + +#else +//sparse data +class Data{ +public: + //TODO + +}; +#endif + + diff --git a/src/PaddleClas/deploy/vector_search/src/graph.h b/src/PaddleClas/deploy/vector_search/src/graph.h new file mode 100644 index 0000000..d54353b --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/src/graph.h @@ -0,0 +1,636 @@ +//MIT License +// +//Copyright (c) 2021 Mobius Authors + +//Permission is hereby granted, free of charge, to any person obtaining a copy +//of this software and associated documentation files (the "Software"), to deal +//in the Software without restriction, including without limitation the rights +//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +//copies of the Software, and to permit persons to whom the Software is +//furnished to do so, subject to the following conditions: + +//The above copyright notice and this permission notice shall be included in all +//copies or substantial portions of the Software. + +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//SOFTWARE. + +//from https://github.com/sunbelbd/mobius/blob/e2d166547d61d791da8f06747a63b9cd38f02c71/graph.h + + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include + +#include"config.h" +#include"data.h" + +#ifdef OMP +#include +#endif + +typedef unsigned int vl_type; + +class VisitedList { +public: + vl_type curV; + vl_type *mass; + unsigned int numelements; + + VisitedList(int numelements1) { + curV = 1; + numelements = numelements1; + mass = new vl_type[numelements]; + memset(mass, 0, sizeof(vl_type) * numelements); + } + + void reset() { + ++curV; + if (curV == 0) { + curV = 1; + memset(mass, 0, sizeof(vl_type) * numelements); + } + }; + + ~VisitedList() { delete mass; } +}; + +struct GraphMeasures{ + int distance_cnt = 0; +}; + +class GraphWrapper{ +public: + virtual void add_vertex(idx_t vertex_id,std::vector>& point) = 0; + virtual void add_vertex_lock(idx_t vertex_id,std::vector>& point) = 0; + virtual void search_top_k(const std::vector>& query,int k,std::vector& result) = 0; + virtual void search_top_k_with_score(const std::vector>& query,int k,std::vector& result,std::vector& score){} + + virtual void dump(std::string path = "bfsg.graph") = 0; + virtual void load(std::string path = "bfsg.graph") = 0; + virtual ~GraphWrapper(){} + virtual void set_construct_pq_size(int size){}; + GraphMeasures measures; +}; + +template +class FixedDegreeGraph : public GraphWrapper{ +private: + const int degree = SEARCH_DEGREE; + const int flexible_degree = FIXED_DEGREE; + const int vertex_offset_shift = FIXED_DEGREE_SHIFT; + std::vector edges; + std::vector edge_dist; + Data* data; + std::mt19937_64 rand_gen = std::mt19937_64(1234567);//std::random_device{}()); + std::vector edge_mutex;//do not push back on this vector, it will destroy the mutex + + bool debug = false; + VisitedList* p_visited = NULL; + #ifdef OMP + std::vector visited_pool; + #endif + int construct_pq_size = CONSTRUCT_SEARCH_BUDGET; + + + void rank_and_switch_ordered(idx_t v_id,idx_t u_id){ + //We assume the neighbors of v_ids in edges[offset] are sorted + //by the distance to v_id ascendingly when it is full + //NOTICE: before it is full, it is unsorted + auto curr_dist = pair_distance(v_id,u_id); + auto offset = ((size_t)v_id) << vertex_offset_shift; + int degree = edges[offset]; + std::vector neighbor; + neighbor.reserve(degree + 1); + for(int i = 0;i < degree;++i) + neighbor.push_back(edges[offset + i + 1]); + neighbor.push_back(u_id); + neighbor = edge_selection_filter_neighbor(neighbor,v_id,flexible_degree); + edges[offset] = neighbor.size(); + for(int i = 0;i < neighbor.size();++i) + edges[offset + i + 1] = neighbor[i]; + return; + //We assert edges[offset] > 0 here + if(curr_dist >= edge_dist[offset + edges[offset]]){ + return; + } + edges[offset + edges[offset]] = u_id; + edge_dist[offset + edges[offset]] = curr_dist; + for(size_t i = offset + edges[offset] - 1;i > offset;--i){ + if(edge_dist[i] > edge_dist[i + 1]){ + std::swap(edges[i],edges[i + 1]); + std::swap(edge_dist[i],edge_dist[i + 1]); + }else{ + break; + } + } + } + + void rank_and_switch(idx_t v_id,idx_t u_id){ + rank_and_switch_ordered(v_id,u_id); + //TODO: + //Implement an unordered version to compare with + } + + template + dist_t distance(idx_t a,T& b){ + if(dist_type == 0) + return data->l2_distance(a,b); + else if(dist_type == 1) + return data->negative_inner_prod_distance(a,b); + else if(dist_type == 2) + return data->negative_cosine_distance(a,b); + else if(dist_type == 3) + return data->l2_distance(a,b); + else if(dist_type == 4) + return data->ipwrap_l2_build_distance(a,b); + else if(dist_type == 5) + return data->ipwrap_l2_query_distance(a,b); + else{ + // should not happen + fprintf(stderr,"unsupported dist_type %d\n",dist_type); + return 0; + } + } + + void compute_distance_naive(size_t offset,std::vector& dists){ + dists.resize(edges[offset]); + auto degree = edges[offset]; + for(int i = 0;i < degree;++i){ + dists[i] = distance(offset >> vertex_offset_shift,edges[offset + i + 1]); + } + } + + void compute_distance(size_t offset,std::vector& dists){ + compute_distance_naive(offset,dists); + } + + template + dist_t pair_distance_naive(idx_t a,T& b){ + ++measures.distance_cnt; + return distance(a,b); + } + + template + dist_t pair_distance(idx_t a,T& b){ + return pair_distance_naive(a,b); + } + + + void qsort(size_t l,size_t r){ + auto mid = (l + r) >> 1; + int i = l,j = r; + auto k = edge_dist[mid]; + do{ + while(edge_dist[i] < k) ++i; + while(k < edge_dist[j]) --j; + if(i <= j){ + std::swap(edge_dist[i],edge_dist[j]); + std::swap(edges[i],edges[j]); + ++i; + --j; + } + }while(i <= j); + if(i < r)qsort(i,r); + if(l < j)qsort(l,j); + } + + void rank_edges(size_t offset){ + std::vector dists; + compute_distance(offset,dists); + for(int i = 0;i < dists.size();++i) + edge_dist[offset + i + 1] = dists[i]; + qsort(offset + 1,offset + dists.size()); + //TODO: + //use a heap in the edge_dist + } + + void add_edge_lock(idx_t v_id,idx_t u_id){ + edge_mutex[v_id].lock(); + auto offset = ((size_t)v_id) << vertex_offset_shift; + if(edges[offset] < flexible_degree){ + ++edges[offset]; + edges[offset + edges[offset]] = u_id; + }else{ + rank_and_switch(v_id,u_id); + } + edge_mutex[v_id].unlock(); + } + + void add_edge(idx_t v_id,idx_t u_id){ + auto offset = ((size_t)v_id) << vertex_offset_shift; + if(edges[offset] < flexible_degree){ + ++edges[offset]; + edges[offset + edges[offset]] = u_id; + }else{ + rank_and_switch(v_id,u_id); + } + } + +public: + long long total_explore_cnt = 0; + int total_explore_times = 0; + + size_t search_start_point = 0; + bool ignore_startpoint = false; + + FixedDegreeGraph(Data* data) : data(data){ + auto num_vertices = data->max_vertices(); + edges = std::vector(((size_t)num_vertices) << vertex_offset_shift); + edge_dist = std::vector(((size_t)num_vertices) << vertex_offset_shift); + edge_mutex = std::vector(num_vertices); + p_visited = new VisitedList(num_vertices + 5); + #ifdef OMP + int n_threads = 1; + #pragma omp parallel + #pragma omp master + { + n_threads = omp_get_num_threads(); + } + visited_pool.resize(n_threads); + for(int i = 0;i < n_threads;++i) + visited_pool[i] = new VisitedList(num_vertices + 5); + #endif + } + + void set_construct_pq_size(int size){ + construct_pq_size = size; + } + + std::vector edge_selection_filter_neighbor(std::vector& neighbor,idx_t vertex_id,int desired_size){ + std::vector filtered_neighbor; + std::vector dists(neighbor.size()); + for(int i = 0;i < dists.size();++i) + dists[i] = pair_distance(vertex_id,neighbor[i]); + std::vector idx(neighbor.size()); + for(int i = 0;i < idx.size();++i) + idx[i] = i; + std::sort(idx.begin(),idx.end(),[&](int a,int b){return dists[a] < dists[b];}); + for(int i = 0;i < idx.size();++i){ + dist_t cur_dist = dists[idx[i]]; + bool pass = true; + for(auto neighbor_id : filtered_neighbor){ + if(cur_dist > pair_distance(neighbor_id,neighbor[idx[i]])){ + pass = false; + break; + } + } + if(pass){ + filtered_neighbor.push_back(neighbor[idx[i]]); + if(filtered_neighbor.size() >= desired_size) + break; + }else{ + } + } + return std::move(filtered_neighbor); + } + + void add_vertex_lock(idx_t vertex_id,std::vector>& point){ + std::vector neighbor; + search_top_k_lock(point,construct_pq_size,neighbor); + auto offset = ((size_t)vertex_id) << vertex_offset_shift; + int num_neighbors = degree < neighbor.size() ? degree : neighbor.size(); + edge_mutex[vertex_id].lock(); + // TODO: + // it is possible to save this space --- edges[offset] + // by set the last number in the range as + // a large number - current degree + if(neighbor.size() >= degree) + neighbor = edge_selection_filter_neighbor(neighbor,vertex_id,degree); + edges[offset] = neighbor.size(); + + for(int i = 0;i < neighbor.size() && i < degree;++i){ + edges[offset + i + 1] = neighbor[i]; + } + edge_mutex[vertex_id].unlock(); + for(int i = 0;i < neighbor.size() && i < degree;++i){ + add_edge_lock(neighbor[i],vertex_id); + } + } + void add_vertex(idx_t vertex_id,std::vector>& point){ + std::vector neighbor; + search_top_k(point,construct_pq_size,neighbor); + auto offset = ((size_t)vertex_id) << vertex_offset_shift; + int num_neighbors = degree < neighbor.size() ? degree : neighbor.size(); + // TODO: + // it is possible to save this space --- edges[offset] + // by set the last number in the range as + // a large number - current degree + if(neighbor.size() >= degree){ + neighbor = edge_selection_filter_neighbor(neighbor,vertex_id,degree); + } + edges[offset] = neighbor.size(); + + for(int i = 0;i < neighbor.size() && i < degree;++i){ + edges[offset + i + 1] = neighbor[i]; + } + for(int i = 0;i < neighbor.size() && i < degree;++i){ + add_edge(neighbor[i],vertex_id); + } + } + + void astar_multi_start_search_lock(const std::vector>& query,int k,std::vector& result){ + std::priority_queue,std::vector>,std::greater>> q; + const int num_start_point = 1; + + auto converted_query = dist_type == 3 ? data->organize_point_mobius(query) : data->organize_point(query); + #ifdef OMP + int tid = omp_get_thread_num(); + auto& p_visited = visited_pool[tid]; + #endif + + p_visited->reset(); + auto tag = p_visited->curV; + for(int i = 0;i < num_start_point && i < data->curr_vertices();++i){ + auto start = search_start_point;//rand_gen() % data->curr_vertices(); + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + q.push(std::make_pair(pair_distance_naive(start,converted_query),start)); + } + std::priority_queue> topk; + const int max_step = 1000000; + bool found_min_node = false; + dist_t min_dist = 1e100; + int explore_cnt = 0; + for(int iter = 0;iter < max_step && !q.empty();++iter){ + auto now = q.top(); + if(topk.size() == k && topk.top().first < now.first){ + break; + } + ++explore_cnt; + min_dist = std::min(min_dist,now.first); + q.pop(); + if(ignore_startpoint == false || iter != 0) + topk.push(now); + if(topk.size() > k) + topk.pop(); + edge_mutex[now.second].lock(); + auto offset = ((size_t)now.second) << vertex_offset_shift; + auto degree = edges[offset]; + + for(int i = 0;i < degree;++i){ + auto start = edges[offset + i + 1]; + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + auto dist = pair_distance_naive(start,converted_query); + if(topk.empty() || dist < topk.top().first || topk.size() < k) + q.push(std::make_pair(dist,start)); + } + edge_mutex[now.second].unlock(); + } + total_explore_cnt += explore_cnt; + ++total_explore_times; + result.resize(topk.size()); + int i = result.size() - 1; + while(!topk.empty()){ + result[i] = (topk.top().second); + topk.pop(); + --i; + } + } + + void astar_no_heap_search(const std::vector>& query,std::vector& result){ + const int num_start_point = 1; + std::pair q_top = std::make_pair(10000000000,0); + auto converted_query = dist_type == 3 ? data->organize_point_mobius(query) : data->organize_point(query); + p_visited->reset(); + auto tag = p_visited->curV; + for(int i = 0;i < num_start_point && i < data->curr_vertices();++i){ + auto start = search_start_point;//rand_gen() % data->curr_vertices(); + p_visited->mass[start] = tag; + if(ignore_startpoint == false){ + q_top = (std::make_pair(pair_distance_naive(start,converted_query),start)); + }else{ + auto offset = ((size_t)start) << vertex_offset_shift; + auto degree = edges[offset]; + + for(int i = 1;i <= degree;++i){ + p_visited->mass[edges[offset + i]] = tag; + auto dis = pair_distance_naive(edges[offset + i],converted_query); + if(dis < q_top.first) + q_top = (std::make_pair(dis,start)); + } + } + } + const int max_step = 1000000; + bool found_min_node = false; + dist_t min_dist = 1e100; + int explore_cnt = 0; + for(int iter = 0;iter < max_step;++iter){ + ++explore_cnt; + auto offset = ((size_t)q_top.second) << vertex_offset_shift; + auto degree = edges[offset]; + + bool changed = false; + for(int i = 0;i < degree;++i){ + auto start = edges[offset + i + 1]; + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + auto dist = pair_distance_naive(start,converted_query); + if(dist < q_top.first){ + q_top = (std::make_pair(dist,start)); + changed = true; + } + } + if(changed == false) + break; + } + total_explore_cnt += explore_cnt; + ++total_explore_times; + result.resize(1); + result[0] = q_top.second; + } + + void astar_multi_start_search_with_score(const std::vector>& query,int k,std::vector& result,std::vector& score){ + std::priority_queue,std::vector>,std::greater>> q; + const int num_start_point = 1; + + auto converted_query = dist_type == 3 ? data->organize_point_mobius(query) : data->organize_point(query); + p_visited->reset(); + auto tag = p_visited->curV; + for(int i = 0;i < num_start_point && i < data->curr_vertices();++i){ + auto start = search_start_point;//rand_gen() % data->curr_vertices(); + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + q.push(std::make_pair(pair_distance_naive(start,converted_query),start)); + } + std::priority_queue> topk; + const int max_step = 1000000; + bool found_min_node = false; + dist_t min_dist = 1e100; + int explore_cnt = 0; + for(int iter = 0;iter < max_step && !q.empty();++iter){ + auto now = q.top(); + if(topk.size() == k && topk.top().first < now.first){ + break; + } + ++explore_cnt; + min_dist = std::min(min_dist,now.first); + q.pop(); + if(ignore_startpoint == false || iter != 0) + topk.push(now); + if(topk.size() > k) + topk.pop(); + auto offset = ((size_t)now.second) << vertex_offset_shift; + auto degree = edges[offset]; + + for(int i = 0;i < degree;++i){ + auto start = edges[offset + i + 1]; + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + auto dist = pair_distance_naive(start,converted_query); + if(topk.empty() || dist < topk.top().first || topk.size() < k) + q.push(std::make_pair(dist,start)); + } + } + total_explore_cnt += explore_cnt; + ++total_explore_times; + result.resize(topk.size()); + score.resize(topk.size()); + int i = result.size() - 1; + while(!topk.empty()){ + result[i] = (topk.top().second); + score[i] = -(topk.top().first); + topk.pop(); + --i; + } + } + + void astar_multi_start_search(const std::vector>& query,int k,std::vector& result){ + std::priority_queue,std::vector>,std::greater>> q; + const int num_start_point = 1; + + auto converted_query = dist_type == 3 ? data->organize_point_mobius(query) : data->organize_point(query); + p_visited->reset(); + auto tag = p_visited->curV; + for(int i = 0;i < num_start_point && i < data->curr_vertices();++i){ + auto start = search_start_point;//rand_gen() % data->curr_vertices(); + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + q.push(std::make_pair(pair_distance_naive(start,converted_query),start)); + } + std::priority_queue> topk; + const int max_step = 1000000; + bool found_min_node = false; + dist_t min_dist = 1e100; + int explore_cnt = 0; + for(int iter = 0;iter < max_step && !q.empty();++iter){ + auto now = q.top(); + if(topk.size() == k && topk.top().first < now.first){ + break; + } + ++explore_cnt; + min_dist = std::min(min_dist,now.first); + q.pop(); + if(ignore_startpoint == false || iter != 0) + topk.push(now); + if(topk.size() > k) + topk.pop(); + auto offset = ((size_t)now.second) << vertex_offset_shift; + auto degree = edges[offset]; + + for(int i = 0;i < degree;++i){ + auto start = edges[offset + i + 1]; + if(p_visited->mass[start] == tag) + continue; + p_visited->mass[start] = tag; + auto dist = pair_distance_naive(start,converted_query); + if(topk.empty() || dist < topk.top().first || topk.size() < k) + q.push(std::make_pair(dist,start)); + } + } + total_explore_cnt += explore_cnt; + ++total_explore_times; + result.resize(topk.size()); + int i = result.size() - 1; + while(!topk.empty()){ + result[i] = (topk.top().second); + topk.pop(); + --i; + } + } + + void search_top_k(const std::vector>& query,int k,std::vector& result){ + if(k == 1) + astar_no_heap_search(query,result); + else + astar_multi_start_search(query,k,result); + } + + void search_top_k_with_score(const std::vector>& query,int k,std::vector& result,std::vector& score){ + astar_multi_start_search_with_score(query,k,result,score); + } + + void search_top_k_lock(const std::vector>& query,int k,std::vector& result){ + astar_multi_start_search_lock(query,k,result); + } + + void print_stat(){ + auto n = data->max_vertices(); + size_t sum = 0; + std::vector histogram(2 * degree + 1,0); + for(size_t i = 0;i < n;++i){ + sum += edges[i << vertex_offset_shift]; + int tmp = edges[i << vertex_offset_shift]; + if(tmp > 2 * degree + 1) + fprintf(stderr,"[ERROR] node %zu has %d degree\n",i,tmp); + ++histogram[edges[i << vertex_offset_shift]]; + if(tmp != degree) + fprintf(stderr,"[INFO] %zu has degree %d\n",i,tmp); + } + fprintf(stderr,"[INFO] #vertices %zu, avg degree %f\n",n,sum * 1.0 / n); + std::unordered_set visited; + fprintf(stderr,"[INFO] degree histogram:\n"); + for(int i = 0;i <= 2 * degree + 1;++i) + fprintf(stderr,"[INFO] %d:\t%zu\n",i,histogram[i]); + + } + + void print_edges(int x){ + for(size_t i = 0;i < x;++i){ + size_t offset = i << vertex_offset_shift; + int degree = edges[offset]; + fprintf(stderr,"%d (%d): ",i,degree); + for(int j = 1;j <= degree;++j) + fprintf(stderr,"(%zu,%f) ",edges[offset + j],edge_dist[offset + j]); + fprintf(stderr,"\n"); + } + } + + void dump(std::string path = "bfsg.graph"){ + FILE* fp = fopen(path.c_str(),"wb"); + size_t num_vertices = data->max_vertices(); + fwrite(&edges[0],sizeof(edges[0]) * (num_vertices << vertex_offset_shift),1,fp); + fclose(fp); + } + + void load(std::string path = "bfsg.graph"){ + FILE* fp = fopen(path.c_str(),"rb"); + size_t num_vertices = data->max_vertices(); + auto cnt = fread(&edges[0],sizeof(edges[0]) * (num_vertices << vertex_offset_shift),1,fp); + fclose(fp); + } + + Data* get_data(){ + return data; + } + +}; + diff --git a/src/PaddleClas/deploy/vector_search/test.py b/src/PaddleClas/deploy/vector_search/test.py new file mode 100644 index 0000000..06951b4 --- /dev/null +++ b/src/PaddleClas/deploy/vector_search/test.py @@ -0,0 +1,34 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import numpy as np +from interface import Graph_Index + +# 随机产生样本 +index_vectors = np.random.rand(100000,128).astype(np.float32) +query_vector = np.random.rand(128).astype(np.float32) +index_docs = ["ID_"+str(i) for i in range(100000)] + +# 初始化索引结构 +indexer = Graph_Index(dist_type="IP") #支持"IP"和"L2" +indexer.build(gallery_vectors=index_vectors, gallery_docs=index_docs, pq_size=100, index_path='test') + +# 查询 +scores, docs = indexer.search(query=query_vector, return_k=10, search_budget=100) +print(scores) +print(docs) + +# 保存与加载 +indexer.dump(index_path="test") +indexer.load(index_path="test")