prefacio
Según el libro de la sandía: los datos y las características determinan el límite superior del aprendizaje automático, y los modelos y algoritmos solo se aproximan a este límite superior. Por lo tanto, en el aprendizaje automático, a menudo necesitamos una gran cantidad de conjuntos de datos de alta calidad. Por esta razón , hemos probado varios medios de aumento de datos, como:
- Aumentar o disminuir el brillo de la imagen
- Agregar ruido o filtrar ruido
- reflejo de la imagen
......
Entonces, ¿cómo debemos usar de manera eficiente el conjunto de datos existente para una rápida expansión de datos (datos de imagen + datos Xml), para los requisitos anteriores, podemos dividirlo en dos elementos principales para el procesamiento: escalado y empalme de imágenes, análisis y reproducción de archivos Xml Para esto razón, en este blog, el editor propone un método de reducción y empalme para expandir rápidamente el conjunto de datos para mejorar la cantidad y calidad de los datos. (para conjuntos de datos de tipo Voc)
Costuras de reducción de imagen
Por ejemplo: cuando obtenemos una imagen A.jpg con un tamaño de píxel de 1920x1080 , necesitamos reducir la imagen A para que se ajuste al estilo 3x3, por lo que debemos reducir la imagen A 3 veces y, al mismo tiempo, necesitamos copiar 9 copias de la imagen, y luego Las 9 imágenes se unen en una nueva imagen del tamaño de la imagen original A. El proceso es el siguiente:
graph TD
读取图像 --> 计算宽高
计算宽高 --> 宽高缩小3倍
宽高缩小3倍 --> Copy9份
Copy9份 --> 集合9份拼接
复制代码
Muestra de imagen original sin etiquetar: Muestra de imagen original anotada:
Al etiquetar las muestras de imágenes originales, podemos ver los siguientes cuadros y números de etiquetas y los archivos xml que los acompañan de la siguiente manera
: etiqueta1: ojos
etiqueta2: nariz
etiqueta3: rubor
etiqueta4: boca
<annotation>
<folder>11</folder>
<filename>s.jpg</filename>
<path>C:\Users\kiven\Desktop\11\s.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>1920</width>
<height>1080</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>365</xmin>
<ymin>467</ymin>
<xmax>676</xmax>
<ymax>660</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1221</xmin>
<ymin>414</ymin>
<xmax>1530</xmax>
<ymax>610</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>938</xmin>
<ymin>714</ymin>
<xmax>1055</xmax>
<ymax>769</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>149</xmin>
<ymin>819</ymin>
<xmax>535</xmax>
<ymax>964</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1401</xmin>
<ymin>697</ymin>
<xmax>1785</xmax>
<ymax>848</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>782</xmin>
<ymin>905</ymin>
<xmax>1226</xmax>
<ymax>1042</ymax>
</bndbox>
</object>
</annotation>
Reduzca la escala de la imagen cosida:
Refactorización de análisis XML
Al analizar el archivo xml correspondiente a la imagen original, no es difícil encontrar que solo la parte del objeto del nuevo Xml que debe generarse debe cambiarse, y las otras partes pueden mantenerse igual. Al modificar la parte del objeto, debe prestar atención a los siguientes problemas:
- Hay uno o más nombres de cada objeto en la especie de imagen original, luego el nombre de la especie de imagen después de la reducción y el empalme debe corresponder a las coordenadas;
- pose、truncated和difficult 部分的参数都一样,故而不需要进行更改;
- 每个name对应的坐标在进行缩放拼接后对应的值需要转化为整数型计算,在返回时也需要转为整数型返回
程序逻辑:
graph TD
读取标签文件 --> 解析参数
解析参数 --> 获取非object部分参数
解析参数 --> 获取object部分参数
获取非object部分参数 --> 生成xml并填充
获取object部分参数 --> 计算name以及对应的坐标
计算name以及对应的坐标 --> 生成xml并填充
复制代码
经过缩小变换后的标注图如下所示: 我们可以发现在每张小图上把眼睛鼻子腮红嘴巴都标注出来了,没有落下的,检查LabelImg发现也没有错误,编号都一一对应好了,这次的扩充数据算是圆满完成了。
扩增后的Xml文件:
<annotation>
<folder>11</folder>
<filename>s.jpg</filename>
<path>C:\Users\kiven\Desktop\11\s.jpg</path>
<size>
<width>1920</width>
<height>1080</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>121</xmin>
<ymin>155</ymin>
<xmax>225</xmax>
<ymax>220</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>761</xmin>
<ymin>155</ymin>
<xmax>865</xmax>
<ymax>220</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1401</xmin>
<ymin>155</ymin>
<xmax>1505</xmax>
<ymax>220</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>121</xmin>
<ymin>515</ymin>
<xmax>225</xmax>
<ymax>580</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>761</xmin>
<ymin>515</ymin>
<xmax>865</xmax>
<ymax>580</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1401</xmin>
<ymin>515</ymin>
<xmax>1505</xmax>
<ymax>580</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>121</xmin>
<ymin>875</ymin>
<xmax>225</xmax>
<ymax>940</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>761</xmin>
<ymin>875</ymin>
<xmax>865</xmax>
<ymax>940</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1401</xmin>
<ymin>875</ymin>
<xmax>1505</xmax>
<ymax>940</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>407</xmin>
<ymin>138</ymin>
<xmax>510</xmax>
<ymax>203</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1047</xmin>
<ymin>138</ymin>
<xmax>1150</xmax>
<ymax>203</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1687</xmin>
<ymin>138</ymin>
<xmax>1790</xmax>
<ymax>203</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>407</xmin>
<ymin>498</ymin>
<xmax>510</xmax>
<ymax>563</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1047</xmin>
<ymin>498</ymin>
<xmax>1150</xmax>
<ymax>563</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1687</xmin>
<ymin>498</ymin>
<xmax>1790</xmax>
<ymax>563</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>407</xmin>
<ymin>858</ymin>
<xmax>510</xmax>
<ymax>923</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1047</xmin>
<ymin>858</ymin>
<xmax>1150</xmax>
<ymax>923</ymax>
</bndbox>
</object>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1687</xmin>
<ymin>858</ymin>
<xmax>1790</xmax>
<ymax>923</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>312</xmin>
<ymin>238</ymin>
<xmax>351</xmax>
<ymax>256</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>952</xmin>
<ymin>238</ymin>
<xmax>991</xmax>
<ymax>256</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1592</xmin>
<ymin>238</ymin>
<xmax>1631</xmax>
<ymax>256</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>312</xmin>
<ymin>598</ymin>
<xmax>351</xmax>
<ymax>616</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>952</xmin>
<ymin>598</ymin>
<xmax>991</xmax>
<ymax>616</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1592</xmin>
<ymin>598</ymin>
<xmax>1631</xmax>
<ymax>616</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>312</xmin>
<ymin>958</ymin>
<xmax>351</xmax>
<ymax>976</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>952</xmin>
<ymin>958</ymin>
<xmax>991</xmax>
<ymax>976</ymax>
</bndbox>
</object>
<object>
<name>2</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1592</xmin>
<ymin>958</ymin>
<xmax>1631</xmax>
<ymax>976</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>49</xmin>
<ymin>273</ymin>
<xmax>178</xmax>
<ymax>321</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>689</xmin>
<ymin>273</ymin>
<xmax>818</xmax>
<ymax>321</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1329</xmin>
<ymin>273</ymin>
<xmax>1458</xmax>
<ymax>321</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>49</xmin>
<ymin>633</ymin>
<xmax>178</xmax>
<ymax>681</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>689</xmin>
<ymin>633</ymin>
<xmax>818</xmax>
<ymax>681</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1329</xmin>
<ymin>633</ymin>
<xmax>1458</xmax>
<ymax>681</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>49</xmin>
<ymin>993</ymin>
<xmax>178</xmax>
<ymax>1041</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>689</xmin>
<ymin>993</ymin>
<xmax>818</xmax>
<ymax>1041</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1329</xmin>
<ymin>993</ymin>
<xmax>1458</xmax>
<ymax>1041</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>467</xmin>
<ymin>232</ymin>
<xmax>595</xmax>
<ymax>282</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1107</xmin>
<ymin>232</ymin>
<xmax>1235</xmax>
<ymax>282</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1747</xmin>
<ymin>232</ymin>
<xmax>1875</xmax>
<ymax>282</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>467</xmin>
<ymin>592</ymin>
<xmax>595</xmax>
<ymax>642</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1107</xmin>
<ymin>592</ymin>
<xmax>1235</xmax>
<ymax>642</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1747</xmin>
<ymin>592</ymin>
<xmax>1875</xmax>
<ymax>642</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>467</xmin>
<ymin>952</ymin>
<xmax>595</xmax>
<ymax>1002</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1107</xmin>
<ymin>952</ymin>
<xmax>1235</xmax>
<ymax>1002</ymax>
</bndbox>
</object>
<object>
<name>3</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1747</xmin>
<ymin>952</ymin>
<xmax>1875</xmax>
<ymax>1002</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>260</xmin>
<ymin>301</ymin>
<xmax>408</xmax>
<ymax>347</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>900</xmin>
<ymin>301</ymin>
<xmax>1048</xmax>
<ymax>347</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1540</xmin>
<ymin>301</ymin>
<xmax>1688</xmax>
<ymax>347</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>260</xmin>
<ymin>661</ymin>
<xmax>408</xmax>
<ymax>707</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>900</xmin>
<ymin>661</ymin>
<xmax>1048</xmax>
<ymax>707</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1540</xmin>
<ymin>661</ymin>
<xmax>1688</xmax>
<ymax>707</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>260</xmin>
<ymin>1021</ymin>
<xmax>408</xmax>
<ymax>1067</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>900</xmin>
<ymin>1021</ymin>
<xmax>1048</xmax>
<ymax>1067</ymax>
</bndbox>
</object>
<object>
<name>4</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1540</xmin>
<ymin>1021</ymin>
<xmax>1688</xmax>
<ymax>1067</ymax>
</bndbox>
</object>
</annotation>
回顾总结
通过对图像的缩小拼接,我们可以快速完成数据集的扩增,与此同时,我们也得到了较小的目标,为小目标检测打下了数据基础。