diff --git a/.dockerignore b/.dockerignore index eb03e3e..d9afe20 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,7 @@ node_modules *.log +# 忽略大模型目录 +dist/tfjs/ +dist/caffemodel/ + +default.conf diff --git a/Dockerfile b/Dockerfile index f7b2726..9a1f8dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,30 @@ -FROM nginx:latest +FROM nginx:alpine LABEL maintainer="landaiqing <>" ENV TimeZone=Asia/Shanghai +# 创建空目录用于后续挂载 +RUN mkdir -p /usr/share/nginx/html/tfjs \ + && mkdir -p /usr/share/nginx/html/caffemodel \ + && mkdir -p /etc/nginx/conf.d + COPY dist/ /usr/share/nginx/html/ -COPY default.conf /etc/nginx/conf.d/default.conf +# 强制删除模型目录(确保后续挂载覆盖) +RUN rm -rf /usr/share/nginx/html/tfjs \ + && rm -rf /usr/share/nginx/html/caffemodel \ + && rm -f /etc/nginx/conf.d/default.conf EXPOSE 80 + +#docker run -d \ +# -v /your_host/nginx.conf:/etc/nginx/nginx.conf \ +# -v /your_host/conf.d/:/etc/nginx/conf.d/ \ +# -v /your_host/tfjs:/usr/share/nginx/html/tfjs \ +# -v /your_host/caffemodel:/usr/share/nginx/html/caffemodel \ +# --restart unless-stopped \ +# -p 80:80 \ +# --name your_image +# your_image diff --git a/auto-import.d.ts b/auto-import.d.ts index 425d0dc..e7e67d7 100644 --- a/auto-import.d.ts +++ b/auto-import.d.ts @@ -6,7 +6,10 @@ // biome-ignore lint: disable export {} declare global { + const AppstoreOutlined: typeof import('@ant-design/icons-vue')['AppstoreOutlined'] const EffectScope: typeof import('vue')['EffectScope'] + const MailOutlined: typeof import('@ant-design/icons-vue')['MailOutlined'] + const SettingOutlined: typeof import('@ant-design/icons-vue')['SettingOutlined'] const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] diff --git a/components.d.ts b/components.d.ts index d7ab081..26146c5 100644 --- a/components.d.ts +++ b/components.d.ts @@ -14,6 +14,7 @@ declare module 'vue' { AButton: typeof import('ant-design-vue/es')['Button'] ACard: typeof import('ant-design-vue/es')['Card'] ACascader: typeof import('ant-design-vue/es')['Cascader'] + AccountSetting: typeof import('./src/views/User/AccountSetting/AccountSetting.vue')['default'] ACheckbox: typeof import('ant-design-vue/es')['Checkbox'] AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] ADivider: typeof import('ant-design-vue/es')['Divider'] @@ -28,9 +29,9 @@ declare module 'vue' { AImage: typeof import('ant-design-vue/es')['Image'] AImagePreviewGroup: typeof import('ant-design-vue/es')['ImagePreviewGroup'] AInput: typeof import('ant-design-vue/es')['Input'] - AInputGroup: typeof import('ant-design-vue/es')['InputGroup'] AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] + AlbumCard: typeof import('./src/views/Album/Phoalbum/AlbumCard.vue')['default'] AlbumShareModal: typeof import('./src/views/Album/Phoalbum/AlbumShareModal.vue')['default'] AllPhoto: typeof import('./src/views/Photograph/AllPhoto/AllPhoto.vue')['default'] AMenu: typeof import('ant-design-vue/es')['Menu'] @@ -43,7 +44,6 @@ declare module 'vue' { AProgress: typeof import('ant-design-vue/es')['Progress'] AQrcode: typeof import('ant-design-vue/es')['QRCode'] ARangePicker: typeof import('ant-design-vue/es')['RangePicker'] - ArrowDownOutlined: typeof import('@ant-design/icons-vue')['ArrowDownOutlined'] ASelect: typeof import('ant-design-vue/es')['Select'] ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASpin: typeof import('ant-design-vue/es')['Spin'] @@ -79,15 +79,16 @@ declare module 'vue' { ForgetPage: typeof import('./src/views/Forget/ForgetPage.vue')['default'] GradientText: typeof import('./src/components/MyUI/GradientText/GradientText.vue')['default'] ImageShare: typeof import('./src/views/Share/ImageShare/ImageShare.vue')['default'] - ImageToolbar: typeof import('./src/views/Photograph/ImageToolbar/ImageToolbar.vue')['default'] - ImageUpload: typeof import('./src/views/Photograph/ImageUpload/ImageUpload.vue')['default'] - ItalicOutlined: typeof import('@ant-design/icons-vue')['ItalicOutlined'] + ImageToolbar: typeof import('./src/components/ImageToolbar/ImageToolbar.vue')['default'] + ImageUpload: typeof import('./src/components/ImageUpload/ImageUpload.vue')['default'] + ImageWaterfallList: typeof import('./src/components/ImageWaterfallList/ImageWaterfallList.vue')['default'] + Index: typeof import('./src/views/Album/ThingAlbum/Index.vue')['default'] LandingPage: typeof import('./src/views/Landing/LandingPage.vue')['default'] LeftOutlined: typeof import('@ant-design/icons-vue')['LeftOutlined'] LinkOutlined: typeof import('@ant-design/icons-vue')['LinkOutlined'] LoadingGraphic: typeof import('./src/components/LoadingGraphic/LoadingGraphic.vue')['default'] - LocationAlbum: typeof import('./src/views/Album/LocationAlbum/LocationAlbum.vue')['default'] LocationAlbumDetail: typeof import('./src/views/Album/LocationAlbum/LocationAlbumDetail.vue')['default'] + LocationAlbumIndex: typeof import('./src/views/Album/LocationAlbum/LocationAlbumIndex.vue')['default'] LocationAlbumList: typeof import('./src/views/Album/LocationAlbum/LocationAlbumList.vue')['default'] LockOutlined: typeof import('@ant-design/icons-vue')['LockOutlined'] LoginFooter: typeof import('./src/views/Login/LoginFooter.vue')['default'] @@ -97,13 +98,14 @@ declare module 'vue' { NotFound: typeof import('./src/views/404/NotFound.vue')['default'] OrderedListOutlined: typeof import('@ant-design/icons-vue')['OrderedListOutlined'] ParameterSetting: typeof import('./src/views/Upscale/ParameterSetting.vue')['default'] - PeopleAlbum: typeof import('./src/views/Album/PeopleAlbum/PeopleAlbum.vue')['default'] PeopleAlbumDetail: typeof import('./src/views/Album/PeopleAlbum/PeopleAlbumDetail.vue')['default'] + PeopleAlbumIndex: typeof import('./src/views/Album/PeopleAlbum/PeopleAlbumIndex.vue')['default'] PeopleAlbumList: typeof import('./src/views/Album/PeopleAlbum/PeopleAlbumList.vue')['default'] - Phoalbum: typeof import('./src/views/Album/Phoalbum/Phoalbum.vue')['default'] + PeopleAlbumToolbar: typeof import('./src/views/Album/PeopleAlbum/PeopleAlbumToolbar.vue')['default'] + PersonalCenter: typeof import('./src/views/User/PersonalCenter/PersonalCenter.vue')['default'] PhoalbumDetail: typeof import('./src/views/Album/Phoalbum/PhoalbumDetail.vue')['default'] + PhoalbumIndex: typeof import('./src/views/Album/Phoalbum/PhoalbumIndex.vue')['default'] PhoalbumList: typeof import('./src/views/Album/Phoalbum/PhoalbumList.vue')['default'] - PhoneOutlined: typeof import('@ant-design/icons-vue')['PhoneOutlined'] PhotoStack: typeof import('./src/components/PhotoStack/PhotoStack.vue')['default'] PlusOutlined: typeof import('@ant-design/icons-vue')['PlusOutlined'] PlusSquareOutlined: typeof import('@ant-design/icons-vue')['PlusSquareOutlined'] @@ -129,14 +131,19 @@ declare module 'vue' { Spin: typeof import('./src/components/MyUI/Spin/Spin.vue')['default'] StarButton: typeof import('./src/components/StarButton/StarButton.vue')['default'] TabletOutlined: typeof import('@ant-design/icons-vue')['TabletOutlined'] - ThingAlbum: typeof import('./src/views/Album/ThingAlbum/ThingAlbum.vue')['default'] ThingAlbumDetail: typeof import('./src/views/Album/ThingAlbum/ThingAlbumDetail.vue')['default'] + ThingAlbumIndex: typeof import('./src/views/Album/ThingAlbum/ThingAlbumIndex.vue')['default'] ThingAlbumList: typeof import('./src/views/Album/ThingAlbum/ThingAlbumList.vue')['default'] Tooltip: typeof import('./src/components/MyUI/Tooltip/Tooltip.vue')['default'] UploadImage: typeof import('./src/views/Upscale/UploadImage.vue')['default'] - UploadOutlined: typeof import('@ant-design/icons-vue')['UploadOutlined'] Upscale: typeof import('./src/views/Upscale/index.vue')['default'] UpscalePhoneUpload: typeof import('./src/views/Phone/UpscalePhoneUpload/UpscalePhoneUpload.vue')['default'] + UserCenterAnalysis: typeof import('./src/views/User/PersonalCenter/components/UserCenterAnalysis/UserCenterAnalysis.vue')['default'] + UserCenterDynamic: typeof import('./src/views/User/PersonalCenter/components/UserCenterDynamic/UserCenterDynamic.vue')['default'] + UserCenterHome: typeof import('./src/views/User/PersonalCenter/components/UserCenterHome/UserCenterHome.vue')['default'] + UserCenterInfo: typeof import('./src/views/User/PersonalCenter/components/UserCenterInfo/UserCenterInfo.vue')['default'] + UserCenterSetting: typeof import('./src/views/User/PersonalCenter/components/UserCenterSetting/UserCenterSetting.vue')['default'] + UserCenterShare: typeof import('./src/views/User/PersonalCenter/components/UserCenterShare/UserCenterShare.vue')['default'] UserInfoCard: typeof import('./src/components/CommentReply/src/UserInfoCard/UserInfoCard.vue')['default'] UserOutlined: typeof import('@ant-design/icons-vue')['UserOutlined'] VueCompareImage: typeof import('./src/components/VueCompareImage/VueCompareImage.vue')['default'] diff --git a/default.conf b/default.conf index c27b530..57e2c2e 100644 --- a/default.conf +++ b/default.conf @@ -27,7 +27,7 @@ server { } location /sys/ { rewrite ^/sys/(.*)$ /$1 break; - proxy_pass http://127.0.0.1:80; + proxy_pass http://landaiqing.cn:80; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/package.json b/package.json index e35d5ce..a15f28f 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dev": "vite --mode development --host", "build": "vue-tsc -b --noEmit && vite build --mode production", "preview": "vite preview", - "docker-build": "docker build -t schisandra/schisandra-cloud-album-front ." + "docker-build": "docker build -t landaiqing/schisandra-album-front:v1.0.0 ." }, "dependencies": { "@alova/adapter-axios": "^2.0.13", @@ -39,7 +39,7 @@ "alova": "^3.2.8", "animejs": "^3.2.2", "ant-design-vue": "^4.2.6", - "axios": "^1.7.9", + "axios": "^1.8.1", "browser-image-compression": "^2.0.2", "buffer": "^6.0.3", "crypto-js": "^4.2.0", @@ -55,6 +55,7 @@ "moment": "^2.30.1", "nprogress": "^0.2.0", "nsfwjs": "^4.2.1", + "opencv-qr": "^0.7.0", "pinia": "^3.0.1", "pinia-plugin-persistedstate-2": "^2.0.28", "qrcode": "^1", @@ -77,18 +78,18 @@ "@vitejs/plugin-vue": "^5.2.1", "eslint-plugin-vue": "^9.32.0", "globals": "^16.0.0", - "sass": "^1.85.0", + "sass": "^1.85.1", "typescript": "^5.7.3", - "typescript-eslint": "^8.24.1", + "typescript-eslint": "^8.25.0", "unplugin-vue-components": "^28.4.0", - "vite": "^6.1.1", + "vite": "^6.2.0", "vite-plugin-bundle-obfuscator": "1.4.1", "vite-plugin-chunk-split": "^0.5.0", - "vue-tsc": "2.2.2" + "vue-tsc": "2.2.4" }, "overrides": { "vite-plugin-chunk-split": { - "vite": "^6.1.1" + "vite": "^6.2.0" } } } diff --git a/public/caffemodel/detect.caffemodel b/public/caffemodel/detect.caffemodel new file mode 100644 index 0000000..453126c Binary files /dev/null and b/public/caffemodel/detect.caffemodel differ diff --git a/public/caffemodel/detect.prototxt b/public/caffemodel/detect.prototxt new file mode 100644 index 0000000..bd2417c --- /dev/null +++ b/public/caffemodel/detect.prototxt @@ -0,0 +1,2716 @@ +layer { + name: "data" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 1 + dim: 384 + dim: 384 + } + } +} +layer { + name: "data/bn" + type: "BatchNorm" + bottom: "data" + top: "data" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } +} +layer { + name: "data/bn/scale" + type: "Scale" + bottom: "data" + top: "data" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + scale_param { + filler { + type: "constant" + value: 1.0 + } + bias_term: true + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "stage1" + type: "Convolution" + bottom: "data" + top: "stage1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 1 + kernel_size: 3 + group: 1 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage1/bn" + type: "BatchNorm" + bottom: "stage1" + top: "stage1" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } +} +layer { + name: "stage1/bn/scale" + type: "Scale" + bottom: "stage1" + top: "stage1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + scale_param { + filler { + type: "constant" + value: 1.0 + } + bias_term: true + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "stage1/relu" + type: "ReLU" + bottom: "stage1" + top: "stage1" +} +layer { + name: "stage2" + type: "Pooling" + bottom: "stage1" + top: "stage2" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + pad: 0 + } +} +layer { + name: "stage3_1/conv1" + type: "Convolution" + bottom: "stage2" + top: "stage3_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/conv1/relu" + type: "ReLU" + bottom: "stage3_1/conv1" + top: "stage3_1/conv1" +} +layer { + name: "stage3_1/conv2" + type: "Convolution" + bottom: "stage3_1/conv1" + top: "stage3_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/conv3" + type: "Convolution" + bottom: "stage3_1/conv2" + top: "stage3_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/relu" + type: "ReLU" + bottom: "stage3_1/conv3" + top: "stage3_1/conv3" +} +layer { + name: "stage3_2/conv1" + type: "Convolution" + bottom: "stage3_1/conv3" + top: "stage3_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/conv1/relu" + type: "ReLU" + bottom: "stage3_2/conv1" + top: "stage3_2/conv1" +} +layer { + name: "stage3_2/conv2" + type: "Convolution" + bottom: "stage3_2/conv1" + top: "stage3_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/conv3" + type: "Convolution" + bottom: "stage3_2/conv2" + top: "stage3_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/sum" + type: "Eltwise" + bottom: "stage3_1/conv3" + bottom: "stage3_2/conv3" + top: "stage3_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_2/relu" + type: "ReLU" + bottom: "stage3_2/sum" + top: "stage3_2/sum" +} +layer { + name: "stage3_3/conv1" + type: "Convolution" + bottom: "stage3_2/sum" + top: "stage3_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/conv1/relu" + type: "ReLU" + bottom: "stage3_3/conv1" + top: "stage3_3/conv1" +} +layer { + name: "stage3_3/conv2" + type: "Convolution" + bottom: "stage3_3/conv1" + top: "stage3_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/conv3" + type: "Convolution" + bottom: "stage3_3/conv2" + top: "stage3_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/sum" + type: "Eltwise" + bottom: "stage3_2/sum" + bottom: "stage3_3/conv3" + top: "stage3_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_3/relu" + type: "ReLU" + bottom: "stage3_3/sum" + top: "stage3_3/sum" +} +layer { + name: "stage3_4/conv1" + type: "Convolution" + bottom: "stage3_3/sum" + top: "stage3_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/conv1/relu" + type: "ReLU" + bottom: "stage3_4/conv1" + top: "stage3_4/conv1" +} +layer { + name: "stage3_4/conv2" + type: "Convolution" + bottom: "stage3_4/conv1" + top: "stage3_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/conv3" + type: "Convolution" + bottom: "stage3_4/conv2" + top: "stage3_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/sum" + type: "Eltwise" + bottom: "stage3_3/sum" + bottom: "stage3_4/conv3" + top: "stage3_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_4/relu" + type: "ReLU" + bottom: "stage3_4/sum" + top: "stage3_4/sum" +} +layer { + name: "stage4_1/conv1" + type: "Convolution" + bottom: "stage3_4/sum" + top: "stage4_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/conv1/relu" + type: "ReLU" + bottom: "stage4_1/conv1" + top: "stage4_1/conv1" +} +layer { + name: "stage4_1/conv2" + type: "Convolution" + bottom: "stage4_1/conv1" + top: "stage4_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/conv3" + type: "Convolution" + bottom: "stage4_1/conv2" + top: "stage4_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/relu" + type: "ReLU" + bottom: "stage4_1/conv3" + top: "stage4_1/conv3" +} +layer { + name: "stage4_2/conv1" + type: "Convolution" + bottom: "stage4_1/conv3" + top: "stage4_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/conv1/relu" + type: "ReLU" + bottom: "stage4_2/conv1" + top: "stage4_2/conv1" +} +layer { + name: "stage4_2/conv2" + type: "Convolution" + bottom: "stage4_2/conv1" + top: "stage4_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/conv3" + type: "Convolution" + bottom: "stage4_2/conv2" + top: "stage4_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/sum" + type: "Eltwise" + bottom: "stage4_1/conv3" + bottom: "stage4_2/conv3" + top: "stage4_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_2/relu" + type: "ReLU" + bottom: "stage4_2/sum" + top: "stage4_2/sum" +} +layer { + name: "stage4_3/conv1" + type: "Convolution" + bottom: "stage4_2/sum" + top: "stage4_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/conv1/relu" + type: "ReLU" + bottom: "stage4_3/conv1" + top: "stage4_3/conv1" +} +layer { + name: "stage4_3/conv2" + type: "Convolution" + bottom: "stage4_3/conv1" + top: "stage4_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/conv3" + type: "Convolution" + bottom: "stage4_3/conv2" + top: "stage4_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/sum" + type: "Eltwise" + bottom: "stage4_2/sum" + bottom: "stage4_3/conv3" + top: "stage4_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_3/relu" + type: "ReLU" + bottom: "stage4_3/sum" + top: "stage4_3/sum" +} +layer { + name: "stage4_4/conv1" + type: "Convolution" + bottom: "stage4_3/sum" + top: "stage4_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/conv1/relu" + type: "ReLU" + bottom: "stage4_4/conv1" + top: "stage4_4/conv1" +} +layer { + name: "stage4_4/conv2" + type: "Convolution" + bottom: "stage4_4/conv1" + top: "stage4_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/conv3" + type: "Convolution" + bottom: "stage4_4/conv2" + top: "stage4_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/sum" + type: "Eltwise" + bottom: "stage4_3/sum" + bottom: "stage4_4/conv3" + top: "stage4_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_4/relu" + type: "ReLU" + bottom: "stage4_4/sum" + top: "stage4_4/sum" +} +layer { + name: "stage4_5/conv1" + type: "Convolution" + bottom: "stage4_4/sum" + top: "stage4_5/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/conv1/relu" + type: "ReLU" + bottom: "stage4_5/conv1" + top: "stage4_5/conv1" +} +layer { + name: "stage4_5/conv2" + type: "Convolution" + bottom: "stage4_5/conv1" + top: "stage4_5/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/conv3" + type: "Convolution" + bottom: "stage4_5/conv2" + top: "stage4_5/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/sum" + type: "Eltwise" + bottom: "stage4_4/sum" + bottom: "stage4_5/conv3" + top: "stage4_5/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_5/relu" + type: "ReLU" + bottom: "stage4_5/sum" + top: "stage4_5/sum" +} +layer { + name: "stage4_6/conv1" + type: "Convolution" + bottom: "stage4_5/sum" + top: "stage4_6/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/conv1/relu" + type: "ReLU" + bottom: "stage4_6/conv1" + top: "stage4_6/conv1" +} +layer { + name: "stage4_6/conv2" + type: "Convolution" + bottom: "stage4_6/conv1" + top: "stage4_6/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/conv3" + type: "Convolution" + bottom: "stage4_6/conv2" + top: "stage4_6/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/sum" + type: "Eltwise" + bottom: "stage4_5/sum" + bottom: "stage4_6/conv3" + top: "stage4_6/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_6/relu" + type: "ReLU" + bottom: "stage4_6/sum" + top: "stage4_6/sum" +} +layer { + name: "stage4_7/conv1" + type: "Convolution" + bottom: "stage4_6/sum" + top: "stage4_7/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/conv1/relu" + type: "ReLU" + bottom: "stage4_7/conv1" + top: "stage4_7/conv1" +} +layer { + name: "stage4_7/conv2" + type: "Convolution" + bottom: "stage4_7/conv1" + top: "stage4_7/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/conv3" + type: "Convolution" + bottom: "stage4_7/conv2" + top: "stage4_7/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/sum" + type: "Eltwise" + bottom: "stage4_6/sum" + bottom: "stage4_7/conv3" + top: "stage4_7/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_7/relu" + type: "ReLU" + bottom: "stage4_7/sum" + top: "stage4_7/sum" +} +layer { + name: "stage4_8/conv1" + type: "Convolution" + bottom: "stage4_7/sum" + top: "stage4_8/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/conv1/relu" + type: "ReLU" + bottom: "stage4_8/conv1" + top: "stage4_8/conv1" +} +layer { + name: "stage4_8/conv2" + type: "Convolution" + bottom: "stage4_8/conv1" + top: "stage4_8/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/conv3" + type: "Convolution" + bottom: "stage4_8/conv2" + top: "stage4_8/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/sum" + type: "Eltwise" + bottom: "stage4_7/sum" + bottom: "stage4_8/conv3" + top: "stage4_8/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_8/relu" + type: "ReLU" + bottom: "stage4_8/sum" + top: "stage4_8/sum" +} +layer { + name: "stage5_1/conv1" + type: "Convolution" + bottom: "stage4_8/sum" + top: "stage5_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_1/conv1/relu" + type: "ReLU" + bottom: "stage5_1/conv1" + top: "stage5_1/conv1" +} +layer { + name: "stage5_1/conv2" + type: "Convolution" + bottom: "stage5_1/conv1" + top: "stage5_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_1/conv3" + type: "Convolution" + bottom: "stage5_1/conv2" + top: "stage5_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_1/relu" + type: "ReLU" + bottom: "stage5_1/conv3" + top: "stage5_1/conv3" +} +layer { + name: "stage5_2/conv1" + type: "Convolution" + bottom: "stage5_1/conv3" + top: "stage5_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_2/conv1/relu" + type: "ReLU" + bottom: "stage5_2/conv1" + top: "stage5_2/conv1" +} +layer { + name: "stage5_2/conv2" + type: "Convolution" + bottom: "stage5_2/conv1" + top: "stage5_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_2/conv3" + type: "Convolution" + bottom: "stage5_2/conv2" + top: "stage5_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_2/sum" + type: "Eltwise" + bottom: "stage5_1/conv3" + bottom: "stage5_2/conv3" + top: "stage5_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_2/relu" + type: "ReLU" + bottom: "stage5_2/sum" + top: "stage5_2/sum" +} +layer { + name: "stage5_3/conv1" + type: "Convolution" + bottom: "stage5_2/sum" + top: "stage5_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_3/conv1/relu" + type: "ReLU" + bottom: "stage5_3/conv1" + top: "stage5_3/conv1" +} +layer { + name: "stage5_3/conv2" + type: "Convolution" + bottom: "stage5_3/conv1" + top: "stage5_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_3/conv3" + type: "Convolution" + bottom: "stage5_3/conv2" + top: "stage5_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_3/sum" + type: "Eltwise" + bottom: "stage5_2/sum" + bottom: "stage5_3/conv3" + top: "stage5_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_3/relu" + type: "ReLU" + bottom: "stage5_3/sum" + top: "stage5_3/sum" +} +layer { + name: "stage5_4/conv1" + type: "Convolution" + bottom: "stage5_3/sum" + top: "stage5_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_4/conv1/relu" + type: "ReLU" + bottom: "stage5_4/conv1" + top: "stage5_4/conv1" +} +layer { + name: "stage5_4/conv2" + type: "Convolution" + bottom: "stage5_4/conv1" + top: "stage5_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_4/conv3" + type: "Convolution" + bottom: "stage5_4/conv2" + top: "stage5_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_4/sum" + type: "Eltwise" + bottom: "stage5_3/sum" + bottom: "stage5_4/conv3" + top: "stage5_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_4/relu" + type: "ReLU" + bottom: "stage5_4/sum" + top: "stage5_4/sum" +} +layer { + name: "stage6_1/conv4" + type: "Convolution" + bottom: "stage5_4/sum" + top: "stage6_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/conv1" + type: "Convolution" + bottom: "stage5_4/sum" + top: "stage6_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/conv1/relu" + type: "ReLU" + bottom: "stage6_1/conv1" + top: "stage6_1/conv1" +} +layer { + name: "stage6_1/conv2" + type: "Convolution" + bottom: "stage6_1/conv1" + top: "stage6_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage6_1/conv3" + type: "Convolution" + bottom: "stage6_1/conv2" + top: "stage6_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/sum" + type: "Eltwise" + bottom: "stage6_1/conv4" + bottom: "stage6_1/conv3" + top: "stage6_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage6_1/relu" + type: "ReLU" + bottom: "stage6_1/sum" + top: "stage6_1/sum" +} +layer { + name: "stage6_2/conv1" + type: "Convolution" + bottom: "stage6_1/sum" + top: "stage6_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_2/conv1/relu" + type: "ReLU" + bottom: "stage6_2/conv1" + top: "stage6_2/conv1" +} +layer { + name: "stage6_2/conv2" + type: "Convolution" + bottom: "stage6_2/conv1" + top: "stage6_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage6_2/conv3" + type: "Convolution" + bottom: "stage6_2/conv2" + top: "stage6_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_2/sum" + type: "Eltwise" + bottom: "stage6_1/sum" + bottom: "stage6_2/conv3" + top: "stage6_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage6_2/relu" + type: "ReLU" + bottom: "stage6_2/sum" + top: "stage6_2/sum" +} +layer { + name: "stage7_1/conv4" + type: "Convolution" + bottom: "stage6_2/sum" + top: "stage7_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/conv1" + type: "Convolution" + bottom: "stage6_2/sum" + top: "stage7_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/conv1/relu" + type: "ReLU" + bottom: "stage7_1/conv1" + top: "stage7_1/conv1" +} +layer { + name: "stage7_1/conv2" + type: "Convolution" + bottom: "stage7_1/conv1" + top: "stage7_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage7_1/conv3" + type: "Convolution" + bottom: "stage7_1/conv2" + top: "stage7_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/sum" + type: "Eltwise" + bottom: "stage7_1/conv4" + bottom: "stage7_1/conv3" + top: "stage7_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage7_1/relu" + type: "ReLU" + bottom: "stage7_1/sum" + top: "stage7_1/sum" +} +layer { + name: "stage7_2/conv1" + type: "Convolution" + bottom: "stage7_1/sum" + top: "stage7_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_2/conv1/relu" + type: "ReLU" + bottom: "stage7_2/conv1" + top: "stage7_2/conv1" +} +layer { + name: "stage7_2/conv2" + type: "Convolution" + bottom: "stage7_2/conv1" + top: "stage7_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage7_2/conv3" + type: "Convolution" + bottom: "stage7_2/conv2" + top: "stage7_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_2/sum" + type: "Eltwise" + bottom: "stage7_1/sum" + bottom: "stage7_2/conv3" + top: "stage7_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage7_2/relu" + type: "ReLU" + bottom: "stage7_2/sum" + top: "stage7_2/sum" +} +layer { + name: "stage8_1/conv4" + type: "Convolution" + bottom: "stage7_2/sum" + top: "stage8_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/conv1" + type: "Convolution" + bottom: "stage7_2/sum" + top: "stage8_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/conv1/relu" + type: "ReLU" + bottom: "stage8_1/conv1" + top: "stage8_1/conv1" +} +layer { + name: "stage8_1/conv2" + type: "Convolution" + bottom: "stage8_1/conv1" + top: "stage8_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage8_1/conv3" + type: "Convolution" + bottom: "stage8_1/conv2" + top: "stage8_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/sum" + type: "Eltwise" + bottom: "stage8_1/conv4" + bottom: "stage8_1/conv3" + top: "stage8_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage8_1/relu" + type: "ReLU" + bottom: "stage8_1/sum" + top: "stage8_1/sum" +} +layer { + name: "stage8_2/conv1" + type: "Convolution" + bottom: "stage8_1/sum" + top: "stage8_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_2/conv1/relu" + type: "ReLU" + bottom: "stage8_2/conv1" + top: "stage8_2/conv1" +} +layer { + name: "stage8_2/conv2" + type: "Convolution" + bottom: "stage8_2/conv1" + top: "stage8_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage8_2/conv3" + type: "Convolution" + bottom: "stage8_2/conv2" + top: "stage8_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_2/sum" + type: "Eltwise" + bottom: "stage8_1/sum" + bottom: "stage8_2/conv3" + top: "stage8_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage8_2/relu" + type: "ReLU" + bottom: "stage8_2/sum" + top: "stage8_2/sum" +} +layer { + name: "cls1/conv" + type: "Convolution" + bottom: "stage4_8/sum" + top: "cls1/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls1/permute" + type: "Permute" + bottom: "cls1/conv" + top: "cls1/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls1/flatten" + type: "Flatten" + bottom: "cls1/permute" + top: "cls1/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc1/conv" + type: "Convolution" + bottom: "stage4_8/sum" + top: "loc1/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc1/permute" + type: "Permute" + bottom: "loc1/conv" + top: "loc1/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc1/flatten" + type: "Flatten" + bottom: "loc1/permute" + top: "loc1/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage4_8/sum/prior_box" + type: "PriorBox" + bottom: "stage4_8/sum" + bottom: "data" + top: "stage4_8/sum/prior_box" + prior_box_param { + min_size: 50.0 + max_size: 100.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 16.0 + } +} +layer { + name: "cls2/conv" + type: "Convolution" + bottom: "stage5_4/sum" + top: "cls2/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls2/permute" + type: "Permute" + bottom: "cls2/conv" + top: "cls2/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls2/flatten" + type: "Flatten" + bottom: "cls2/permute" + top: "cls2/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc2/conv" + type: "Convolution" + bottom: "stage5_4/sum" + top: "loc2/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc2/permute" + type: "Permute" + bottom: "loc2/conv" + top: "loc2/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc2/flatten" + type: "Flatten" + bottom: "loc2/permute" + top: "loc2/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage5_4/sum/prior_box" + type: "PriorBox" + bottom: "stage5_4/sum" + bottom: "data" + top: "stage5_4/sum/prior_box" + prior_box_param { + min_size: 100.0 + max_size: 150.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls3/conv" + type: "Convolution" + bottom: "stage6_2/sum" + top: "cls3/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls3/permute" + type: "Permute" + bottom: "cls3/conv" + top: "cls3/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls3/flatten" + type: "Flatten" + bottom: "cls3/permute" + top: "cls3/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc3/conv" + type: "Convolution" + bottom: "stage6_2/sum" + top: "loc3/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc3/permute" + type: "Permute" + bottom: "loc3/conv" + top: "loc3/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc3/flatten" + type: "Flatten" + bottom: "loc3/permute" + top: "loc3/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage6_2/sum/prior_box" + type: "PriorBox" + bottom: "stage6_2/sum" + bottom: "data" + top: "stage6_2/sum/prior_box" + prior_box_param { + min_size: 150.0 + max_size: 200.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls4/conv" + type: "Convolution" + bottom: "stage7_2/sum" + top: "cls4/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls4/permute" + type: "Permute" + bottom: "cls4/conv" + top: "cls4/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls4/flatten" + type: "Flatten" + bottom: "cls4/permute" + top: "cls4/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc4/conv" + type: "Convolution" + bottom: "stage7_2/sum" + top: "loc4/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc4/permute" + type: "Permute" + bottom: "loc4/conv" + top: "loc4/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc4/flatten" + type: "Flatten" + bottom: "loc4/permute" + top: "loc4/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage7_2/sum/prior_box" + type: "PriorBox" + bottom: "stage7_2/sum" + bottom: "data" + top: "stage7_2/sum/prior_box" + prior_box_param { + min_size: 200.0 + max_size: 300.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls5/conv" + type: "Convolution" + bottom: "stage8_2/sum" + top: "cls5/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls5/permute" + type: "Permute" + bottom: "cls5/conv" + top: "cls5/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls5/flatten" + type: "Flatten" + bottom: "cls5/permute" + top: "cls5/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc5/conv" + type: "Convolution" + bottom: "stage8_2/sum" + top: "loc5/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc5/permute" + type: "Permute" + bottom: "loc5/conv" + top: "loc5/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc5/flatten" + type: "Flatten" + bottom: "loc5/permute" + top: "loc5/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage8_2/sum/prior_box" + type: "PriorBox" + bottom: "stage8_2/sum" + bottom: "data" + top: "stage8_2/sum/prior_box" + prior_box_param { + min_size: 300.0 + max_size: 400.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "mbox_conf" + type: "Concat" + bottom: "cls1/flatten" + bottom: "cls2/flatten" + bottom: "cls3/flatten" + bottom: "cls4/flatten" + bottom: "cls5/flatten" + top: "mbox_conf" + concat_param { + axis: 1 + } +} +layer { + name: "mbox_loc" + type: "Concat" + bottom: "loc1/flatten" + bottom: "loc2/flatten" + bottom: "loc3/flatten" + bottom: "loc4/flatten" + bottom: "loc5/flatten" + top: "mbox_loc" + concat_param { + axis: 1 + } +} +layer { + name: "mbox_priorbox" + type: "Concat" + bottom: "stage4_8/sum/prior_box" + bottom: "stage5_4/sum/prior_box" + bottom: "stage6_2/sum/prior_box" + bottom: "stage7_2/sum/prior_box" + bottom: "stage8_2/sum/prior_box" + top: "mbox_priorbox" + concat_param { + axis: 2 + } +} +layer { + name: "mbox_conf_reshape" + type: "Reshape" + bottom: "mbox_conf" + top: "mbox_conf_reshape" + reshape_param { + shape { + dim: 0 + dim: -1 + dim: 2 + } + } +} +layer { + name: "mbox_conf_softmax" + type: "Softmax" + bottom: "mbox_conf_reshape" + top: "mbox_conf_softmax" + softmax_param { + axis: 2 + } +} +layer { + name: "mbox_conf_flatten" + type: "Flatten" + bottom: "mbox_conf_softmax" + top: "mbox_conf_flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "detection_output" + type: "DetectionOutput" + bottom: "mbox_loc" + bottom: "mbox_conf_flatten" + bottom: "mbox_priorbox" + top: "detection_output" + detection_output_param { + num_classes: 2 + share_location: true + background_label_id: 0 + nms_param { + nms_threshold: 0.44999998807907104 + top_k: 100 + } + code_type: CENTER_SIZE + keep_top_k: 100 + confidence_threshold: 0.20000000298023224 + } +} diff --git a/public/caffemodel/sr.caffemodel b/public/caffemodel/sr.caffemodel new file mode 100644 index 0000000..168b54d Binary files /dev/null and b/public/caffemodel/sr.caffemodel differ diff --git a/public/caffemodel/sr.prototxt b/public/caffemodel/sr.prototxt new file mode 100644 index 0000000..e85caa1 --- /dev/null +++ b/public/caffemodel/sr.prototxt @@ -0,0 +1,403 @@ +layer { + name: "data" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 1 + dim: 224 + dim: 224 + } + } +} +layer { + name: "conv0" + type: "Convolution" + bottom: "data" + top: "conv0" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 1 + kernel_size: 3 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv0/lrelu" + type: "ReLU" + bottom: "conv0" + top: "conv0" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/reduce" + type: "Convolution" + bottom: "conv0" + top: "db1/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/reduce/lrelu" + type: "ReLU" + bottom: "db1/reduce" + top: "db1/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/3x3" + type: "Convolution" + bottom: "db1/reduce" + top: "db1/3x3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 1 + kernel_size: 3 + group: 8 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/3x3/lrelu" + type: "ReLU" + bottom: "db1/3x3" + top: "db1/3x3" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/1x1" + type: "Convolution" + bottom: "db1/3x3" + top: "db1/1x1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/1x1/lrelu" + type: "ReLU" + bottom: "db1/1x1" + top: "db1/1x1" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/concat" + type: "Concat" + bottom: "conv0" + bottom: "db1/1x1" + top: "db1/concat" + concat_param { + axis: 1 + } +} +layer { + name: "db2/reduce" + type: "Convolution" + bottom: "db1/concat" + top: "db2/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/reduce/lrelu" + type: "ReLU" + bottom: "db2/reduce" + top: "db2/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/3x3" + type: "Convolution" + bottom: "db2/reduce" + top: "db2/3x3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 1 + kernel_size: 3 + group: 8 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/3x3/lrelu" + type: "ReLU" + bottom: "db2/3x3" + top: "db2/3x3" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/1x1" + type: "Convolution" + bottom: "db2/3x3" + top: "db2/1x1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/1x1/lrelu" + type: "ReLU" + bottom: "db2/1x1" + top: "db2/1x1" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/concat" + type: "Concat" + bottom: "db1/concat" + bottom: "db2/1x1" + top: "db2/concat" + concat_param { + axis: 1 + } +} +layer { + name: "upsample/reduce" + type: "Convolution" + bottom: "db2/concat" + top: "upsample/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "upsample/reduce/lrelu" + type: "ReLU" + bottom: "upsample/reduce" + top: "upsample/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "upsample/deconv" + type: "Deconvolution" + bottom: "upsample/reduce" + top: "upsample/deconv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 1 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + } +} +layer { + name: "upsample/lrelu" + type: "ReLU" + bottom: "upsample/deconv" + top: "upsample/deconv" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "upsample/rec" + type: "Convolution" + bottom: "upsample/deconv" + top: "upsample/rec" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 1 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "nearest" + type: "Deconvolution" + bottom: "data" + top: "nearest" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 1 + bias_term: false + pad: 0 + kernel_size: 2 + group: 1 + stride: 2 + weight_filler { + type: "constant" + value: 1.0 + } + } +} +layer { + name: "Crop1" + type: "Crop" + bottom: "nearest" + bottom: "upsample/rec" + top: "Crop1" +} +layer { + name: "fc" + type: "Eltwise" + bottom: "Crop1" + bottom: "upsample/rec" + top: "fc" + eltwise_param { + operation: SUM + } +} diff --git a/public/nsfw/inception_v3/group1-shard1of6 b/public/tfjs/nsfw/inception_v3/group1-shard1of6 similarity index 100% rename from public/nsfw/inception_v3/group1-shard1of6 rename to public/tfjs/nsfw/inception_v3/group1-shard1of6 diff --git a/public/nsfw/inception_v3/group1-shard2of6 b/public/tfjs/nsfw/inception_v3/group1-shard2of6 similarity index 100% rename from public/nsfw/inception_v3/group1-shard2of6 rename to public/tfjs/nsfw/inception_v3/group1-shard2of6 diff --git a/public/nsfw/inception_v3/group1-shard3of6 b/public/tfjs/nsfw/inception_v3/group1-shard3of6 similarity index 100% rename from public/nsfw/inception_v3/group1-shard3of6 rename to public/tfjs/nsfw/inception_v3/group1-shard3of6 diff --git a/public/nsfw/inception_v3/group1-shard4of6 b/public/tfjs/nsfw/inception_v3/group1-shard4of6 similarity index 100% rename from public/nsfw/inception_v3/group1-shard4of6 rename to public/tfjs/nsfw/inception_v3/group1-shard4of6 diff --git a/public/nsfw/inception_v3/group1-shard5of6 b/public/tfjs/nsfw/inception_v3/group1-shard5of6 similarity index 100% rename from public/nsfw/inception_v3/group1-shard5of6 rename to public/tfjs/nsfw/inception_v3/group1-shard5of6 diff --git a/public/nsfw/inception_v3/group1-shard6of6 b/public/tfjs/nsfw/inception_v3/group1-shard6of6 similarity index 100% rename from public/nsfw/inception_v3/group1-shard6of6 rename to public/tfjs/nsfw/inception_v3/group1-shard6of6 diff --git a/public/nsfw/inception_v3/model.json b/public/tfjs/nsfw/inception_v3/model.json similarity index 100% rename from public/nsfw/inception_v3/model.json rename to public/tfjs/nsfw/inception_v3/model.json diff --git a/public/nsfw/mobilenet_v2/group1-shard1of1 b/public/tfjs/nsfw/mobilenet_v2/group1-shard1of1 similarity index 100% rename from public/nsfw/mobilenet_v2/group1-shard1of1 rename to public/tfjs/nsfw/mobilenet_v2/group1-shard1of1 diff --git a/public/nsfw/mobilenet_v2/model.json b/public/tfjs/nsfw/mobilenet_v2/model.json similarity index 100% rename from public/nsfw/mobilenet_v2/model.json rename to public/tfjs/nsfw/mobilenet_v2/model.json diff --git a/public/nsfw/mobilenet_v2_mid/group1-shard1of2 b/public/tfjs/nsfw/mobilenet_v2_mid/group1-shard1of2 similarity index 100% rename from public/nsfw/mobilenet_v2_mid/group1-shard1of2 rename to public/tfjs/nsfw/mobilenet_v2_mid/group1-shard1of2 diff --git a/public/nsfw/mobilenet_v2_mid/group1-shard2of2 b/public/tfjs/nsfw/mobilenet_v2_mid/group1-shard2of2 similarity index 100% rename from public/nsfw/mobilenet_v2_mid/group1-shard2of2 rename to public/tfjs/nsfw/mobilenet_v2_mid/group1-shard2of2 diff --git a/public/nsfw/mobilenet_v2_mid/model.json b/public/tfjs/nsfw/mobilenet_v2_mid/model.json similarity index 100% rename from public/nsfw/mobilenet_v2_mid/model.json rename to public/tfjs/nsfw/mobilenet_v2_mid/model.json diff --git a/src/assets/images/bg.webp b/src/assets/images/bg.webp new file mode 100644 index 0000000..4a9972e Binary files /dev/null and b/src/assets/images/bg.webp differ diff --git a/src/assets/svgs/data_analysis.svg b/src/assets/svgs/data_analysis.svg new file mode 100644 index 0000000..be17f92 --- /dev/null +++ b/src/assets/svgs/data_analysis.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/dynamic.svg b/src/assets/svgs/dynamic.svg new file mode 100644 index 0000000..4675b35 --- /dev/null +++ b/src/assets/svgs/dynamic.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/home.svg b/src/assets/svgs/home.svg new file mode 100644 index 0000000..cbdf4e7 --- /dev/null +++ b/src/assets/svgs/home.svg @@ -0,0 +1 @@ + diff --git a/src/views/Photograph/ImageToolbar/ImageToolbar.vue b/src/components/ImageToolbar/ImageToolbar.vue similarity index 100% rename from src/views/Photograph/ImageToolbar/ImageToolbar.vue rename to src/components/ImageToolbar/ImageToolbar.vue diff --git a/src/views/Photograph/ImageUpload/ImageUpload.vue b/src/components/ImageUpload/ImageUpload.vue similarity index 100% rename from src/views/Photograph/ImageUpload/ImageUpload.vue rename to src/components/ImageUpload/ImageUpload.vue diff --git a/src/components/ImageWaterfallList/ImageWaterfallList.vue b/src/components/ImageWaterfallList/ImageWaterfallList.vue new file mode 100644 index 0000000..64aa62b --- /dev/null +++ b/src/components/ImageWaterfallList/ImageWaterfallList.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/layout/default/Header/Logo.vue b/src/layout/default/Header/Logo.vue index f9cbc03..fe70aaa 100644 --- a/src/layout/default/Header/Logo.vue +++ b/src/layout/default/Header/Logo.vue @@ -58,10 +58,10 @@ -
+
- {{ t('album.phone') }} + {{ t('album.upscale') }}
@@ -126,6 +126,7 @@ const cardStyle = computed(() => ({ font-family: "Comic Sans MS", cursive; font-weight: bold; cursor: pointer; + text-shadow: 0px 1px 2px rgba(0, 0, 0, .4); } } diff --git a/src/layout/default/Header/Menu.vue b/src/layout/default/Header/Menu.vue index bc420ca..49b9c00 100644 --- a/src/layout/default/Header/Menu.vue +++ b/src/layout/default/Header/Menu.vue @@ -112,13 +112,13 @@
- + 个人中心 - + @@ -154,10 +154,12 @@ import logout from "@/assets/svgs/logout.svg"; import wenhao from "@/assets/svgs/wenhao.svg"; import useStore from "@/store"; -import ImageUpload from "@/views/Photograph/ImageUpload/ImageUpload.vue"; +import ImageUpload from "@/components/ImageUpload/ImageUpload.vue"; import {getStorageConfigListApi} from "@/api/storage"; import {ProviderIcon} from "@/constant/provider_icon.ts"; +const router = useRouter(); + const uploadStore = useStore().upload; const user = useStore().user; diff --git a/src/router/modules/albums.ts b/src/router/modules/albums.ts index 6b74ce8..e6f0b8d 100644 --- a/src/router/modules/albums.ts +++ b/src/router/modules/albums.ts @@ -1,9 +1,9 @@ -import PhoalbumPhoalbum from "@/views/Album/Phoalbum/Phoalbum.vue"; -import PeopleAlbumPeopleAlbum from "@/views/Album/PeopleAlbum/PeopleAlbum.vue"; +import AlbumPhoalbumIndex from "@/views/Album/Phoalbum/PhoalbumIndex.vue"; +import PeoplePeopleAlbumIndex from "@/views/Album/PeopleAlbum/PeopleAlbumIndex.vue"; import LocationAlbum from "@/views/Album/LocationAlbum/LocationAlbumList.vue"; -import LocationAlbumIndex from "@/views/Album/LocationAlbum/LocationAlbum.vue"; +import LocationLocationAlbumIndex from "@/views/Album/LocationAlbum/LocationAlbumIndex.vue"; import ThingAlbum from "@/views/Album/ThingAlbum/ThingAlbumList.vue"; -import ThingAlbumThingAlbum from "@/views/Album/ThingAlbum/ThingAlbum.vue"; +import ThingThingAlbumIndex from "@/views/Album/ThingAlbum/ThingAlbumIndex.vue"; import Phoalbum from "@/views/Album/Phoalbum/PhoalbumList.vue"; import PeopleAlbum from "@/views/Album/PeopleAlbum/PeopleAlbumList.vue"; import PhoalbumDetail from "@/views/Album/Phoalbum/PhoalbumDetail.vue"; @@ -14,7 +14,7 @@ import ThingAlbumDetail from "@/views/Album/ThingAlbum/ThingAlbumDetail.vue"; export default [ { path: '/main/album/albums', - component: PhoalbumPhoalbum, + component: AlbumPhoalbumIndex, redirect: '/main/album/albums', children: [ { @@ -39,7 +39,7 @@ export default [ }, { path: '/main/album/people', - component: PeopleAlbumPeopleAlbum, + component: PeoplePeopleAlbumIndex, redirect: '/main/album/people', children: [ { @@ -64,7 +64,7 @@ export default [ }, { path: '/main/album/location', - component: LocationAlbumIndex, + component: LocationLocationAlbumIndex, redirect: '/main/album/location', children: [ { @@ -89,7 +89,7 @@ export default [ }, { path: '/main/album/thing', - component: ThingAlbumThingAlbum, + component: ThingThingAlbumIndex, redirect: '/main/album/thing', children: [ { diff --git a/src/router/modules/main_router.ts b/src/router/modules/main_router.ts index 22fac11..9245e04 100644 --- a/src/router/modules/main_router.ts +++ b/src/router/modules/main_router.ts @@ -20,7 +20,6 @@ export default [ ...recycling_bin, ...share, ...upscale, - ] }, { path: '/main/share/list/:id', diff --git a/src/router/modules/user.ts b/src/router/modules/user.ts new file mode 100644 index 0000000..d0c909e --- /dev/null +++ b/src/router/modules/user.ts @@ -0,0 +1,84 @@ +import UserCenterHome from "@/views/User/PersonalCenter/components/UserCenterHome/UserCenterHome.vue"; +import UserCenterDynamic from "@/views/User/PersonalCenter/components/UserCenterDynamic/UserCenterDynamic.vue"; +import UserCenterInfo from "@/views/User/PersonalCenter/components/UserCenterInfo/UserCenterInfo.vue"; +import UserCenterAnalysis from "@/views/User/PersonalCenter/components/UserCenterAnalysis/UserCenterAnalysis.vue"; +import UserCenterShare from "@/views/User/PersonalCenter/components/UserCenterShare/UserCenterShare.vue"; +import UserCenterSetting from "@/views/User/PersonalCenter/components/UserCenterSetting/UserCenterSetting.vue"; +export default [ + { + + path: '/main/user/center', + name: 'userCenter', + redirect: '/main/user/center/home', + component: () => import('@/views/User/PersonalCenter/PersonalCenter.vue'), + meta: { + requiresAuth: true, + title: '个人中心' + }, + children: [ + { + path: '/main/user/center/home', + name: 'home', + component: UserCenterHome, + meta: { + requiresAuth: true, + title: '主页' + }, + }, + { + path: '/main/user/center/dynamic', + name: 'dynamic', + component: UserCenterDynamic, + meta: { + requiresAuth: true, + title: '动态' + }, + }, + { + path: '/main/user/center/info', + name: 'info', + component: UserCenterInfo, + meta: { + requiresAuth: true, + title: '个人信息' + }, + }, + { + path: '/main/user/center/analysis', + name: 'analysis', + component: UserCenterAnalysis, + meta: { + requiresAuth: true, + title: '数据分析' + }, + }, + { + path: '/main/user/center/share', + name: 'share', + component: UserCenterShare, + meta: { + requiresAuth: true, + title: '我的分享' + }, + }, + { + path: '/main/user/center/setting', + name: 'setting', + component: UserCenterSetting, + meta: { + requiresAuth: true, + title: '设置' + }, + } + ] + }, + { + path: '/main/user/setting', + name: 'userSetting', + component: () => import('@/views/User/AccountSetting/AccountSetting.vue'), + meta: { + requiresAuth: true, + title: '账户设置' + } + } +]; diff --git a/src/router/router.ts b/src/router/router.ts index a9fb9e9..cd1581e 100644 --- a/src/router/router.ts +++ b/src/router/router.ts @@ -8,6 +8,7 @@ import landing from "./modules/landing.ts"; import mainRouter from "./modules/main_router.ts"; import i18n from "@/locales"; import phone_upload from "@/router/modules/phone_upload.ts"; +import user from "@/router/modules/user.ts"; const routes: Array = [ ...login, @@ -15,6 +16,7 @@ const routes: Array = [ ...landing, ...mainRouter, ...phone_upload, + ...user, { path: '/:pathMatch(.*)', redirect: '/404', diff --git a/src/store/modules/imageStore.ts b/src/store/modules/imageStore.ts index d9724c0..ddbeb26 100644 --- a/src/store/modules/imageStore.ts +++ b/src/store/modules/imageStore.ts @@ -1,16 +1,12 @@ import {ImageList} from "@/types/image"; +import localForage from "localforage"; +import {albumListApi, getFaceSamplesList} from "@/api/storage"; export const useImageStore = defineStore( 'image', () => { + // 选择的图片列表 const selected = ref([]); - const tabActiveKey = ref("-1"); - const tabMap = reactive({ - "-1": "全部相册", - "0": "我的相册", - "1": "我的分享", - "2": "我的收藏", - }); const homeTabActiveKey = ref("all"); const homeTabMap = reactive({ "all": "全部", @@ -18,14 +14,72 @@ export const useImageStore = defineStore( "gif": "动图", "screenshot": "截图", }); - // 清算模式切换 + // 清爽模式切换 const switchValue = ref(false); + + // 图片列表布局相关 + const JustifiedLayoutOptions = reactive({ + targetRowHeight: 200 // 高度 + }); + // 图片列表数据 + const imageList = ref([]); + const imageListLoading = ref(false); + + // 相册相关 + const albumList = ref([]); + const albumListLoading = ref(false); + const sortSelectedKey = ref(true); + const tabActiveKey = ref("-1"); + const tabMap = reactive({ + "-1": "全部相册", + "0": "我的相册", + "1": "我的分享", + "2": "我的收藏", + }); + // 相册分享弹窗相关 const openAlbumShareDialog = ref(false); const albumShareCoverImage = ref(""); const albumShareId = ref(0); + // 人脸相册 + const faceSelectedKey = ref("0"); + const faceSelected = ref([]); + const faceList = ref([]); + const faceListLoading = ref(false); + + /** + * 获取人脸列表 + */ + async function getFaceList() { + faceListLoading.value = true; + faceList.value = []; + const res: any = await getFaceSamplesList(parseInt(faceSelectedKey.value)); + if (res && res.code === 200 && res.data.faces) { + faceList.value = res.data.faces.map(face => ({ + ...face, + showButton: false, + showInput: false, + })); + } + faceListLoading.value = false; + } + + /** + * 获取相册列表 + */ + async function getAlbumList() { + albumList.value = []; + albumListLoading.value = true; + const res: any = await albumListApi(parseInt(tabActiveKey.value), sortSelectedKey.value); + if (res && res.code === 200) { + albumList.value = res.data.albums; + } + albumListLoading.value = false; + } + + /** * 统计图片总数 * @param imageList 图片列表数据 @@ -53,18 +107,38 @@ export const useImageStore = defineStore( homeTabActiveKey, albumShareCoverImage, albumShareId, - countTotalImages, + imageList, + imageListLoading, + albumListLoading, + albumList, + sortSelectedKey, + faceSelectedKey, + faceSelected, + faceList, + faceListLoading, openAlbumShareDialog, + JustifiedLayoutOptions, + countTotalImages, openAlbumShareDialogHandler, + getAlbumList, + getFaceList, }; }, { // 开启数据持久化 persistedState: { persist: true, - storage: localStorage, + storage: localForage, key: 'image', - includePaths: ["tabActiveKey", "tabMap", "homeTabActiveKey", "homeTabMap", "switchValue"], + includePaths: [ + "tabActiveKey", + "tabMap", + "homeTabActiveKey", + "homeTabMap", + "switchValue", + "faceSelectedKey", + "albumList" + ], } } ); diff --git a/src/store/modules/menuStore.ts b/src/store/modules/menuStore.ts index 65dd6bc..00cd964 100644 --- a/src/store/modules/menuStore.ts +++ b/src/store/modules/menuStore.ts @@ -2,8 +2,11 @@ export const useMenuStore = defineStore( 'menu', () => { const currentMenu = ref('photo/all'); + + const userCenterMenu = ref('home'); return { currentMenu, + userCenterMenu, }; }, { @@ -12,7 +15,7 @@ export const useMenuStore = defineStore( persist: true, storage: localStorage, key: 'menu', - includePaths: ['currentMenu'] + includePaths: ['currentMenu', 'userCenterMenu'] } } ); diff --git a/src/store/modules/uploadStore.ts b/src/store/modules/uploadStore.ts index 1581b3d..09483ff 100644 --- a/src/store/modules/uploadStore.ts +++ b/src/store/modules/uploadStore.ts @@ -37,7 +37,7 @@ export const useUploadStore = defineStore( const storageSelected = ref([]); - const albumSelected = ref(); + const albumSelected = ref(0); /** * 打开上传抽屉 diff --git a/src/utils/QRDetection/qr_detection.ts b/src/utils/QRDetection/qr_detection.ts new file mode 100644 index 0000000..3207b64 --- /dev/null +++ b/src/utils/QRDetection/qr_detection.ts @@ -0,0 +1,10 @@ +import OpencvQr from "opencv-qr"; + +/** + * OpenCV QR detection class + */ +const opencvQr = new OpencvQr({ + dw: "/caffemodel/detect.caffemodel", + sw: "/caffemodel/sr.caffemodel", +}); +export default opencvQr; diff --git a/src/utils/tfjs/nsfw.ts b/src/utils/tfjs/nsfw.ts index 9f3d568..8fd045f 100644 --- a/src/utils/tfjs/nsfw.ts +++ b/src/utils/tfjs/nsfw.ts @@ -13,7 +13,7 @@ const initNSFWJs = async (): Promise => { } catch (_error) { console.warn("IndexedDB 中未找到模型,正在从网络加载..."); // 如果 IndexedDB 加载失败,从 URL 加载模型并保存到 IndexedDB - nsfwModelCache = await nsfwjs.load("/nsfw/mobilenet_v2_mid/", {size: 224, type: "graph"}); + nsfwModelCache = await nsfwjs.load("/tfjs/nsfw/mobilenet_v2_mid/", {size: 224, type: "graph"}); await nsfwModelCache.model.save("indexeddb://nsfwjs-model"); console.log("NSFWJS 模型已从网络加载并保存到 IndexedDB"); } diff --git a/src/views/Album/LocationAlbum/LocationAlbumDetail.vue b/src/views/Album/LocationAlbum/LocationAlbumDetail.vue index 2db6dbf..adf0e9b 100644 --- a/src/views/Album/LocationAlbum/LocationAlbumDetail.vue +++ b/src/views/Album/LocationAlbum/LocationAlbumDetail.vue @@ -7,78 +7,39 @@ {{ route.query.name }}
- +
- 共{{ imageStore.countTotalImages(albumList) }}张照片 + 共{{ imageStore.countTotalImages(imageList) }}张照片
-
-
- {{ itemList.date }} - - - - - -
-
-
- - - -
+
- + diff --git a/src/views/Album/Phoalbum/AlbumCard.vue b/src/views/Album/Phoalbum/AlbumCard.vue new file mode 100644 index 0000000..1515554 --- /dev/null +++ b/src/views/Album/Phoalbum/AlbumCard.vue @@ -0,0 +1,184 @@ + + + diff --git a/src/views/Album/Phoalbum/PhoalbumDetail.vue b/src/views/Album/Phoalbum/PhoalbumDetail.vue index 6a7e1ea..ab319ad 100644 --- a/src/views/Album/Phoalbum/PhoalbumDetail.vue +++ b/src/views/Album/Phoalbum/PhoalbumDetail.vue @@ -40,7 +40,7 @@ - +
@@ -51,7 +51,7 @@ {{ route.query.name }}
- 共 {{ imageStore.countTotalImages(albumList) }} 张照片 + 共 {{ imageStore.countTotalImages(imageList) }} 张照片
@@ -59,82 +59,44 @@ 相册描述
-
-
- {{ itemList.date }} - - - - - -
-
-
- - - -
+
diff --git a/src/views/Photograph/RecentUpload/RecentUpload.vue b/src/views/Photograph/RecentUpload/RecentUpload.vue index 44775ee..dd4e6ea 100644 --- a/src/views/Photograph/RecentUpload/RecentUpload.vue +++ b/src/views/Photograph/RecentUpload/RecentUpload.vue @@ -29,52 +29,10 @@ - +
-
-
- {{ itemList.date }} - - - - - -
-
-
- - - +
+
@@ -82,28 +40,27 @@ + + + + diff --git a/src/views/User/PersonalCenter/PersonalCenter.vue b/src/views/User/PersonalCenter/PersonalCenter.vue new file mode 100644 index 0000000..f9c7ba4 --- /dev/null +++ b/src/views/User/PersonalCenter/PersonalCenter.vue @@ -0,0 +1,179 @@ + + + diff --git a/src/views/User/PersonalCenter/components/UserCenterAnalysis/UserCenterAnalysis.vue b/src/views/User/PersonalCenter/components/UserCenterAnalysis/UserCenterAnalysis.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/src/views/User/PersonalCenter/components/UserCenterAnalysis/UserCenterAnalysis.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/User/PersonalCenter/components/UserCenterDynamic/UserCenterDynamic.vue b/src/views/User/PersonalCenter/components/UserCenterDynamic/UserCenterDynamic.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/src/views/User/PersonalCenter/components/UserCenterDynamic/UserCenterDynamic.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/User/PersonalCenter/components/UserCenterHome/UserCenterHome.vue b/src/views/User/PersonalCenter/components/UserCenterHome/UserCenterHome.vue new file mode 100644 index 0000000..ff396d3 --- /dev/null +++ b/src/views/User/PersonalCenter/components/UserCenterHome/UserCenterHome.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/User/PersonalCenter/components/UserCenterInfo/UserCenterInfo.vue b/src/views/User/PersonalCenter/components/UserCenterInfo/UserCenterInfo.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/src/views/User/PersonalCenter/components/UserCenterInfo/UserCenterInfo.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/User/PersonalCenter/components/UserCenterSetting/UserCenterSetting.vue b/src/views/User/PersonalCenter/components/UserCenterSetting/UserCenterSetting.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/src/views/User/PersonalCenter/components/UserCenterSetting/UserCenterSetting.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/User/PersonalCenter/components/UserCenterShare/UserCenterShare.vue b/src/views/User/PersonalCenter/components/UserCenterShare/UserCenterShare.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/src/views/User/PersonalCenter/components/UserCenterShare/UserCenterShare.vue @@ -0,0 +1,11 @@ + + + + +