Docker 提交
- 一 制作 Dockerfile
- 二 制作 run.sh
- 三 制作推送镜像
- 3.1 登录 build
- 3.2 进入容器中配置环境
- 3.3 本地测试
- 3.4 推送镜像
- 四 提交
- 五 改进方法
- 1. 半监督学习
- 步骤:
- 2. 测试增强
- 3. 模型集成
一 制作 Dockerfile
FROM pytorch/pytorch:latest
## 把当前文件夹里的文件构建到镜像的根目录下(.后面有空格,不能直接跟/)
ADD . /
## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
二 制作 run.sh
#!/bin/sh
CURDIR="`dirname $0`" #获取此脚本所在目录
echo $CURDIR
cd $CURDIR #切换到该脚本所在目录
python detect.py
cd ./output
cp ./result.json ../
三 制作推送镜像
进入项目文件夹内(yolov5)。
只做检测,把其他东西都删掉了。
3.1 登录 build
## docker登陆(push镜像需要登陆,服务器地址为赛事要求的,这里以上海为例):
docker login --username=你自己的用户名 registry.cn-shanghai.aliyuncs.com
## 不要忘记加.
## 公网地址上述已经提到过
docker build -t 公网地址:版本号 .
3.2 进入容器中配置环境
- 查看容器 ID
docker images
- 进入容器
docker run -it XXX(image id 自己替换) /bin/bash
可以看到项目文件都已经在。
- 配置环境
# 安装 cv2 、matplotlib、scipy
pip install opencv-python
pip install matplotlib
pip install scipy
pip install pandas
pip install seaborn
最好每句后面加上 -i https://pypi.tuna.tsinghua.edu.cn/simple 来提速!
测试时出现以下错误
root@f3eafb66801d:/# python
Python 3.8.3 (default, May 19 2020, 18:47:26)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/conda/lib/python3.8/site-packages/cv2/__init__.py", line 5, in <module>
from .cv2 import *
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
>>>
解决办法:
apt update
apt install libgl1-mesa-glx
apt-get install -y libglib2.0-0
OK!
- 保存镜像
退出但不关闭容器:ctrl + P + Q
docker commit XXX(容器 id 自己替换) 公网地址:版本号
3.3 本地测试
docker run 2d4f3d7c30c5 sh run.sh
运行开会报找不到图片的错误,因为图片是提交后,所以没有问题
3.4 推送镜像
docker push 公网地址:版本号
上传成功!
四 提交
提交不成功,奇奇怪怪啊!
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 145 0 45 0 100 0 0 --:--:-- 0:02:22 --:--:-- 11
{"code":"SUCCESS","data":{"returnCode":true}}.
YOLOv5 torch 1.7.0 CPU
Model Summary: 224 layers, 7091668 parameters, 0 gradients
Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='cpu', exist_ok=False, img_size=640, iou_thres=0.45, name='output', project='', save_conf=False, save_txt=False, source='./tcdata/guangdong1_round2_testB_20191024/201908262_de5bf60c1d3b79ad0201908262154188OK/', update=False, view_img=False, weights='best.pt')
Fusing layers...
Traceback (most recent call last):
File "detect.py", line 204, in <module>
detect()
File "detect.py", line 55, in detect
dataset = LoadImages(source, img_size=imgsz, stride=stride)
File "/utils/datasets.py", line 132, in __init__
raise Exception(f'ERROR: {p} does not exist')
Exception: ERROR: /tcdata/guangdong1_round2_testB_20191024/201908262_de5bf60c1d3b79ad0201908262154188OK does not exist
搞不清楚哎!
终于成功了,看了大佬的帖子,原来上面的测试数据集不只那两张图片,是有好多的文件夹,每个文件夹有一对图片:
- tcadta
- guangdong1_round2_testB_20191024
- xxx
- 1.jpg
- template_1.jpg
- sss
- 2.jpg
- template_2.jpg
- aaa
*…
再提交成功!
五 改进方法
1. 半监督学习
利用训练集训练好的模型预测测试集,将预测结果作为伪标签加入训练。
步骤:
- 预测结果:生成测试集的标签文件。
- 将标签文件和测试集按照训练集训练,生成新的权重。
- 利用新生成的权重在检测测试集。
- 根据想法再次提交。。。
2. 测试增强
。。。
3. 模型集成
。。。