虽然通常人们倾向于在训练CNN时简单地将任何图像调整为正方形(例如,resnet采用224x224方形图像),这对我来说看起来很难看,特别是当纵横比不是1时.
(事实上,这可能会改变基本事实,例如专家可能给出扭曲图像的标签可能与原始图像不同).
所以现在我将图像调整为224x160,保持原始比例,然后用0填充图像(将其粘贴到完全黑色的224x224图像中的随机位置).
我的方法对我来说似乎并不原创,但我找不到任何有关我的方法与"通常"方法的信息.时髦!
那么,哪种方法更好?为什么?(如果答案是数据相关的,请分享你的想法,如果一个优先于另一个.)
image machine-learning computer-vision neural-network conv-neural-network
所以这是一个说明问题的最小代码:
这是数据集:
class IceShipDataset(Dataset):
BAND1='band_1'
BAND2='band_2'
IMAGE='image'
@staticmethod
def get_band_img(sample,band):
pic_size=75
img=np.array(sample[band])
img.resize(pic_size,pic_size)
return img
def __init__(self,data,transform=None):
self.data=data
self.transform=transform
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
sample=self.data[idx]
band1_img=IceShipDataset.get_band_img(sample,self.BAND1)
band2_img=IceShipDataset.get_band_img(sample,self.BAND2)
img=np.stack([band1_img,band2_img],2)
sample[self.IMAGE]=img
if self.transform is not None:
sample=self.transform(sample)
return sample
Run Code Online (Sandbox Code Playgroud)
这是失败的代码:
PLAY_BATCH_SIZE=4
#load data. There are 1604 examples.
with open('train.json','r') as f:
data=f.read()
data=json.loads(data)
ds=IceShipDataset(data)
playloader = torch.utils.data.DataLoader(ds, batch_size=PLAY_BATCH_SIZE,
shuffle=False, num_workers=4)
for i,data in enumerate(playloader):
print(i)
Run Code Online (Sandbox Code Playgroud)
它在for循环中给出了奇怪的打开文件错误...我的火炬版本是0.3.0.post4
如果你想要json文件,可以在Kaggle上找到它(https://www.kaggle.com/c/statoil-iceberg-classifier-challenge)
我应该提一下,这个错误与我的笔记本电脑的状态无关:
yoni@yoni-Lenovo-Z710:~$ lsof | wc -l
89114
yoni@yoni-Lenovo-Z710:~$ cat /proc/sys/fs/file-max
791958 …
Run Code Online (Sandbox Code Playgroud) 所以我已经阅读了有关自动关闭界面的所有内容并尝试使用资源,但这让我想知道:
如果我不(忘记)包装一个实现 AutoCloseable 的类,并在使用该类的代码中尝试使用资源,但该类确实从操作系统获取资源,会发生什么情况?虽然无法保证 JVM 何时决定调用其垃圾收集器,但当它调用时,它会调用 close() 方法吗?
如果没有,这是我会想念 C++ 的析构函数的地方吗?:) 是否有类似的方法来确保从该类的代码而不是用户的代码中,一旦对象应该被释放(例如超出范围),它将释放它所占用的所有操作系统资源?
我希望向用户显示一个图像,该图像具有不同数量的div(取决于检测到的脸部数量),该图像应该是可单击的(单击脸部将显示该特定脸部的某些属性)。
因此,理想情况下,我想在每个面孔周围创建一些div(或按钮),并为每个元素添加类似(click)=“ divClicked()”的元素。但是,(click)不是合法属性,因此,例如,尝试类似
d3.select('button').attr('(click)','onClickMe()');
Run Code Online (Sandbox Code Playgroud)
给出一个错误。onclick是一个合法属性,但是我认为通过使用它,我应该打破Angular希望我的工作方式(因为将函数放入组件的ts文件中会导致未定义onClickMe错误)。
我能想到的最好的解决方法是为每个div分配一个ID,然后执行类似的操作
document.getElementById('b1').onclick=this.onClickMe;
Run Code Online (Sandbox Code Playgroud)
但这感觉像是不好的编码。
那么,这样做的干净方法是什么?