ssd의 홈페이지에 제시된 데이터 집합 제작 방법은 너무 간단하고 디테일이 없기 때문에 이 제작 방법을 연구했다. 홈페이지 VOC 데이터세트 제작 튜토리얼 1단계:
# Create the trainval.txt, test.txt, and test_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
주석을 통해 알 수 있듯이 이 단계의 기능은 트레이닝 세트, 테스트 세트의 이미지 저장 주소와 데이터 표시 저장 주소를 얻는 것이다.test_name_size.txt의 기능이 뚜렷하지 않으니 간단하게 분석해 보자.createlist.sh에서 다음 몇 마디는test를 생성하는 데 사용됩니다name_size.txt
# Generate image name and size infomation.
if [ $dataset == "test" ]
then
$bash_dir/../../build/tools/get_image_size $root_dir $dst_file $bash_dir/$dataset"_name_size.txt"
fi
주석을 통해 이 파일에 기록된 정보는 테스트 파일과 테스트 그림의 크기임을 알 수 있다. 이로써 createlist.sh의 기능은 이미 기본적으로 명확하다.
./data/VOC0712/create_data.sh
다음은 크레이트data.sh의 기능.
cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
root_dir=$cur_dir/../..
cd $root_dir
redo=1
data_root_dir="$HOME/dataset/VOC/VOCdevkit"
dataset_name="VOC0712"
mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"
anno_type="detection"
db="lmdb"
min_dim=0
max_dim=0
width=0
height=0
extra_cmd="--encode-type=jpg --encoded"
if [ $redo ]
then
extra_cmd="$extra_cmd --redo"
fi
for subset in test trainval
do
python2 $root_dir/scripts/create_annoset.py --anno-type=$anno_type --label-map-file=$mapfile --min-dim=$min_dim --max-dim=$max_dim --resize-width=$width --resize-height=$height --check-label $extra_cmd $data_root_dir $root_dir/data/$dataset_name/$subset.txt $data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$db examples/$dataset_name
done
핵심 기능은createannoset.py가 실현된 다른 것은 매개 변수만 설정합니다. create 실행data.sh 출력 결과는 다음과 같습니다.
위의 매개 변수는 tools/convert 에 추가됩니다.annoset.cpp에서 실행되므로 convertannoset.cpp야말로 기능을 수행하는 소프트웨어이다. 이곳의 코드는 너무 번거롭게 쓴 것 같아서 완전히sh+cpp가 될 수 있었는데, 지금은sh+python+cpp가 되었다. convert_annoset.cpp 코드는 다음과 같습니다.
// This program converts a set of images and annotations to a lmdb/leveldb by
// storing them as AnnotatedDatum proto buffers.
// Usage:
// convert_annoset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
//
// where ROOTFOLDER is the root folder that holds all the images and
// annotations, and LISTFILE should be a list of files as well as their labels
// or label files.
// For classification task, the file should be in the format as
// imgfolder1/img1.JPEG 7
// ....
// For detection task, the file should be in the format as
// imgfolder1/img1.JPEG annofolder1/anno1.xml
// ....
#include
#include // NOLINT(readability/streams)
#include
위의 c++ 코드를 직접 분석하는 것은 비교적 번거로울 수 있으므로 각도를 바꾸어lmdb 파일에서 직접 분석하고 이 기사를 주로 참조하십시오.https://blog.csdn.net/Touch_Dream/article/details/80598901 분석 과정은 여기서 더 이상 상세하게 설명하지 않으니 상기 문장을 참고할 수 있다.VOC lmdb 데이터 세트는 주로 세 부분으로 구성됩니다. 1) 이미지 관련 정보를 저장하기 위한 datum 2)annotation_group, 마크업 정보 저장 3)type, 상기 문장의python 코드를 결합하여 실험을 통해 검증하다. 1) datum의 내용:
datum는 그림의 정보를 저장하는 데 사용되며 데이터 부분은 생략되며 그림의 픽셀 데이터를 저장하는 데 사용됩니다.이 label은 이 곳에서 작동하지 않기 때문에 -1 (분류 데이터를 표시하는 데 사용) 으로 설정합니다.encode는 jpeg가 인코딩을 거쳤기 때문에 디코딩이 필요합니다. 2)annotation_그룹의 내용:
list 방식으로 마크업 정보를 저장, grouplabel은 물체 종류를 표시하고 instanceid는 여기에 작용하지 않기 때문에 0으로 설정합니다. bbox는 태그 상자 좌표와 difficult 관련 정보를 저장하는 데 사용됩니다.여기에 표시 상자는 그림의 길이와 높이에 대한 좌표임을 주의해야 한다. 3) type의 내용 type 값은 주석에 따라 0입니다.
// If there are "rich" annotations, specify the type of annotation.
// Currently it only supports bounding box.
// If there are no "rich" annotations, use label in datum instead.
이 type은 '부' 표시인지 여부에 사용됩니다. 현재 '부' 표시만 지원되며, '부' 표시가 아니면 datum의 label 정보를 사용합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: