个人学习经验

这是一个ubuntu上学习cv遇到的一些常见问题的帮助和解决方法。
有些东西我会慢慢往上面加

创建新环境

参考
python创建虚拟环境(Anaconda,windows)

conda添加镜像源

安装模块

1)conda list 查看安装了哪些包
2)conda env list 或 conda info -e 查看当前存在哪些虚拟环境
3)conda update conda 检查更新当前conda
4)conda create -n env_name python=3.7 创建虚拟环境
5)source activate your_env_name 激活虚拟环境
6)source deactivate your_env_name 关闭虚拟环境
7)conda install -n your_env_name [package] 在your_env_name环境中安装package这个包
8)conda remove -n your_env_name(虚拟环境名称) –all 删除虚拟环境
conda环境复制:
1)激活环境(例如环境名为stylegan)
source activate stylegan
2)环境导出
conda env export > stylegan.yaml
3)安装复制环境(注意只能得到conda安装的包,pip安装的还需导出一次)
conda env create -f stylegan.yaml

在jupyter中使用新环境

参考
python创建虚拟环境(Anaconda,windows)

在pycharm中使用新环境

  • 使用新环境写代码(类似于写代码的时候帮助你自动检测一些模块是否存在)
  • ctrl+alt+s打开设置
  • 点开project
  • 点开python interpreter
  • 在倒三角中选择环境
    请添加图片描述
  • 使用新环境运行代码(运行包括debug)
  • 点击右上角的项目名称(如果没有就是灰色的叫add configuration)
  • 点击弹窗(debug configuration)中的左上角 +
  • 选择python
  • 填写 script path(这就是你要跑的程序位置)
  • parameters根据需要传入参数,类似于传入main函数的参数
  • 选择环境
  • 选择相对路径(working directory)

请添加图片描述

使用scp命令传输文件

scp是用于服务器直接互传文件用的,由于linux没有微信,需要知道对面的网络端口,主机名称密码,可以实现上传和下载。
scp -P111111 -r file [email protected]:file
使用scp命令传输文件

使用mobaxterm连接服务器

待补充

转数据集标注格式

如xml转json
如txt转json

待补充

anaconda上安装好用的插件

在anaconda prompt中输入如下代码,重启jupyter即可

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

重启之后,在clusters右侧就会多一个按钮Configurable nbextensions
里面可以选择使用一些插件
代码补全:Hinterland无疑是最有用的插件之一
以下是一些很实用的插件
ExecuteTime - 显示执行时间,Code prettify - 格式化/美化代码

使用爬虫下载网站上的图片

待补充(准备做一个视频讲讲)

mmdetection学习方法,怎样入门cv (most important)

不得不知的 MMDetection 学习路线(个人经验版) - OpenMMLab的文章 - 知乎

先谈一谈怎么入门cv,考虑到深度学习用的主流是pytorch

  • 1,学习python基础(包括数据类型’包含基础数据类型的常用函数‘,结构型语句,类与对象,文件处理,修饰器,正则化语句,一些重要模块的熟悉和使用‘opencv,numpy,torch,time,os,matplotlib,PIL.Image’)

  • 2,很多人学习一些语言之后,总觉得自己学了很多但是什么也不会。这时候就需要上手一些内容,比如cv,需要从通用目标检测开始入手。这时候的学习路线就是代码+论文。从经典的文章入手(link),学习别人的思想和代码的写法。

  • 3,现在,离入门只差一步了。看了不少论文,也知道了基本操作,那么自己如何亲手写一份目标检测的代码呢?其实一套目标检测的代码是相当繁琐的,读取数据dataloader,backbone,neck,head,loss,assigner,optimizer。可能之前的第二步,只是粗略地浏览了经典模型的代码。这里就需要仔细学习一套成熟的代码框架(因为每个作者有每个作者的写法和风格),来套用,和学习大多数模型,也对神经网络加强一个整体上的理解。这里推荐mmdetection框架,简直是perfect(https://github.com/open-mmlab/mmdetection)。一开始我学习这套框架也觉得无从下手,很复杂,实际上跟着文中的docs中的教程,可以用一个星期的时间很全面地学习到如何使用这套框架。利用这套框架,尝试在已有的模型中做出改进,你会发现这异常的方便。

  • 4,熟悉了mmdetecion之后,尝试把别人开源的网络——复现在mmdetection框架中,这会大大加强你对框架和模型的理解。

  • 5,至此,恭喜你成功入门cv。

可视化训练结果

假设有一个标注文件,通过学习标注文件的标注方式,提取出了其中的信息。
其中包括图片中物体的bounding box和label信息,如何将其可视化到对应的图片上,便是本节的内容。
利用json文件可视化训练结果需要利用plt.gca()

from matplotlib.collections import PatchCollection
from matplotlib.patches import Polygon
import os
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#以下代码是为了演示,故而标注框使用的shape为4*1,实际上可以是4*n
bboxes=np.array([[100,200,700,800]])#x1,y1,x2,y2

#为了使用gca,需要定义画布,需要考虑到原图尺寸,比如按如下定义可使得画面为1920*1080
#如果要求保持一致的宽高,可以使用cv2模块读取图片,输出shape,保证figsize*dpi = shape即可
#此处的dpi代表图片的清晰度,也可以说是缩放比,在绘图时影响明显
#但是此处仅仅是把已有的图片放在画布上,因而不会影响清晰度。
plt.figure(figsize=(19.2,10.8), dpi=100,frameon=False)

#subplots_adjust可以控制绘制区域,如下的参数使得图片充满整个区域(不留白)
#默认left=0.125,r=0.9,t=0.9,b=0.1说明直接绘图保存会导致图片边界存在留白
plt.subplots_adjust(top=1, bottom=0, right=1, left=0)

#所有的绘图本质上都是在gca上进行的包括plt.plot
ax=plt.gca()
ax.axis('off')

#下面的部分实现了标注画在图上,如果自用的话,draw_bboxes不需要做修改,只需要保证输入维度正确
#ax.text实现了标注框打上类别注释,100,200为图片的<相对left-top坐标>(注意不是top-left)
#'label_text'可以输入你先输入的文字,可以使用python3的字符串的一些自带功能如f'{label_text}'使其更简洁
#下面的函数实现了draw_labels方法,可以套用,此处直接使用ax.text只是为了演示
draw_bboxes(ax,bboxes)
ax.text(
    100,
    200,
    'label_text',
    bbox={
    
    
        'facecolor': 'black',
        'alpha': 0.8,
        'pad': 0.7,
        'edgecolor': 'none'
    },
    color='g',
    fontsize=8,
    verticalalignment='top',
    horizontalalignment='left')

#可以替换为任何一个图像(注意box不要超过图片尺寸)
plt.imshow(Image.open("e:/1.jpg"))
plt.savefig('e:/2.jpg')

下面的代码演示了dpi对于图片质量的影响

#测试dpi对图片的影响
x=np.arange(0.1,5,0.1)
y=x+1/x
figsize=[(15,7.5),(12,6),(8,4),(6,3)]
dpi=[80,100,150,200]

#验证dpi对于绘制的图片是否有影响(答案是有影响)
for i in range(4):
    plt.figure(figsize=figsize[i], dpi=dpi[i],frameon=False)
#     plt.subplots_adjust(top=1, bottom=0, right=1, left=0)
    ax=plt.gca()
    ax.axis('off')
    plt.plot(x,y)
    plt.savefig(f'e:/matplot/{
      
      i}.jpg')

#验证dpi对于直接读取的图片的放缩是否有影响(答案是无影响)
im=plt.imread('e:/matplot/3.jpg')
for i in range(4):
    plt.figure(figsize=figsize[i], dpi=dpi[i],frameon=False)
    plt.subplots_adjust(top=1, bottom=0, right=1, left=0)
    ax=plt.gca()
    ax.axis('off')
    plt.imshow(im)
    plt.savefig(f'e:/matplot/{
      
      i}{
      
      i}.jpg')

下面的两个函数来自mmdetection,分别为draw_bboxes和draw_labels方法。学会使用他们可以使得画图更加方便和简介。

def draw_bboxes(ax, bboxes, color='g', alpha=0.8, thickness=2):
    """Draw bounding boxes on the axes.

    Args:
        ax (matplotlib.Axes): The input axes.
        bboxes (ndarray): The input bounding boxes with the shape
            of (n, 4).
        color (list[tuple] | matplotlib.color): the colors for each
            bounding boxes.
        alpha (float): Transparency of bounding boxes. Default: 0.8.
        thickness (int): Thickness of lines. Default: 2.

    Returns:
        matplotlib.Axes: The result axes.
    """
    polygons = []
    for i, bbox in enumerate(bboxes):
        bbox_int = bbox.astype(np.int32)
        poly = [[bbox_int[0], bbox_int[1]], [bbox_int[0], bbox_int[3]],
                [bbox_int[2], bbox_int[3]], [bbox_int[2], bbox_int[1]]]
        np_poly = np.array(poly).reshape((4, 2))
        polygons.append(Polygon(np_poly))
    p = PatchCollection(
        polygons,
        facecolor='none',
        edgecolors=color,
        linewidths=thickness,
        alpha=alpha)
    ax.add_collection(p)

    return ax

def draw_labels(ax,
                labels,
                positions,
                scores=None,
                class_names=None,
                color='w',
                font_size=8,
                scales=None,
                horizontal_alignment='left'):
    """Draw labels on the axes.

    Args:
        ax (matplotlib.Axes): The input axes.
        labels (ndarray): The labels with the shape of (n, ).
        positions (ndarray): The positions to draw each labels.
        scores (ndarray): The scores for each labels.
        class_names (list[str]): The class names.
        color (list[tuple] | matplotlib.color): The colors for labels.
        font_size (int): Font size of texts. Default: 8.
        scales (list[float]): Scales of texts. Default: None.
        horizontal_alignment (str): The horizontal alignment method of
            texts. Default: 'left'.

    Returns:
        matplotlib.Axes: The result axes.
    """
    for i, (pos, label) in enumerate(zip(positions, labels)):
        label_text = class_names[
            label] if class_names is not None else f'class {
      
      label}'
        if scores is not None:
            label_text += f'|{
      
      scores[i]:.02f}'
        text_color = color[i] if isinstance(color, list) else color

        font_size_mask = font_size if scales is None else font_size * scales[i]
        ax.text(
            pos[0],
            pos[1],
            f'{
      
      label_text}',
            bbox={
    
    
                'facecolor': 'black',
                'alpha': 0.8,
                'pad': 0.7,
                'edgecolor': 'none'
            },
            color=text_color,
            fontsize=font_size_mask,
            verticalalignment='top',
            horizontalalignment=horizontal_alignment)

    return ax

