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)。

机器学习基础大作业天池红酒数据集 天池实验室数据集_docker


只做检测,把其他东西都删掉了。

3.1 登录 build

## docker登陆(push镜像需要登陆,服务器地址为赛事要求的,这里以上海为例):
docker login --username=你自己的用户名 registry.cn-shanghai.aliyuncs.com

## 不要忘记加.
## 公网地址上述已经提到过
docker build -t 公网地址:版本号 .

3.2 进入容器中配置环境

  • 查看容器 ID
docker images

机器学习基础大作业天池红酒数据集 天池实验室数据集_docker_02

  • 进入容器
docker run -it XXX(image id 自己替换) /bin/bash

机器学习基础大作业天池红酒数据集 天池实验室数据集_机器学习基础大作业天池红酒数据集_03


可以看到项目文件都已经在。

  • 配置环境
# 安装 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

机器学习基础大作业天池红酒数据集 天池实验室数据集_推送_04


OK!

  • 保存镜像

退出但不关闭容器:ctrl + P + Q

docker commit XXX(容器 id 自己替换) 公网地址:版本号

3.3 本地测试

docker run 2d4f3d7c30c5 sh run.sh

运行开会报找不到图片的错误,因为图片是提交后,所以没有问题

3.4 推送镜像

docker push 公网地址:版本号

机器学习基础大作业天池红酒数据集 天池实验室数据集_推送_05


上传成功!

四 提交

提交不成功,奇奇怪怪啊!

% 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

机器学习基础大作业天池红酒数据集 天池实验室数据集_docker_06


搞不清楚哎!

终于成功了,看了大佬的帖子,原来上面的测试数据集不只那两张图片,是有好多的文件夹,每个文件夹有一对图片:

  • tcadta
  • guangdong1_round2_testB_20191024
  • xxx
  • 1.jpg
  • template_1.jpg
  • sss
  • 2.jpg
  • template_2.jpg
  • aaa
    *…

再提交成功!

机器学习基础大作业天池红酒数据集 天池实验室数据集_机器学习基础大作业天池红酒数据集_07

五 改进方法

1. 半监督学习

利用训练集训练好的模型预测测试集,将预测结果作为伪标签加入训练。

步骤:

  • 预测结果:生成测试集的标签文件。
  • 将标签文件和测试集按照训练集训练,生成新的权重。
  • 利用新生成的权重在检测测试集。
  • 根据想法再次提交。。。

2. 测试增强

。。。

3. 模型集成

。。。