PYTHON
- 有路径的地方要注意区别“/”和“\”。ubuntu使用“/”分割文件夹;
- 对于别人的代码,首先仔细阅读readme中的内容,如果需要修改相应的部分来适配自己的环境或者数据集,在修改的过程中要做好标记,便于在代码调试的过程中改正错误(报错通常出现在我们修改代码的字段);
- 将原代码中的多数据集训练改为单数据集训练的过程中,不要只顾修改数据集的路径以及注释部分数据集的使用,还要兼顾其它配置数据,防止代码报错;
- 程序的进程数(num_works)设为0(使用主进程),通常会首先排除一些错误(由于CPU算力的原因,多线程CPU也可能也不会对多进程产生效果,所以一般设为1或0);
- batch_size应从小到大进行实验,这样才能发挥GPU的最佳性能,同时也不会导致程序报错(通常是显存不够用了);
- 程序报错了之后,首先将报错原因直接输入搜索引擎查找类似的博客,通常会找到一模一样的报错及有效的解决办法,如果按照博客中的方法不能解决问题,那么就在Traceback的最后一个文件对应的报错位置加“断点”,然后DEBUG分析原因,通常能够很快解决问题。如果还是未能解决问题,考虑将电脑配置严格与原作者的配置对齐;
- 将tensor转换为图片
def make_image(i, pred_map, pred_frame, name):
import matplotlib.pyplot as plt
import os.path
plt.imshow(pred_map, 'jet')
pred_frame.axes.get_yaxis().set_visible(False)
pred_frame.axes.get_xaxis().set_visible(False)
pred_frame.spines['top'].set_visible(False)
pred_frame.spines['right'].set_visible(False)
pred_frame.spines['left'].set_visible(False)
pred_frame.spines['bottom'].set_visible(False)
dir = '/home/cz/USER/SCRIPT/python/pytracking/EXTERNAL/imagefile/feature_map/' + name + '/'
if not os.path.exists(dir):
os.makedirs(dir)
pred_name = dir + name + '_' + str(i) + '.png'
plt.savefig(pred_name, bbox_inches='tight', pad_inches=0, dpi=150)
def pltshow(pred_map, name):
import matplotlib.pyplot as plt
import os
import numpy
import PySide2
dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
plt.figure(2)
pred_frame = plt.gca()
pred_map = pred_map.cpu().detach().numpy()
if pred_map.ndim == 6:
for i in range(len(pred_map[0,0,0,:,0,0])):
pred_mapx = pred_map[0,0,0,i,:,:]
make_image(i, pred_mapx, pred_frame, name)
elif pred_map.ndim == 5:
for i in range(len(pred_map[0,0,:,0,0])):
pred_mapx = pred_map[0,0,i,:,:]
make_image(i, pred_mapx, pred_frame, name)
elif pred_map.ndim == 4:
for i in range(len(pred_map[0,:,0,0])):
pred_mapx = pred_map[0,i,:,:]
make_image(i, pred_mapx, pred_frame, name)
elif pred_map.ndim == 3:
for i in range(len(pred_map[:,0,0])):
pred_mapx = pred_map[i,:,:]
make_image(i, pred_mapx, pred_frame, name)
elif pred_map.ndim == 2:
i = ''
make_image(i, pred_map, pred_frame, name)
else:
print("your pred_map dim is invalidate!")
raise ValueError
plt.close(2)
# debug = True # todo c
# if debug: # todo debug
# from EXTERNAL.code_for_draw.make_feature_map import pltshow
# pltshow()
UBUNTU
- 如要删除ubuntu中建立的文件,需在ubuntu中进行删除,如在windows中删除,可能会造成删除不干净的情况;
- U盘强行拔出后再次插入电脑不能识别?分别在终端输入以下两行命令即可:
sudo fdisk -l
sudo ntfsfix /dev/sdb2
- 重启可以解决大部分问题;
- 卡死时的解决办法(键盘还能用的情况下进行重启):
ctrl+alt+print screen -r-e-i-s-u-b
保持ctrl+alt不动,依次序按下print screen -r-e-i-s-u-b,每个‘-’之间间隔几秒钟;
TRACKING
- 通常网络的输入要求图像是一个正方形,对图像进行裁减预处理时,不对边界框的宽高进行直接双倍扩展,而是对宽高加上宽高和的一半,这样做有利于后续缩放环节中将裁减出的图形块缩放为正方形。(以上论述纯属经验所得,没有实际论证!)
- 对代码的阅读一定不要放过任何的细节,细节决定成败!(有时候我们的想法不一定不能实现,而是不注意细节导致性能达不到预期!)
NEURAL NETWORK
- 对卷积神经网络的参数共享的理解:
在卷积神经网络出现之前,网络的连接方式主要采用全连接方式,全连接固然可以对图像的每个像素进行加权,但是同时会造成参数量巨大的问题。卷积神经网络利用卷积核在图像上以滑动窗口的方式进行采样,对不同位置的采样来说,与其进行计算的卷积核的权重却是相同的,即权重共享。
MACHINE LEARNING
- inductive learning & transductive learning(归纳式学习与直推式学习的区别):
inductive learning:从已有的数据中归纳出模式来,应用与新的数据和任务。常用的机器学习就是这种模式;
transductive learning:在给定一些测试数据的情况下,结合已有的训练数据,看能不能推广到测试数据上。