pycharm的使用手册

选择Interpreter

运行设置

到了断点中间结果不出现怎么办?

Preference --> python debugger --> Gevent compatible

debug功能介绍

知乎上面搜pycharm debug有非常详细的介绍

ubuntu常用命令和常见问题

常用软件

(上网搜都能找到,记得下载ubuntu版本)
Rhythmbox音乐播放器(休闲)
pycharm(工作)
edge(工作+休闲)

常用命令

创建名为filename的文件夹
mkdir filename

删除文件
rm filename

删除文件夹
rm -r file

滚轮灵敏度
killall imwheel
sudo vim ~/.imwheelrc
imwheel

移动文件(夹)(也可用于重命名)
mv fromfile tofile

scp -r -P11111 DOTA1-split-1024 ubuntu@111:disk2/dataset

scp从远程复制到本地(类似上,把后两个参数调换位置)
scp remote@remote_ip:/home/root/others/music /home/space/music/1.mp3

查看当前文件夹下文件夹数量
ls -l|grep “^d”| wc -l

查看当前文件夹下文件数量
ls -lR|grep “^-”| wc -l

文件夹权限问题
chmod -R 777 file

常见问题

文件管理器卡死
找到ubuntu系统监视器,杀死nautilus进程。类似的,pycharm、卡死,杀死java进程。、

ssh无法连接
针对“错误:Network error: Connection refused”的问题,一般是因为Ubuntu刚刚安装好系统,系统中缺乏openssh-server这个包,只需要在Ubuntu中输入安装命令:sudoapt-get install openssh-server,便可以安装了。

使用ls 显示当前目录下的文件时,ubuntu中绿色代表可执行文件,蓝色代表文件夹(被阴影盖住的表示777权限),红色表示压缩文件,黄色表示设备文件,浅蓝色表示链接文件,白色代表普通文件。

df-h查看空间

github连不上,需要科学上网

常用网站

https://github.com/open-mmlab/mmdetection/blob/master/docs/zh_cn/article.md

写给新生

老师会要求大家写周报,但是我们每一个人心中都有每一天的目标!只有每一天有目标,一周才不会颓废。Organize your day!

猜你喜欢

转载自blog.csdn.net/fei_YuHuo/article/details/123565016
今日推荐